本人用的是s3c2440:
1.我知道在nand下,会把0x0处的4k代码复制到internal sram(steppingstone)中执行,nor是以XIP方式启动的,那在nor下0x40000000处的internal sram 还有用吗?
2.我在nand下,把程序下到sdram中执行,然后复制中断表到0x0处,运行正常,而在nor下,把程序下到sdram中执行,然后复制中断表到0x0处,中断就是挂不上,跟踪一下,0x0处写不进去,不知道为什么,执行到while(1);时,sdram中的数据全没了
(是不是因为nor下,0x0没有映射到internal sram,所以程序无法写入,只能通过烧写才行?)
3.我的目的只想 在nor下用supervivi把程序下到sdram中运行 复制中断表 挂接上中断后 方便以后测试程序 但现在中断老是调不通。。。
启动代码我是这么写的:
;中断表
vector_table
ldr pc, handler_reset_addr ; handler for reset mode
ldr pc, handler_undef_addr ; handler for undefined mode
ldr pc, handler_swi_addr ; handler for swi interrupt
ldr pc, handler_pabort_addr ; handler for prefetch abort
ldr pc, handler_dabort_addr ; handler for data abort
ldr pc, handler_reserved_addr ; reserved
ldr pc, handler_irq_addr ; handler for irq interrupt
ldr pc, handler_fiq_addr ; handler for fiq interrupt
handler_reset_addr dcd handler_reset
handler_undef_addr dcd handler_undef
handler_swi_addr dcd handler_swi
handler_pabort_addr dcd handler_pabort
handler_dabort_addr dcd handler_dabort
handler_reserved_addr dcd 0
handler_irq_addr dcd handler_irq
handler_fiq_addr dcd handler_fiq
; 复制中断表
adr r8, vector_table ; source
ldr r9, = 0x00000000 ; destination, 还是0x40000000?
ldmia r8!, {r0-r7} ; load vectors
stmia r9!, {r0-r7} ; store vectors
ldmia r8!, {r0-r7} ; load handler addresses
stmia r9!, {r0-r7} ; store handler addresses
我对 他们之间的关系 还有点不明白 特别是在nor启动的情况下, 到底怎么启动的? 怎么访问中断的? 在0x40000000处的internal ram还用什么用?。。。那位大虾能否帮我理清一下思路,在此感谢。。。 |