这段时间调试44B0,对44B0的中断系统有了一定的了解。现归纳为以下几点,与大家共享,希望对大家有所帮助。
一、 关于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;
|
|