近日想模仿三星的eboot程序添加usb下载功能到OMAP-L138平台的eboot程序上。学习了有关eboot中
添加IRQ中断的知识,但所写的代码无法触发中断。于是看到quickStartOMAPL1x_rCSL中
TIMER_interrupt_armL138例子用到了中断功能。
ARM9_intvecs.asm片段:
.sect ".intvecs"
INT_VECS: ; EXCEPTION ADDRESS
LDR PC, __c_int00 ;Reset Interrupt (0xFFFF0000)
.word 0 ;Undefined Instructions Interrupt (0xFFFF0004)
LDR PC, __SWI_handler ;Software Interrupt (0xFFFF0008)
.word 0 ;Prefetch Abort Interrupt (0xFFFF000C)
.word 0 ;Data Abort Interrupt (0xFFFF0010)
.word 0 ;Reserved For Future Expansion (0xFFFF0014)
; LDR PC, __IRQ_handler ;IRQ Interrupt (0xFFFF0018)
B IRQ_handler ;IRQ Interrupt (0xFFFF0018)
LDR PC, __FIQ_handler ;FIQ Interrupt (0xFFFF001C)
__c_int00 .long _c_int00
__SWI_handler .long SWI_handler
__IRQ_handler .long IRQ_handler
__FIQ_handler .long FIQ_handler
////////////////////////////////////////////////////////////////////
从生成的map文件可以看到IRQ_handler的地址为0x800042d4,FIQ_handler的地址为0x800042f8
从内存中读出来的值为:
Addr value
0xffff0000--0xe59ff018
0xffff0004--0x0
0xffff0008--0xe59ff014
0xffff000c--0x0
0xffff0010--0x0
0xffff0014--0x0
0xffff0018--0xea000004
0xffff001c--0xe59ff008
我想知道0xffff0018地址处的内容0xea000004是怎么计算出来的。
0xea000004中的0xea相当于B指令,这个已知。关键是0x000004是怎么计算出来的。
还有就是与之相似的0xffff001c地址内容0xe59ff008是怎么得出来的。