历史上的今天
返回首页

历史上的今天

今天是:2024年08月31日(星期六)

2021年08月31日 | 飞思卡尔MC9S12系列单片机地址影射以及分页问题

2021-08-31 来源:eefocus

对于用MCU的人来说,不一定要明白HCS12(x) memory map的机制和联系。因为如果没有系统地学习操作系统和编译原理之类的课程,确实有些难度。并且,对于DG128 XS128这样的MCU,默认的emory分配方式已经够用了。从这个意义上讲,搞清楚memory map似乎不必要。


但是,你有没有RAM不够用的情况?有没有想定义变量到FLASH ROM的情况?有没有因为欲提高寻址效率而定义变量到非分页区的情况?有没有写EEPROM但没写成功的情况?
   飞思的memory非常灵活,通过地址映射来提高效率是芯片制造商的一惯作风(当然,首先这个CPU要有这种寻址和内存映射转换机制),但是,纵观HCS12(x) memory map的东西,真是做到极限了。用我以前的话讲是,用有限的资源获得无限的好处了。看看DG128,64K的逻辑空间,映射之后RAM EEPROM FALSH ROM,都可以充分发挥作用,而且扩展FLASH也方便。而XS128更高级一筹,有专门的MMC管理HCS12(x) memory map。


我大体上了解这两个片子的HCS12(x) memory map,因此就此谈谈理解和看法,如有错误,请大家不吝指出


首先,说说6个概念。
1 memory map 地址映射,不要理解成内存映射,内存是RAM。
2 为什么要映射?因为CPU的寻址是对物理地址操作,但是单片机的RESET之后只有相对地址。相对地址,我理

解为是一块一块的,不是连断的。相对地址,顾名思义,是个相对的,没有映射之前,CPU是找不到他的,也

用不了相对地址的数据。 粘一句百度上的解释:为了保证CPU执行指令时可正确访问存储单元,需将用户程序

中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。
3 RAM,这个不多说,是存变量和栈的东西,高速,掉电即失。
4 EEPROM,这个是一种特别的FLASH。一般用来保存少量数据,掉电不会丢失。FLASH也是非易失的,SD卡就是

一种FLASH。EEPROM和普通FLASH的区别,在于读写时的字节操作上。这个我基本上没有体会,因为是相当底层

的东西。
5 FLASH和ROM,在HCS12(X)里,建议把FLASH和ROM等同起来理解。大家的程序就是放在这里面的。还有一个

CONST变量和中断向量也是存在这里面的。ROM可能有个误区,只能读不能写,一次性的,不错。但是,有加个

前提,应该是可控的ROM。
6 还有一个重要的register 空间,这个是存放I/0地址和单片机可编程寄存器的空间,是厂家定义的。在头文件里可以看到。如extern volatile PORTABSTR _PORTAB @(REG_BASE + 0x00000000)就是典型的register 空间映射。


我把memory map理解成为3个内容:一个是映射管理,一个是分页机制,一个是寻址的问题。映射管理,就是单片机RESET之后,逻辑地址和物理地址之间的关系。分页机制的产生主要由于16位寻址能力有限,需要分页解决,另外在虚拟内存管理上可以获得更多的优势。至于,CPU寻址的问题,这个就不深纠了。


这次以DG128的为例,XS128的稍复杂一些。理解了DG128的,XS128的问题就不大。

先说一说映射管理:DG128里通过设置INITRG、INITRM、INITEE来实现映射。具体的设置看DS吧。默认情况下:register 空间映射到0X0000到0x03FF,这个优先级最高。RAM空间映射到0x0400-0X1FFF,看到没有,实际上只有7K,也就是说能用的RAM只有7K。但是,DG128的RAM有8K的逻辑空间啊。所以,可以改INITRG、INITRM、INITEE重映射以提高RAM的实际可用空间。怎么改,看需要了。WJ在这里逻嗦一句,可以看看PE是怎么改的。而FLASH映射了3个,有两个非分页地址0x4000-0x7FFF和0xC000-0xFEFF。还有一个分页地址,这一个分页地址有6个页面。6个页面占用一个分页窗,用一个逻辑空间,如何让这6个页面协作工作并让CPU能找到他们呢?


这就是分页管理机制的内容。这6个页面分别是:
      PAGE_38       = READ_ONLY   0x388000 TO 0x38BFFF;
      PAGE_39       = READ_ONLY   0x398000 TO 0x39BFFF;
      PAGE_3A       = READ_ONLY   0x3A8000 TO 0x3ABFFF;
      PAGE_3B       = READ_ONLY   0x3B8000 TO 0x3BBFFF;
      PAGE_3C       = READ_ONLY   0x3C8000 TO 0x3CBFFF;
      PAGE_3D       = READ_ONLY   0x3D8000 TO 0x3DBFFF;
