ARM的内存映射

更新时间:2024-04-03 16:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

几乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。

有些体系结构的CPU(如,PowerPC、m68k等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为内存的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。这就是所谓的“内存映射方式”(Memory-mapped)。

而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。这是一个与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。CPU通过设立专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元(也即I/O端口)。这就是所谓的“I/O映射方式”(I/O-mapped)。与RAM物理地址空间相比,I/O地址空间通常都比较小,如x86 CPU的I/O空间就只有64KB(0-0xffff)。这是“I/O映射方式”的一个主要缺点。 ===========================================

以上描述中“外设I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为内存的一部分”应该如何理解?

这个I/O端口被映射到内存后,是在内存中有一个I/O端口的“镜像”吗(就是说I/O本身的寄存器地址和映射到内存后的端口地址是分开的,只是关系上存在一个对应而已)?还是说I/O端口本身和物理内存一起被编码为连续的“CPU识别的地址”(即CPU将物理内存编码后接着将I/O地址也跟着编码,内存地址和I/O地址并不存在一个对应关系,只是逻辑上被编码为一个连续统一的“物理地址”。) 以上两种理解哪种才是正确的?

另外我想问一下这个“CPU的单一物理地址空间”包括哪些对象,仅仅是物理Memory(RAM\\ROM\\FLASH)对象吗?是不是一个逻辑上的概念?

回答:外设I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为内存的一部分

就是说端口可以用访问内存的方式操纵,比如mov指令,可以把数据直接传送到那个端口

I/O端口本身和物理内存一起被编码为连续的“CPU识别的地址”(即CPU将物理内存编码后接着将I/O地址也跟着编码,内存地址和I/O地址并不存在一个对应关系,只是逻辑上被编码为一个连续统一的“物理地址”。) 这个解释差不多吧

本文来源:https://www.bwwdw.com/article/qf2r.html

Top