中断分析及程序2008.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中断分析及程序2008

中断分析及程序 2008-09-18 10:59 分类: HYPERLINK /blog/static/22727837200881810592140/ \l # ARM7学习 字号: HYPERLINK /blog/static/22727837200881810592140/ \l # 大? HYPERLINK /blog/static/22727837200881810592140/ \l # 中? HYPERLINK /blog/static/22727837200881810592140/ \l # 小 在设计涉及到外中断的时候,比如按键中断就要研究一下怎么编了: 这里对EINT4567研究: 首先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方式,且使用

文档评论(0)

bm5044 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档