在《ARM 微控制器基础与实践》中的157 页,在0X0000018 处加LDR PC,[PC,#-0XFF0]
为什么就会将VICVectAddr 寄存器中保存的地址装入PC
A:like this:
VICVectAddr = 0xFFFFF030
0x00000018+0x08-0xFF0 = 0xFFFFF030
therefore PC = [FFFFF030]
A:为什么不能进入中断,init.s,target.c 都是贵公司的提供的启动代码!!!
向量的初始化为:
Vectors
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xB8A06F58
LDR PC, [PC,#-0xff0]
LDR PC, FIQ_Addr
ResetAddr DCD Reset
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD 0
FIQ_Addr DCD FIQ_Handler
Undefined
B Undefined
SoftwareInterrupt
B SoftwareInterrupt
PrefetchAbort
B PrefetchAbort
DataAbort
B DataAbort
FIQ_Handler
STMFD SP!, {R0-R3, LR}
BL FIQ_Exception
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
主程序如下:
void __irq IRQ_Handler(void)
{
}
void __irq Time1_Handler(void)
{
}
int main(void)
{
.
.
.
T0PR = 99;
T0MCR = 0x03;
T0MR0 = 110592/2;
T0TCR = 0x03;
T1PR = 99;
T1MCR = 0x03;
T1MR0 = 70000;
T1TCR = 0x03;
T0TCR = 0x01;
T1TCR = 0x01;
VICIntSelect = 0x00000000;
VICIntEnable = 0x00000030;
VICVectCntl0 = 0x00000022;
VICVectAddr0 = (int)IRQ_Handler;
VICVectCntl1 = 0x0000002f;
VICVectAddr1 = (int)Time1_Handler;
while(1);
}
提问时间:2009-11-6 10:07:25
我也来回答:





