繁体   English   中英

CPU如何向IO口写入数据?

[英]How does the CPU writes data to an IO port?

我很想知道 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。

首先,CPU 术语中的“I/O 端口”与串行端口等不同。 它是 CPU 地址空间内的可寻址实体,可以读取和/或写入。 I/O 端口通常是字节、字或长字大小的(这意味着您只是不寻址特定位,而是至少将字节写入端口。必须通过读取端口、设置位和回信)。

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

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

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

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

例如,让我们有一个名为 TXR(0xffff01) 的地址,并且 CPU 执行以下指令:将 143 发送到 0xffff01 地址。 然后在 0xffff01 位置,将有 143 个值。 几个时钟后,串行硬件自动从 TXR(0xffff01) 读取数据并发送。

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

谢谢。

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

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM