9161启动机制研究

来源:互联网 发布:篮球护具 知乎 编辑:程序博客网 时间:2024/06/01 15:04

1.  存储器映射与重映射 

对于任意类型的存储器,必须首先为它分配一个地址空间才能对其进行访问,这样就在地址空间和存储器之间建立了某种对应关系,称为存储器映射。不管是微处理器内置的片内存储器,还是扩展的外部存储器,在电路板制作完成之后,它的存储器映射也就自然的固定下来,这个特定的地址空间也称为它的固有地址空间。例如对于AT91SAM9261来说,地址空间0x30,0000-0x40,0000映射到片内SRAM,即片内SRAM的固有地址空间为0x30,0000-0x40,0000

 

对于ARM处理器来说,为了获得多种引导选项或者提高性能,某个特定的地址空间可以映射到不同的存储器,或者反过来一个存储器可以对应多个地址空间,这种现象称之为存储器重映射。例如AT91SAM9261没有为地址空间0x0-0xF,FFFF安排固有存储器映射,根据上电时BMS引脚的状态,或者通过编程MATRIX_MCFG寄存器可以将不同的存储器映射到0x0-0xF,FFFF,如图1所示,也正是由于这个原因这段地址空间又称为引导存储器,或者重映射区域。在本文中,BMS引脚接地,系统上电后,NorFlash重映射到0x0,此时除了可以通过它的固有存储器映射0x1000,0000访问它,还可以通过它的重映射地址0x0访问它。如果之后将片内SRAM重映射到地址0x0,此时再访问地址0x0,那么实际访问的是片内SRAM

总之,从地址空间的角度看,这个特殊的重映射区域对应的存储器映射具有多重性和临时性,但是在任意时刻它的存储器映射具有唯一性。除了这个特殊的重映射区域,其它地址空间和存储器之间是一一对应的。反之从存储器的角度看,无论何时总是可以通过它的固有地址空间访问它,但是只有当满足某些条件时才能从重映射区域访问它。

2。 重映射异常向量和异常处理器

所有的ARM系统在地址0x0都有一个向量表。向量表虽然不是初始化序列的一部分,但是必须存在,它是转到各个异常处理器的跳转指令表。当发生异常时(例如,数据中止,未定义指令,IRQ等),ARM核立即取出位于地址0x00x1C之间的8条指令中的一条,并执行它。如果程序不需要处理这个异常,那么可以放置一个无限循环,例如:

undefVector 

                      b       undefVector

如果必须处理这个异常,例如复位异常,那么可以放置一个相对PC的跳转指令,例如:

LDR pc, =resetHandler


原创粉丝点击