LM3S1811 串口中断接收 长时出问题

2019-03-24 10:08发布


     1.芯片类型:LM3S1811;
     
     2.参数配置:使能接收中断、禁止FIFO;
     
     3.问题描述:串口通过中断接收,开始运行后串口正常工作,但是系统运行一段时间后,串口莫名其妙地不再进中断,通过芯片的另一个串口读出芯片相关寄存器如下:
            show armreg 4000d018 value = 455(0x1c7)  可以发现,bit8(RI)已经置位,但是并没有进到中断,并且RXFE(bit4)和RXFF(bit6)都置位,
     怀疑可能是进入中断后,清除了中断标志,但是没有读串口Buf,导致相关标志仍然为1,致使不再进中断。
           show armreg 4000d004 value = 8(0x08) 可以看到OE(bit3 -overrun error)标志位1,说明串口接收出现了溢出错误。
      
      4.问题补充:另外除了串口中断外,还有定时器中断;并且定时器中断函数中有一个比较耗时的函数需要执行,把这个函数移到定时器外面后长时间运行没再出现过上述问题,但是的确不知道是何种原因导致上述串口接收不进中断的现象。求高手指点。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
jn_song
1楼-- · 2019-03-24 15:11
 精彩回答 2  元偷偷看……
Study_Stellaris
2楼-- · 2019-03-24 17:05
< :TI_MSP430_内容页_SA7 -->
怀疑可能是进入中断后,清除了中断标志,但是没有读串口Buf,导致相关标志仍然为1,致使不再进中断

既然清除了中断标记,当下次中断置位后,就应该是要响应中断的,你确定是中断标志置位了而不进中断吗?查看 NVIC 看看。
我觉得很有可能是定时器的问题,定时器中断优先级因该比串口高,如果定时器周期又很短,那串口中断基本上得不到响应。可以试着将定时器周期变长,验证一下是不是这个原因。

[ 本帖最后由 Study_Stellaris 于 2013-6-18 11:25 编辑 ]
jn_song
3楼-- · 2019-03-24 18:25
你好,谢谢你的回复。

通过查看寄存器的确是这样的,RI的确是有效,但是却没有进到串口的ISR里面。

另外,优先级的问题,UserApp里面没有对串口和定时器的优先级做过任何设置和修改,都是默认配置,因此认为他们的抢占优先级和亚优先级应该是相同的,那么他们的优先级就取决于在中断向量表中的位置,串口的位置是比较靠前的。

应该定时器中断的频率还没有你说的那样频繁,因为在系统运行的前1~2天内,都是正常的。

我做了这样一个实验,进到串口中断里面去以后,清楚中断标志,但是不读接收buf,同事在串口ISR里面放上点灯程序,发现不在进串口中断了,读出的ARM寄存器内容与上述现象相符,但是确实疑惑:较长的定时器ISR怎么会造成这样的情况。
QIHAO74
4楼-- · 2019-03-24 21:41
 精彩回答 2  元偷偷看……
Study_Stellaris
5楼-- · 2019-03-24 23:46
QIHAO74 发表于 2014-11-12 09:11
最后怎么解决啊?

从分析来看,有可能是串口溢出导致的问题。
所以,解决办法,就是每次进入串口中断都要检测一下串口的状态,读取 buf 里边的内容,哪怕内容没有用。
笨笨丁2018
6楼-- · 2019-03-25 01:55
Study_Stellaris 发表于 2014-11-12 09:34
从分析来看,有可能是串口溢出导致的问题。
所以,解决办法,就是每次进入串口中断都要检测一下串口的状态,读取 buf 里边的内容,哪怕内容没有用。

求指教,我在调试MODBUS,也遇到问题啦。

一周热门 更多>

相关问题

    相关文章