LPC11Uxx系列 中断向量表重映射

   一般来说,任何IAP+APP升级程序都必须进行中断向量表重映射,因为默认情况下单片机上电后中断向量都是指向0x0000 0000地址处的,而使用使用IAP+APP的方式编程时,当进入APP程序入口时,APP已经不指向0x0000 0000处了,所以如果不进行中断向量表映射,当应用程序产生中断却找不到中断服务函数的入口地址,就没有办法处理中断。 

 

   对于Cortex-M2/3等芯片,是有Flash重映射功能的,即将中断向量表的地址重新映射到Flash中存APP程序的起始512个字节即可,设置VTOR这个寄存器即可。但是Cortex-M0芯片并没有Flash重映射功能,而只有一个重映射寄存器设置读取异常向量的位置,所以必须相应地将中断向量表映射到RAM中,当然映射之前需要将APP程序的中断向量表复制到RAM的前512个字节中。

在LPC11Uxx用户手册中,有这么一段:

     系统存储器重映射寄存器选择是从Boot ROM、闪存还是SRAM 读取异常向量。默认情况下,闪存映射到地址0x0000 0000。当SYSMEMREMAP 寄存器的MAP 位设为0x0 或0x1时, Boot ROM 或RAM 将分别映射到存储器映射(地址0x0000 0000 至0x0000 0200)的底部512 字节。

     0x0 引导加载程序模式。中断向量重映射到Boot ROM。
     0x1 用户RAM 模式。中断向量重映射到静态RAM。
     0x2 用户闪存模式。中断向量不会被重映射,一直位于闪存中。

   这就提供了一个改变0x0处中断向量表内容但又不需要对其进行重新擦除写入的方法:我们可以将APP程序起始地址开始的512字节内容先复制到SRAM(起始地址是0x10000000)中,然后设置重映射寄存器的值为0x1,让中断向量表重映射到RAM中,程序执行时就能取到APP程序的中断向量表了。然而,实际Debug时也能看到,当进行重映射后,0x0处开始的512字节数据就跟RAM区开始的512字节数据一样了(具体原因暂时不知晓),这样就完成了中断向量表的映射。映射而不是对其擦写也能防止在升级过程中掉电导致boot也无法启动的情况。

 

   

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值