历史上的今天
今天是:2025年02月09日(星期日)
2018年02月09日 | ARM程序跳转到中断服务例程的功能实现
2018-02-09 来源:eefocus
在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中断服务例程的功能。例如:
IRQEntry B HandleIRQ ;跳转范围较小
B HandleFIQ
或IRQEntry LDR PC,=HandleIRQ ;跳转的范围是任意32位地址空间
LDR PC,=HandleFIQ
LDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令附近的存储单元中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。
之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数(常数),无法直接把一个32位常数数据或地址数据装载到寄存器中。下面一般程序与上述伪指令功能等效,但中断向量表描述得更为清晰。其中VectorTable为相对LDR指令的偏移量:
IRQEntry LDR PC,VectorTable+0
;与LDR PC,=HandleIRQ等效
LDR PC,VectorTable+4
;与LDR PC,=HandleFIQ等效
……
VectorTable DCD HandleTRQ
DCD HandleFIQ
……
HandleIRQ
……
HandleFIQ
一般ARM嵌入式系统的程序都是固化在从00000000H开始的低端ROM空间中,中断向量表VectorTable也是固化在ROM中,所以上述两种方法都无法在程序运行时动态随机修改中断向量表。不论对于初学ARM处理器的程序员还是有经验的程序员,设置中断向量都相当繁琐,必须修改ARM的C程序的启动代码。一段晦涩的汇编代码很不方便,比较容易出错。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:37 编辑 各位需要什么资料或者关于什么方面的内容,可以跟帖说说~~~~ 看看大家能不能帮到你~~~ (一般在需要在CNKI期刊、万方等数据库处需要付费下载的资料我都可以下载到~~~如果有看中的论文、期刊等也可 ...… 查看全部问答> |
|
如何用C语言编程能让单片机读入通过USB输入的信息还有一个关于红外线发射的问题 用什么方法能让单片机(8051F320)读入 通过 USB输入到 单片机FLASH中的信息? 还有用什么语句能实现单片机通过红外线发射管 发射编码?… 查看全部问答> |
|
具体要求是:在wince里先启动BT,搜寻固定的BT裝置,然后发ping封包,size為1K。 我已经搜到BT装置拉,但是不知道用什麽函数去发ping封包,我搜到的BT装置没有IP地址,所以不知道怎麽发. 请各位高手帮帮忙! … 查看全部问答> |
|
11月7日,上海江场三路上海软件开源委员会上海软件促进中心 在发出RT-Thread 11月上海开发者会议消息的短短一周内,大家热情高涨,当天会场就有总计28名人员的参与!回忆前两年,开发者会议最低谷时仅有ffxz与shaolin两人参加的场面,感慨万千 ...… 查看全部问答> |
|
我们现在在做单片机课程设计,由于是第一次做项目很多东西都还不懂,望各位大哥大姐多多指教哈。 用LM35和ADC0809基于单片机STC89C52检测室内温度,为何在数码管显示数值是乱码。… 查看全部问答> |




