原创 ARM7(LPC2136)中断原理

2012-4-4 12:31 3522 20 21 分类: 消费电子

ARM7中断原理的最基本部分与单片机是一样的,如果对单片机中断原理比较熟悉,再来理解ARM7的中断原理是顺理成章的事情。

1.中断向量表

下面以Philips的lpc2136为例进行比较深入的分析:
我们在用ads1.2调试开发板时,有一个startup.s的汇编程序,这个程序就是lpc2136得以运行的启动代码,是及其重要的一部分,蕴含着ARM7的精髓。
其中,有这样一段代码:
AREA vectors,CODE,READONLY
ENTRY

;interrupt vectors
;中断向量表
Vector_Init_Block
LDR PC, Reset_Addr
LDR PC, Undefined_Addr
LDR PC, SWI_Addr
LDR PC, Prefetch_Addr
LDR PC, Abort_Addr
DCD 0xb9205f80
LDR PC, [PC, #-0xff0]
LDR PC, FIQ_Addr
Reset_Addr DCD Start_Boot
Undefined_Addr DCD Undefined_Handler
SWI_Addr DCD SWI_Handler
Prefetch_Addr DCD Prefetch_Handler
Abort_Addr DCD Abort_Handler
Nouse DCD 0
IRQ_Addr DCD 0
FIQ_Addr DCD FIQ_Handler

;未定义指令
Undefined_Handler
B Undefined_Handler
;软中断
SWI_Handler
B SWI_Handler
;取指令中止
Prefetch_Handler
B Prefetch_Handler
;取数据中止
Abort_Handler
B Abort_Handler
;快速中断
FIQ_Handler
STMFD SP!, {R0-R3, LR}
BL FIQ_Exception
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
下面的这个截图来自ads1.2安装后的“online book”里面(这里面有很多非常重要的知识,你不懂的任何疑问都可以在此找到答案,可惜很多人不知道这个好地方)

xis_1.jpg

 
ARM体系设计有八种异常,并把所有现象用异常来表达,我们的代码任何时刻都在这八种异常中运行。

我们给开发板上电,这就是一种“异常”,这种异常用”Reset”来表示。
这八种异常对应八个地址:
Reset(复位)=========0x00000000(当上电,或按下开发板的复位键时,程序跳到该地址运行)
Undef(未定义指令)=========0x00000004(当程序指针访问地址出现未定义指令,程序跳到该地址运行)
SWI(软件中断)=========0x00000008(当发生软件中断,程序跳到该地址运行)
Prefetch Abort(预取指中止)=========0x0000000C(当预取值失败,程序跳到该地址运行)
Data Abort(数据中止)=========0x00000010(当访问数据区失败,程序跳到该地址运行)
Reserved(保留)===========0x00000014
IRQ===========0x00000018(当发生IRQ中断时,程序跳到该地址运行)
FIQ(快速中断)========0x0000001C(当发生快速中断时,程序跳到该地址运行)

2 FIQ中断,向量IRQ,非向量IRQ区别

FIQ是指快速中断请求(Fast Interrupt reQuest),具有最高优先级,一般只声明一个中断源为FIQ,这样可以得到最快的相应速度,如果非要申请多个中断源为FIQ,那么当中断发生时,FIQ中断线程通过读取FIQ状态寄存器来判断当前发生的是那个中断。

xis_2.jpg


向量IRQ(Vector IRQ)是指向量中断请求(Vector Interrupt ReQuest)。具有次高优先级。

非向量IRQ(NO_Vector IRQ)是指非向量中断请求。具有最低优先级。

(未完待续)

文章评论1条评论)

登录后参与讨论

用户1625603 2011-10-17 15:12

谢谢楼主 很好的讲解了arm中断的知识
相关推荐阅读
用户1037328 2016-04-17 17:59
好的理论可以避免犯错——读《丈量世界》有感!
     《丈量世界》,早就因为仰慕高斯而想看这本书      1.殊途同归      这本书写的是高斯和洪堡两个人,为什么要把这两个人放在一起写呢?因为高斯是一个宅男,不喜欢什么旅游,考察!他觉得...
用户1037328 2016-04-05 09:10
叛逆在爱因斯坦性格中的重要性(一)
叛逆在爱因斯坦性格中的重要性(一) 《爱因斯坦传》读书笔记      昨天晚上,读完了2016年书单的第二部书,《爱因斯坦传》。我想梳理一下自己读这本书的收获,或者说感悟!在读这...
用户1037328 2016-04-05 09:09
叛逆在爱因斯坦性格中的重要性(二)
叛逆在爱因斯坦性格中的重要性(二) 《爱因斯坦传》读书笔记                                四  叛逆性 在爱因斯坦的同时期科学家中,我想比他IQ...
用户1037328 2014-07-09 19:55
RTEMS系统时钟原理
作者,下家山(转载请注明作者及出处,请尊重原创)   专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 一:从应用看原理      每个...
用户1037328 2014-07-09 19:47
RTEMS在S3C2410上的移植(一)
作者:下家山(转载,请注明) 1:RTEMS开发环境建立 1.1开发环境建立前的准备工作 因为RTEMS开发环境主要用的是GNU的工具链,所以需要一台装有Linux的HOST. 1.2...
用户1037328 2014-07-09 19:45
深入浅出学Makefile<三,如何自动生成Makefile>
(请尊重原创,转载请注明,作者:下家山) 五: 运行make编译得到可执行文件 root@parson-desktop:/home/parson/tmp/automk# make gcc ...
我要评论
1
20
关闭 站长推荐上一条 /2 下一条