CPU如何向IO口写入数据?

How does the CPU writes data to an IO port?

我很想知道 CPU 如何将数据写入(并从中读取数据)IO 端口(例如:serial/parallel/USB)。

是否有直接向IO口发送数据的指令,例如:

send the number 3 to pin 0 of serial port 1

或者CPU是写入指定内存位置,一旦数据写入该内存位置,数据会自动发送到IO口,例如:

send the number 3 to memory location 0x12345

现在一旦数字3写入内存位置0x12345,它会自动发送到串口1的pin 0。

通常 I/O 设备的寄存器映射到内存。这将在设备文档中明确定义。

例如,将数据发送到设备的方式是将数据写入缓冲区,然后将特定寄存器设置为特定值,该值向设备发出信号,表明缓冲区中有数据需要获取.您写入的缓冲区可以是映射到与系统内存相同地址 space 的设备内存,也可以是系统内存。寄存器的设置是通过写入其映射的内存位置来完成的。


目前不是这方面的专家,所以如果我错了请指出,我会删除这个。

首先,CPU 术语中的 "I/O-port" 与串行端口等不同。它是 CPU 地址 space 内的可寻址实体,可以读取 and/or 写入。 I/O 端口通常是字节、字或长字大小(这意味着您只是不对特定位进行寻址,而是至少向端口写入字节。必须通过读取端口来完成单个位设置,设置位并回写)。

您的串行端口示例通常会分解为多个 I/O 端口(例如,一个端口保存最后接收到的字节,一个被写入以发送一个字节的端口和一个或更多控制端口来控制硬件,如设置波特率或其他行为)。

一般而言,有两种CPU设计与input/output相关:

  1. 内存映射 I/O - 这里,CPU 寻址 I/O 端口,就像寻址内存一样 - I/O端口位于CPU的"normal"内存地址space内,CPU本身对I/O没有具体说明,因为会用到它用于访问内存的指令完全相同。 CPU 控制总线通常没有用于 I/O 端口访问的特定线路。 CPU 实现内存映射 I/O 的典型示例是 Motorola 68000 或 MOS 6502。
  2. 单独的 I/O 地址 space - 这里 I/O 端口位于 CPU 的 "normal" 内存地址 space 之外。 CPU 也有访问 I/O 端口的具体说明,如 INOUT。通常,CPU 控制总线也有特定的控制线,向外部硬件发出信号,表明 CPU 想要在 I/O 地址 space 内寻址,如 IOREQ。 CPU 实现此方法的典型示例是 Zilog Z80 或 Intel x86 处理器。请注意 CPUs 支持单独的 I/O 地址 space 也完全能够支持内存映射 I/O,因此可以有混合模式方法。

您好,我是电子工程专业的学生。 在我们的class,微处理器中有一些与串口通信相关的地址。所以如果向该地址写入数据,硬件会自动通过串口传输数据。

比如我们有一个地址叫TXR(0xffff01) CPU 遵循指令:将 143 发送到 0xffff01 地址。 那么在0xffff01位置,就会有143的值。 几个时钟后,串口硬件自动从TXR(0xffff01)读取数据并发送。

在这种情况下,TXR是一种寄存器。 所以如果你想做点什么,你要做的就是发送数据到相应的地址(注册)。

谢谢。