mini2440啓動代碼分析之第一篇(注意名字,不是bootloader)

轉自:http://blog.chinaunix.net/uid-26435987-id-3073901.html

啓動代碼主要是在主程序運行之前初始化系統硬件及軟件的運行環境,它的主要功能包括以下的幾個方面:

1、建立中斷向量表

2、初始化系統堆棧

3、應用程序執行環境初始化

4、跳轉至主函數

第一部分

 GET option.inc           option.inc文件包含了開發板的配置信息—堆棧、時鐘等

 GET memcfg.inc           ;存儲控制文件

 GET 2440addr.inc         ;寄存器地址地址定義

注意:   彙編不能使用include包含頭文件,所有用Get,功能:引進一個被編譯過的文件

        彙編也不認識*.h 文件,所有隻能用*.inc

第二部分

;EQU爲程序中的常量、標號等定義一個等效的字符名稱,相當於C語言中的define
;定義SDRAM工作在Refresh模式,SDRAM有兩種刷新方式:autorefreshselfrefresh,前者是在其使用過程當中每隔一段時間發出刷新指令,SDRAM刷新一行,selfrefresh是在省電模式時使用。標示:REFRESH寄存器[22]bit : 0- auto refresh; 1 - self refresh
BIT_SELFREFRESH   EQU   (1<<22)   ;用於節電模式中,SDRAM自刷新標誌位

第三部分(簡單略過)

;系統的工作模式設定,共七種工作模式
USERMODE    EQU      0x10
FIQMODE      EQU      0x11
IRQMODE      EQU      0x12
SVCMODE      EQU      0x13
ABORTMODE   EQU      0x17
UNDEFMODE   EQU      0x1b
MODEMASK    EQU      0x1f
NOINT         EQU       0xc0

;設置6種工作模式的堆棧的起始地址

;option.inc中定義了_STACK_BASEADDRESS  EQU  0x33ff8000 
UserStack EQU (_STACK_BASEADDRESS-0x3800)   ;0x33ff4800 ~
SVCStack EQU (_STACK_BASEADDRESS-0x2800)   ;0x33ff5800 ~
UndefStack EQU (_STACK_BASEADDRESS-0x2400)  ;0x33ff5c00 ~
AbortStack EQU (_STACK_BASEADDRESS-0x2000)  ;0x33ff6000 ~
IRQStack EQU (_STACK_BASEADDRESS-0x1000)   ;0x33ff7000 ~
FIQStack EQU (_STACK_BASEADDRESS-0x0)      ;0x33ff8000 ~



第四部分:

;Check if tasm.exe(armasm -16 ...@ADS 1.0) is used.

判斷是否THUMB指令

;   [ 代表IF指的是ELSE相當於ENDIF

       

GBLL    THUMBCODE ;定義一個全局的邏輯變量,變量名爲THUMBCODE

       [ {CONFIG} = 16   ;如果是CONFIG}= 16表明現在處於thumb狀態

THUMBCODE  SETL  {TRUE} ;該變量賦值爲真,表示告訴系統當前想用Thumb,但實際啓動時不行,只能從ARM啓動後再跳轉thumb

           CODE32  ;啓動時強制使用32 ARM編譯模式 

             |

THUMBCODE SETL  {FALSE}如果系統要求是ARM 指令,則直接設置THUMBCODE 

                              false 說明當前的是32 位編譯模式 

        ]

             

  ;宏定義MOV_PC_LR,作用:子程序返回 

   MACRO      ;宏定義 

   MOV_PC_LR 

   [ THUMBCODE      ;目標地址是THUMB指令 

   bx lr            ;ARM模式中,要用BX指令跳轉到THUMB指令,並轉換模式

   |  

   mov pc,lr   ;如果目標地址是ARM指令,則直接把函數返回地址給PC

   ] 

MEND ;宏定義結束 

  ;宏定義MOVEQ_PC_LR,作用:帶相等條件判斷的子程序返回 。與宏定義 

  ;帶條件的函數返回,與MOV_PC_LR類似  

  MACRO 

  MOVEQ_PC_LR 

  [ THUMBCODE 

bxeq lr 

    moveq pc,lr 

  ] 

MEND ;宏定義結束 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章