在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程序的启动代码。一段晦涩的汇编代码很不方便,比较容易出错。
关键字:ARM 嵌入式系统 中断服务 例程跳转
引用地址:
ARM嵌入式系统的中断服务例程跳转
推荐阅读最新更新时间:2024-11-13 10:33
对于决定ARM内核MCU性能和功耗主要因素浅析
继 ARM 推出Cortex-M0+内核后,其32位 MCU 内核增加到了4个。不久前,恩智浦也宣布取得了Cortex-M0+处理器授权,成为目前唯一一家能够提供完整的Cor tex-M0、Cortex-M0+、Cortex-M3和Cor tex-M4系列内核 MCU 的半导体厂商。飞思卡尔在今年3月份也已经推出了基于ARM Cortex-M0+的MCU Kinetis L系列。 在 ARM 内核对MCU统一化进程的同时,各个厂商要怎样才能使得各自的产品与众不同、性能突出呢?恩智浦半导体的Jan JaapBezemer(全球微控制器产品线总监)表示,除了内核外,还有别的资源也能体现差异化,比如内存、数字/模拟IP等。Bezemer
[电源管理]
ARM学习《十》—关于STM32的RTC调试
这两天一直在调试STM32的RTC部分,本来打算弄一个万年历的,但是现在看来是暂时实现不了了。为什么这样说,因为RTC对晶振的要求非常高,必须是6p负载电容的32768晶振,这种晶振很难买,而且还很贵。下面是摘自一位网友的话: 今天到电子市场找了一下,几乎都是12.5p负载电容的32768晶振,只有一家有少量,负载电容是6p,20ppm的晶振要价是12.5p晶振的5倍,而且从外观上也看不出来,也没有测试方法能测出负载电容是6p还是12.5p。卖晶振的老板在这行干了10几年,一说到6p的32768晶振就笑了。这个要求以前就有多个公司中过招,特别是DALLAS的片子,让一家公司吃尽了苦头,焊上的许多高精度12.5p晶振被迫全部换掉,订
[单片机]
ARM汇编指令集之八——移位指令(操作)
1、LSL(或ASL)操作 LSL(或ASL)操作的格式为: 通用寄存器,LSL(或ASL) 操作数 LSL(或ASL)可完成对通用寄存器中的内容进行逻辑(或算术)的左移操作,按操作数所指定的数量向左移位,低位用零来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。 操作示例 MOV R0, R1, LSL#2 ;将R1中的内容左移两位后传送到R0中。 2、LSR操作 LSR操作的格式为: 通用寄存器,LSR 操作数 LSR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用零来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。 操作示例
[单片机]
安全、速度与激情,ARM Powered®成就卓越出行体验
“车行天下”已经成为一种潮流,而智能科技更是为出行带来了无限的畅快体验。ARM 生态系统正不断推动ARM架构的扩展,致力于解决汽车领域的大量技术问题,包括诸如ADAS,IVI,自动驾驶,先进驾驶舱等领域。随之而生的ARM powered智能设备在为“车行天下”保驾护航的同时,更带来出色的车内娱乐体验。 【雷诺Twizy纯电动车:引领绿色出行】 城市交通川流不息,雷诺Twizy拥有简洁的车身结构和前瞻的设计元素,在繁华都市中显得如此卓尔不群。ARM与雷诺已经在今年CES展示了基于Twizy的“全球第一辆来自原厂的开源车辆”,标志汽车领域正掀起一波开放性硬件与软件开发浪潮。雷诺认为,让客户能开发他们自己想要的电动车或是自己独特的
[汽车电子]
ARM汇编指令MRS和MSR
在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。 例如: MRS R1,CPSR ; 将CPSR状态寄存器读取,保存到R1中 MRS R2,SPSR ; 将SPSR状态寄存器读取,保存到R2中 通过MRS指令可以取得状态寄存器里的值,然后比较其模式位M 的值判断当前所处模式,当然也可以比较其它相应位了解当前CPU的状态。 同样,在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和S
[单片机]
简单外中断实验(最近又要搞arm相关的东西,复习一下中断)
程序烧写在norflash上面 Makefile mem_controler.bin : start.s function.c arm-linux-gcc -g -c -o start.o start.s arm-linux-gcc -g -c -o function.o function.c arm-linux-ld -Ttext 0x30000000 -g start.o function.o -o interrupt.elf arm-linux-objcopy -O binary -S interrupt.elf interrupt.bin arm-linux-objdump -D -m
[单片机]
痞子衡嵌入式:ARM Cortex-M文件那些事(2)- 链接文件(.icf)
在前一节课源文件(.c/.h/.s)里,痞子衡给大家系统地介绍了source文件,source文件是嵌入式工程里典型的input文件,那么还有没有其他类型的input文件?既然痞子衡这么提问了,那答案肯定是有啦。今天痞子衡要讲的linker文件就属于另一种input文件。 linker文件顾名思义就是嵌入式工程在链接阶段所要用到的文件,source文件在编译过程完成之后(此时已经是机器可识别的二进制机器码数据),需要再经过链接器从而将二进制数据有序组织起来形成最终的二进制可执行文件,该二进制文件最终会被下载进芯片内部非易失性存储器里。linker文件就是用来指示链接器如何组织编译生成的二进制数据。 linker
[单片机]
9.ARM寻址方式
1.立即数寻址 立即数寻址,是一种特殊的寻址方式,操作数本身就是在指令中给出。只有取出指令就取到了操作数。这个操作数就称为立即数,对应的寻址方式就是立即数寻址方式。例如: ADD R0,R1,#0X45;这汇编的意思:R1+0x45- R0 在以上两条指令中,第二个源操作数,是立即数,要求以 # 为前缀。 2.寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的寻址方式。 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中 3.寄存器间接寻址 寄存器间接寻址就是寄存器中的存放的是操作数在内存中的地址。例如以下指令: 在第一条指令中,以寄存器R2的值作为操作数的地
[单片机]