这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 综合技术» 基础知识» AT91SAM7S64 请教:AT91SAM7S64启动文件问题

共2条 1/1 1 跳转至

AT91SAM7S64 请教:AT91SAM7S64启动文件问题

院士
2006-09-17 18:14:16 打赏
AT91SAM7S64 请教:AT91SAM7S64启动文件问题



关键词: AT91SAM7S64 请教 启动 文件 问题

院士
2006-12-22 22:43:00 打赏
2楼
问 在keil环境下,使用WWW.AT91.COM的例程,发现启动文件有下述问题,
需修改两行代码:即加注释的两行代码。

IRQ_Handler_Entry

;- Manage Exception Entry
;- Adjust and save LR_irq in IRQ stack
sub lr, lr, #4
stmfd sp!, {lr}

;- Save SPSR need to be saved for nested interrupt
mrs r14, SPSR
stmfd sp!, {r14}

;- Save and r0 in IRQ stack
stmfd sp!, {r0}

;- Write in the IVR to support Protect Mode
;- No effect in Normal Mode
;- De-assert the NIRQ and clear the source in Protect Mode
ldr r14, =AT91C_BASE_AIC
ldr r0 , [r14, #AIC_IVR]
str r14, [r14, #AIC_IVR]

;- Enable Interrupt and Switch in Supervisor Mode
msr CPSR_c, #Mode_SVC

;- Save scratch/used registers and LR in User Stack
stmfd sp!, { r1-r3, r12, r14}

;- Branch to the routine pointed by the AIC_IVR
; mov r14, pc
add r14, pc, #4 ;// 修改
bx r0

;- Restore scratch/used registers and LR from User Stack
msr CPSR_c, #Mode_SVC ;// 增加
ldmia sp!, { r1-r3, r12, r14}

;- Disable Interrupt and switch back in IRQ mode
msr CPSR_c, #I_Bit :OR: Mode_IRQ

;- Mark the End of Interrupt on the AIC
ldr r14, =AT91C_BASE_AIC
str r14, [r14, #AIC_EOICR]

;- Restore SPSR_irq and r0 from IRQ stack
ldmia sp!, {r0}

;- Restore SPSR_irq and r0 from IRQ stack
ldmia sp!, {r14}
msr SPSR_cxsf, r14

;- Restore adjusted LR_irq from IRQ stack directly in the PC
ldmia sp!, {pc}^

做上述修改后,可实现中断嵌套。
请版主指点,上述修改是否必要?

由于没有仿真器,调试不便,还请各位同仁多多帮忙!
谢了 1: 哦哦你的错了,你这就是画蛇添足,多看看书。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]