本来只是设置了RBNE和IDLE中断来接收数据的,奇怪的是接到数据后不停进入中断处理程序,但每次又不是RBNE和IDLE中断,陷入无穷劫,整个工程不能好好走了。。。发个狠,看看到底是谁中断了,于是在中断处理中加了n个
if( RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_XXX)){}
分支一个个来,终于发现是 USART_INT_FLAG_RBNE_ORERR这个玩意起来了。一看,是溢出中断,可是有两个奇怪的地方:(1)USART_INT_FLAG_ERR_ORERR: overrun error interrupt flag 也是溢出中断,两个说明似乎没啥区别,为啥是RB_ORERR? (2)我没有使能这个中断啊,它咋就自己起来了?也许我少见多怪,只是这十几年来,却对这个现象没印象。
很是讨厌gd的例程了,越来越对付,翻了好几个demo suite,竟然没一个uart用idle中断的例程。。。不过既然出现了,懒得深究,直接在中断处理中加一个分支好了,读其状态,然后clear,搞定:
else if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE_ORERR)!=RESET)
{
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE_ORERR);
}
然后,工程正常跑起来了。