打印
[ZLG-MCU]

请问为什么101接收一个字符要进入2次中断啊?

[复制链接]
1709|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yeool|  楼主 | 2007-1-21 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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, 这样两次才能完成一次中断。
这是配套光盘的例程啊

相关帖子

沙发
yeool|  楼主 | 2007-1-21 22:29 | 只看该作者

不知是keil软件还是Ulink有问题

好像断点放在靠近UARTIntClear(UART0_BASE, ulStatus);       
时就会进2次中断。
把断点放在中断的后面一点的语句上,就只进一次中断了。

keil是盗版的。
ulink是网上买的

我的keil  

使用特权

评论回复
板凳
yeool|  楼主 | 2007-1-21 22:39 | 只看该作者

aaa

如果断点放在前面,不单步执行,全速执行也没有进2次中断的问题

使用特权

评论回复
地板
zlgmcu| | 2007-1-22 09:06 | 只看该作者

我们使用keil仿真101的时候,用得是demo版.

使用特权

评论回复
5
yeool|  楼主 | 2007-1-22 10:11 | 只看该作者

aaa

哪中断中设置断点后单步执行有没有问题啊?

使用特权

评论回复
6
yeool|  楼主 | 2007-1-22 18:42 | 只看该作者

111

我用cross studio for arm +easyjtag调试5.3结的uart driver 工程同样有问题啊,只要在串口接收中断中单步运行便会退不出中断。

使用特权

评论回复
7
zlgarm| | 2007-1-23 15:40 | 只看该作者

re:6楼

我用cross studio for arm +easyjtag调试5.3结的uart driver 工程同样有问题啊,只要在串口接收中断中单步运行便会退不出中断。 

那是正常的,需要在单步是出不了中断程序,需要在非中断处理代码中设置断点即可以退出.


使用特权

评论回复
8
yeool|  楼主 | 2007-1-23 15:56 | 只看该作者

???

请问zlgarm,为什么单步会出不了中断呢。但是在中断的末尾设置断点,再单步会出中断啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

171

帖子

0

粉丝