km4的UART0有没有Rx空闲中断


用的芯片是RTL8722DM,如果没有Rx空闲中断的话,如何判断一帧不定长的数据已经接收完?

RUART_IER_ETOI 应该是你要的空闲中断,空闲时间是在 REG_RX_PATH_CTRL 里面的 RX_TIMEOUT_THRES 设置。

可以参考这一页里的 uart_irq, uart_stream_irq, uart_stream_rx_timeout 都有用到 RUART_IER_ETOI.


左边是在中断里打印的中断ID,没有RUART_TIME_OUT_INDICATION。
用的例程是uart_irq修改的,修改后的代码如下。

这个RUART_IER_ETOI是否只在DMA模式下才有效?

@oxygenben

对不起是我理解错了,RUART_IER_ETOI 并不是你想要的空闲中断。它的功能更像是提醒有收到的数据还没读取。

如果你的发送端能够保证一帧内的每个数据发送之间的时间都不会太长,可以在接收端计时,每次收到数据就重置计时。计时一旦超过一定的时间,就可以判断一帧已发送完。

非常感谢提供另一种思路,自己尝试用时长来做空闲中断,但是效果不是很理想。现在尝试用DMA进行开发。

1 Like