Microchip
直播中

陈菊羽

8年用户 251经验值
私信 关注
[问答]

怎么在ISR中读取UART?

我正在调查一个UART在一段时间内忽略输入数据的bug。这种症状在低数据率之前还没有出现过,这似乎是由于数据进入率较高所致。一旦它进入状态,没有PIC的复位,它就永远不会恢复。在ISR中读取UART,因此:使用方便的LED,我可以看到当出现症状时ISR不再被调用。我还看到,子句检查有时是真的,表明数据正在进入。太快了。在进入上述“忽略中断”模式之前,这种情况可能发生多次。我试图在代码的另一部分重置中断标志(如果数据一段时间没有看到,则会超时),但这似乎无法解决该问题。目前我做了一个work-around,用于在收到消息之后禁用中断,并在一段时间(一秒钟)之后重新启用它,为下一消息做好准备。我认为如果在ISR期间发生另一个中断,那么只要重新设置了标志,ISR在返回之后就会立即被调用。我的疑问NS:我对在同一事件的服务过程中发生的中断的理解是否正确?关于中断为什么被忽略的任何想法?有什么想法,我怎么能正确地修复它?谢谢你,Mike Watts

回帖(19)

杨玲

2020-4-8 07:23:42
什么是UART2HASDATA()?
举报

杨梦月

2020-4-8 07:34:38
谢谢回复-我编辑了这个帖子来代替
举报

杨玲

2020-4-8 07:46:57
在调试器中确认,当代码进入“忽略中断”模式时,是否设置了RXIE和RXIF位?
举报

丘素莉

2020-4-8 07:56:33
你使用的任何特殊图片,在PIC33范围内有很多?什么是“太快”,大于1200波特?我是否理解在同一事件的服务过程中发生的中断是正确的?不,“为什么中断被忽略了?”如果禁用,中断将被忽略。高优先级的中断只是降级并导致它等待,它不会被忽略,“关于如何正确地修复它,有什么想法吗?”我建议你拿起一个UART应用笔记,研究一下应该如何执行UART中断例程。PIC33系列是一个(非常)成熟的设备。有很多例子要遵循。当谈到UART,T Yorky时,真的不值得重新发明。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分