在用LPC2220写BOOTLOAD时,处理中断上碰到了麻烦,我本意是在BOOT的IRQ中断地址(外<br />部FLASH0x80000018)让他跳转到外部的RAM(0x81000018,应用程序拷贝到0X81000000后<br />部),然后由应用程序的中断再做处理。<br />中断表映射设置的都是由外部,即外部FLASH,先到外部FLASH的BOOT,然后靠代码跳转到<br />应用程序的中断表。<br />BOOT程序:<br /> 。。。。<br /> ;中断向量表<br />Reset<br />。。。 <br />LDR PC, IRQ_Addr<br /> LDR PC, FIQ_Addr<br /> 。。。<br /> IRQ_Addr DCD 0x81000018//这样就跳转到外部RAM的中断表中了<br /> FIQ_Addr DCD 0x8100001c<br /><br />APP程序:<br /><br /> LDR PC, IRQ_Addr<br /> ...<br /> IRQ_Addr DCD IRQ_Handler<br />FIQ_Addr DCD FIQ_Handler<br />......<br />;IRQ中断<br />IRQ_Handler<br /> STMFD SP!, {R0-R3, LR}<br /> mov r0,#0x020<br /> ldr pc,[r0,#-0x0ff0]//这样就进入了VIC向量中断处理了<br /> LDMFD SP!, {R0-R3, LR}<br /> SUBS PC, LR, #4<br /> //以上想法应该 什么问题,但始终应用程序无法发生中断,请问是什么原因造成的?是<br />不是LDR跳转不了这么大的范围? <br /> <br /> 另一个问题,我在BOOT中没做中断跳转,而是还是指向向量中断,这样不管BOOT还是应用<br />程序都可用向量中断了:<br /> LDR PC, [pc,#-0xff0] <br /> 但现在问题出来了,应用程序中我试了下直接在ADS中设置运行地址还是用分散加载的方<br />法,两种方法都发现,一定不能使得STARTUP.O的vectors放程序的最前面,就是在分散加<br />载文件中(Startup.o (vectors, +First)这句),不能用这句,如果加了该句应用程序进<br />不了中断处理,ADS设置中设置ARM Linker中的Layout项中的object/symbol 和section也<br />起到同样作用,同样不能设置,已设置了就进不了中断。<br /> <br /> 请各位牛人能指点一二。谢谢!<br /> |
|