void UART0_ISR(void) { unsigned long ulStatus; uint8 temp=0; ulStatus = UARTIntStatus(UART0_BASE, true); //读取已使能的串口0中断状态 UARTIntClear(UART0_BASE, ulStatus); //清除当前的串口0中断
if((ulStatus & UART_INT_RX) || (ulStatus & UART_INT_RT)) { //接收中断 while( UARTCharsAvail(UART0_BASE) ==true) { temp= (uint8)UARTCharNonBlockingGet(UART0_BASE) ; QueueWrite(Uart0_Rec_Queue,temp );//FIFO中的数据入队列 } } ulStatus = UARTIntStatus(UART0_BASE, true); //读取已使能的串口0中断状态 }
我用keil调试,在串口中断里设定了一个断点,当接收到一个字符时产生了中断,然后我单步一直到最后读取的ulStatus为0,再单步,可是这时并没有跳出中断,而是又从串口中断程序开始的地方执行,这时读取的ulStatus一样为0, 这样两次才能完成一次中断。 这是配套光盘的例程啊
|