论文部分内容阅读
1 引言
ARM是一个采用RISC体系结构的IP处理器内核。众多的半导体厂商采用ARM内核加上自己的技术生产出种类繁多的微处理器芯片,如Atmel公司的AT91M55800A等。它们的汇编指令集是相同的,这给开发人员带来了极大方便。但是,由于生产厂商的不同,各种处理器之间的差别也很大,主要表现在地址重映射机制上。这是理解ARM体系结构最重要的地方,也是一个难点。
2 ARM地址重映射机制
ARM处理器的地址重映射机制可分为三种情况:(1)处理器内部有专门的寄存器完成Remap,只需将Remap寄存器相应位置“1”,由硬件逻辑来完成地址的重新映射。(2)没有专门的Remap控制寄存器,需要重新改写用于控制Memory起始地址的Bank寄存器,来实现Remap。(3)没有Remap寄存器,而Bank寄存器的起始地址固定,这就需要MMU实现地址重映射。另外,有一些ARM处理器没有地址重映射机制。
AT91M55800A采用一个专用寄存器EBI_RCR(重映射控制寄存器),启动代码需将FLASH中的中断向量拷贝到内部SRAM中,然后,执行重映射命令,把内部SRAM的地址重新映射到0x0的位置,而将FLASH的地址映射到其他位置,如0x01000000(由NCS0片选,配置EBI——CSR0寄存器)的位置。这样便可以在内部SRAM中0x0开始的位置修改中断向量。同时,为了保证程序执行流程的连续性,必须调整PC指针,即调整到程序真正被连接的地方(0x01000000)去。这时,程序仍在FLASH中运行。
3 S3C2410X的NAND flash启动
S3C2410X有两种启动方式:NOR flash启动和NAND flash启动。
NAND flash启动:NAND flash容量大,价格低,广泛应用于嵌入式系统中。S3C2410X集成了NAND flash控制器,可方便编程。但是,NAND flash随机读取速度慢,需专用I/O接口,只能存储程序,无法运行程序。为了能够从NAND flash启动,上电复位时,S3C2410X通过硬件逻辑把NAND flash的前4K的内容复制到片内SRAM中,而片内SRAM被映射到地址0x0,这样就可以从地址0x0处取到有效指令。因此,采用NAND flash启动时,必须利用片内SRAM中的代码把NAND flash中的程序代码复制到SDRAM中去。
上电复位时,引导代码由硬件逻辑复制到片内SRAM中,于是,ARM所要求的连续8个字的中断向量表就位于0x0地址开始的连续空间内。接着从第一条指令开始执行,除了一些必要的初始化以及设置中断向量表,它把NAND flash中第一块开始的程序代码复制到起始地址为0x3000,0000的SDRAM中。地址0x3000,0000既是RO_Base的地址,也是SDRAM在整个地址空间的起始地址。复制完成后,引导代码也该结束退出了,退出之前需调整PC指针,为了简单起见,把PC指针直接调整到地址0x3000,0000,即从应用程序的启动代码开始执行。需要注意的是,引导代码把中断向量表复制到SDRAM中_ISR_STARTADDRESS处即地址0x30ffffff,而应用程序的启动代码也把中断向量表复制到SDRAM中同一地址_ISR_STARTADDRESS处。这样,当异常发生时,PC指针首先跳到地址0x0开始8个字的异常向量表,这是在片内SRAM中,是在引导代码里。接着,跳到SDRAM中的中断向量表,这是在应用程序里,然后转到中断处理程序,PC指针的跳转跨越了两部分程序。
实现复制和PC指针调整的代码如下 :
IMPORTnand_read_ll
;引入外部C函数
ldr r0, =SDRAM_Base_Address
;r0指向SDRAM的基地址,即地址0x3000,0000
mov r1, =APP_Start_ Address
;r1指向NAND_Flash中应用程序的开始地址
;即第1块的开始地址
mov r2, =APP_End_ Address
;r2指向NAND_Flash中应用程序的结束地址
bl nand_read_ll
;调用复制函数开始复制
ldr r12,=SDRAM_Base_Address
mov pc, r12
;pc指向SDRAM的基地址
;引导代码到此结束,接着从应用程序启动代码的第一条语句开始执行。
同样道理,NOR flash启动也可以采用这种方式,不同的是,引导代码在NOR flash中,它把NOR flash中的程序代码复制到SDRAM中,然后,也是跳到SDRAM中开始执行。
4 总结
采用NAND flash启动,可以节省NOR flash芯片,即降低成本、功耗,又减小电路板尺寸。本文实现的引导代码为采用NAND flash启动提供了一种简单可行的方法。
参考文献
[1]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
[2]曹伟,等.地址重映射在S3C4510B系统中的实现[J].单片机与嵌入式系统应用.2004.3.
[3]费浙平.基于ARM的嵌入式系统程序开发要点(二)[J].单片机与嵌入式系统应用.2003.9.
ARM是一个采用RISC体系结构的IP处理器内核。众多的半导体厂商采用ARM内核加上自己的技术生产出种类繁多的微处理器芯片,如Atmel公司的AT91M55800A等。它们的汇编指令集是相同的,这给开发人员带来了极大方便。但是,由于生产厂商的不同,各种处理器之间的差别也很大,主要表现在地址重映射机制上。这是理解ARM体系结构最重要的地方,也是一个难点。
2 ARM地址重映射机制
ARM处理器的地址重映射机制可分为三种情况:(1)处理器内部有专门的寄存器完成Remap,只需将Remap寄存器相应位置“1”,由硬件逻辑来完成地址的重新映射。(2)没有专门的Remap控制寄存器,需要重新改写用于控制Memory起始地址的Bank寄存器,来实现Remap。(3)没有Remap寄存器,而Bank寄存器的起始地址固定,这就需要MMU实现地址重映射。另外,有一些ARM处理器没有地址重映射机制。
AT91M55800A采用一个专用寄存器EBI_RCR(重映射控制寄存器),启动代码需将FLASH中的中断向量拷贝到内部SRAM中,然后,执行重映射命令,把内部SRAM的地址重新映射到0x0的位置,而将FLASH的地址映射到其他位置,如0x01000000(由NCS0片选,配置EBI——CSR0寄存器)的位置。这样便可以在内部SRAM中0x0开始的位置修改中断向量。同时,为了保证程序执行流程的连续性,必须调整PC指针,即调整到程序真正被连接的地方(0x01000000)去。这时,程序仍在FLASH中运行。
3 S3C2410X的NAND flash启动
S3C2410X有两种启动方式:NOR flash启动和NAND flash启动。
NAND flash启动:NAND flash容量大,价格低,广泛应用于嵌入式系统中。S3C2410X集成了NAND flash控制器,可方便编程。但是,NAND flash随机读取速度慢,需专用I/O接口,只能存储程序,无法运行程序。为了能够从NAND flash启动,上电复位时,S3C2410X通过硬件逻辑把NAND flash的前4K的内容复制到片内SRAM中,而片内SRAM被映射到地址0x0,这样就可以从地址0x0处取到有效指令。因此,采用NAND flash启动时,必须利用片内SRAM中的代码把NAND flash中的程序代码复制到SDRAM中去。
上电复位时,引导代码由硬件逻辑复制到片内SRAM中,于是,ARM所要求的连续8个字的中断向量表就位于0x0地址开始的连续空间内。接着从第一条指令开始执行,除了一些必要的初始化以及设置中断向量表,它把NAND flash中第一块开始的程序代码复制到起始地址为0x3000,0000的SDRAM中。地址0x3000,0000既是RO_Base的地址,也是SDRAM在整个地址空间的起始地址。复制完成后,引导代码也该结束退出了,退出之前需调整PC指针,为了简单起见,把PC指针直接调整到地址0x3000,0000,即从应用程序的启动代码开始执行。需要注意的是,引导代码把中断向量表复制到SDRAM中_ISR_STARTADDRESS处即地址0x30ffffff,而应用程序的启动代码也把中断向量表复制到SDRAM中同一地址_ISR_STARTADDRESS处。这样,当异常发生时,PC指针首先跳到地址0x0开始8个字的异常向量表,这是在片内SRAM中,是在引导代码里。接着,跳到SDRAM中的中断向量表,这是在应用程序里,然后转到中断处理程序,PC指针的跳转跨越了两部分程序。
实现复制和PC指针调整的代码如下 :
IMPORTnand_read_ll
;引入外部C函数
ldr r0, =SDRAM_Base_Address
;r0指向SDRAM的基地址,即地址0x3000,0000
mov r1, =APP_Start_ Address
;r1指向NAND_Flash中应用程序的开始地址
;即第1块的开始地址
mov r2, =APP_End_ Address
;r2指向NAND_Flash中应用程序的结束地址
bl nand_read_ll
;调用复制函数开始复制
ldr r12,=SDRAM_Base_Address
mov pc, r12
;pc指向SDRAM的基地址
;引导代码到此结束,接着从应用程序启动代码的第一条语句开始执行。
同样道理,NOR flash启动也可以采用这种方式,不同的是,引导代码在NOR flash中,它把NOR flash中的程序代码复制到SDRAM中,然后,也是跳到SDRAM中开始执行。
4 总结
采用NAND flash启动,可以节省NOR flash芯片,即降低成本、功耗,又减小电路板尺寸。本文实现的引导代码为采用NAND flash启动提供了一种简单可行的方法。
参考文献
[1]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
[2]曹伟,等.地址重映射在S3C4510B系统中的实现[J].单片机与嵌入式系统应用.2004.3.
[3]费浙平.基于ARM的嵌入式系统程序开发要点(二)[J].单片机与嵌入式系统应用.2003.9.