Купил я оценочную плату ADS1256EVM. Подсоединил к МК atmega168.
Инициализировал USART в MSPIM как приведено в AppNote:
Код
/* Calculation of BRREG value. */
#define CPUFREQ 12500000UL
#define BPS 10000 //!< Desired bit rate for SPI communication.
#define brreg ((CPUFREQ/(2*BPS))-1) //!< Calculated brreg value.
/* USART line definitions. */
#define USARTDDR DDRD //!< The data direction register for the USART lines.
#define XCKPIN PD4 //!< The bit position for the USART XCK line.
uint8_t spimode=0;
// Baud rate must be set to 0 prior to enabling the USART as SPI
// master, to ensure proper initialization of the XCK line.
UBRR0 = 0;
// Set XCK line to output, ie. set USART in master mode.
USARTDDR |= (1<<XCKPIN);
// Set USART to Master SPI mode.
UCSR0C = (1<<UMSEL01) | (1<<UMSEL00);
// Set clock polarity and phase to correct SPI mode.
if( spimode & 0x01 ) UCSR0C |= (1<<UCPOL0);
if( spimode & 0x02 ) UCSR0C |= (1<<UCPHA0);
// Enable RX and TX.
UCSR0B = (1<<RXEN0) | (1<<TXEN0);
// Set baud rate. Must be set _after_ enabling the transmitter.
UBRR0 = brreg;
Пытаюсь прочесть содержимое регистров АЦП:
Код
// Wait for empty transmit buffer.
do {} while( (UCSR0A & (1<<UDRE0)) == 0 );
Byte=(RREG | 0x00); //прочитать регистры начиная с 0x00
UDR0 = Byte;
// Wait for transfer to complete
do {} while( (UCSR0A & (1<<RXC0)) == 0 );
UDR0 = 0x03; //прочитать 4 регистра
// Wait for transfer to complete
do {} while( (UCSR0A & (1<<RXC0)) == 0 );
delay_us(10); //Задержка перед чтением
a0=UDR0;
a1=UDR0;
a2=UDR0;
a3=UDR0;
Получается какая-то ерунда. Первые две попытки считать регистры выдают нули во всех 4 регистрах. Далее начинается циклически:
Код
a0 a1 a2 a3
1n 90 78 90 90
2n 70 ff 70 70
3n 00 00 00 00
4n 18 00 18 18
И т.д по кругу. Причем цифры после сброса питания могут меняться - но обычно 3 из них совпадают.
Если отключено питание АЦП читаются только нули.
Подскажите, пожалуйста, куда копать?
Сообщение отредактировал Filov - Feb 20 2008, 14:07