對於C程序,用戶程序通常在main函數開始,而在調用main函數之前,還需要執行一些初始化操作,主要包括軟件初始化和硬件初始化兩部分。2440的啓動文件名爲crt0.S。
軟件初始化
- 設置棧指針
SP指向某塊內存,SRAMSDRAM - 設置返回地址
- 調用main
- 清理工作
硬件初始化
- 關看門狗
- 初始化時鐘
- 初始化SDRAM
@******************************************************************************
@ File:crt0.S
@ 功能:通過它轉入C程序
@******************************************************************************
.text
.global _start
_start:
ldr r0, =0x53000000 @ WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] @ 寫入0,禁止WATCHDOG,否則CPU會不斷重啓
ldr sp, =1024*4 @ 設置堆棧,注意:不能大於4k, 因爲現在可用的內存只有4K
@ nand flash中的代碼在復位後會移到內部ram中,此ram只有4K
bl main @ 調用C程序中的main函數
halt_loop:
b halt_loop
參考
JZ2440開發板資料