写LPC2220的BOOT遇到了应用程序不发生中断的问题

wangkekill   2008-8-18 16:31 楼主
在用LPC2220写BOOTLOAD时,处理中断上碰到了麻烦,我本意是在BOOT的IRQ中断地址(外部FLASH0x80000018)让他跳转到外部的RAM(0x81000018,应用程序拷贝到0X81000000后部),然后由应用程序的中断再做处理。
中断表映射设置的都是由外部,即外部FLASH,先到外部FLASH的BOOT,然后靠代码跳转到应用程序的中断表。
BOOT程序:
   。。。。
   ;中断向量表
Reset
。。。
LDR     PC, IRQ_Addr
        LDR     PC, FIQ_Addr
        。。。
        IRQ_Addr            DCD     0x81000018//这样就跳转到外部RAM的中断表中了
        FIQ_Addr            DCD     0x8100001c

APP程序:

    LDR     PC, IRQ_Addr
    ...
    IRQ_Addr            DCD     IRQ_Handler
FIQ_Addr            DCD     FIQ_Handler
......
;IRQ中断
IRQ_Handler
        STMFD   SP!, {R0-R3, LR}
        mov r0,#0x020
        ldr pc,[r0,#-0x0ff0]//这样就进入了VIC向量中断处理了
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4
//以上想法应该 什么问题,但始终应用程序无法发生中断,请问是什么原因造成的?是不是LDR跳转不了这么大的范围?  

另一个问题,我在BOOT中没做中断跳转,而是还是指向向量中断,这样不管BOOT还是应用程序都可用向量中断了:
    LDR     PC, [pc,#-0xff0]
但现在问题出来了,应用程序中我试了下直接在ADS中设置运行地址还是用分散加载的方法,两种方法都发现,一定不能使得STARTUP.O的vectors放程序的最前面,就是在分散加载文件中(Startup.o (vectors, +First)这句),不能用这句,如果加了该句应用程序进不了中断处理,ADS设置中设置ARM Linker中的Layout项中的object/symbol 和section也起到同样作用,同样不能设置,已设置了就进不了中断。

请各位牛人能指点一二。谢谢!

        

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复