地址空间
这是个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页。