基于中断的 UART IO 主机

Master for Interrupt based UART IO

基于中断的 UART IO 允许在没有 CPU 干预的情况下进行数据传输。现在的问题是,如果不是 CPU 谁控制这个?是 DMA 控制器还是某个外部主机从 CPU 获得了对内存总线的控制权。没有得到正确的答案 here 。如果它是 DMA 控制器那么是什么让 DMA 和基于中断的传输不同

Didn't get a proper answer here .
If it is the DMA controller then what makes DMA and interrupt based transfer different

这个问题在 IMO 中没有得到任何好的答案,因为这个问题的措辞有误。
其实我看不懂他描述的"Interrupt-driven"因为没有意义,也不是因为我在这方面缺少knowledge/experience
DMA”不是“中断”的替代方法。
相反,它们是正交概念,这两个概念通常一起使用
DMA 的替代方案已编程 I/O,又名 PIO。
中断的替代方法是轮询。

DMA 传输几乎总是使用 completion interrupt(来自 DMA 控制器)来通知 CPU 缓冲区传输已完成。
PIO 通常使用中断(来自设备)来启动每个 byte/word 数据传输。这有助于减轻 PIO 的 CPU 密集性质。否则轮询 PIO 传输将完全消耗 CPU 资源。
但是将 "PIO with interrupts" 简单地称为 "interrupts" 是不准确和误导的。

The interrupt based UART IO allows the data transfer to take place without intervention of CPU. Now the question is, if not CPU who controls this ?

您没有指定中断源;因此你的问题是模棱两可的。

如果 "interrupt based" 应该指的是 "PIO with interrupt from UART",那么这个问题就毫无意义了,因为它是 CPU控制转移。
如果 "interrupt based" 应该指的是来自 DMA 控制器的中断的 DMA 传输,那么您将在以前未在您或链接的问题中使用过的上下文中使用这些术语。

对于 UART 读取:
在 DMA 传输中,每个字节都从 UART 读取(当 UART 发出数据可用信号时),并由 DMA 控制器写入内存。必须设置 DMA 控制器才能执行此任务。当 DMA 控制器监督此传输时,CPU 将执行其他(可能不相关的)指令(例如,用于另一个进程)。

在 PIO 传输中,CPU 始终处于控制状态,执行从设备读取和写入内存的指令。

Is it the DMA controller or some external master who gets the control over memory bus from CPU.

内存总线由内存控制器维护。没有其他设备可以控制内存总线。

要实际读取或写入内存,是 DMA 控制器在 DMA 传输期间请求访问内存。
请注意,有一些特权设备,例如总线主控器或 coprocessor/GPU,它们也可以请求访问内存。
但是 CPU 通常分配给内存访问的最高优先级。