ARM中断的基本过程:
在IRQ0脚给个上升沿后,过程是这样的(比较通用的过程)。
1)如果你没有打开该中断的使能寄存器,没有任何反应。
2)如果你打开了使能寄存器,但在对应的屏蔽寄存器中屏蔽了该中断,也没有任何反应。
3)上述两个寄存器都设置正确了,中断产生了,CPU保存当前程序运行环境,跳到中断入口,ARM芯片一般是 0x?地址处。
4)如果你没有设置中断向量,即0x?处不是你的代码,程序就会飞掉,当然也可能正常运行,这种情况一般发生在正好飞到正常代码处。
5)设置好中断向量了,中断向量一般是个跳转语句,跳到你的正式的中断处理过程,在这里你可以关闭所有中断,清中断,处理等等,然后退出。记住某些处理器一定要清中断,否则下次再给个上升沿就没有反应了。
中断路径
如果是irq中断
产生irq异常中断 转到 0x18 1 跳 中断跳
如果启用向量中断模式
自动转向对应向量地址 每地址对应一条跳转指令 2 跳
跳转到中断处理程序
如果使用汇编编写中断处理程序
在该处即可编写处理程序
如果使用c语言编写中断处理程序
需要添加与c语言接口程序 3 跳
方法:1 汇编编写
在内存空间定义一向量表,用来存放各中断c语言中断处理程序入口地址[即函数入口地址],
在上述程序跳转到处编写 将c语言处理程序入口地址放入pc (即跳转到c函数处)。
2 c编写
在内存空间定义指针表[与汇编向量表对应],用来存放各中断汇编转向c函数入口地址,
编写中断处理函数,将对应中断指针内容放入函数入口地址。
如果不启用中断向量模式
从0x18直接转向中断处理程序即可
小结: 上述1 跳为向量中断模式自动完成,可加快寻找中断源。
2 跳为与c语言相结合,汇编和c利用共同定义的中断向量地址表完成挂钩。
关键字:ARM中断 基本过程
引用地址:
ARM中断的基本过程
推荐阅读最新更新时间:2024-03-16 15:04
分析ARM启动代码和中断处理过程
之前有分析过44b0下的这个启动代码,差别不是非常大,今天再重新看了一遍。启动代码与 Bootloader不同,主要是指进入C语言之前的汇编代码,网上都称为是bootloader的stage1,一般通用的内容包括: 1. 定义程序入口点 2. 设置异常向量表 3. 初始化存储系统 4. 初始化用户程序的执行环境 5. 初始化堆栈指针寄存器,改变处理器的模式 6. 设置FIQ/IRQ中断处理程序入口 7. 进入C程序 1)编译器选择 GBLL THUMBCODE 因为处理器分为16位 32位两种工作状态,程序的编译器也是分16位和32两种编译方式,所以这段程序用于根据处理器工作状态确定编译器编译方式,程序不难理解,主
[单片机]
基于ARM7软中断程序的设计
1 存储器部分原理 笔者在设计一项目时采用LPC2458。此CPU为ARM7内核,带512K字节的片内FLASH,98k字节的片内RAM,支持片外LOCAL BUS总线,可从片外NOR FLASH启动CPU。由于代码量较大,程序放在片外的NOR FLASH中。且存在片外NOR FLASH在运行程序时,需对片外的NOR FLASH擦写的需求。图1为存储部分框图。 图1 存储部分原理框图 在设计中,片外NOR FLASH的大小为16M字节。其中2M规划为存放运行程序,剩余的空间用于产品运行日志,告警灯存储空间。因此存在着在程序运行时对片外NOR FLASH擦写的需求。如果程序正在正常运行的片外FLASH中去擦写
[单片机]
ARM基础学习-SWI异常中断处理
在ARM处理器中,我们常常使用SWI指令来产生一个软中断。软中断指令SWI指令中包含了一个24位的立即数,这个立即数指示了用户请求的特定的SWI功能,即这个立即数表示的是SWI指令所想要触发中断的中断号。 所以,当SWI指令触发了一次异常后进入异常处理的程序时,异常程序必须要从SWI指令中提取出来中断号,即提出出来SWI指令中低24位的值,从而得到用户请求的特定的SWI功能。 SWI异常处理程序 通常情况下,SWI异常中断处理函数分为两级,第一级的SWI处理函数用于从SWI指令中提取24位的立即数即中断号,通第一级函数通过汇编语言、内嵌汇编来完成。第二级SWI异常中断处理程序实现各个SWI的具体功能,第二级程序可以是汇
[单片机]
ARM中断PC返回值分析
在ARM程序的开发过程中,对中断的处理是很普遍的、也是相当重要的。Realview MDK使用的RVCT编译器提供了__irq关键字,用此关键字修饰的函数被作为中断来函数编译,即在编译的过程中,编译器会自动添加中断处理过程中现场保护和恢复的代码,减小程序的开发难度,加快软件的开发过程。 在理解__irq关键字的作用之前,先看一下ARM核对异常的处理过程。当产生异常时, ARM核拷贝CPSR寄存器的内容SPSR_ mode 寄存器中,同时设置适当的CPSR 位、改变处理器状态进入ARM 态和处理器模式,从而进入相应的异常模式。在设置中断禁止位禁止相应中断(如果需要)后,ARM核保存返回地址到LR_ mode ,同时设置PC为相应的异常
[单片机]
理解ARM中断原理以及中断嵌套
ARM有七种模式,我们这里值讨论SVC、IRQ和FIQ模式 usr(用户模式)、fiq(快速中断模式)、irq(中断模式)、svc(管理模式)、abt(数据访问终止模式)、sys(系统模式)、und(未定义指令中止模式) ① 我们假设ARM核心有两根中断引脚(实际上是看不见的),一根叫irq pin,一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ ② 先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着pc的指示去做事情,当CPSR中的I和F位为1时,IRQ和FIQ全部处于禁止状态。无论你在irq pin和fiq pin上面发什么样的中断信号,ARM不会理你,
[单片机]
ARM历程九-ARM中断
离上次真正写历程已经有10天的时间了。国庆嘛,自己给自己放了几天假——耍耍游戏下下棋什么的。 其实这次写触屏的驱动和对ARM中中断的过程的了解也花了不少时间和脑力。 我就简单分享一下CPU执行某个中断的条件吧,也是我自己的理解,如果有错还请大家指正(以IRQ中断为例吧): 在程序状态寄存器中(CPSR寄存器)i 位为IRQ中断禁止位,若这一位置1那么所有的IRQ中断都不会被CPU响应,如果这一位被清0,CPU也不一定会响应某一个或某些中断(就像是一个总开关)。所以,要想让CPU执行IRQ中断,CPRS中的i位必须要清0! 在2440的CPU中还有两个中断屏蔽寄存器:INTMSK(中断屏蔽寄存器)和IN
[单片机]
ARM 汇编若干问题(一般中断问题与软中断SWI分析)
一般中断问题分析 ARM CPU 在上电启动之后会自动进入SVC模式,也是ARM上电后的默认工作模式,如果发生了中断,ARM会自动切换到外部中断模式(IRQ为例),如果是FIQ那么就切换到FIQ模式下面进行处理。 在每一个模式下面都有一组可以访问的寄存器,SVC和IRQ模式下的R0~R12是共用的,这就涉及到寄存器Rx内容的保存:压栈,恢复:出栈操作。在IRQ处理中用到了哪些Rx就要进行相应的保护与恢复,否则当处理退出IRQ时就会出错误。 发生中断时候,ARM是要首先完成当前正在执行的指令,然后再进行为IRQ的必要处理。具体的内容如下: 将当前CPSR,保存到IRQ模式下的的SPSR_i
[单片机]
ARM7中断设置问题
在ARM教程中许多例子都有这样的话:VICVectCntl0=0X2E; 为什么就可以EINT0通道分配到IRQ Slot0。 VICVectCntl1=0X2F;又分配到slot几呢?还有许多教程中写的是 EXTMODE = 0X00; EXTPOLAR = 0X02; VICIntSelect = 0X00000000; VICVectCntl0 = 0X20|15; VICVectAddr0 = (int)IRQ_Eint1; EXTINT = 0X02; VICIntEnable = 0X00008000; VICVectCntl0 = 0X20|15; 又是什么意思,中间|是怎么回事。0X20或15是什
[单片机]