URANstin (21.01.2008 16:24, просмотров: 6835)
ATmega8 SPI ADS1242, Работа с SPI Пытаюсь наладить связь ATmega8 (7.3728 MHz) с ADS1242 (2.4576 MHz) по SPI (WinAVR).
Вопрос : как узнать что пришли данные от ADS1242.
Инициализирую SPI ATmega8 как мастер:
void SPI_MasterInit(void) {
// MOSI,SCK,SS на выход, MISO на вход
DDRB=0x2E;
// Включение SPI, мастер, частота /32
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1);
SPSR = (1<<SPI2X);
PORTB|=(1<<2);
void SPI_Transmit(unsigned char cData) {
/* Запуск передачи данных */
SPDR = cData;
/* Ожидание завершения передачи данных */
while(!(SPSR & (1<<SPIF)));
В документации на ADS1242 написано, что для чтения данных из регистра нужно послать команду
Encoding: 0001 rrrr xxxx nnnn (rrrr - номер первого регистра для чтения, nnnn читать колличество регистров после первого )
Читаю так:
PORTB&=(~(1<<2));//выбор чипа SS=0;
SPI_Transmit(0x10);//читать регистр с номером 0x00
SPI_Transmit(0x01);// читать 2 регистра начиная с первого
_delay_us (25);// задержка по даташиту мин. 50 Tosc(2.4576)
USART_Transmit(SPDR);//пытаюсь прочитать присланные данные
PORTB|=(1<<2);//SS выставляю в 1 для сброса
читаються то 0x00 то 0xFF
Как понять что данные о первом регистре уже пришли их нада прочитать, ну а затем соответственно и данные от второго регистра
Подскажите что не так