终于通了,申请加精,不过这是pc io的处理方式。
系统设计者的主要目的是提供对I/O编程的统一方法,但又不牺牲性能。为了达到这个目的,每个设备的I/O 端口都被组织成一组专用寄存器。CPU把要发给设备的命令写入控制寄存器(control register),并从状态寄存器(status register)中读出表示设备内部状态的值。CPU还可以通过读取输入寄存器(input register)的内容从设备取得数据,也可以通过向输出寄存器(output register)中写入字节而把数据输出到设备。
-----------------------------------------------------------
也就是说ram(或是sdram,本质上是一样,只不过针对不同的控制器),在ram控制器中有一张表(虚拟出来的),
0x1000 uart控制寄存器
0x1001 uart状态寄存器
0x1002~0x1021 uart tx寄存器
0x1022~0x1031 uart rx寄存器
这两种寄存器的读取方式稍有不同,由于控制和状态寄存器一般的数据量不太,所以采用映射的方式,如图1,而tx,rx寄存器有点大,有些mcu tx,rx的缓冲能达到512byte,所以采用通常的读写方式,对处理内核来说是一种负担,并且会造成处理资源的浪费,所有一般都dma的方式。如图2.
|