我在at91sam7x256上使用带有DMA的USART来读取和写入数据。 由于我没有成功,我开始创建一个简单的例子,但问题已经存在。 主要问题是中断程序刚刚第一次触发,我第一次无法从USART接收数据!
process.on('unhandledRejection')
答案 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
}