44B0中断分析.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
44B0中断分析

44B0 中断分析 (一)?????? ?????? 首先 ARM 芯片要中断设置要使能中断向量,然后当有 IRQ 中断来之后,CPU自动的到0x18地址处取指。0x18处的指令呢是CPU 根据中断源算好的(比如:中断 EINT4567 来了,那么 0x18 处的指令就是跳转到地址 0x30 处)。然后就执行“ldr? pc,=HandlerEINT4567”这条指令。这条指令的执行结果就是跳转到 “HandlerEINT4567 HANDLER HandleEINT4567”处执行。这条是宏指令,你可以看一下宏定义。执行结果就是跳转到HandleEINT4567 处执行。 ??????? 那么 HandleEINT4567 处又是什么指令呢?这就要联系 44b.h 文件的#define pISR_EINT4567? (*(unsigned? *)(_ISR_STARTADDRESS+0x74)) 定 义 看 了。 ?????? HandleEINT4567 处的地址就是“_ISR_STARTADDRESS+0x74”。到此还不知道这个地址对应的指令是什么。 这时候就要去看Target.c文件的中断初始化了,其中pISR_EINT4567= (unsigned) OSEINT4567ISR;这条语句就解释了中断去向何处。? OSEINT4567ISR 就是在OS_CPU_A.s 里面定义的中断处理程序了。 一、 关于44B0中断系统 ?? 44B0 中断系统中有两张中断转移表,经过二重转移才跳到中断处理程序。第一张中断向量表由硬件决定,所在区域为ROM(flash),地址空间从0X00开始,其中0X00-0X1C为异常向量入口地址,0X20-0XC0为中断向量入口地址。另一张中断向量表在RAM 中,可以随便改,其位置在程序连接后才定。 二、 如何从第一张中断向量表跳到第二张中断向量表 ??? 由于 RAM 放在地址空间的高端(距离中断向量超过了 32M),故在第一张中断向量表对应位置上写上? ?? ldr PC,# interrupt_service? 如:ldr PC,=HandlerEINT4567? 三、如何在启动程序中设置异常向量,中断向量表 ???? 如何把 C 语言中的一个中断函数对应到汇编的中断向量表中,示意图及举例如下: #define _ISR_STARTADDRESS?? 0xc7fff00???? //GCS6:16M bit DRAM/SDRAM? #define pISR_EINT4567 (*(unsigned *)(_ISR_STARTADDRESS+0x74))? .macro HANDLER HandleLabel? sub????? sp, sp, #4????? stmfd?? sp!, {r0}?????? ldr????? r0,=\HandleLabel? ldr????? r0, [r0]?????? str????? r0, [sp,# 4]????? ldmfd?? sp!, {r0,pc}?????? .endm? .text? ENTRY:? ??? b ResetHandler? …… VECTOR_BRANCH:? ?? ldr pc,=HandlerEINT0? ……??? ?? ldr pc,=HandlerEINT4567????? /* 0x30? */??? HandlerEINT4567:HANDLER HandleEINT4567? .equ HandleEINT4567, _ISR_STARTADDRESS+4*29? ??? ?? 把C语言中的一个中断函数对应到汇编的中断向量表中? ?? pISR_EINT4567 = (int)Eint4567Isr;?? 其实异常向量就是中断向量,ARM7的内核实际上只有8个(1个保留)异常向量,对于众多的中断源,ARM7 的内核是通过 IRQ、FRQ 的软件查询中断状态寄存器的位来获得ISR的起始地址。而44B0为了克服这种方式所带来的中断延迟,就加入了更多的中断向量表(0x20到0xc0),要使用这种方式,必须在中断控制寄存器中设置每个中断源的方式为IRQ 方式,且使用向量中断。? ?????S3C44B0X 的中断控制器有 30 个中断源。S3C44B0X 支持新的中断处理模式称为(vectored interrupt mode),在多个中段请求发生时,由硬件优先级逻辑确定应该有哪个中断得到服务,同时硬件逻辑使中断相量表的跳转指令加载到(0X18或0X1C)位置,在该位置执行跳转指令使程序跳到相应的中断服务线程,因此相对与传统的ARM 的软件方法能

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档