关于ARM的统一编制与内存映射机制

judy的头像

ARM是统一编址的,也就是外设和内存进行统一的编址,共同形成了4G物理地址空间(32位为例子)。

大家知道操作外设时,实际上操作的是读写设备相关的寄存器,这些与外设相关的寄存器与不同操作模式下R0-R15那些寄存器是不同的,这些寄存器并不是所谓的物理上的寄存器,实际上是所谓的IO端口,通常会有控制、状态、数据的分类。他们被连续地编址,对于其编址的方式有两种一种是IO映射、一种是内存映射。IO映射是对x86为例的复杂指令集来说的,需要专门的IO控制指令,不详谈。

内存映射是对于统一编址的精简指令集计算机ARM等来说的。具体的方法就是将IO端口映射成和内存一样的物理地址,然后与内存一起进行统一编址,或者说成为了内存的一部分,当然还可以理解内存映射的意思是可以用访问内存的方式进行IO地址的访问,内存和IO地址一起编码为cpu识别的地址哦。然后内存+IO端口地址=4GB的寻址空间。

那么接下来还有个问题就是这种编址的硬件实现?这就要详见arm的AMBA(Advanced Microcontroller BusArchitecture)了,这是目前芯片总线的主流标准。共定义了3组总线:高性能总线(Advanced High Performance Bus,AHB)、系统总线(Advanced System Bus,ASB)和外设总线(Advanced Peripheral Bus,APB)。不同的总线上挂接着不同的外设和存储器,大部分由三态门控制。比如,当AHB总线上的主设备读写从设备时,发出的地址经过AHB总线的译码器产生该地址所对应从设备的选择信号,选中从设备;这样就可以对从设备进行读写啦。或者可以这样想AHB总线上的译码器根据地址产生相应的片选信号,选中对应的设备。对于硬件的实现我们这是简单地理解以便更好地体会上述编址。涉及到具体的硬件读写操作,地址的硬件实现会提到很多的译码器、三态门、总线、还有时序等等具体情况具体分析,在此不做详述。

转自:hitaowei的博客