中断向量表重映射与复制
中断向量表重映射与复制
关键字:中断向量表重映射,中断向量表复制,建立多个 KEIL 工程,多个 MAIN 函数
一、为什么要做中断向量表的重映射?
对于 LPC2XXX 系列芯片:
当程序中用到中断的功能时,在产生中断后,处理器会将会跳到处理中断的地址处去执
行。而在产生中断后处理器首先会跳到指定的地址处。
这个指定的地址只有三个地方:Boot ROM 区,内部 FLASH 区的 0x00000000 地址处,或
者内部 SRAM 区的 0x40000000 地址处。(若是 LPC2378,则还有一个用户外...
中断向量
重映射与复制
关键字:中断向量表重映射,中断向量表复制,建立多个 KEIL
,多个 MAIN 函数
一、为什么要做中断向量表的重映射?
对于 LPC2XXX 系列芯片:
当程序中用到中断的功能时,在产生中断后,处理器会将会跳到处理中断的地址处去执
行。而在产生中断后处理器首先会跳到指定的地址处。
这个指定的地址只有三个地方:Boot ROM 区,内部 FLASH 区的 0x00000000 地址处,或
者内部 SRAM 区的 0x40000000 地址处。(若是 LPC2378,则还有一个用户外部存储器区域)
那么产生中断后它到底会跳到哪个地址,就要看存储器映射控制寄存器(MEMMAP-0XE01FC040)
的位 1:0(MAP)的值,
默认值为 00,这时中断向量被重新映射到 Boot ROM 区,
当为 01 时,则中断向量位于 FLASH 中也就是地址 0x00000000 处,
当为 10 时,则中断向量被重新映射到 SRAM 中,地址为 0x40000000,
当为 11 时,为用户外部存储器模式。
二、什么时候需要做向量表重映射?
1、当工程中编写的中断向量表在内部 FLASH 中 0x00000000 处时,则需要重新映射,
映射
:只需要将 MEMMAP 的 1:0 位的值设为 01 即可;
2、当中断向量表在 SRAM 中时,则需要重新映射,
映射方法:只需要将 MEMMAP 的 1:0 位的值设为 10 可;
三、什么时候需要做中断向量表的复制?
当中断向量表放在内部 FLASH 中,而且起始地址不是 0x00000000 时,此时如果程序
运行后产生中断,则中断向量找不到处理中断的地址,这时候就会出错。解决方法:
1、 假设中断向量表被指定放在 FLASH 中的 0x00030000 处,若要正确产生中断向量处理,
则需要中断向量复制到 SRAM 并重新映射;
2、 步骤 1: 因为 LPC2XXX 有 8 个异常向量(具体异常类型在芯片相关文档中有说明)每
个异常向量占 4 个字节,也就是 32 位,故先定义一个指向中断向量表的首地址的指针:
unsigned int *vptr = (unsigned int *) 0x00030000;
unsigned int *vsram = (unsigned int *) 0x400000000;
3、 步骤 2:复制向量表
int I;
for (i=0;i<32;i++)
{
*(vptr+i)=*(vsram+i);
}
4、 步骤 3:重新映射向量表
#define MEMMAP (*(volatile unsigned long *)(0xE01FC040)) //寄存器地址定义
MEMMAP = 0x2 //重新映射向量表到 SRAM 中
中断产生后,将到 SRAM 的 0x40000000 地址处执行中断向量表。
5、 完成。
四、使用中断向量表复制与重映射有什么用途?
1、使用中断向量表与重映射可以建立两个或者两个以上的独立工程(多个 main 函数);
2、与分散加载文件配合使用,可以在同存储芯片中存储多个可独立运行的代码;
3、利用上述方法可实现任意升级代码区的功能;
4、建立多个工程存放到同一芯片中运行,可增加 RAM 的使用率。
本文档为【中断向量表重映射与复制】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。