Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Пишу в регистры и их читаю - все верно. Что записываю (пробывал разные варианты - то и считывал). Режим который хотим использовать - непрервывный, перекедной между каналами и в даташите толкомне описан. - Может в регистры не правильно (или их последовательность)?
Сами функции SPI:
//SPI initialize clock rate: 1843198hz (сразу для 3 АЦП)
void SpiInit(void)
{
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
DDRB|=0x07; //Установка SCK=1, MOSI=1, MISO=0, SS=1
PORTB&=~BIT(2); // очистка MOSI
PORTB&=~BIT(1); //очистка SCK
SPCR = 0x51; //установка SPI в режиме ведущий и задание скорости
SPSR = 0x01; //setup SPI
SPCR|=BIT(6);
}
//Функция записи байта в SPI порт
void SpiWriteByte(unsigned char byte)
{
SPCR|=BIT(6);
PORTB&=~BIT(2); // очистка MOSI
PORTB&=~BIT(1); //очистка SCK
SPDR = byte;
while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать
byte = SPDR;
SPCR&=~BIT(6);
}
//Функция чтения байта с SPI порта
unsigned char SpiReadByte(void)
{
unsigned char tmp=0;
PORTB&=~BIT(2); // очистка MOSI
PORTB&=~BIT(1); //очистка SCK
SPCR|=BIT(6);
SPDR = 0x00;
while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать
tmp=SPDR;
SPCR&=~BIT(6);
return tmp;
}
Составить ответ | Вернуться на конференцию
Ответы