;/*************************************************************************************
; File Name : startup.s
; File Description : This file implements the startup procedure.
;*************************************************************************************/
GET ..\inc\option.inc
;=======================================================
; ENTRY
;=======================================================
AREA Init,CODE,READONLY ;定義一個代碼段,名字是init,屬性是隻讀
ENTRY ;程序執行的入口點
ResetHandler ;這段代碼
LDR R13, =top_of_stacks ;R13用作堆棧指針
;=======================================================
;關閉看門狗
;=======================================================
ldr r0,=0x7E004000
mov r1,#0
str r1,[r0]
[ (USE_TCM = 1) ;USE_TCM has been set to 1 in predefined handle
; ----------------------------------------
; Initialize TCM
; ----------------------------------------
; TCM0(D-TCM, I-TCM) Configuration
mov r0,#0x0
mcr p15,0,r0,c9,c2,0 ; Write TCM Selection register
;上面那句指令的意思是:將ARM寄存器r0的數據傳送到
;協處理器P15,語法參見內核文檔第140頁(3-8)內容在
;228頁(3-96)00選中TCM0,01選中TCM1,10和11是忽略寫訪問。
ldr r0,=ITCM0_BaseAddress ;0x80000011傳遞給R0
mcr p15,0,r0,c9,c1,1 ; Write Instruction TCM0 region register(3-91)
ldr r0,=DTCM0_BaseAddress ;寫數據TCM
mcr p15,0,r0,c9,c1,0 ; Write Data TCM0 region register(3-90)
; TCM1(D-TCM, I-TCM) Configuration
mov r0,#0x1 ;選中TCM1
mcr p15,0,r0,c9,c2,0 ; Write TCM Selection register
ldr r0,=ITCM1_BaseAddress
mcr p15,0,r0,c9,c1,1 ; Write Instruction TCM1 region register
ldr r0,=DTCM1_BaseAddress
mcr p15,0,r0,c9,c1,0 ; Write Data TCM0 region register
] ;Endif
IMPORT ScatterLoad
LDR R0, =ScatterLoad
MOV LR, PC ;LR指的是linker register,也就是R14;這個地方時調用子程序
BX R0 ;跳轉執行
EXPORT __main ;這裏初始化C語言程序入口
__main
;; initialise the C library (which calls main())
IMPORT __rt_entry
LDR R0, =__rt_entry
BX R0 ;跳轉到C語言執行
b .
;=======================================================
END