请帮忙看看,我的uart0串口中断程序哪里错在哪里?按理说只要收到一个字节就应该进中断,可调试过程中只能进一次中断而且收到的数据不对,请大家指点。
void US0_handler (void) { unsigned short status,data; status = AT91C_BASE_US0->US_CSR;
// Receive buffer is full if ((status & AT91C_US_RXRDY) == AT91C_US_RXRDY) { data = AT91C_BASE_US0->US_RHR; } }
void AIC_ConfigureIT( unsigned int source, unsigned int mode, void (*handler)(void)) { // Disable the interrupt first AT91C_BASE_AIC->AIC_IDCR = 1 << source;
// Configure mode and handler AT91C_BASE_AIC->AIC_SMR[source] = mode; AT91C_BASE_AIC->AIC_SVR[source] = (unsigned int) handler;
// Clear interrupt AT91C_BASE_AIC->AIC_ICCR = 1 << source; }
//------------------------------------------------------------------------------ /// Enables interrupts coming from the given (unique) source (AT91C_ID_xxx). /// \param source Interrupt source to enable. //------------------------------------------------------------------------------ void AIC_EnableIT(unsigned int source) { AT91C_BASE_AIC->AIC_IECR = 1 << source; }
void init_uart0(unsigned short Baudrate) { AT91F_PMC_EnablePeriphClock (AT91C_BASE_PMC, 1 << AT91C_ID_PIOA); AT91F_PMC_EnablePeriphClock (AT91C_BASE_PMC, 1 << AT91C_ID_US0); AT91F_PMC_EnablePeriphClock (AT91C_BASE_PMC, 1 << AT91C_ID_US0); AT91F_US0_CfgPIO(); //配置串口端口
AT91F_US_Configure ( AT91C_BASE_US0, MCK, // Master Clock AT91C_US_USMODE_NORMAL| AT91C_US_CLKS_CLOCK| AT91C_US_CHRL_8_BITS| AT91C_US_PAR_NONE| AT91C_US_NBSTOP_1_BIT | AT91C_US_CHMODE_NORMAL , // mode Register to be programmed Baudrate , // baudrate to be programmed 0); // Configure the RXBUFF interrupt AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_US0,7\ ,AT91C_AIC_SRCTYPE_POSITIVE_EDGE,(void(*)())US0_handler ); AIC_EnableIT(AT91C_ID_US0); // Enable Transmitter AT91F_US_EnableTx(AT91C_BASE_US0); AT91F_US_EnableRx(AT91C_BASE_US0); AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_US0); AT91C_BASE_US0->US_IER = AT91C_US_RXRDY; }
|