📄 norflash_bootloader.s
字号:
;********************************************************************************************
;*filename: boot.s
;*author: WUER xiao
;*create date: 2008-6-17 9:25
;*description: This file is used for 16 bit NOR FLASH bootloader
;*modify history:
;*misc:
;********************************************************************************************
PMU_PLTR EQU 0x10001000 ; PLL的稳定过渡时间
PMU_PMCR EQU 0x10001004 ; 系统主时钟PLL的控制寄存器
PMU_PUCR EQU 0x10001008 ; USB时钟PLL的控制寄存器
PMU_PCSR EQU 0x1000100C ; 内部模块时钟源供给的控制寄存器
PMU_PDSLOW EQU 0x10001010 ; SLOW状态下时钟的分频因子
PMU_PMDR EQU 0x10001014 ; 芯片工作模式寄存器
PMU_RCTR EQU 0x10001018 ; Reset控制寄存器
PMU_CLRWAKUP EQU 0x1000101C ; WakeUp清除寄存器
EMI_CSACONF EQU 0x11000000 ; CSA参数配置寄存器
EMI_CSECONF EQU 0x11000010 ; CSE参数配置寄存器
EMI_CSFCONF EQU 0x11000014 ; CSF参数配置寄存器
EMI_SDCONF1 EQU 0x11000018 ; SDRAM时序配置寄存器1
EMI_SDCONF2 EQU 0x1100001C ; SDRAM时序配置寄存器2, SDRAM初始化用到的配置信息
EMI_REMAPCONF EQU 0x11000020 ; 片选空间及地址映射REMAP配置寄存器
AREA BOOTLOADER, CODE, READONLY
ENTRY ; Mark first instruction to execute
;************************************************************************************
; init the PMU and get the memory space;
; 关于功耗管理模块的实现机制在后续版本可能会作出调整, 使其层次化更加清晰,封装性更好
;************************************************************************************
ldr r4, =PMU_PCSR ; 打开所有模块时钟
ldr r5, =0x0001FFFF ; 由低位到高位依次(一共11bit有效)表示:esram lcdc pmu dmac emi mac adc ssi uart2 uart1 uart0
str r5, [ r4 ]
ldr r4, =PMU_PMDR ; 由SLOW模式进入NORMAL模式
ldr r5, =0x00000001 ; 00:slow,01:normal,10:sleep,11:idle
str r5, [ r4 ]
ldr r4, =PMU_PLTR ; 配置PLL稳定过度时间为保守值50us.
ldr r5, =0x0FFA0FFA ; 其实,低16bit reserved
str r5, [ r4 ]
;//PLL控制寄存器配置有待进一步确认,Fout=Fi*PV/(PD+1),但是Fi=?
ldr r4, =PMU_PMCR ; 配置系统时钟为80MHz
ldr r5, =0x0000c00c ;7A8--40M 788 -- 16M c008-64m
str r5, [ r4 ]
;//PLL控制寄存器配置有待进一步确认,Fout=Fi*PV/(PD+1),但是Fi=?
;ldr r4, =PMU_PMCR ; 配置系统时钟为80MHz
;ldr r5, =0x00008788 ;7A8
;str r5, [ r4 ]
;****************************************************************
; init the EMI and get the memory space
;****************************************************************
ldr r4, =EMI_CSACONF ; CSA片选时序参数配置
ldr r5, =0x08a6a6a1
str r5, [ r4 ]
ldr r4, =EMI_CSECONF ; CSE片选时序参数配置
ldr r5, =0x8ca6a6a1
str r5, [ r4 ]
ldr r4, =EMI_SDCONF1 ; SDRAM参数配置1
ldr r5, =0x1d004177 ; 0x1d004177 0x1d204177 0x0400800b
str r5, [ r4 ]
ldr r4, =EMI_SDCONF2 ; SDRAM参数配置2
ldr r5, =0x80002860 ; 0x80001860 0x80002860 0x80001860
str r5, [ r4 ]
;ldr r4, =EMI_REMAPCONF ; 重映射cse到0地址,之前0x0地址是默认的CSA(NorFlash),SDRAM地址也是AXD Debugger中手动设置的
;ldr r5, =0x0000000b ;0x8000000b 0x80000003
;str r5, [ r4 ]
;拷贝kernel代码到SDram
ldr r3, =0x00000000
ldr r1, =0x30000000 ;the address of SDRAM
ldr r2, =0x20001000 ;the address of NorFlash
LOOP
ldrb r4, [r2], #1
strb r4, [r1], #1
add r3, r3, #1
cmp r3, #0x44000
bne LOOP
;remap操作
ldr pc, =0x20000088
mov r0, r0
mov r0, r0
mov r0, r0
mov r0, r0
REMAP
ldr r1, =0x11000020 ;REMAP 0 ADDRESS TO SDRAM
ldr r2, =0x0000000b
str r2, [r1]
ldr r1, =0x4000000 ;REMAP 0 ADDRESS TO SDRAM
ldr r2, =0x1234
str r2, [r1]
;重新设定PC,开始操作系统启动
ldr pc, =0x0
DEAD
b DEAD
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -