2440 norflash 启动进不了中断解决

来源:互联网 发布:淘宝店铺诊断分析报告 编辑:程序博客网 时间:2024/05/01 20:03
 


前一阵一直纠结一个问题,同样的中断测试程序,烧写到nandflash运行一点问题没有,烧到norflash启动就发生诡异现象了,今天终于发现问题在哪了,以前写程序的时候因为是从nandflash启动的,所以程序一开始在片内的4K sram 运行,我就把堆栈设置在sram的最后面,sp设置为地址4096,但是现在是从norflash启动的,sram已经映射到0x40000000开始的地方了,所以原来的基于nandflash启动的代码中的堆栈指针地址必须进行修改,程序运行就没有问题了,下面把修改前后的代码记录下来:

1.原来的代码,烧到nandflash里面的

head.s

@本程序为定时器中断测试程序,使用0.5s发生一次的timer0中断.text.global _start_start:bResetb. @undefined instructionb. @swib. @pregetch instructionb. @data abortb. @ReservedbHandleIRQ @irqb. @fiqReset:ldrsp, =4096 @set the stack pointer of sys mode to 4096bldisable_watchdogblinit_ledmovr0, #1blblinkblinit_sdrammovr0, #2blblinkblcopy_sdrammovr0, #3blblinkldrpc, =on_sdramon_sdram:msrcpsr_c, #0xd2 @set cpu to irq modeldrsp, =3072 @set the stack pointer of irq mode to 3072msrcpsr_c, #0xdf @reset cpu to sys modeblinit_clockblinit_timer0blinit_irqmsrcpsr_c, #0x5f @enable irqbl mainb..ltorg.ltorg.ltorgHandleIRQ:sublr, lr, #4stmdbsp!, {r0-r12, lr}ldrlr, =nextldrpc, =timer0_funcnext:ldmiasp!, {r0-r12, pc}^ @return to main.ltorg.ltorg


 

2. 修改后运行正确的代码,烧写到norflash

head.s

@本程序为定时器中断测试程序,使用0.5s发生一次的timer0中断.text.global _start_start:bResetb. @undefined instructionb. @swib. @pregetch instructionb. @data abortb. @ReservedbHandleIRQ @irqb. @fiqReset:ldrsp, =0x40001000 @set the stack pointer of sys mode to 0x40001000bldisable_watchdogblinit_ledmovr0, #1blblinkblinit_sdrammovr0, #2blblinkblcopy_sdrammovr0, #3blblinkldrpc, =on_sdramon_sdram:msrcpsr_c, #0xd2 @set cpu to irq modeldrsp, =0x40000c00 @set the stack pointer of irq mode to 0x40000400msrcpsr_c, #0xdf @reset cpu to sys modeblinit_clockblinit_timer0blinit_irqmsrcpsr_c, #0x5f @enable irqbl mainb..ltorg.ltorg.ltorgHandleIRQ:sublr, lr, #4stmdbsp!, {r0-r12, lr}ldrlr, =nextldrpc, =timer0_funcnext:ldmiasp!, {r0-r12, pc}^ @return to main.ltorg.ltorg


 

修改过后中断测试程序就可以正确运行了。 

原创粉丝点击