各位坛友,我使用UART时,设置了FIFO接收中断深度,同时使能接收超时中断。
请问,这个接收超时中断是什么情况下触发的?手册上有这样一句话,“当接收FIFO不为空时接收超时中断有效”。
我做了一块modbus主机板,没接从机的时候,也就没有接收,这个时候没有接收超时中断;这跟那句话是对得上的,也是合理的。
后来,调试好了,准备提交测试了,程序烧到另一块板上,诡异的事情出现了,没接从机,那个芯片却一直进入接收超时中断。。
因为接收中断RX和接收超时中断RT都是进入到接收处理函数里的,在接收处理函数里,我会清零通信超时计数器的;如果没有接从机也就是没有通信的时候,处理器一直有触发接收超时中断,在接收处理函数里,通信超时计数器一直清零,那通信超时就无法判断到了。
请问坛友们,有木有遇到过这么纠结的情况,如何解决呢?
应该是,当FIFO里面有数据没有读出的时候,才能触发超时中断,如果FIFO空不可能发生超时中断。产生超时中断后,除了清楚中断标志位,还应该读出FIFO里面的全部数据,否则还会触发超时中断的。。