void __ISR(_UART2_VECTOR, ipl2) IntUart2Handler(void) { // Is this an RX interrupt? if(INTGetFlag(INT_SOURCE_UART_RX(UART_MODULE_ID))) { // Echo what we just received. putcUART2(ReadUART2()); // Clear the RX interrupt Flag INTClearFlag(INT_SOURCE_UART_RX(UART_MODULE_ID)); // Toggle LED to indicate UART activity mPORTAToggleBits(BIT_0); } }
void __ISR(_UART2_VECTOR, ipl2) IntUart2Handler(void) { // Is this an RX interrupt? if(INTGetFlag(INT_SOURCE_UART_RX(UART_MODULE_ID))) { // Clear the RX interrupt Flag INTClearFlag(INT_SOURCE_UART_RX(UART_MODULE_ID)); // Echo what we just received. putcUART2(ReadUART2()); // Toggle LED to indicate UART activity mPORTAToggleBits(BIT_0); } }
使用串口调试助手,键盘信息发送至串口显示
大家看出来什么区别了吗?
没错,仅仅是INTClearFlag和 putcUART2(ReadUART2())两个函数调换了次序
第一段程序是修改后的,能够正常从键盘读取字符。
第二段是PIC官方外设库的程序,代码执行的时候,每次都回显2个字符的数据,其中一个字符是上一次缓存的字符,赶脚是中断出现2次。
不科学啊
这个外设库,还能再坑一点吗?