我在汇编下写的安装中断服务程序,在把中断服务函数的地址拷贝到中断向量表的时候,总是读取中断向量表的地址是错的,具体的程序如下:
----------------------------
;文件名:option.inc
SDRAM_END EQU 0x34000000
;Start address of each stacks
_STACK_BASEADDRESS EQU (SDRAM_END - 0x8000) ;0x33ff8000
.............
----------------------------
定义了宏_STACK_BASEADDRESS。这个文件被引导程序init.s所包含。在init.s会调用安装中断函数,在testeint0.s 文件中。
----------------------------
;文件名:isr.inc
pISR_RESET EQU (_ISR_STARTADDRESS+0x0)
pISR_UNDEF EQU (_ISR_STARTADDRESS+0x4)
pISR_SWI EQU (_ISR_STARTADDRESS+0x8)
pISR_PABORT EQU (_ISR_STARTADDRESS+0xc)
pISR_DABORT EQU (_ISR_STARTADDRESS+0x10)
pISR_RESERVED EQU (_ISR_STARTADDRESS+0x14)
pISR_IRQ EQU (_ISR_STARTADDRESS+0x18)
pISR_FIQ EQU (_ISR_STARTADDRESS+0x1c)
pISR_EINT0 EQU (_ISR_STARTADDRESS+0x20) ;0x33ff8020
;pISR_EINT0 EQU (0x34000000-0x8000+0x20) ;0x33ff8020
----------------------------
定义了宏pISR_EINT0。
-----------------------------
;文件名:testeint0.s 安装中断的函数
GET option.inc ;定义了宏_ISR_STARTADDRESS
GET isr.inc ;定义了中断向量表地址
....................
IMPORT Eint0Handler ;中断服务函数
AREA MainCode, CODE, READONLY
.......................
ldr r0, =Eint0Handler
ldr r1, =pISR_EINT0 ;<------就是这句
str r0, [r1]
.....................
------------------------------
在isr.cin中当我用pISR_EINT0 EQU (0x34000000-0x8000+0x20)这句的时候
读到r1的地址应该是正确地址(0x33ff8020)。
当我用pISR_EINT0 EQU (_ISR_STARTADDRESS+0x20) ;0x33ff8020这句的时候读到r1的地址就是(0x33ffff20)。
请问这是什么原因,能否具体的说下。