⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nandbootloader.s

📁 223.rar
💻 S
字号:
  
    GBLA 	LOOP

INIT_EMI 	EQU 	1
REMAP		EQU		0
INIT_PMU	EQU		0
TESTPC		EQU		0
   
   
   AREA ONE, CODE, READONLY
   
   ENTRY     

   
   
;;;;;;;;;;;;;;;;;;;;;;;;;配置EMI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
   IF INIT_EMI <> 0												       
   
   mov r0,#0x11000000								; 设置EMI寄存器基址0x11000000

   mov r1,#0x8c000000
   add r1,r1,#0x00ff0000
   add r1,r1,#0x0000ff00
   add r1,r1,#0x000000f1     
   str r1,[r0,#0x10]   								; EMI_CSECONF:0x8cfffff1
   
   mov r1,#0x1d000000
   add r1,r1,#0x00004100
   add r1,r1,#0x00000077 
   str r1,[r0,#0x18]								; EMI_SDCONF1:0x1d004177
   
   
   mov r1,#0x80000000									
   add r1,r1,#0x00001800
   add r1,r1,#0x00000060
   str r1,[r0,#0x1c]								; EMI_SDCONF2:0x80001860
   
   IF REMAP<>0
   mov r1,#0x0000000b
   str r1,[r0,#0x20]								; EMI_REMAPCONF:0x0000000b
   ELSE
   nop
   nop
   ENDIF
   
   ELSE
   
LOOP 	SETA	16    

   		WHILE LOOP >0
   
LOOP SETA LOOP-1 
  
   			nop
   
   		WEND 
   
   ENDIF


  ;;;;;;;;;;;;;;;;;;;;;;;;;配置DMA控制器;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
													       
   mov r1,#0x11000000								; 设置DMA寄存器基址
   mov r0,#0x1000 
  
   add r0,r1,r0		
   													; 基址 0x11001000
   mov r2,#0x200     
   add r1,r2,r1										; DMA源地址寄存器地址
   str r1,[r0]   									; DMA源地址0x11000200 ->0x11001000
   
   mov r1,#0x30000000 
   mov r2,#0x1000   
   nop  
   add r1,r1,r2         
   str r1,[r0,#0x4]									; DMA目标地址 0x30001000 ->0x11001004
   
   
   mov r1,#0x210000									
   mov r2,#0x2400
   nop
   add r1,r1,r2
   add r1,r1,#0x9b
   str r1,[r0,#0xc]									; DMA控制寄存器0x0021249b ->1100100c    0x4??
   
   
   mov r1,#0x310
   add r1,r1,#0xd									
   nop
   str r1,[r0,#0x10]								; 配置DMA通道使能寄存器0x305 ->11001010 
   													; DMA 控制器配置结束


;;;;;;;;;;;;;;;;;;;;;;;;;;;;配置Nand Flash控制器;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   mov r0,#0x11000000								   
   add r0,r0,#0x100									; r0 地址0x11000100
   nop
   
   mov r1,#0x100     
   str r1,[r0]										; 首页地址0x100 ->11000100 
    
   mov r1,#0x6300000
   mov r2,#0x2800
   nop
   add r1,r1,r2
   add r1,r1,#0x57     
   str r1,[r0,#0x18]								; 配时序寄存器1  0x06202857 ->11000118
   
   mov r1,#0x110000
   mov r2,#0x4300
   nop
   add r1,r1,r2
   add r1,r1,#0x53
   str r1,[r0,#0x28]								; 配时序寄存器2  0x00514353 ->11000128
   													; Nand Flash控制器配置结束


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;将起始的4条指令写到0x30000000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   IF TESTPC <> 0
   													;测试mov pc #0x30000000
   mov r10,#0x10000000								;r10:0x10001014
   add r10,r10,#0x1000								;r11:0x00000001
   add r10,r10,#0x14								;切换CPU到Normal模式
   mov r11,#0x1				
   nop
   nop
   
   ELSE
   
   mov r10,#0x11000000								; 启动NAND的DMA传输
   mov r11,#0x100
   nop
   add r10,r10,r11   
   add r10,r10,#0x4 								; r10 中0x11000104
   mov r11,#0x80000000								; r11 中 0x80000000
   
   ENDIF
   
   
   mov r0, #0x30000000								; 写到CSF中的指令
   mov r12,#0xe5000000
   mov r13,#0x8a0000
   add r12,r12,r13
   mov r13,#0xb000
   add r12,r12,r13									 
   str r12,[r0],#0x4								; 0x30000000 0xe58ab000( str r11,[r10])
   
   
   mov r9,#0x100000									; 用于产生一个延时时间   
   mov r1,#0xe2000000
   nop
   mov r2,#0x590000
   add r1,r1,r2
   mov r2,#0x9000
   add r1,r1,r2
   add r1,r1,#0x1 
   str r1,[r0],#0x4  								; 0x30000004  0xe2599001(a  sub r9,r9,#0x1)


   mov r1,#0x1a000000
   mov r2,#0xff0000
   nop
   add r1,r1,r2
   mov r2,#0xff00
   add r1,r1,r2
   add r1,r1,#0xfd 
   str r1,[r0],#0x4  								; 0x30000008 0x1afffffd(bne  a) 
 
    
   
   mov r8,#0x30000000
   add r8,r8,#0x1000								; R8=0x30001000

   mov r1,#0xe1000000
   mov r2,#0xa00000
   add r1,r1,r2
   mov r2,#0xf000
   add r1,r2,r1
   add r1,r1,#0x8 									
   str r1,[r0],#0x4									; 0x3000000c 0xe1a0f008(mov pc,r8)
   
   
   ;;;;;;;;;;;;;;;;;;;;;;;;;配置PMU,在此处作测试用;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
   IF INIT_PMU <> 0												       
   
   mov r0,#0x10000000								; 设置PMU寄存器基址0x10001000
   add r0,r0,#0x1000
   
   mov r1,#0x4000
   add r1,r1,#0x00000008     
   str r1,[r0,#0x4]   								; PMCR:0x4008,64M
   
   mov r1,#0x00000001
   str r1,[r0,#0x14]								; PMDR:0x1,normal   
   
   mov r1,#0xc000									
   add r1,r1,#0x00000008
   str r1,[r0,#0x04]								; PMCR:0xc008,64M   
   
   ELSE
   
LOOP 	SETA	10    

   		WHILE LOOP >0
   
LOOP SETA LOOP-1 
  
   			nop
   
   		WEND 
   
   ENDIF
   
;;;;;;;;;;;;;;;;;;;;;;;;;测试0x30000000处指令是否可以被执行;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
   IF TESTPC <> 0												       
   
   mov r0,#0x10000000								; 设置PMU寄存器基址0x10001000
   add r0,r0,#0x1000
   
   mov r1,#0x4000
   add r1,r1,#0x00000009     
   str r1,[r0,#0x4]   								; PMCR:0x4009,72M
   
   mov r1,#0x00000000
   str r1,[r0,#0x14]								; PMDR:0x0,slow (0x30000000处指令进入normal)   
   
   ELSE
   
LOOP 	SETA	7    

   		WHILE LOOP >0
   
LOOP SETA LOOP-1 
  
   			nop
   
   		WEND 
   
   ENDIF
   
   nop
   nop   
   nop
   nop
   nop
   nop   
   nop
   nop											; 插入nop 指令填满一页
   nop
   nop
   nop
   nop
   mov r0,#0x30000000
   mov pc,r0
   nop
   nop
   nop
   nop
   
   END 
   													; r8   0x30001000,最后要跳转过去的地址
   													; r9   0x100 表示page读延时
   													; r10 中 0x11000104
													; r11 中 0x80000000 
													
													;0x30000000 str r11,[r10,#0]
													;0x30000004 subs r9,r9,#1
													;0x30000008 bne 0x4

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -