[英]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 设计有两种类型:
IN
或OUT
特定指令。 通常,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.