在MPC555中实现从RAM的快速引导
# /* BR2=0x0400003 RAM基址 0X400000
32位口大小 */
lis r5 0x40
ori r5 r5 0x0003
lis r4 BR2@ha
stw r5 BR2@lr4
# /* 拷贝内部Flash 到外部RAM */
li r60x0
lis r40x40
ori r4r40x0000
lis r50xfff0
ori r5r50x0
loop 1
lhzx r7r6r5
sthx r7r6r4
addi r6r60x2
li r80xb00
cmp r6r8
bne loop 1
# /* 使CS2的片选区无效 */
# /* BR2=0x0400003 基本寄存器2 */
lis r5 0xfff0
ori r5 r5 0x0000
lis r4 BR2@ha
stw r5 BR2@lr4
# /* 双重映射使能 */
# /* DMOR=0xFFF00000 片选双重映射区
大小 256k */javascript:window.open(this.src);" style="cursor:pointer;"/>
lis r5 0x7000
ori r5 r5 0x0000
lis r4 OR2@ha
stw r5 OR2@lr4
# /* DMBR=0x0400003 双重映射区基址
0X0 32位口大小 */
lis r5 0x0
ori r5 r5 0x0005
lis r4 BR2@ha
stw r5 BR2@lr4
ba INT Initialize
…
3.2 复制法
对于与MPC500同系列中的MPC561和MPC562等芯片,由于微处理器内部没有ROM,所以必须外扩ROM。在这种情况下,可以把程序烧录到外部ROM,然后在上电时再把程序从外部ROM拷贝到外部RAM中,从而使程序能够在外部RAM中运行。以MPC555为例的流程图如图2所示。
在这种方法中,程序仅在重新配置存储区前运行在外部ROM,而在重新配置存储区后运行在外部RAM中,因此提高了程序的运行速度。该方法在操作时,首先把程序用仿真器烧录到外部FALSH,入口地址为0xfff00000,然后脱机运行。本例中,外部FLASH是16位总线,外部RAM是32位总线。下面以MPC555为例给出具体程序代码。
INT Vectors
/* 系统复位 */
.skip 0x0100-.-INT Vectors
start
# /* 设置RAM 和 ROM 存储区 */
# /*OR2=0xFFF00000片选RAM 大小 1M*/
lis r5 0xfff0
ori r5 r5 0x0000
lis r4 OR2@ha
stw r5 OR2@lr4
# /* BR2=0x0400003 RAM基址 0X400000
32位口大小 */
lis r5 0x40
ori r5 r5 0x0003
lis r4 BR2@ha
stw r5 BR2@lr4
# /*OR0=0Xfff80000片选FLASH 大小 512k*/
lis r5 0xfff8
ori r5 r5 0x0000
lis r4 OR2@ha
stw r5 OR2@lr4
# /* BR0=0xfff00803 RAM基址 0Xfff00000
16位口大小 */
lis r5 0xfff0
ori r5 r5 0x0803
lis r4 BR2@ha
stw r5 BR2@lr4
# /* 拷贝外部Flash到外部RAM */
li r60x0
lis r40x40
ori r4r40x0000
lis r50xfff0
ori r5r50x0
loop 1
lhzx r7r6r5
sthx r7r6r4
addi r6r60x2
li r80xb00
cmp r6r8
bne loop_1
# /* 重新分配存储区 */
# /* BR0=0x600803 */
lis r5 0x60
ori r5 r5 0x0803
lis r4 BR0@ha
stw r5 BR0@lr4
# /* OR0=0xFFf80000 片选flash 512k
1个时钟等周期 */
lis r5 0xfff8
ori r5 r5 0x0003
lis r4 OR0@ha
stw r5 OR0@lr4
# /* OR2=0xFFF00000 片选RAM 1M */
lis r5 0xfff0
ori r5 r5 0x0000
lis r4 OR2@ha
stw r5 OR2@lr4
# /* BR2=0xfff00003 基址 0Xfff00000
32位口大小 */
lis r5 0xfff0
ori r5 r5 0x0003
lis r4 BR2@ha
stw r5 BR2@lr4
ba INT_Initialize
…
4 结束语
笔者对文中所介绍的以MPC555为例对从RAM快速引导运行的两种实现方法进行了测试对比。结果证明:程序在RAM中的运行速度比在FLASH中提高了1倍多,因而程序运行速度得到了很大提高。