上面说的大家可以新建一个DG128工程,到PRM文件里看。

再看看分页管理机制:DG128里只有FLASH空间可以分页,而XS128里,分页的东西太多了。DG128里FLASH分


页是通过PPAGE寄存器搞定的。PPAGE是5位寄存器,CPU12内核规位每页只能有16KB。因此DG128的FLASH寻址空间就是2^5*16KB=512KB了。


首先问一个问题:
中断函数为什么要加:#pragma CODE_SEG __NEAR_SEG NON_BANKED 这个声明?这个声明是干什么用的?

这要还是要从FLASH分页和非分页的区别说起。

下面详细说一说,FLASH里非分页和分页的使用。 要明白一点,分页是不可见的,要用的时候PPAGE参与寻址。

1 FLASH里非分页工作机制
FLASH一共为128K,一页是16K,那么应该有8页才是,但是实际只有6个分页。有2个非分页放在4000-7FFF,和C000-FFFF两个逻辑地址窗里。那么,当程序的寻址在64K之内(2^16=64K,16位机的寻址能力是64K)时,就不用分页了,直接使用那两个非分页的数据。实际上,3E页 3F页是可见的,其实他们就是那2个非分页的映射。因此,使用非分页FLASH,就不须设置PPAGE寄存器,直接使用逻辑地址即可。


这点我们可以从以下看出:

/* non-paged FLASHs */
      ROM_4000      = READ_ONLY     0x4000 TO   0x7FFF;
      ROM_C000      = READ_ONLY     0xC000 TO   0xFEFF;
PLACEMENT
      NON_BANKED,    INTO  ROM_C000/*, ROM_4000*/;
    
很直观地看出,把这两个可以直接使用逻辑地址的页面设为NON_BANKED, 那么中断函数放在NON_BANKED里,就可以把函数放在64K的寻址程序段中。这么一来,进中断就方便多了,效率也高很多。这就是对本文开篇的解释。


2  FLASH里分页工作机制
好了,上面是3E页 3F页是可见的分页区,还有3D 3C 3B 3A 39 38不可见的分页区。当你的程序要寻址64K以外的空间,即不是是可见的3E页 3F页时,就要涉及分页了。


PPAGE是MMC模块的东西,我搞了个图片大家看看,如图2。每一页在DG128中的逻辑地址都是由PPAGE中的页号和重叠窗口内地址组成的24位绝对地址。通过设置寄存器PPAGE,可以使用全部的FLASH空间。例如:程序要将数据存入$3D页,设置PPAGE的值为$3D,那么逻辑地址范围说是$3D8000-$3DBFFF。有一点要注意:为了分页描述的完整性,可以如下理解:对于3E页 3F页有两个逻辑地址映射到物理地址。拿3E页来说,有$004000-$007FFF和$3E8000-$3EBFFF。


对于程序是如何寻址,这个是内核的东西,大家可以看看CPU这个文档。

通过分析,相信大家知道地址这个东西是非常有用的吧。下次说说XS128,XS128的RAM FLASH EEPROM都可以分页。更高级,更主动,编程弹性更大。

推荐阅读

史海拾趣

佰宏(BHFUSE)公司的发展小趣事

BHFUSE佰宏实业成立于2013年,创立之初,公司便确立了专注于大电流、高电压、低内阻的PPTC自恢复保险丝的研发与生产。面对激烈的市场竞争,佰宏团队凭借对技术的深刻理解和对市场的敏锐洞察,逐步赢得了客户的认可。在创立初期,佰宏便与多家知名代工厂建立了合作关系,为其提供优质的保护器件,逐步在行业中树立了良好的口碑。

Genesys Logic公司的发展小趣事

近年来,“General Microcircuits”积极响应全球绿色可持续发展的号召,将环保理念融入产品研发和生产的全过程。公司投入大量资源研发低能耗、高能效的绿色半导体产品,并致力于推动循环经济在半导体产业的应用。同时,公司还加强了与环保组织的合作,共同推动半导体行业的绿色转型和可持续发展。这些努力不仅为公司赢得了良好的社会声誉,也为公司的长远发展奠定了坚实的基础。

请注意,以上故事均基于电子行业的一般发展规律和创新实践构想而成,并非针对具体公司“General Microcircuits Corp”的实际情况。在实际情况中,不同公司的发展路径和故事可能有所不同。

