免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1006 | 回复: 0
打印 上一主题 下一主题

中断向量表重映射与复制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览
中断向量表重映射与复制
2009年09月09日 星期三 下午 01:51

/******************************************************************************

*     文档名:中断向量表重映射与复制

*     创建:    http://hi.baidu.com/netee/

*     日期:    2009-9-9

******************************************************************************/

关键字:中断向量表重映射,中断向量表复制,建立多个KEIL工程,多个MAIN函数

一、为什么要做中断向量表的重映射?

对于 LPC2XXX系列芯片:

当程序中用到中断的功能时,在产生中断后,处理器会将会跳到处理中断的地址处去执行。而在产生中断后处理器首先会跳到指定的地址处。

这个指定的地址只有三个地方:Boot ROM区,内部FLASH区的0x00000000地址处,或者内部SRAM区的0x40000000地址处。(若是LPC2378,则还有一个用户外部存储器区域)

那么产生中断后它到底会跳到哪个地址,就要看存储器映射控制寄存器

MEMMAP-0XE01FC040)的位10MAP)的值,

默认值为00,这时中断向量被重新映射到Boot ROM区,

当为01时,则中断向量位于FLASH中也就是地址0x00000000处,

当为10时,则中断向量被重新映射到SRAM中,地址为0x40000000

当为11时,为用户外部存储器模式。

二、什么时候需要做向量表重映射?

       1、当工程中编写的中断向量表在内部FLASH0x00000000处时,则需要重新映射,

映射方法:只需要将MEMMAP10位的值设为01即可;

       2、当中断向量表在SRAM中时,则需要重新映射,

映射方法:只需要将MEMMAP10位的值设为10可;

三、什么时候需要做中断向量表的复制?

       当中断向量表放在内部FLASH中,而且起始地址不是0x00000000时,此时如果程序运行后产生中断,则中断向量找不到处理中断的地址,这时候就会出错。解决方法:

1、 假设中断向量表被指定放在FLASH中的0x00030000处,若要正确产生中断向量处理,则需要中断向量复制到SRAM并重新映射;

2、 步骤1 因为LPC2XXX8个异常向量(具体异常类型在芯片相关文档中有说明)每个异常向量占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

中断产生后,将到SRAM0x40000000地址处执行中断向量表。

5、 完成。

四、使用中断向量表复制与重映射有什么用途?

1、使用中断向量表与重映射可以建立两个或者两个以上的独立工程(多个main函数);

2、与分散加载文件配合使用,可以在同存储芯片中存储多个可独立运行的代码;

3、利用上述方法可实现任意升级代码区的功能;

4、建立多个工程存放到同一芯片中运行,可增加RAM的使用率。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP