UART TX 中断有什么用?

电器工程 微控制器 UART
2022-01-13 21:57:37

我知道 RX 中断显然是用来保存轮询的,但为什么 TX 也有呢?

4个回答

TX 中断(实际上是 END OF TX)的主要目标是自动发送缓冲区的内容(多个字节)。当以适当的方式实施时:

  1. 启用 TX 中断。
  2. 用户代码通过仅发送缓冲区中的第一个字节来开始传输。
  3. 在 TX(第一个字节)结束时,将产生中断。
  4. 在 TX ISR(中断服务程序)中,代码必须发送缓冲区中的下一个字节并更新缓冲区索引。
  5. 在此传输结束时,会发生新的中断,依此类推,直到“自动”发送缓冲区的全部内容。
  6. 禁用 TX 中断。

确切的行为取决于微控制器。这是一个一般性的描述。

TX 中断主要针对较长的数据报。您可以为已知长度(字节数)的缓冲区启动传输。现在,当 TX 中断发生时,您可以随时推送缓冲区指针,只要有字节要发送。这可确保“尽可能快”地传输缓冲区,而无需轮询任何“TransferComplete”-Flag/Statusbit。

一些 UARTS 有一个大于 1 的内部缓冲区,16xxx 系列为 1。

这里的程序是

  1. 设置发送窗口掩码,例如剩余 4 个。
  2. 填充缓冲区位置,直到 UART 表示需要发送完整或不再需要发送数据
  3. 做其他事情
  4. 当只有 4 个缓冲区位置未发送时,设置 TX 中断
  5. 等待中断服务
  6. 如果需要发送更多数据,请转到 2。

这通过将一些处理卸载到 UART 来减少 CPU 负载,从而使较慢的 CPU 能够跟上并服务其他任务,而不是一直被中断。

当发送缓冲区中有空间时触发 TX 中断。

对于没有发送缓冲区的设备(即写入一个字节,立即传输),当发送寄存器可以写入下一个字节时,中断被断言。

对于具有缓冲区的设备,中断在实现定义的时间被断言。对一些人来说,这是缓冲区半空的时候,对于一些人来说,是当最后一个字节的传输开始并且缓冲区完全空的时候。