AT91sam7x 256:中断只运行一次

时间:2015-07-11 12:30:04

标签: c arm embedded interrupt keil

我在at91sam7x256上使用带有DMA的USART来读取和写入数据。 由于我没有成功,我开始创建一个简单的例子,但问题已经存在。 主要问题是中断程序刚刚第一次触发,我第一次无法从USART接收数据!

process.on('unhandledRejection')

2 个答案:

答案 0 :(得分:0)

在中断中设置计数(US_RCR)之前,需要重新初始化接收指针:

pUSART0->US_RPR = (unsigned int)Buffer;

您的设备可能出错,因为PDC正在缓冲区外写入​​。

答案 1 :(得分:0)

有两个问题:
1-当我使用Keil uVision时,我需要使用 __irq 来定义中断服务程序!
2-令人惊讶的是,中断的结束没有被解雇!所以使用: 的 *AT91C_AIC_EOICR = 0;

void __irq Usart0IrqHandler (void) {    
volatile AT91PS_USART pUsart0 = AT91C_BASE_US0; // create a pointer to USART0 structure
    if ((pUsart0->US_CSR & AT91C_US_ENDRX) == AT91C_US_ENDRX) {
        pUsart0->US_RPR = (unsigned int)Buffer; // we have a end-of-receive interrupt (ENDRX)
        pUsart0->US_RCR = 10;                   // restore the receive count - clears ENDRX flag
    }
       *AT91C_AIC_EOICR = 0;                    // end of interrupts
}