CPU如何将数据写入IO端口?

时间:2017-05-29 07:57:51

标签: assembly x86 cpu

我很想知道CPU如何将数据写入IO端口(并从中读取数据)(例如:串行/并行/ 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的引脚0。

3 个答案:

答案 0 :(得分:4)

首先," I / O端口" CPU术语与例如串行端口不同。它是CPU的地址空间中可以读取和/或写入的可寻址实体。 I / O端口通常是字节,字或长字(这意味着您只是不要寻址特定位,而是至少将字节写入端口。单位设置必须通过读取端口来完成,设置一个位并回写)。

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

通常,有两种与输入/输出相关的CPU设计:

  1. 内存映射I / O - 这里,CPU对I / O端口进行寻址,就像寻址内存一样 - I / O端口位于" normal&#34内; CPU的内存地址空间,CPU本身没有特定的I / O指令,因为它将使用与访问内存相同的指令。 CPU控制总线通常没有用于I / O端口访问的特定线路。实现内存映射I / O的CPU的典型示例是Motorola 68000或MOS 6502.
  2. 单独的I / O地址空间 - 此处I / O端口位于" normal" CPU的内存地址空间。 CPU还具有访问INOUT等I / O端口的特定指令。通常,CPU控制总线还具有特定的控制线,用于向I / O地址空间内的CPU寻址的外部硬件发出信号,如IOREQ。实现此方法的CPU的典型示例是Zilog Z80或Intel x86处理器。请注意,支持单独I / O地址空间的CPU完全能够支持内存映射I / O,因此可以采用混合模式方法。

答案 1 :(得分:1)

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

例如,让我们有一个地址叫做 TXR(0xffff01) 并且 CPU 确实遵循指令:将 143 发送到 0xffff01 地址。 然后在 0xffff01 位置,将有 143 个值。 几个时钟后,串口硬件自动从TXR(0xffff01)读取数据并发送。

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

谢谢。

答案 2 :(得分:-1)

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

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

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