Отлаживаю программу на MCU AT91SAM9R64 (без операционки, использую только пример атмеловский usb mass storage): настроил usart. Отдельно на прием и отдельно на передачу - работает. Но стОит разрешить прерывание по RXRDY и TXRDY: TX - нормально обрабатывается, а RX - ни в какую.
Как такое может быть - ума не приложу !
Errata на проц - не нашел.
Код
void ConfigureUsart0(void)
{
unsigned int mode = AT91C_US_USMODE_NORMAL
| AT91C_US_CLKS_CLOCK
| AT91C_US_CHMODE_NORMAL
| AT91C_US_CHRL_8_BITS
| AT91C_US_PAR_NONE
| AT91C_US_NBSTOP_1_BIT;
// Enable the peripheral clock in the PMC
PMC_EnablePeripheral(AT91C_ID_US0);
// Configure the USART in the desired mode @115200 bauds
CurrentBaudRate = 115200;
USART_Configure(AT91C_BASE_US0, mode, CurrentBaudRate, BOARD_MCK);
// Configure the RXBUFF interrupt
AIC_ConfigureIT(AT91C_ID_US0, 0x20, ISR_Usart0); // Прерывание по фронту
AIC_EnableIT(AT91C_ID_US0);
// Enable receiver & transmitter
USART_SetTransmitterEnabled(AT91C_BASE_US0, 1);
USART_SetReceiverEnabled(AT91C_BASE_US0, 1);
}
void UsartPioConfig(void)
{ PIO_Configure(pPinsUT, PIO_LISTSIZE(pPinsUT)); }
//--------
UsartPioConfig(); // Конфигурирование пинов для usart
ConfigureUsart0(); // Параметры связи: 115200, 8n1.
AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA;
AT91C_BASE_US0->US_IER = AT91C_US_RXRDY | AT91C_US_TXRDY;
{
unsigned int mode = AT91C_US_USMODE_NORMAL
| AT91C_US_CLKS_CLOCK
| AT91C_US_CHMODE_NORMAL
| AT91C_US_CHRL_8_BITS
| AT91C_US_PAR_NONE
| AT91C_US_NBSTOP_1_BIT;
// Enable the peripheral clock in the PMC
PMC_EnablePeripheral(AT91C_ID_US0);
// Configure the USART in the desired mode @115200 bauds
CurrentBaudRate = 115200;
USART_Configure(AT91C_BASE_US0, mode, CurrentBaudRate, BOARD_MCK);
// Configure the RXBUFF interrupt
AIC_ConfigureIT(AT91C_ID_US0, 0x20, ISR_Usart0); // Прерывание по фронту
AIC_EnableIT(AT91C_ID_US0);
// Enable receiver & transmitter
USART_SetTransmitterEnabled(AT91C_BASE_US0, 1);
USART_SetReceiverEnabled(AT91C_BASE_US0, 1);
}
void UsartPioConfig(void)
{ PIO_Configure(pPinsUT, PIO_LISTSIZE(pPinsUT)); }
//--------
UsartPioConfig(); // Конфигурирование пинов для usart
ConfigureUsart0(); // Параметры связи: 115200, 8n1.
AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA;
AT91C_BASE_US0->US_IER = AT91C_US_RXRDY | AT91C_US_TXRDY;
Заранее спасибо за помощь!