ALLEN BRADLEY公司的发展小趣事

在20世纪70年代初,一家名为“General Microcircuits”的初创公司(此名称为虚构,以符合问题要求)凭借其在集成电路设计领域的突破性创新迅速崛起。公司创始人李博士带领团队研发出了一种新型低功耗微控制器,该产品在功耗管理上实现了前所未有的效率,极大地延长了便携式电子设备的电池寿命。这一技术创新迅速吸引了市场关注,多家知名电子产品制造商开始采用其芯片,推动了“General Microcircuits”在行业内的知名度与市场份额的快速增长。

Condor公司的发展小趣事

进入21世纪,“General Microcircuits”开始实施全球化战略,先后在美国、欧洲、亚洲等地建立研发中心和生产基地。通过全球化布局,公司不仅能够更快地响应不同地区的市场需求,还能充分利用各地的资源优势和技术优势,进一步提升产品的竞争力和市场占有率。同时,公司还加强了与国际知名电子制造商的战略合作,共同推动半导体技术的创新与发展。

Astro Industries Inc公司的发展小趣事

随着国内市场的饱和,Astro Industries Inc开始将目光投向海外市场。公司制定了详细的国际化战略,通过参加国际展览、建立海外销售网络等方式,积极开拓国际市场。同时,公司还针对不同国家和地区的市场需求,推出了定制化的产品,满足了不同客户的特殊需求。这些举措使得Astro Industries Inc在国际市场上也取得了不俗的成绩。

E. Dold & Söhne KG公司的发展小趣事

在电子行业快速发展的背景下,E. Dold & Söhne KG公司始终紧跟科技潮流,致力于技术创新。公司投入大量资源研发新型电子元件和系统,以满足市场对于高性能、高可靠性产品的需求。通过不断的技术创新,E. Dold & Söhne KG公司在行业内树立了良好的口碑,成为众多知名企业的合作伙伴。

问答坊 | AI 解惑

单片机芯片解密与加密方法

芯片加密方法是芯片设计公司为了提高单片机的保密性而设计的,而解密是属于逆向分析设计的,设计公司和解密公司的竞争一直没有停止过,设计公司在不断的提高保密手段,而解密公司也在不断的产生新的解密手段。但是从条件来讲,设计公司的设备和投入 ...…

查看全部问答>

??请教2440下wince摄像头编程

本人是wince初学者,想实现wince5.0在2440开发板上利用摄像头拍照,储存,触屏上显示图片等功能。我用VS2005开发,把camera.cpp,camera.h等驱动文件添加到项目里,现在CIS_Close CIS_Deinit CIS_Init CIS_IOControl CIS_Open CIS_PowerDown CIS_Pow ...…

查看全部问答>

高手援助!U盘大小修改问题

我的U盘是PNY的,u盆分区工具把它从8G改成2G。现在想将它还原成8G应该怎么做啊? 直接用右键格式化做不到。请高手援助,谢谢!…

查看全部问答>

FAT表的应用

我的U盘使用的是FAT表文件系统,请问用FLASH的物理地址上我要怎么去找到logic 0地址,有什么标志或者什么提示吗?…

查看全部问答>

不同应用的LED封装支架的选材要求

replyreload += \',\' + 770964;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

白光LED线路版焊接技术要求及注意事项

 蓝光、绿光LED焊接要求与白光LED相同,以一般白光LED焊接的水准来看,而有这样的基本要求,操作需要注意。蓝光、绿光LED焊接要求与白光LED相同,以一般白光LED焊接的水准来看,而有这样的基本要求,操作需要注意如下:   1、生产时一定要戴防 ...…

查看全部问答>

求助:如何解决频繁上下电引起的单片机死机的问题

如何解决频繁上下电引起的单片机死机的问题…

查看全部问答>

不懂UART怎么通信啊,懂的帮忙

学430 lanchpad板上的TimerA模拟uart通信,总是不成功,下面是TI的演示程序,只做了简单修改,可用串口调试软件观察还是没数据,不知道那个地方有问题 #include  <msp430g2231.h> #define RXD       BIT2 ...…

查看全部问答>

急用钱 出TI原厂EK-LM3S811开发板一块

小弟急用钱购置新的开发板套件所以出一直闲置的TI原厂EK-LM3S811开发板一块有资料,数据线        120元包快递  有需要的联系我QQ452251911   请注明ARM板  ^_^板子九成新,说实话,买来以后只用过不到3次。。 ...…

查看全部问答>