9161启动机制研究

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核立即取出位于地址 0x0 0x1C之间的 8条指令中的一条,并执行它。如果程序不需要处理这个异常,那么可以放置一个无限循环,例如:

undefVector 

                      b       undefVector

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

LDR pc, =resetHandler


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值