欢迎来到天天文库
浏览记录
ID:38049991
大小:33.50 KB
页数:4页
时间:2019-05-24
《ARM中断分析一》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ARM中断分析一 首先ARM芯片要中断设置要是能中断向量,然后当有IRQ中断来之后,CPU自动的到0x18地址处取指。0x18处的指令呢是CPU根据中断源算好的(比如:中断EINT4567来了,那么0x18处的指令就是跳转到地址0x30处)。然后就执行“ldr pc,=HandlerEINT4567”这条指令。这条指令的执行结果就是跳转到“HandlerEINT4567HANDLERHandleEINT4567”处执行。这条是宏指令,你可以看一下宏定义。执行结果就是跳转到HandleEINT4567处执行。 那么HandleEINT4567
2、处又是什么指令呢?这就要联系44b.h文件的#definepISR_EINT4567 (*(unsigned *)(_ISR_STARTADDRESS+0x74))定义看了。 HandleEINT4567处的地址就是“_ISR_STARTADDRESS+0x74”。到此还不知道这个地址对应的指令是什么。这时候就要去看Target.c文件的中断初始化了,其中pISR_EINT4567=(unsigned)OSEINT4567ISR;这条语句就解释了中断去向何处。 OSEINT4567ISR就是在OS_CPU_A.s里面定义的中断处理程序了。一、关于44
3、B0中断系统 44B0中断系统中有两张中断转移表,经过二重转移才跳到中断处理程序。第一张中断向量表由硬件决定,所在区域为ROM(flash),地址空间从0X00开始,其中0X00-0X1C为异常向量入口地址,0X20-0XC0为中断向量入口地址。另一张中断向量表在RAM中,可以随便改,其位置在程序连接后才定。二、如何从第一张中断向量表跳到第二张中断向量表 由于RAM放在地址空间的高端(距离中断向量超过了32M),故在第一张中断向量表对应位置上写上 ldrPC,#interrupt_service 如:ldrPC,=HandlerEINT4567 三、
4、如何在启动程序中设置异常向量,中断向量表 如何把C语言中的一个中断函数对应到汇编的中断向量表中,示意图及举例如下:#define_ISR_STARTADDRESS 0xc7fff00 //GCS6:16MbitDRAM/SDRAM #definepISR_EINT4567(*(unsigned*)(_ISR_STARTADDRESS+0x74)) .macroHANDLERHandleLabel sub sp,sp,#4 stmfd sp!,{r0} ldr r0,=HandleLabel ldr r
5、0,[r0] str r0,[sp,#4] ldmfd sp!,{r0,pc} .endm .text ENTRY: bResetHandler ……VECTOR_BRANCH: ldrpc,=HandlerEINT0 …… ldrpc,=HandlerEINT4567 /*0x30 */ HandlerEINT4567:HANDLERHandleEINT4567 .equHandleEINT4567,_ISR_STARTADDRESS+4*29 把C语言中的一个中断函数对应到汇编的
6、中断向量表中 pISR_EINT4567=(int)Eint4567Isr; 其实异常向量就是中断向量,ARM7的内核实际上只有8个(1个保留)异常向量,对于众多的中断源,ARM7的内核是通过IRQ、FRQ的软件查询中断状态寄存器的位来获得ISR的起始地址。而44B0为了克服这种方式所带来的中断延迟,就加入了更多的中断向量表(0x20到0xc0),要使用这种方式,必须在中断控制寄存器中设置每个中断源的方式为IRQ方式,且使用向量中断。 S3C44B0X的中断控制器有30个中断源。S3C44B0X支持新的中断处理模式称为(vectoredinte
7、rruptmode),在多个中段请求发生时,由硬件优先级逻辑确定应该有哪个中断得到服务,同时硬件逻辑使中断相量表的跳转指令加载到(0X18或0X1C)位置,在该位置执行跳转指令使程序跳到相应的中断服务线程,因此相对与传统的ARM的软件方法能够大大减少中断进入延时。有两种类型的中断模式,FIQ (快速中断)和IRQ.所有的中断源在中断请求时应该确定使用的中断模式。在网络上广为流传的44b0开发板例程中,大部分使用的都是IRQ中断模式(请查阅寄存器rINTCON)。 一般来讲,使用44b0开发板进行调试时,无需更改44b.h,44blib.h,def.h,o
8、ption.h,44binit.s,4
此文档下载收益归作者所有