ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
4 июля
110844
URANstin (21.01.2008 16:24, просмотров: 6732)
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 Как понять что данные о первом регистре уже пришли их нада прочитать, ну а затем соответственно и данные от второго регистра Подскажите что не так