ARM开发教程之ARM嵌入式系统中断向量表的动态配置ppt课件_第1页
ARM开发教程之ARM嵌入式系统中断向量表的动态配置ppt课件_第2页
ARM开发教程之ARM嵌入式系统中断向量表的动态配置ppt课件_第3页
ARM开发教程之ARM嵌入式系统中断向量表的动态配置ppt课件_第4页
ARM开发教程之ARM嵌入式系统中断向量表的动态配置ppt课件_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARM开发教程之ARM嵌入式系统中断向量表的动态配置简介1 arm中断向量两种设置方法2 X86与arm处置器中断向量表比较3 arm构造中中断向量表的动态配置方法4 结论.简介通常32位arm嵌入式系统的中断向量表是在程序编译前设置好的,每次编写中断程序都要改C程序的汇编启动代码,相当繁琐。本文给出一种配置arm中断向量表新方法。该方法比通常方法仅添加一条指令执行时间,简便高效,功能完备,向量表在运转时动态生成,C程序可以运用固定向量表的启动代码,并可隐藏起来。.普通32位ARM嵌入式系统的中断向量表是程序编译前设置好的。在编写32位ARM嵌入式系统的中断效力程序、设置和修正ARM体系构造的

2、中断向量表时,常感到相当费事,不得不修正汇编代码,对不喜欢运用汇编代码编程的程序员尤其如此。当需求在程序运转过程中动态修正中断向量的程序时会感到更为不便,不得不添加很多分支处置指令才干实现。为此本文提出一种简便高效的配置方法,实现了ROM固化程序在运转时动态配置arm嵌入式系统中断向量表的功能。.1 ARM开发教程之ARM中断向量两种设置方法在32位arm系统中,普通都是在中断向量表中放置一条分支指令或PC存放器加载指令,实现程序跳转到中断效力例程的功能。例如:IRQEntry B HandleIRQ ;跳转范围较小B HandleFIQ或IRQEntry LDR PC,=HandleIRQ

3、;跳转的范围是恣意32位地址空间LDR PC,=HandleFIQLDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令附近的存储单元中,相对偏移小于4KB。该32位数据就是要跳转到的中断效力程序入口地址。之所以运用LDR伪指令,是由于arm的RISC指令为单字指令,不能装载32位的立刻数常数,无法直接把一个32位常数数据或地址数据装载到存放器中。下面普通程序与上述伪指令功能等效,但中断向量表描画得更为明晰。.其中VectorTable为相对LDR指令的偏移量:IRQEntry LDR PC,VectorTable+0;与LDR PC,=HandleIRQ等效

4、LDR PC,VectorTable+4;与LDR PC,=HandleFIQ等效VectorTable DCD HandleTRQDCD HandleFIQHandleIRQHandleFIQ.普通ARM嵌入式系统的程序都是固化在从00000000H开场的低端ROM空间中,中断向量表VectorTable也是固化在ROM中,所以上述两种方法都无法在程序运转时动态随机修正中断向量表。不论对于初学ARM处置器的程序员还是有阅历的程序员,设置中断向量都相当繁琐,必需修正arm的C程序的启动代码。一段晦涩的汇编代码很不方便,比较容易出错。.2 ARM开发教程之X86与arm处置器中断向量表比较实方式

5、X86程序员都熟习,在X86体系构造的PC系统中,不论是用汇编还是用C言语,都可以动态随机地设置、修正中断向量表只需求简单地把中断程序例程的入口地址写入到中断向量表数据区,即可完成向量表的设置。X86向量表设置方便的缘由有两个。其一是中断向量表与程序代码完全分别,中断向量表设置在RAM数据空间,向量表存放的数据是纯粹地址数据;而在arm向量表中存放的是与中断效力例程入口有关的一条分支指令。另一个缘由是,除BIOS外,大多数PC程序都是在运转时加载到RAM中的,程序数据是不加区别的,所以可以很容易在程序运转的过程中从数据生成程序,并可以很容易把CPU控制权转到新生成的程序中。.外表上看,在ARM

6、第二种中断向量设置方法的向量表VectorTable中也是纯地址数据,不含指令代码,似乎可以把VectorTable设置在RAM数据段中。然而普通arm体系的ROM代码段和RAM数据段间的偏移远大于2 12,故超出了LDR运用PC为基址的相对寻址范围。代码中的VectorTable是一个与当前PC间的一个偏移,LDR指令的相对地址是在编译时计算的,要求VectorTable2 12,所以VectorTable不能随意安排在RAM空间中。VectorTable普通只能安排在中断跳转指令附近的代码区内中。.3 ARM开发教程之ARM构造中中断向量表的动态配置方法要在arm构造中实现与X86中一样方

7、便的在中断向量的随机存取功能,向量表的地址数据必需可以安排在恣意32位地址的RAM空间中。为此,中断处置必需添加一条指令,先跳转到向量表,然后执行向量表中动态生成的跳转指令,跳转到中断效力程序,参见以下初始化代码:;*向量表*ENTRYB ResetHandle ;原向量偏移 ,中断号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 P

8、C,=NewVectorTable+0 x20 ;0 x10,未定义 ,04LDR PC,=NewVectorTable+0 x28;0 x14,未定义 0,05LDR PC,=NewVectorTable+0 x30 ;0 x18,IRQ ;06LDR PC,=NewVectorTable+0 x38 ;0 x1c,FIQ ,07;*代码段*ResetHandle;*数据段,为NewVectorTable分配数据空间*.NewVectorTable # 128;大小根据需求定义,每向量2个字8字节;程序运转时,中断效力的初始化 程序必需设置好新的中断向量表,即在NewVectorTable表

9、中动态生成以下指令: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,#4nVt

10、05 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/加载PC存放器的指令码/设置向量C函数,ISR_Handle中断效力程序地址void SetVector(unsigned char no,unsign

11、ed long int ISR_Handle)unsigned long int * pVectorTable;/定义32位无符号数指令,指向向量表pVectorTable=(unsigned long int *)(VECTOR_TABLE+(no3);*pVectorTable+=INSTRUCTION_LDR_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);/前往中断处置程序入口地址运用上述初始化代码和向量设置函数,除复位向量外,其它一切中断向量都可以指向了在RAM数据区中的新向量表,并给定一个一致的中断编号。中断效力程序可以放在任何模块文件中编译衔接,不需求修正原向量表代码,但在翻开中断运用中断效力例程前必需运用C函数Set

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论