0

我已经意识到建立 I/O 连接的 3 种方法:

1- 可编程 I/O(轮询)

2- 中断驱动 I/O

3- 直接内存访问 (DMA)

现在,我需要将其与访问 I/O 地址的实际情况联系起来

(隔离 I/O || 内存映射 I/O):

DMA

内存映射不会影响设备的直接内存访问 (DMA),因为根据定义,DMA 是一种绕过 CPU 的内存到设备通信方法。

这是我掌握的所有信息。

  • 现在,中断驱动程序 I/O怎么样,在这些情况下使用什么寻址模式?

  • 微控制器是否可以同时执行两种寻址模式(隔离/内存映射)或仅一种选择?

我现在是否理解这些主题,还是有任何误解?

4

1 回答 1

1

端口映射与内存映射(通信)

这就是执行IO 访问的方式,即 CPU 与设备通信的方式。
使用端口映射IO,CPU 使用特殊指令(例如 x86inout)在您无法通过加载/存储指令访问的特殊 IO 地址空间中读取/写入设备。
使用内存映射IO,CPU 执行正常的内存加载和存储以与设备通信。
在安全权限和代码生成方面,后者通常更加细化和统一。

轮询与中断驱动(通知)

这就是CPU接收来自设备的通知的方式。
通过轮询,CPU 将重复从设备读取状态寄存器并检查是否设置了完成位(或等效位)。
使用中断驱动的通知,设备将引发中断,而无需 CPU 执行任何定期工作。
轮询会占用 CPU,但对某些工作负载的延迟较小。

DMA 与非 DMA(传输)

这就是数据从设备传输到 CPU 的方式。
使用 DMA,设备将直接写入内存。
如果没有 DMA,CPU 将不得不重复读取数据(使用端口或内存映射 IO)。


所有这三个维度都是相互独立的,您可以随意组合它们(例如端口映射、中断驱动、DMA)。
但请注意,文献中的命名法并不一致。
此外,不同的设备具有不同的接口,可能不需要所有三个维度(例如,一个非常简单的仅输出 GPIO 引脚可能有一个只写寄存器,因此在这种情况下谈论轮询或 DMA 是没有意义的) .

于 2021-10-05T07:40:10.300 回答