LPC1114的串口中断处理函数有点不懂

2019-03-25 20:09发布

可以帮忙解释一下这段代码吗?官方例程里void UART_IRQHandler(void);的一段,就是IIR寄存器的IIR_RDR可以标识接收中断,IIR_RLS又细分出来一个LSR_RDR也是标识接收中断,后面接收的代码都是一样的。我就不清楚了,接收的时候程序到底是走到哪里呢?
  1. if (IIRValue == IIR_RLS) /* Receive Line Status */
  2.   {
  3.     LSRValue = LPC_UART->LSR;
  4.     /* Receive Line Status */
  5.     if (LSRValue & (LSR_OE | LSR_PE | LSR_FE | LSR_RXFE | LSR_BI))
  6.     {
  7.       /* There are errors or break interrupt */
  8.       /* Read LSR will clear the interrupt */
  9.       UARTStatus = LSRValue;
  10.       Dummy = LPC_UART->RBR; /* Dummy read on RX to clear 
  11. interrupt, then bail out */
  12.       return;
  13.     }
  14.     if (LSRValue & LSR_RDR) /* Receive Data Ready */
  15.     {
  16.       /* If no error on RLS, normal ready, save into the data buffer. */
  17.       /* Note: read RBR will clear the interrupt */
  18.       UARTBuffer[UARTCount++] = LPC_UART->RBR;
  19.       if (UARTCount == BUFSIZE)
  20.       {
  21.         UARTCount = 0; /* buffer overflow */
  22.       }
  23.     }
  24.   }
  25.   else if (IIRValue == IIR_RDA) /* Receive Data Available */
  26.   {
  27.     /* Receive Data Available */
  28.     UARTBuffer[UARTCount++] = LPC_UART->RBR;
  29.     if (UARTCount == BUFSIZE)
  30.     {
  31.       UARTCount = 0; /* buffer overflow */
  32.     }
  33.   }
复制代码

[ 本帖最后由 zhaojun_xf 于 2012-4-26 07:41 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
zhaojun_xf
1楼-- · 2019-03-26 23:06
 精彩回答 2  元偷偷看……
qq243612935
2楼-- · 2019-03-27 00:06
哦,了解了,谢谢~
weboch
3楼-- · 2019-03-27 01:13
学习了,谢谢版主。
orchid_cc
4楼-- · 2019-03-27 07:10
弱弱的问一下:51串口接收完都需要清楚接收中断,这个的中断标识是哪一个啊?
rainsy
5楼-- · 2019-03-27 11:44
受教了   非常感谢
hitler617
6楼-- · 2019-03-27 12:35
楼主你好。。 lpc2368 ,照着这个程序进不了中断呢, 楼主还有自己修改后的源码吗?

一周热门 更多>