ARM中断向量设计方案

发布者:camuspyc最新更新时间:2012-05-14 来源: 21ic 关键字:ARM  中断向量  ROM空间 手机看文章 扫描二维码
随时随地手机看文章

在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  中断向量  ROM空间 引用地址:ARM中断向量设计方案

上一篇:ARM的嵌入式Linux移植体验之应用实例
下一篇:将ARM版Android用于非智能手机应用

推荐阅读最新更新时间:2024-03-16 12:59

arm-linux-gcc4.4.3编译s3c2410平台linux内核
一、首先下载linux内核: linux-2.6.14.tar.bz2 下载地址: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 二、解压linux-2.6.14.tar.bz2: tar -jxvf linux-2.6.14.tar.bz2 三、配置Makefile文件: 1、打开源码根目录下的Makefile文件: gedit Makefile 修改Makefile文件: ARCH ?= arm CROSS_COMPILE ?= arm-linux- 2、查看目录结构: ls -l linux-2.6.14/arch/arm/ d
[单片机]
处理器核心你只懂A53/A72?R系列新品发布了!
    就在7月,软银正式与ARM签订协议,确认以320亿美元现金收购英国移动芯片公司ARM。而到了现在,ARM向孙正义正式交出了首份作品——Cortex-R52。   Cortex-R系核心是ARM旗下的四大产品线之一,除了我们日常听到了Cortex-A系列高性能核心之外,还有定位物联网的Cortex-R系列、低功耗微处理器Cortex-M系列以及安全解决方案芯片SecurCore。   全新的Cortex-R52基于改进版的ARMv8-R架构,也就是先前Cortex-R5的升级版,主要面向汽车、工业、医疗保健等自动化领域,另 外,同为R系列的Cortex-R7/R8则主要面向存储低延迟、强化了Modem的连接性能、主攻物
[手机便携]
Android ARM汇编语言
简介 ARM是Advanced RISC Machine的首字母缩写,它可以称之为一家嵌入式处理器的提供商,也可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集。 原生程序与ARM汇编语言 对于使用ARM处理器的Android手机来说,它最终会生成相应的ARM elf可执行文件,分析软件的核心功能只能从这个elf文件入手。 一个ARM原生程序如下: EXPORT main //main函数 main var_C= -0xc //识别出的栈变量 var_8 = -8 STMFD SP!,{R11,LR} //指令 压入堆栈 ADD R11,SP,#4 SUB SP,SP,#8 STR R0, S
[单片机]
ARM的其他外围接口
ARM芯片除了运算器核心外,根据不同需要还有各种外围接口。 最常用的外围接口就是串口,通常ARM芯片会集成若干个串口。在运行Linux时,串口的最重要作用就是进行软件的调试。S3C2440集成了3个串口(UART),软件调试需要一个串口,其他串口可以扩展其他的外围设备,如GPRS模块,GPS模块等。S3C2440的集成串口只需要电平转换芯片就可以直接扩展成DB9串口,联接其他设备,常用的电平转换芯片是MAX232。 S3C2440集成了LCD控制器,可直接通过LCD接口联接LCD。S3C2440的LCD控制器支持STN、TFT型的LCD,以显示真彩色图形图像。有些ARM芯片如AT91RM9200没有集成LCD控制器,因为大多工业控
[单片机]
ARM9学习笔记之——汇编
ARM系列芯片与PC系列(可能我说法不太准确)芯片在指令设计上就有本质的区别。ARM中每条指令是精简指令集要么是32位,要么是16位。而PC的指令是复杂指令集,一条指令可以由多个字节组成。 在写ARM汇编程序时,发现ARM的指令非常的灵活,同样一个功能可以使用多种方式实现。给开发者更多DIY的地方。以下是一些小总结,如有不正确的地方欢迎指正。 1. 关于函数调用方法 在ARM汇编中,函数调用非常灵活。 (1)BL指令 bl initmem ;调用 mem .... mov pc , lr ;返回 BL指令在编译时,是以当前指令地址为基准相对跳转
[单片机]
ARM_Core的处理器模式与寄存器
ARM处理器的工作状态:ARM处理器有两种工作状态。在程序的执行过程中,处理器可以在两种工作状态之间切换,并且不影响 相应寄存器中的内容。 ARM状态,此时处理器执行32位对齐的ARM指令;BX指令,当操作数寄存器最低位为0时,进入ARM状态。 Thumb,此时处理器执行16位对齐的Thumb指令。BX指令,当操作数寄存器最低位为1时,进入Thumb状态。 BX(Branch Exchange):BX Rn; ##其中Rn可以是R0-R15中的任意一个。指令通过将寄存器Rn的内容拷贝到程序计数器PC 来完成4Gbyte的地址空间的跳转。 在进入异常中断后,
[单片机]
ARM汇编:BNE和TST和BEQ
(1)例一:TST与BNE搭配 TST r0,#02 BNE sleep LDR r1,#0 解释:位比较,先进行and运算,如果r0第2位不为1,则与的结果为0,设置标志位zero=1,继续下面的ldr指令。反之,zero=0,跳转到sleep执行。 bne指令: 非零则跳转 个人总结:TST 和BNE 连用: 先是用TST 进行位与运算,然后将位与的结果与0比较,如果不为0,则跳到bne紧跟着的标记(如bne sleep,则跳到sleep处)。 TST 和BEQ连用: 先是用tst进行位与运算,然后将位与的结果与0比较,如果为0,则跳到beq紧跟着的标记(如bne AAAA,则跳到AAAA处)。 (2
[单片机]
基于ARM与μClinux的RTU设计
摘要:基于ARM处理器S3C4510B和μClinux的RTU总体结构设计、RTU硬件扩展方法以及在μCllinux环境下开发RTU应用程序的经验。定义了一种RTU母板总线,介绍了由处理器总线驱动RTU母板总线的接口电路原理以及RTU母板总线上扩展硬件模块的方法。 关键词:RTU S3C4510B μClinux 嵌入式系统 在电力系统变电所以及电气化铁道牵引变电所远动控制系统中,远程数据采集与监控终端(RTU)是关键设备,实现遥控、遥测、遥信等功能。 采用工业控制计算机,扩展测控硬件接口电路,是RTU设计常见的方法,但是这种方法设计的RTU成本高、体积大、耗电大。采用80C196等单片机设计RTU,由于单片机的运算处理和
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved