这是s3c44b0的部分启动代码:
.macro HANDLER HandleLabel
stmdb sp!, {r0-r11, ip, lr} /* push r0-r11, ip, lr */
ldr r0, =\HandleLabel
ldr r1, [r0]
mov lr, pc
bx r1 /* call interrupt routine */
ldmia sp!, {r0-r11, ip, lr} /* pop r0-r11, ip, lr */
subs pc, r14, #4 /* interrupt ret */
.endm
-----------------------------------------------------------
.text
ENTRY:
b ResetHandler /* for debug */
b HandlerUndef /* handlerUndef */
b HandlerSWI /* SWI interrupt handler*/
b HandlerPabort /* handlerPAbort */
b HandlerDabort /* handlerDAbort */
b . /* handlerReserved */
ldr pc, =HandlerIRQ
b HandlerFIQ
--------------------------------------------------------------
HandlerFIQ: HANDLER HandleFIQ
HandlerIRQ: HANDLER HandleIRQ
HandlerUndef: HANDLER HandleUndef
HandlerSWI: HANDLER HandleSWI
HandlerDabort: HANDLER HandleDabort
--------------------------------------------------------------
.equ HandleReset, _ISR_STARTADDRESS /* c7fff00 */
.equ HandleUndef, _ISR_STARTADDRESS+4
.equ HandleSWI, _ISR_STARTADDRESS+4*2
.equ HandlePabort, _ISR_STARTADDRESS+4*3
.equ HandleDabort, _ISR_STARTADDRESS+4*4
.equ HandleReserved, _ISR_STARTADDRESS+4*5
.equ HandleIRQ, _ISR_STARTADDRESS+4*6
.equ HandleFIQ, _ISR_STARTADDRESS+4*7
我想请教的是他是怎么根据宏来进入不同的中断服务程序的,比如说软中断,对于不同的目的,我想进入不同中断服务程序,怎么进入阿?
问题点数:40、回复次数:6Top
[url=]1 楼[/url]hcd007(猎人王)回复于 2006-12-17 00:50:25 得分 0 不太懂,不过软中断可以有不同的中断服务程序吗?
帮忙定一下!!
--------------------
嵌入式学习中...Top
[url=]2 楼[/url]fengzhiyi1(zhaoqingguo)回复于 2006-12-17 21:26:27 得分 0 怎么没人指点一下啊 期待中..Top
[url=]3 楼[/url]bygreen(bygreen)回复于 2006-12-19 14:00:11 得分 5应该还有个flag是存在寄存器里得,根据它判断进入不同得软中断Top
[url=]4 楼[/url]benjum(小木)回复于 2006-12-20 10:11:49 得分 25"HandlerFIQ:HANDLER HandleFIQ"
其中HANDLER是一个宏,用于查找中断处理程序的入口地址。这些地址存放在由HandleXXX指向的表项中,该表定位在RAM高端,基地址为_ISR_STARTADDRESS。
bootload中应该还有如下的 地址定义
_ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
................
我也刚学中断,个人理解_ISR_STARTADDRESS为中断向量表的基地址
假如_ISR_STARTADDRESS为 0x800000000,当IRQ中断时,根据b HandlerFIQ,先跳转
再根据^ _ISR_STARTADDRESS基地址+HandleIRQ 的偏移地址(4*6)得到的中断地址
0x80000000+0x00000024=0x80000024
我也不太确定,请各位高人指正了
我也不太确定,请各位高人指正了 |