2440 norflash 启动进不了中断解决
发布时间:2020-12-15 18:10:48 所属栏目:百科 来源:网络整理
导读:? 前一阵一直纠结一个问题,同样的中断测试程序,烧写到nandflash运行一点问题没有,烧到norflash启动就发生诡异现象了,今天终于发现问题在哪了,以前写程序的时候因为是从nandflash启动的,所以程序一开始在片内的4K sram 运行,我就把堆栈设置在sram的最
?
1.原来的代码,烧到nandflash里面的 head.s @本程序为定时器中断测试程序,使用0.5s发生一次的timer0中断 .text .global _start _start: b Reset b . @undefined instruction b . @swi b . @pregetch instruction b . @data abort b . @Reserved b HandleIRQ @irq b . @fiq Reset: ldr sp,=4096 @set the stack pointer of sys mode to 4096 bl disable_watchdog bl init_led mov r0,#1 bl blink bl init_sdram mov r0,#2 bl blink bl copy_sdram mov r0,#3 bl blink ldr pc,=on_sdram on_sdram: msr cpsr_c,#0xd2 @set cpu to irq mode ldr sp,=3072 @set the stack pointer of irq mode to 3072 msr cpsr_c,#0xdf @reset cpu to sys mode bl init_clock bl init_timer0 bl init_irq msr cpsr_c,#0x5f @enable irq bl main b . .ltorg .ltorg .ltorg HandleIRQ: sub lr,lr,#4 stmdb sp!,{r0-r12,lr} ldr lr,=next ldr pc,=timer0_func next: ldmia sp!,pc}^ @return to main .ltorg .ltorg
2. 修改后运行正确的代码,烧写到norflash head.s @本程序为定时器中断测试程序,使用0.5s发生一次的timer0中断 .text .global _start _start: b Reset b . @undefined instruction b . @swi b . @pregetch instruction b . @data abort b . @Reserved b HandleIRQ @irq b . @fiq Reset: ldr sp,=0x40001000 @set the stack pointer of sys mode to 0x40001000 bl disable_watchdog bl init_led mov r0,=0x40000c00 @set the stack pointer of irq mode to 0x40000400 msr cpsr_c,pc}^ @return to main .ltorg .ltorg
修改过后中断测试程序就可以正确运行了。? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |