ARM中的中断向量表

出处:维库电子市场网 发布于:2023-07-17 17:40:23

  当中断或异常发生的时候,CPU自动将PC指向一个特定的地址,这个地址就是中断向量表。

  在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中

  断服务例程的功能。例如:

  IRQEntry B HandleIRQ ;跳转范围较小

  LDR PC,=HandleFIQ

  ;LDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令四周的存储单元

  中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。

  之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数 (常数),无法直接

  把一个32位常数数据或地址数据装载到寄存器中。所以我们一般将中断向量按如下方式设置中断向量表

  LDR     PC, Reset_Addr             1

  LDR     PC, Undefined_Addr

  LDR     PC, SWI_Addr

  LDR     PC, Prefetch_Addr

  LDR     PC, Abort_Addr

  NOP                             ; Reserved vector must be remained

  LDR     PC, IRQ_Addr

  LDR     PC, FIQ_Addr

  Vector_Addr_Table

  Reset_Addr      DCD     Reset_Handler          9

  Undefined_Addr DCD     UndefinedHandler

  SWI_Addr        DCD     SWIHandler

  Prefetch_Addr   DCD     PrefetchAbortHandler

  Abort_Addr      DCD     DataAbortHandler

  IRQ_Addr        DCD     IRQHandler

  FIQ_Addr        DCD     FIQHandler

  上面中断向量表的第9行就是从地址0X00000020开始分配一个字的空间(也就是4字节),这4个字节的内容就是Reset_Handler函数的地址0X00001000。Reset_Addr的值就是这4个字节的首地址0X00000020。

  DCD是ARM的伪指令。作用是分配一个字的空间。功能类似于C51里定义一个数组并初始化。

  Unsigned char Reset_Addr[4]={0x00,0x00,0x10,0x00};

  对比一下就明白了。

  再分析第1行。LDR只能在当前PC的4KB范围内跳转,B命令只能在当前PC的32MB范围内调转。

  Reset_Handler的地址是0X00001000,已经超出了当前PC的4K范围,所以不能用

  LDR     PC, Reset_Handler

  这里不好理解,涉及到ARM的寻址方式。

  LDR Rn,语句标号

  这种表达式里,是相对寻址,基址是程序计数器PC,偏移量是语句标号到PC处的指令条数。

  LDR PC,语句标号只能在当前PC的4KB范围内跳转的原因是这条指令译码后,偏移表达式占用指令代码32位的12位,也就是2^12=4KB。

  完整的分析下,以复位为例。地址0X00000020开始的4字节内容是复位处理函数Reset_Handler的地址0x00001000。Reset_Addr的地址是0X00000020。当产生复位时,PC=0x00000000,跳到第1行语句执行。LDR     PC, Reset_Addr把0X00000020处的一个字的内容送到PC,然后PC跳转到0X00001000处开始执行。

  LDR     PC, Reset_Addr是间接寻址,就是把地址Reset_Addr处的一个字送给PC。


版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!