单片机
返回首页

飞思卡尔 HCS12(x) memory map解说之2 .

2021-08-12 来源:eefocus

接着上次的说吧。

首先问一个问题:
中断函数为什么要加:#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寄存器,直接使用逻辑地址即可。见图1。
  

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

/* 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的寻址程序段中。这么一来,进中断就方便多了,效率也高很多。这就是对本文开篇 的解释。
   

大家记住这一点,在XS128里也有类似的一招。
  

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都可 以分页。更高级,更主动,编程弹性更大。


   
                                                               图1



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何调制IC555振荡器

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章