当前位置: 首页 > news >正文

MC9S12单片机的内存映射机制

地址空间

这是个16位的单片机。CPU的寻址空间最大为2^16=64K。

这个64K是包括外设、RAM、EEPROM、和FLASH的。现在程序越来越大,64K的空间肯定是不够用的。因此,需要扩展。

扩展方法就是:分页。

把原来的64K空间,划分一块出来,当作“窗口”。再配置一个“页寄存器”,指示哪一段存储器被映射上这个窗口上,供CPU访问。

地址映射图

解读:

1,0x0000~0x0800为2K的寄存器空间;

2,0x0800~0x0C00为1K大小的EEPROM“窗口”空间;

3,0x0C00~0x1000为1K大小的EEPROM固定空间;

4,0x1000~0x2000为4K的RAM“窗口”空间;

5,0x2000~0x4000为8K的RAM固定空间;这样分配的好处是,有8K的固定RAM空间,可以满足大多数应用场景,不需要对RAM进行分布管理;

6,FLASH空间分为3个部分(页),每个都是16K,共48K,对应地址为0x4000~0xFFFF。其中,第1个和第3个是固定空间,中间那个页是“窗口”空间。

7,以FLASH为例。存储器映射控制器(Memory Mapping Control)将扩展后的逻辑地址0x400000~0x7FFFFF映射到0x8000~0xC000。

特殊FLASH地址

具体的要查芯片手册。但这个系列的用法都差不多。

FLASH配置域

0xFF00~0xFF0F 这16个字节是FLASH配置字。

中断向量表

FF10~FFFF是中断向量表(含复位向量):

页表地址

prm文件中定义的:

/* paged FLASH:                                        0x8000 TO   0xBFFF; addressed through PPAGE */
      PAGE_E0       = READ_ONLY   DATA_FAR IBCC_FAR  0xE08000 TO 0xE0BFFF; 
      PAGE_E1       = READ_ONLY   DATA_FAR IBCC_FAR  0xE18000 TO 0xE1BFFF; 
      PAGE_E2       = READ_ONLY   DATA_FAR IBCC_FAR  0xE28000 TO 0xE2BFFF; 
      PAGE_E3       = READ_ONLY   DATA_FAR IBCC_FAR  0xE38000 TO 0xE3BFFF; 
      PAGE_E4       = READ_ONLY   DATA_FAR IBCC_FAR  0xE48000 TO 0xE4BFFF; 
      PAGE_E5       = READ_ONLY   DATA_FAR IBCC_FAR  0xE58000 TO 0xE5BFFF; 
      PAGE_E6       = READ_ONLY   DATA_FAR IBCC_FAR  0xE68000 TO 0xE6BFFF; 
      PAGE_E7       = READ_ONLY   DATA_FAR IBCC_FAR  0xE78000 TO 0xE7BFFF; 

      PAGE_F8       = READ_ONLY   DATA_FAR IBCC_FAR  0xF88000 TO 0xF8BFFF; 
      PAGE_F9       = READ_ONLY   DATA_FAR IBCC_FAR  0xF98000 TO 0xF9BFFF; 
      PAGE_FA       = READ_ONLY   DATA_FAR IBCC_FAR  0xFA8000 TO 0xFABFFF; 
      PAGE_FB       = READ_ONLY   DATA_FAR IBCC_FAR  0xFB8000 TO 0xFBBFFF; 
      PAGE_FC       = READ_ONLY   DATA_FAR IBCC_FAR  0xFC8000 TO 0xFCBFFF; 
/*    PAGE_FD       = READ_ONLY                      0xFD8000 TO 0xFDBFFF; intentionally not defined: equivalent to ROM_4000 */
      PAGE_FE       = READ_ONLY   DATA_FAR IBCC_FAR  0xFE8000 TO 0xFEBFFF; 
/*    PAGE_FF       = READ_ONLY                      0xFF8000 TO 0xFFBFFF; intentionally not defined: equivalent to ROM_C000 */

这里是根据页号来配置的逻辑地址。用于编译器生成bin文件时寻址。

这里面的地址是非连续的。每一段大小都是16K。低14位地址都是0x8000~0xBFFF。便于MMC将该地址映射到页号+CPU地址。

全局地址

全局地址与PPAGE寄存器之间的关系:

全局地址最高位为1时,将分页后的FLASH空间映射给CPU。

低14位是CPU本地地址(共16K),刚好一个页的大小。前面的8个位(bit14~bit21)对应的是PPAGE,最多可映射256页。

全局地址与RPAGE寄存器之间的关系:

全局地址最高位为000时,将分页后的RAM空间映射给CPU。

低12位是CPU本地地址(共4K),刚好一个RAM页的大小。前面的8个位(bit12~bit19)对应的是RPAGE,最多可映射256页。

全局地址与EPAGE寄存器之间的关系:

全局地址最高位为00100时,将分页后的EEPROM空间映射给CPU。

低10位是CPU本地地址(共1K),刚好一个EEPROM页的大小。前面的8个位(bit10~bit17)对应的是EPAGE,最多可映射256页。

相关文章:

  • Android Native 之 文件系统挂载
  • GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程
  • pytorch图像增强-旋转和平移
  • SAP服务器进程预警通知
  • 使用免费IP数据库离线查询IP归属地
  • C语言中0UL和1UL
  • 记一次联想ThinkBook 16P G5 IRX 系统还原后,进入系统,提示系统还原失败,并且桌面黑屏的只有鼠标指针可以动的问题的解决
  • Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...
  • 自学嵌入式第29天-----epoll、sqlite3
  • 数据库原理6
  • Flink深入浅出之04:时间、水印、TableSQL
  • 什么是 kafka
  • L1-011 A-B(PTA天梯赛)
  • 【spring】原生xml配置版
  • Java核心语法:从变量到控制流
  • 基于大模型的视神经脊髓炎手术全流程风险预测与诊疗方案研究
  • Android双亲委派
  • 模板注入(Twig)
  • 文件上传漏洞
  • 在CentOS系统上安装Conda的详细指南
  • 网站seo设计方案案例/建站系统有哪些
  • 可以做兼职的网站/长沙seo排名优化公司
  • 做自己的网站能赚钱吗/免费换友情链接
  • 企业公司网站管理系统/营销型企业网站案例
  • 深圳信科网站建设/网站seo基本流程
  • 网站seo推广的方法/广告网站