我知道 RX 中断显然是用来保存轮询的,但为什么 TX 也有呢?
UART TX 中断有什么用?
电器工程
微控制器
UART
2022-01-13 21:57:37
4个回答
TX 中断(实际上是 END OF TX)的主要目标是自动发送缓冲区的内容(多个字节)。当以适当的方式实施时:
- 启用 TX 中断。
- 用户代码通过仅发送缓冲区中的第一个字节来开始传输。
- 在 TX(第一个字节)结束时,将产生中断。
- 在 TX ISR(中断服务程序)中,代码必须发送缓冲区中的下一个字节并更新缓冲区索引。
- 在此传输结束时,会发生新的中断,依此类推,直到“自动”发送缓冲区的全部内容。
- 禁用 TX 中断。
确切的行为取决于微控制器。这是一个一般性的描述。
TX 中断主要针对较长的数据报。您可以为已知长度(字节数)的缓冲区启动传输。现在,当 TX 中断发生时,您可以随时推送缓冲区指针,只要有字节要发送。这可确保“尽可能快”地传输缓冲区,而无需轮询任何“TransferComplete”-Flag/Statusbit。
一些 UARTS 有一个大于 1 的内部缓冲区,16xxx 系列为 1。
这里的程序是
- 设置发送窗口掩码,例如剩余 4 个。
- 填充缓冲区位置,直到 UART 表示需要发送完整或不再需要发送数据
- 做其他事情
- 当只有 4 个缓冲区位置未发送时,设置 TX 中断
- 等待中断服务
- 如果需要发送更多数据,请转到 2。
这通过将一些处理卸载到 UART 来减少 CPU 负载,从而使较慢的 CPU 能够跟上并服务其他任务,而不是一直被中断。
当发送缓冲区中有空间时触发 TX 中断。
对于没有发送缓冲区的设备(即写入一个字节,立即传输),当发送寄存器可以写入下一个字节时,中断被断言。
对于具有缓冲区的设备,中断在实现定义的时间被断言。对一些人来说,这是缓冲区半空的时候,对于一些人来说,是当最后一个字节的传输开始并且缓冲区完全空的时候。
其它你可能感兴趣的问题