AT91X40启动引导说明

AT91X40启动引导说明

    复位使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的电平值。
********************************************************************/