|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
复位使AT91X40进入引导模式,初始化用户接口寄存器,使其变为缺省直。除了PC为0以外,ARM核内部的其它寄存器无定义。
AT91X40复位时,存储器映射将NVM放在0页面,片内RAM重定位到0X00300000。片内32位NVM或片外的8/16位NVM映射到0X00000000(片外NVM由NCS0选择)。重映射命令,即重映射寄存器的RCB位写1,可以使AT91X40退出引导模式,存储器映射返回到常规的映射关系。此时0页面处映射为片内RAM,以存放动态的(可修改的)异常向量表。外部的存储器映射到用户在片选寄存器0中定义的地址。注意: 如果这个寄存器没有写入相应的值,将会产生内部的冲突。
如果要访问外部芯片(即使用NCS1到NCS7),重映射命令是必须的。
重映射命令执行前后的AT91R40807 内存映射:
注意:在任何时间,内部的 RAM 和外部的引导存储器都在 2 个不同的地址。
有两个不同的方法执行 Remap 命令。
第一个是标准的。将在引导存储器(与 CS0 联接的)中的程序拷贝到片内 RAM 。
然后 remap 能安全地执行。
第二个是利用 ARM 核的流水线技术。下面的系列描述允许在不拷贝任何代码的情况下
执行 remap 。这个例子被 AT91 库使用, 在文件 \Library\Init\in_reset.s 中。
- 拷贝存储控制器的映像
ldr r10 , PtInitTableEBI
mov r10 , r10 , LSL #12
mov r10 , r10 , LSR #12
- 装载要跳转的地址
ldr r12 , PtInitRemap
- 拷贝片选寄存器映像到存储控制器和命令 remap
ldmia r10 !,{ r0-r9 , r11 }
stmia r11 !,{ r0-r9 }
- 在它的新地址跳到 ROM
mov pc, r12
PtInitTableEBI
DCD InitTableEBI
PtInitRemap
DCD InitRemap
PtInitVector
DCD __main
- 程序启动
InitRemap
在这种情况中, " MOV pc , r12 " 指令在前面的“ STMIA ”执行以前,映射到地
址 0 的外部引导 ROM 中取指。然后 " MOV pc , lr " 执行并且这跳到外部的引导
区 ROM 的连接地址。
/*******************************************************************
在复位期间,BMS和NTRI须保持一个有效的电平。
NTRI的输入电平决定了AT91X40进入正常模式还是三态模式。
BMS告诉芯片引导程序的位置。
BMS 启动模式
1 无片内NVM 外部8位的存储器(CS0)
有片内NVM 内部的32位NVM
0 外部的16位存储器(CS0)
看门狗引起的复位不重新检查BMS和NTRI的电平值。
********************************************************************/ |
|