我很想知道 CPU 如何将数据写入(和读取数据)IO 端口(例如:串行/并行/USB)。
是否有直接向IO口发送数据的指令,例如:
send the number 3 to pin 0 of serial port 1
Run Code Online (Sandbox Code Playgroud)
还是CPU写入指定的内存位置,一旦数据写入该内存位置,数据会自动发送到IO口,例如:
send the number 3 to memory location 0x12345
Run Code Online (Sandbox Code Playgroud)
现在一旦将数字3写入内存位置0x12345,它将自动发送到串行端口 1 的引脚 0。
首先,CPU 术语中的“I/O 端口”与串行端口等不同。它是 CPU 地址空间内的可寻址实体,可以读取和/或写入。I/O 端口通常是字节、字或长字大小的(这意味着您只是不寻址特定位,而是至少将字节写入端口。必须通过读取端口、设置位和回信)。
您的串行端口示例通常会分解为多个 I/O 端口(例如,一个保存最后接收字节的端口、一个写入以发送字节的端口以及一个或多个控制端口来控制硬件,例如设置波特率或其他行为)。
通常,与输入/输出相关的 CPU 设计有两种类型:
IN或 )的特定指令OUT。通常,CPU 控制总线也有特定的控制线,向外部硬件发出信号,表明 CPU 要在 I/O 地址空间内寻址,如 IOREQ。实现这种方法的 CPU 的典型例子是 Zilog Z80 或 Intel x86 处理器。请注意,支持单独 I/O 地址空间的 CPU 也完全能够支持内存映射 I/O,因此可以使用混合模式方法。