CME-M5 外部存储器接口(EMIF)总线使用指南
2. 基于Data Banking的总线地址扩展规则:
本文引用地址:https://www.eepw.com.cn/article/145142.htmCME的8051处理器为冯诺依曼结构,即程序总线和数据总线统一编址。EMIF地址总线的地址位为23位,对应8M Bytes的地址空间。8051是通过Data Banking的方式实现地址总线的扩展。8051每个bank的地址空间为32K Bytes,共有256个bank。地址空间的分布如下图所示,这里仅对外部数据存储空间做介绍:

与外部数据存储空间有关的寄存器为:
D_PAGESEL(默认初始值为0x01,即指向Bank 1地址空间)
因为D_PAGESEL为8位寄存器,所以刚好对应256个bank。D_PAGESEL的值对应地址总线上的memaddr[22:15]的值,即地址总线的高8位地址总线。注意:D_PAGESEL的值不可为0,因为当为0时,将会与Common Bank的地址空间重叠(0-7FFFF)。
3. 逻辑地址空间与物理地址空间的对应关系
逻辑地址空间(Logical Address): CME 8051每个bank的低16位逻辑地址的空间范围为0x8000-0xFFFF,该值和C编译器里面的地址定义相同。
物理地址(Physical Address):也叫实际地址或绝对地址,是出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。
逻辑地址空间:

- memaddr[22:15]:该物理地址段的值由D_PAGESEL寄存器的值决定,范围为1-255,默认初始化值为0x01;
- memaddr[14:0]:该物理地址段由C编译器里面的变量分配的地址决定,注意:需拿C编译器里面定义的地址(0x8000-0xFFFF)减去偏移地址0x8000,即0x8000对应的物理地址实际是0x0000,0xFFFF对应的物理地址为0x7FFF。
Keil C51编译器支持的外部变量定义方法:
代码片段1:
unsigned char xdata PORTA _at_ 0x9000;//对应低16位物理地址:0x1000
unsigned char xdata DDRA _at_ 0x9001;//对应低16位物理地址:0x1001
unsigned char xdata PORTB _at_ 0xa000;//对应低16位物理地址:0x2000
unsigned char xdata DDRB _at_ 0xa001;//对应低16位物理地址:0x2001
或者如下定义:
代码片段2:
#define PORTA XBYTE[0x9000]
评论