对于使用FIFO模式,最关键的最后一个数据包,不满足FIFO设置的触发阈值,FIFO应该有timeout中断,在TI的cortex-m3系列的MCU的uart中fifo模式就有这种模式,但是在28335的datasheet中看不到有关timeout的寄存器,那么对于28335的UART FIFO如何接收最后一个小于触发长度的FIFO缓冲区中的数据呢?如果没有timeout中断,我个人认为28335的uart fifo模式就没有任何实用价值,不到那位大侠给点建议?
Eric Ma:
decai,
C28x的SCI没有FIFI time out功能。在设定一个FIFO level之后,如果FIFO接收到的数据小于这个level,就不会触发FIFO接收中断。但这样并不能说FIFO就没有实用价值。在一些应用中,我们使用的是查询方式来接收数据,这个时候FIFO可以发挥很大作用。针对中断方式,如果CPU资源比较充足,可以设置FIFO的level为1,这样每接收到一个数据就会进入中断,而且剩下的FIFO也会接收后续的数据,这种情况针对波特率很快的情况。如果CPU资源比较紧张,那么距离设置FIFO级别为4,当最后的一个数据包来的时候,如果不满足触发阀值,只能在软件上做一些灵活的处理,判断、查询标志位,或是自己在软件上做time out,方法有很多种,根据自己的应用来灵活配置,肯定能找到一种方法来解决这个问题。
anyway,不好意思,C28的SCI不支持FIFO接收time out会给你带来一些不便,但我们可以想办法规避这个问题。
Eric
对于使用FIFO模式,最关键的最后一个数据包,不满足FIFO设置的触发阈值,FIFO应该有timeout中断,在TI的cortex-m3系列的MCU的uart中fifo模式就有这种模式,但是在28335的datasheet中看不到有关timeout的寄存器,那么对于28335的UART FIFO如何接收最后一个小于触发长度的FIFO缓冲区中的数据呢?如果没有timeout中断,我个人认为28335的uart fifo模式就没有任何实用价值,不到那位大侠给点建议?
decai wang:
回复 Eric Ma:
不好意思,我不认同你的解释!
我使用28335而不是用51之类目的就是提升性能,FIFO的目的就是要解决CPU频繁中断而造成的性能下降更不用说使用poll模式,如若在高baudrate下,不使用FIFO更是难于处理。我觉得TI的IC designer不应该犯如此低级的错误。希望下个版本能够改进。
对于使用FIFO模式,最关键的最后一个数据包,不满足FIFO设置的触发阈值,FIFO应该有timeout中断,在TI的cortex-m3系列的MCU的uart中fifo模式就有这种模式,但是在28335的datasheet中看不到有关timeout的寄存器,那么对于28335的UART FIFO如何接收最后一个小于触发长度的FIFO缓冲区中的数据呢?如果没有timeout中断,我个人认为28335的uart fifo模式就没有任何实用价值,不到那位大侠给点建议?
Eric Ma:
回复 decai wang:
decai,
没有一个产品是完美的。至于你说的Timeout功能,我认为可以通过在每个FIFO接收中断之后,使用一个CPU timer定时器实现这个time out功能,在CPU timer 中断中去查询FIFO是否还有一些未读的数据。
Eric