阅读:1499回复:2
求助:ARM从ROM中启动的问题
当ARM从ROM中启动的时候,ROM的起始地址为0x00000000,当ROM和RAM的初始化完成之后,ROM的起始地址为0x02000000。
那么,这个REMAP的过程是怎样实现的,同时还能保证代码的执行不受影响? 我看了一个示例代码,但是看不太懂。 哪位大虾能解释一下这段代码,谢谢! Reset_Handler_ROM: ## if ((*NCC_MEM).mem_cs0_csar.bits.v == 1) LDR R0, =MEM_CS0_CSAR LDR R1, [R0] ANDS R1, R1, #1 BEQ Reset_Handler ## if ((*NCC_MEM).mmcr.bits.refcnt != 0) LDR R0, =MEM_MMCR LDR R1, =MEM_MMCR_m LDR R2, [R0] ANDS R2, R2, R1 BNE Reset_Handler LDR R0, =0x2000000 CMP R0, PC BLT Reset_Handler ADD R0, PC, R0 BX R0 # We now need to normalize the PC to the ROM Base address ## if the ROM base address is cacheable. Cacheable ROM lives # above address 0x0a000000 LDR R0, =0x2000000 LDR R1, =0x0a000000 CMP R0, R1 BNE Reset_Handler LDR R1, =0x08000000 ADD R0, PC, R1 BX R0 .globl Reset_Handler Reset_Handler: # First we need to initialize the Mode and disable interrupts. |
|
|
沙发#
发布于:2003-05-24 19:02
重新设置memory CS片选的值,就可以实现重新映射到新的地址上了
具体CS值则要看文档了 还有重映射后,要保证你的代码的执行地址和映射地址相匹配 |
|
板凳#
发布于:2003-05-25 11:58
LDR R0, =0x2000000
CMP R0, PC BLT Reset_Handler ADD R0, PC, R0 BX R0 这段代码的作用应该是将当前的PC值加了0x2000000 现在的问题是,在没有设置CS之前,ROM的基地址是0 而0x2000000这个地址是没有内容的,那么程序如何继续执行下去呢? |
|
|