MMIO 与 PMIO 技术

MMIO 与 PMIO 技术,第1张

MMIO 技术 PMIO 是什么?

PMIO 全称为 port-mapped I/O,它使用专门为执行 I/O *** 作而设计的一类特殊 CPU 指令,如 x86 和 x86-64 架构中的 in 和 out 指令。I/O 设备有一个独立于通用内存的地址空间,可以通过 CPU 物理接口上的额外 I/O 引脚来实现。因为 I/O 的地址空间与主存的地址空间是隔离的,所以这有时被称为隔离 I/O。

优点:

  1. I/O 端口地址不占用存储器空间;使用专门的 I/O指令对端口进行 *** 作,I/O指令短,执行速度快。
  2. 由于使用专门的 I/O 指令访问端口,并且 I/O 端口地址和存储器地址是分开的,I/O 端口地址和存储器地址可以重叠,而不会相互混淆。

缺点:

  1. cpu 需要设计单独的指令,实现相对复杂
  2. 只能使用 EAX、AX 和 AL 寄存器来控制数据的读写,访问 I/O 设备需要很多条指令完成
  3. 需要使用专用指令 *** 作 I/O 空间,不能使用通用的内存访问指令 *** 作,编码成本高

早期 cpu 位数与存储器空间较小,PMIO 不占用存储器空间的优势较大,随着处理器位数与存储器空间的扩展,PMIO 架构的这种优势逐渐丧失,MMIO 架构逐渐占据主流。

MMIO 是什么?

MMIO 全称为 Memory-mapped I/O,内存映射 I/O 对内存与 I/O 设备使用相同的地址空间寻址。I/O 设备的内存和寄存器被映射到统一的地址空间中。

在这种架构下,内存地址可以指代物理 RAM 的一部分,也可以指代I/O 设备的内存和寄存器。用于访问内存的 cpu 指令也可能用于访问外设 I/O 的内存和寄存器空间。

MMIO 的优点
  1. MMIO 作为一种不同的 CPU 到设备通信方法,不会影响设备 DMA 过程
  2. MMIO 丢弃了端口 I/O 带来的复杂性,cpu 需要更少的内部逻辑
  3. MMIO 架构下,常规内存指令可用于访问 I/O 外设,CPU 的所有寻址模式都可用于 I/O 及内存。
MMIO 使用示例

linux 内核中使用 ioremap 来映射 I/O 物理内存,示例如下:


    gpio_base_addr = ioremap(GPIO_BASE_ADDR, 0x7000);

ioremap 映射完成后,读写 I/O 寄存器与普通的内存读写 *** 作一致,不需要使用专用代码,示例如下:

    unsigned int *base_addr;

    base_addr = (unsigned int *)(gpio_base_addr + offset);
    *base_addr &= ~(0x8 << 7);

MMIO 的方式下不访问 I/O 寄存器不需要使用任何特殊指令,访问 I/O 寄存器与访问普通内存空间一致。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/713541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存