ARM嵌入式系统中断向量表的动态配置.pptx

上传人:wuy****n92 文档编号:53147612 上传时间:2022-10-25 格式:PPTX 页数:15 大小:159.64KB
返回 下载 相关 举报
ARM嵌入式系统中断向量表的动态配置.pptx_第1页
第1页 / 共15页
ARM嵌入式系统中断向量表的动态配置.pptx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《ARM嵌入式系统中断向量表的动态配置.pptx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统中断向量表的动态配置.pptx(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、www.mobiletrain.orgwww.embedtrain.org 千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心ARM嵌入式系统中断向量表的动态配置嵌入式系统中断向量表的动态配置摘摘 要要1 arm1 arm中断向量两种设置方法中断向量两种设置方法2 X862 X86与与armarm处理器中断向量表比较处理器中断向量表比较3 arm3 arm结构中中断向量表的动态配置方法结构中中断向量表的动态配置方法4 4 结论结论千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.or

2、g 摘摘 要要通常32位arm嵌入式系统的中断向量表是在程序编译前设置好的,每次编写中断程序都要改C程序的汇编启动代码,相当繁琐。本文给出一种配置arm中断向量表新方法。该方法比通常方法仅增加一条指令执行时间,简便高效,功能完备,向量表在运行时动态生成,C程序可以使用固定向量表的启动代码,并可隐藏起来。关键词:关键词:动态配置 嵌入式系统 arm 中断向量表一般32位ARM嵌入式系统的中断向量表是程序编译前设置好的。在编写32位ARM嵌入式系统的中断服务程序、设置和修改ARM体系结构的中断向量表时,常感到相当麻烦,不得不修改汇编代码,对不喜欢使用汇编代码编程的程序员尤其如此。当需要在程序运行过

3、程中动态修改中断向量的程序时会感到更为不便,不得不增加很多分支处理指令才能实现。为此本文提出一种简便高效的配置方法,实现了ROM固化程序在运行时动态配置arm嵌入式系统中断向量表的功能。千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org 1 ARM中断向量两种设置方法中断向量两种设置方法在32位arm系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中断服务例程的功能。例如:IRQEntry B HandleIRQ;跳转范围较小B HandleFIQ或IRQEntry

4、 LDR PC,=HandleIRQ;跳转的范围是任意32位地址空间LDR PC,=HandleFIQLDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令附近的存储单元中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org 之所以使用LDR伪指令,是因为arm的RISC指令为单字指令,不能装载32位的立即数(常数),无法直接把一个32位常数数据或地址数据装载到寄存器中。下面一般程序与上述伪指令功能

5、等效,但中断向量表描述得更为清晰。其中VectorTable为相对LDR指令的偏移量:IRQEntry LDR PC,VectorTable+0;与LDR PC,=HandleIRQ等效LDR PC,VectorTable+4;与LDR PC,=HandleFIQ等效VectorTable DCD HandleTRQDCD HandleFIQHandleIRQHandleFIQ千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org 一般ARM嵌入式系统的程序都是固化在从00000000H开始的低端ROM

6、空间中,中断向量表VectorTable也是固化在ROM中,所以上述两种方法都无法在程序运行时动态随机修改中断向量表。不论对于初学ARM处理器的程序员还是有经验的程序员,设置中断向量都相当繁琐,必须修改arm的C程序的启动代码。一段晦涩的汇编代码很不方便,比较容易出错。千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org 2 X86与与ARM处理器中断向量表比较处理器中断向量表比较实模式X86程序员都熟悉,在X86体系结构的PC系统中,不论是用汇编还是用C语言,都可以动态随机地设置、修改中断向量表只需

7、要简单地把中断程序例程的入口地址写入到中断向量表数据区,即可完成向量表的设置。X86向量表设置方便的原因有两个。其一是中断向量表与程序代码完全分离,中断向量表设置在RAM数据空间,向量表存放的数据是纯粹地址数据;而在arm向量表中存放的是与中断服务例程入口有关的一条分支指令。另一个原因是,除BIOS外,大多数PC程序都是在运行时加载到RAM中的,程序数据是不加区别的,所以可以很容易在程序运行的过程中从数据生成程序,并可以很容易把CPU控制权转到新生成的程序中。千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrai

8、n.org 表面上看,在ARM第二种中断向量设置方法的向量表VectorTable中也是纯地址数据,不含指令代码,似乎可以把VectorTable设置在RAM数据段中。然而一般arm体系的ROM代码段和RAM数据段间的偏移远大于2 12,故超出了LDR使用PC为基址的相对寻址范围。代码中的VectorTable是一个与当前PC间的一个偏移,LDR指令的相对地址是在编译时计算的,要求VectorTable2 12,所以VectorTable不能随意安排在RAM空间中。VectorTable一般只能安排在中断跳转指令附近的代码区内。千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研

9、发中心www.mobiletrain.orgwww.embedtrain.org 3 ARM结构中中断向量表的动态配置方法结构中中断向量表的动态配置方法要在arm结构中实现与X86中一样方便的在中断向量的随机存取功能,向量表的地址数据必须可以安排在任意32位地址的RAM空间中。为此,中断处理必须增加一条指令,先跳转到向量表,然后执行向量表中动态生成的跳转指令,跳转到中断服务程序,参见下列初始化代码:千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org;*向量表*ENTRYB ResetHandle;原

10、向量偏移,中断号B ReseHandle;0 x00,00LDR PC,=NewVectorTable+0 x08;0 x04,未定义,01LDR PC,=NeWVector Table+0 x10;0 x08,SWI,02LDR PC,=NewVectorTable+0 x18;0 x0c,未定义,03LDR PC,=NewVectorTable+0 x20;0 x10,未定义,04LDR PC,=NewVectorTable+0 x28;0 x14,未定义 0,05LDR PC,=NewVectorTable+0 x30;0 x18,IRQ;06LDR PC,=NewVectorTable

11、+0 x38;0 x1c,FIQ,07千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org;*代码段*ResetHandle;*数据段,为NewVectorTable分配数据空间*NewVectorTable#128;大小根据需要定义,每向量2个字(8字节);程序运行时,中断服务的初始化 程序必须设置好新的中断向量表,即在NewVectorTable表中动态生成下列指令:千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtr

12、ain.org NewVectorTable;表安排在RAM顶端0 x0c1fff00处(由硬件设定)LDR PC,PC,#4;指令代码为0 xe51ff004,功能为PC-PC+4nVt00 DCD ISR_RESET_HANDLELDR PC,PC,#4;与LDR PC,nVt01指令等效nVt01 DCD ISR_UNDEF_HANDLELDR PC,PC,#4nVt02 DCD ISR_SWI_HANDLELDR pC,PC,#4nVt03 DCD ISR_UNDEF_HANDLELDR PC,PC,#4nVt04 DCD ISR_UNDEF_HANDLELDR PC,PC,#4千锋千

13、锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org nVt05 DCD ISR_UNDEF_HANDLELDR PC,PC,#4NVt06 DCD ISR_IRQ_HANDLELDR PC,PC,#4nVt07 DCD ISR_FIQ_HANDLE可用C函数在NweVectorTable中生成含上述指令的向量表,具体实现如下:#define VECTOR_TABLE 0 x0c1fff00/向量表首地址,根据实际硬件来配置#define INSTRUCTION_LDR_PC 0 xe51ff004/加载P

14、C寄存器的指令码千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org/设置向量C函数,ISR_Handle中断服务程序地址void SetVector(unsigned char no,unsigned long int ISR_Handle)unsigned long int*pVectorTable;/定义32位无符号数指令,指向向量表pVectorTable=(unsigned long int*)(VECTOR_TABLE+(no3);*pVectorTable+=INSTRUCTION_LD

15、R_PC;/在向量表中放置LDR PC,PC,#4指令*pVectorTable=ISR_Handle;/设置中断服务例程入口地址/读取向量C函数,no代表中断号unsigned long int GetVector(unsigned char no)unsigned long int*pVectorTable;pVectorTable=(unsigned long int*)(VECTOR_TABLE+(no3);return*(+pVectorTable);/返回中断处理程序入口地址千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.or

16、gwww.embedtrain.org 使用上述初始化代码和向量设置函数,除复位向量外,其它所有中断向量都可以指向了在RAM数据区中的新向量表,并给定一个统一的中断编号。中断服务程序可以放在任何模块文件中编译连接,不需要修改原向量表代码,但在打开中断使用中断服务例程前必须使用C函数SetVector()设置中断向量千锋千锋3G3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心www.mobiletrain.orgwww.embedtrain.org 本文提出的中断向量表配置策略和实现方法,简便高效,仅比标准处理方法增加一条指令的执行时间。当把arm的C初始化汇编代码中所有中断源(包括扩展的内外部中断源)的向量都指向了新向量表,并统一编号,此后编写任何中断服务程序几乎不需要修改汇编代码,C初始化代码完全可以对C程序员隐藏起来,并可以像在X86体系下一样动态地设置和修改中断向量。来源:中国IT实验室 责编:coco

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com