Цитата(mdmitry @ Mar 26 2008, 01:42)

Отключить от платы программатор и проверить работу. Отключение от LPT не отключает физически цепи программатора.
Вообщем провел исследование: отключил программатор от платы. 12 перезапусков по включении/выключении питания. Проверялось чтении 4 байтов конфигурации АЦП, подключенного в через USART в MSPIM.
Итого:
2 случая верной работы (3 и 10). Верные значения:
Код
30 01 20 23
Не наблюдалось никаких нестабильностей в работе.
10 случаев неверной работы. Читались разнообразные значения например:
Код
7f fb 58 00
fb ff ff ff
00 00 00 00
ff ff ff ff
ab ab ab ab
e7 e7 e7 e7
Или комбинации из них. Иногда значения были постоянными для "сеанса", иногда - цифры были разные для каждого запроса чтения битов в сеансе.
Цитата(mdmitry @ Mar 26 2008, 01:42)

Проверить конфигурацию USART и SPI.
Для работы USART в MSPIM использую такой код:
Код
//Эти значения идут в init_usart_spi
#define BRREG 128
#define SPIMODE 1
void init_usart_spi( unsigned char spimode, unsigned int brreg )
{
// Baud rate must be set to 0 prior to enabling the USART as SPI
// master, to ensure proper initialization of the XCK line.
UBRR0H = 0x00;
UBRR0L = 0x00;
// 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.
UBRR0H = (uint8_t) (brreg>>8);
UBRR0L = (uint8_t) brreg;
}
uint8_t spi_shift_byte(uint8_t value )
{
// Wait for empty transmit buffer.
do {} while( (UCSR0A & (1<<UDRE0)) == 0 );
// Send data.
UDR0 = value;
// Wait for transfer to complete and return received value.
do {} while( (UCSR0A & (1<<RXC0)) == 0 );
return UDR0;
}
//Read 4 registers from ADC
uint8_t SPI_buf[4];
spi_shift_byte(RREG | 0x00); //Read from register with starting at address 0x00
_delay_us(5);
spi_shift_byte(0x03); //Read 4 register
_delay_us(50); //*ADS1256 t6 VERY IMPORTANT* min_us=t6/F_ADS1256=50/7.68MHz=7us
SPI_buf[0]=spi_shift_byte(0xAB);
_delay_us(5);
SPI_buf[1]=spi_shift_byte(0xAB);
_delay_us(5);
SPI_buf[2]=spi_shift_byte(0xAB);
_delay_us(5);
SPI_buf[3]=spi_shift_byte(0xAB);
_delay_us(5);
Вот такие вот пироги с котятами, господа.
Сообщение отредактировал Filov - Mar 26 2008, 07:35