📄 rominit.s
字号:
/* romInit.s - ARM Integrator ROM initialization module */
/******************************************************************************
* modification history: *
******************************************************************************/
#define _ASMLANGUAGE
#include "Register.h"
#include "mem.h"
.globl _romInit
/* .extern OCR_UE_UARTProcMain
.extern SafeCheckMain */
.text
.balign 4
/*******************************************************************************
*
* romInit - entry point for OnChipRom
*
*/
/*_ARM_FUNCTION(romInit)*/
_romInit:
/* If send reset-command error, repeat 3 times */
MOV r3, #3
Nand_Restore:
LDR r2, =0x30121000
LDR r7, [r2, #NF_DATANUM]
LDR r4, [r2, #NF_BUFCFG]
LDR r5, [r2, #NF_CFG]
LDR r6, [r2, #NF_CMD]
Nand_Reset:
/* Change to normal mode */
LDR r1, =0xF
STR r1, [r2, #NF_BUFCFG]
/* address number: 0; Only command; */
LDR r1, =0x20
STR r1, [r2, #NF_CFG]
/* Reset Command */
LDR r1, =0xFF
STR r1, [r2, #NF_CMD]
MOV r0, #0x6600 /* 2ms Delay */
Nand_RstWait:
SUBS r0, r0, #1
BNE Nand_RstWait
/* Check reset command done */
LDR r1, [r2, #NF_INTSTATUS]
AND r1, r1, #0x1
CMP r1, #0x1
BNE Nand_Err
/* Clear Interrupt Status */
MOV r1, #1
STR r1, [r2, #NF_INTCLR]
Nand_RdStatus:
/* Read 1 Byte */
LDR r1, =0x1
STR r1, [r2, #NF_DATANUM]
/* address number: 0; Only command; Read Mode */
LDR r1, =0x0
STR r1, [r2, #NF_CFG]
/* Read Command */
LDR r1, =0x70
STR r1, [r2, #NF_CMD]
MOV r0, #0x100 /* 50us Delay */
Nand_RdFinish:
SUBS r0, r0, #1
BEQ Nand_Err
LDR r1, [r2, #NF_INTSTATUS]
AND r1, r1, #0x2
CMP r1, #0x2
BNE Nand_RdFinish
/* Clear Read Interrupt Status */
MOV r1, #3
STR r1, [r2, #NF_INTCLR]
/*Nand_Ok:
LDR r0, =NANDC_DATA_BASE_ADDR
LDR r1, [r0]
ANDS r1, r1, #0x1
BNE Nand_RdStatus*/
B Nand_Recover
Nand_Err:
SUBS r3, r3, #1
BNE Nand_Reset
Nand_Recover:
STR r7, [r2, #NF_DATANUM]
STR r4, [r2, #NF_BUFCFG]
STR r5, [r2, #NF_CFG]
STR r6, [r2, #NF_CMD]
/* Set up the stack */
Stack_Setup:
LDR r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
ADD r0, r0, #RAM_USED_LEN
SUB sp, r0, #4 /* leave 1 words */
#ifdef CHECK_SP_OVERFLOW
Check_SP:
SUB r1, r0, #0x10
LDR r0, _bss_end
LDR r2, _mem_ufill /* clear */
StSp_l:
STR r2, [r0] /* SET 0xFFFFFFFF */
ADD r0, r0, #4
CMP r0, r1
BNE StSp_l
#endif
Usb_Index:
LDR r1, _bss_start /* find start of bss segment */
LDR r0, [r1]
Clear_Bss:
LDR r1, _bss_start /* find start of bss segment */
LDR r2, _bss_end /* stop here */
MOV r3, #0x00000000 /* clear */
Clbss_l:
STR r3, [r1] /* clear loop... */
ADD r1, r1, #4
CMP r1, r2
BLE Clbss_l
Main_Call:
/* prepare to receive ram init proc*/
/* Initialize the stack pointer to just before run C program.*/
/* LDR sp, =ECS_DTCM_BASE_ADDR + ECS_DTCM_SIZE - 4 */
BL Main
/* Main_Call end */
/******************************************************************************/
/*
* PC-relative-addressable pointers - LDR Rn,=sym is broken
* note "_" after "$" to stop preprocessor preforming substitution
*/
_TEXT_BASE:
.word RAM_BASE_ADDR
.globl _armboot_start
_armboot_start:
.word _romInit
.globl _mem_ufill
_mem_ufill:
.word RAM_UNUSED_FILL
/*
* These are defined in the board-specific linker script.
*/
.globl _bss_start
_bss_start:
.word __bss_start
.globl _bss_end
_bss_end:
.word _end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -