之前也用过飞思卡尔S12(X)系列的单片机,但是对MCU的片上存储器资源与其分页访问机制没有去深入的理解。最近这段时间负责的项目的主芯片刚好是MC9S12XS128这款单片机,借着这个机会好好的研究了一下。所以今天就跟大家一起分享。
在S12(X)架构中,我们首先要知道它有两种类型的内存地址:分页区(banked)和非分叶区(non-banked)。好,一脸懵。。。。什么叫分页区,什么叫非分页区呢?为什么会有分页区和非分页这两种内存呢?大家都知道我们在拿到一款芯片的时候第一件事往往就是关心这款芯片的内存有多大啊 ?处理能力是怎样的啊 ?8位?16位?32位?等等。由于HCS12(X)的地址总线线宽为16位,因此他的最大寻址范围为2^16(2的16次方) = 64KB。但是我们的单片机内存远不止64KB,所以对于64KB之外的地址的访问Freescale提出了存储器分页的工作机制。
非分页区(Non-banked):指的是那些可以直接通过16位地址来访问的内存地址。
分页区(banked):指的是需要通过额外的行为来扩展HCS12(X) CPU寻址能力后才能访问的内存地址
为了解释S12(X)系列MCU的存储器分页访问机制,首先介绍几个地址概念:
本地地址(Local Address):也称为局部地址,指内核CPU能够线性访问的地址,对于16位MCU来说就是0x0000~0xFFFF的64KB地址空间;
逻辑地址(Logic Address): 也可以称为虚拟地址,是链接文件.prm和内存映射文件.map以及默认的编译结果S19文件所使用的地址。为分页号 + 分页窗口(Paging Window)组成的24-bit间断地址空间,对逻辑地址的访问需要使用__far指针。
全局地址(Global Address):也称为物理地址(Physical Address),是芯片在设计时给P-Flash分配的线性连续地址空间,一般在多P-Flash进行操作(比如编写P-Flash驱动程序,对P-Flash进行擦除、编写/写入等)时使用,也是.phy文件中所使用的地址。对于S12/S12X系列MCU,其.phy文件可以使用P&E Log2Phy软件由S19文件转换而得。
S12X系列MCU的本地地址与全局地址的对应关系图如下:
为了更有效的管理Flash、Ram和Eeprom 还分别定义了3个对应的分页寄存器PPage、RPage、EPage。CPU在64KB空间的Flash、RAM、EEPROM3个区域各开设一个窗口,通过分页寄存器来管理各自存储控件的地址。存储器的映射管理结构如上图所示。
1、FLASH页面管理寄存器PPage
2、RAM页面管理寄存器RPage
3、EEPROM页面管理寄存器EPage
这篇文档到这里就结束了。以上分享内容包括图片都是小编一个字一个字敲的,图也是自己画的,着实不太容易。如果有发现不对的地方还请各位大佬批评指正!!!
图链接为https://download.csdn.net/download/zhenzongpian1519/12073475需要可自行下载。