




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
zhe 44b0中断深入详解(结合代码) 一、44B0中断系统 44B0中断系统中有两张中断转移表,经过二重转移才跳到中断处理程序。第一张中断向量表由硬件决定,所在区域为ROM(flash),地址空间从0X00开始,其中0X00-0X1C为异常向量入口地址,0X20-0XC0为中断向量入口地址。另一张中断向量表在RAM中,可以随便改,其位置在程序连接后才定。由于 RAM放在地址空间的高端(距离中断向量超过了32M),为了从第一张中断向量表跳到第二张中断向量表,故在第一张中断向量表对应位置上写上 ldr PC,# interrupt_service如:ldr PC,=HandlerEINT4567。1、 一级中断向量表(以下为汇编代码片断,详见44B0数据手册11章中断控制器)AREA Init,CODE,READONLY;说明:关键字ENTRY告诉编译器保留这段代码;从代码看Init段就是要写入0x00地址的原始中断向量,因此把这个文件编译生成的44binit.O和Init填入ADS-Linker-Layout页对应项中。【这样编译器会把该段代码编译到0X0地址。】ENTRY ;ENTRY程序入口标号需要顶格式写,否则出错。 b ResetHandler ;复位异常 0x0000 0000 b HandlerUndef ;未定义异常 0x0000 0004 b HandlerSWI ;软件中断异常 0x0000 0008 b HandlerPabort ;指令预取异常 0x0000 000C b HandlerDabort ;数据预取异常 0x0000 0010 b . ;保留 0x0000 0014 b HandlerIRQ ;外部中断 外设中断都是在这里扩展的 0x0000 0018 b HandlerFIQ ;快速中断 0x0000 001C;*IMPORTANT NOTE*;If the H/W vectored interrutp mode is enabled, The above two instructions should;be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller.; b HandlerIRQ - subs pc,lr,#4;说明:原文注明当使用向量中断模式时,需用subs pc,lr,#4来代替前面的语句。这是原来S3C44B0X硬件中的一个BUG,后期推出的S3C44B0X已经解决此BUG,但是为了兼容早期的版本,用subs pc,lr,#4替换后也可以正常工作,相当于现在的硬件中两条语句都可以兼容,后期的器件手册中已经注明可以直接采用b HandlerIRQ的方式VECTOR_BRANCH ldr pc,=HandlerEINT0 ;mGA H/W interrupt vector table 0x0000 0020 ldr pc,=HandlerEINT1 ; ldr pc,=HandlerEINT2 ; b . ldr pc,=HandlerADC ;mGKB 0x0000 00C0 b . ; b . ; b . ; b . ; b . ;mGKB b . b . ;0xe0=EnterPWDN ldr pc,=EnterPWDN LTORG通过这段代码,就在44B0的ROM中以0x00为起始地址的地方建立起了一张中断向量表,而且这个表的顺序完全符合44B0数据手册中对中断向量地址的定义要求。2、 二级中断向量表 _ISR_STARTADDRESS ;一般为 #define _ISR_STARTADDRESS 0xc7fff00HandleReset # 4HandleUndef # 4HandleSWI # 4HandlePabort # 4HandleDabort # 4HandleReserved # 4HandleIRQ # 4HandleFIQ # 4 ;Do not use the label IntVectorTable,;because armasm.exe can not recognize this label correctly.;the value is different with an address you think it may be.;IntVectorTableHandleADC # 4HandleRTC # 4HandleUTXD1 # 4HandleUTXD0 # 4HandleEINT2 # 4HandleEINT1 # 4HandleEINT0 # 4 ;0xc1(c7)fff84 END这段第一行“”符号表示在RAM区开辟空间。 _ISR_STARTADDRESS表示在RAM的_ISR_STARTADDRESS处开辟一段空间。这里开辟的空间是用来存放中断服务程序及其他异常处理程序的地址的。每个中断或其他异常都开辟4个字节的空间,这是因为RAM区的程序地址要4个字节才能放得下。而中断程序的地址是应用程序在使用这个中断时,将中断服务程序的地址存入这对应的空间内。3、 中断向量表最终指向一般在44B.H等头文件能找到对应于二级中断向量表的宏定义:片断如下#define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0)#define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4)#define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8)#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc)#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10)#define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14)#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS+0x18)#define pISR_FIQ (*(unsigned *)(_ISR_STARTADDRESS+0x1c) #define pISR_ADC (*(unsigned *)(_ISR_STARTADDRESS+0x20)#define pISR_RTC (*(unsigned *)(_ISR_STARTADDRESS+0x24)#define pISR_UTXD1 (*(unsigned *)(_ISR_STARTADDRESS+0x28)#define pISR_UTXD0 (*(unsigned *)(_ISR_STARTADDRESS+0x2c)#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x7c)#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x80)#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x84)一般在C文件中将自定义的中断服务子程序地址放进对应宏中,如:pISR_TIMER0 = (int) time_interrupt() 二、44B0向量(仅IRQ模式)与非向量中断处理一旦产生IRQ中断,微控制器会切换到IRQ模式,并且跳转到向量表0x0000018地址处执行程序。而一旦产生FIQ中断,微控制器会切换到FIQ模式,并且跳转到向量表0x000001C地址处执行程序。所示,在0x00000080处和0x0000001C处必须各有一条跳转指令,分别跳转的IRQ和FIQ中断处理的代码处。1、向量中断和非向量中断模式的概念与区别(1)向量中断模式是当CPU读取位于0x18处的IRQ中断指令的时候,当ARM7TDMI从 0X00000018地址处取指令时,中断控制器会在数据总线上加载分支指令(取代0x18处的指令)。这些分支指令使程序计数器能够对应到每一个中断源的向量地址。例如 ADC中断的向量地址为0xC0(会自动跳转到0xC0,而不会到0x18),然后则执行在0xC0处放如下代码:ldr PC,=HandlerADC当ADC中断产生的时候系统会自动跳转到HandlerADC函数中处理中断。这些跳转到每一个中断源向量地址的分支指令可以由中断控制器产生,为此,中断控制器产生的机器码为0xEA000000.在各个中断源对应的中断向量地址中,存放着跳转到相应中断服务程序的程序代码。在相应向量地址处,分支指令的机器代码公式如下:(不太明白此公式,望高手指点。_)向量中断模式的指令机器代码=0xEA000000+(-0x8)2例如,如果定时器0中断采用向量中断模式,那么跳转到相应中断服务程序的分支指令应该存放在向量地址0x00000060处。中断服务程序的起始地址在0x10000。下面就是计算出来放在 0x60处的机器代码: (machine code 0x00000060)0xEA0000000+(0x10000-0x60-0x80)2=0Xea000000+0X3FE6=0Xea003FE6通常机器代码都是反汇编后自动产生的,因此不必真正如上述计算。(2)非向量中断模式处理方式是一种传统的中断处理方法,当系统产生中断的时候,系统将INTPND寄存器中对应标志位置位,然后跳转到位于0x18处的统一中断函数中;该函数通过读取INTPND寄存器中对应标志位来判断中断源,并根据优先级关系再跳到对应中断源的处理代码中处理中断。2、向量中断和非向量中断模式的详细源码分析(1)向量中断在1中讲到当发生IRQ中断时,中断控制器会在数据总线上加载分支指令跳到相应中断源的向量地址,即一级中断向量表中对应的中断向量入口地址。ldr pc,=HandlerEINT0 ; 0x20ldr pc,=HandlerEINT1ldr pc,=HandlerTIMER0 ; 0x60ldr pc,=HandlerTIMER1ldr pc,=HandlerADC ; 0xb4由上述代码可知,程序会跳转到HandlerXXX中,定义如下:HandlerFIQ HANDLER HandleFIQHandlerIRQ HANDLER HandleIRQHandlerUndef HANDLER HandleUndefHandlerSWI HANDLER HandleSWIHandlerDabort HANDLER HandleDabortHandlerPabort HANDLER HandlePabortHandlerADC HANDLER HandleADCHandlerRTC HANDLER HandleRTCHandlerEINT1 HANDLER HandleEINT1HandlerEINT0 HANDLER HandleEINT0HandlerXXX HANDLER HandleXXX为一个汇编宏,定义如下:MACRO$HandlerLabel HANDLER $HandleLable$HandlerLabel ;由于ADS仅支持FD(满递减)型堆栈 sub sp,sp,#4 ;将堆栈退一个字用于保存下面用到的R0 stmfd sp!,r0 ;将R0压入堆栈 ldr r0,=$HandleLabel ;将HandleLabel的地址赋给R0 ldr r0,r0 ;将HandleLabel的地址指向的内容(实际的执行地址)赋给R0 str r0,sp,#4 ;将对应的中断函数首地址入栈保护 ldmfd sp!,r0,pc ;将中断函数的首地址出栈,放入PC中,系统将跳转到 对应中断处理函数 MEND由上宏定义可知,程序又跳到HandleXXX中执行,即二级中断向量表中的地址。为此综上所述,便可跳到对应的中断服务子程序地址,执行中断!(2)非向量中断前面讲过,一旦产生IRQ中断,微控制器会切换到IRQ模式,并且跳转到一级向量表0x0000018地址处执行程序;而FIQ则跳到0x000001C地址处。即ENTRY b ResetHandler ;复位异常 0x0000 0000 b HandlerIRQ ;外部中断 0x0000 0018 b HandlerFIQ ;快速中断 0x0000 001C 然后跳转到宏HandlerIRQ HANDLER HandleIRQ或 HandlerFIQ HANDLER HandleFIQ。由以下代码可知,HandleIRQ最终对应的是IsrIRQ地址标号。 ;* ;* Setup IRQ handler * ;* ldr r0,=HandleIRQ ;This routine is needed ldr r1,=IsrIRQ ;if there is not subs pc,lr,#4 at 0x18, 0x1c str r1,r0上述代码位于ResetHandler为标号的汇编代码段内,板子上电或复位后,都要从位于0x0执行b ResetHandler 的指令跳转到ResetHandler为标号的汇编代码段处执行,也就将HandleIRQ初始化为IsrIRQ。IsrIRQ代码段如下:IsrIRQ ;using I_ISPR register. sub sp,sp,#4 ;reserved for PC stmfd sp!,r8-r9 ;IMPORTANT CAUTION ;if I_ISPC is not used properly, I_ISPR can be 0 in this routine. ldr r9,=I_ISPR ldr r9,r9 cmp r9, #0x0 ;If the IDLE mode work-around is used, r9 may be 0 sometimes. beq %
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国鸡蛋深加工项目创业计划书
- 中国尿钙目测试纸项目创业计划书
- 中国高频手术电刀项目创业计划书
- 中国AIDC项目创业计划书
- 餐饮加盟店加盟商培训合同范本
- 网络小额贷款逾期催收协议
- 2025数字化图书借阅点加盟合同正式版
- 2025茶叶采购合同范本 采购合同范本
- 没有合同怎么网签协议书
- 基层竞聘考试题库及答案
- 夏季三防知识培训课件
- 雷雨剧本文件完整版电子书下载
- 血液透析患者皮肤护理
- 2025年家庭照护者、健康照护师岗位专业技能资格知识考试题(附答案)
- 智能医疗影像辅助诊断系统技术要求和测试评价方法
- 护栏安装工作总结
- 小区弱电施工组织设计及施工方案
- 工业机器人系统操作员(中级) 课件 刘志辉 项目1 机械系统装调
- 煤矿心理疏导培训课件
- 绿色城市旅游丽江古城景区介绍
- 2025届山西省长治市市级名校中考生物全真模拟试题含解析
评论
0/150
提交评论