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

📄 arm_boot.asm

📁 TMS320DM6446平台下
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    ;*------------------------------------------------------
    ;* IF APPLICATION DIDN'T CALL EXIT, CALL EXIT(1)
    ;*------------------------------------------------------
    MOV     R0, #1
    BL      _exit

    ;*------------------------------------------------------
    ;* DONE, LOOP FOREVER
    ;*------------------------------------------------------
L1:
    B       L1


;***************************************************************************
;*  PROCESS INITIALIZATION TABLE.
;*
;*  THE TABLE CONSISTS OF A SEQUENCE OF RECORDS OF THE FOLLOWING FORMAT:
;*
;*       .word  <length of data (bytes)>
;*       .word  <address of variable to initialize>
;*       .word  <data>
;*
;*  THE INITIALIZATION TABLE IS TERMINATED WITH A ZERO LENGTH RECORD.
;*
;***************************************************************************

tbl_addr: .set    R0
var_addr: .set    R1
length:   .set    R2
data:     .set    R3

auto_init:
    B       rec_chk

    ;*------------------------------------------------------
    ;* PROCESS AN INITIALIZATION RECORD
    ;*------------------------------------------------------
record:
    LDR     var_addr, [tbl_addr], #4   ;

    ;*------------------------------------------------------
    ;* COPY THE INITIALIZATION DATA
    ;*------------------------------------------------------
    TST     var_addr, #3                ; SEE IF DEST IS ALIGNED
    BNE     _bcopy                      ; IF NOT, COPY BYTES
    SUBS    length, length, #4          ; IF length <= 3, ALSO
    BMI     _bcont                      ; COPY BYTES

_wcopy:
    LDR     data, [tbl_addr], #4        ;
    STR     data, [var_addr], #4        ; COPY A WORD OF DATA
    SUBS    length, length, #4          ;
    BPL     _wcopy                      ;

_bcont:
    ADDS    length, length, #4          ;
    BEQ     _cont                       ;

_bcopy:
    LDRB    data, [tbl_addr], #1        ;
    STRB    data, [var_addr], #1        ; COPY A BYTE OF DATA
    SUBS    length, length, #1          ;
    BNE     _bcopy                      ;

_cont:
    ANDS    length, tbl_addr, #0x3      ; MAKE SURE THE ADDRESS
    RSBNE   length, length, #0x4        ; IS WORD ALIGNED
    ADDNE   tbl_addr, tbl_addr, length  ;

rec_chk:
    LDR     length, [tbl_addr], #4      ; PROCESS NEXT
    CMP     length, #0                  ; RECORD IF LENGTH IS
    BNE     record                      ; NONZERO

    MOV     PC, LR

;***************************************************************
;* CONSTANTS USED BY THIS MODULE
;***************************************************************
c_stack     .long   __stack
c_STACK_SIZE    .long   __STACK_SIZE
c_cinit         .long   cinit
c_pinit         .long   pinit

;******************************************************
;* UNDEFINED REFERENCES                               *
;******************************************************
    .global IND_CALL
    .global _exit
    .global _main
    .global cinit
    .global pinit
    .global __STACK_SIZE
    .endif

;*------------------------------------------------------
;*  STACK INITIALIZE (see .CMD file)
;*------------------------------------------------------
    .global __S_STACK_SIZE
    .global __I_STACK_SIZE
    .global __U_STACK_SIZE
    .global __F_STACK_SIZE
    .global __Y_STACK_SIZE
    .global __A_STACK_SIZE

;   .global __IRQ_STACK
;   .global __FIQ_STACK
;   .global __UNDEF_STACK
;   .global __SWI_STACK


    .state32

_initStack:
;*------------------------------------------------------
;* SET TO IRQ  MODE
;*------------------------------------------------------
    MRS     r0, cpsr
    BIC     r0, r0, #0x1F  ; CLEAR MODES
    ORR     r0, r0, #0x12  ; SET  IRQ MODE
    MSR     cpsr, r0

;*------------------------------------------------------
;* INITIALIZE THE IRQ  MODE STACK
;*------------------------------------------------------
    LDR     SP, i_stack
    LDR     R0, i_STACK_SIZE
    ADD SP, SP, R0

;*------------------------------------------------------
;* SET TO FIQ  MODE
;*------------------------------------------------------
    MRS r0, cpsr
    BIC r0, r0, #0x1F   ; CLEAR MODES
    ORR r0, r0, #0x11   ; SET FIQ mode
    MSR cpsr, r0

;*------------------------------------------------------
;* INITIALIZE THE FIQ  MODE STACK
;*------------------------------------------------------
    LDR     SP, f_stack
    LDR     R0, f_STACK_SIZE
    ADD SP, SP, R0

;*------------------------------------------------------
;* SET TO UNDEF  MODE
;*------------------------------------------------------
    MRS r0, cpsr
    BIC r0, r0, #0x1F   ; CLEAR MODES
    ORR r0, r0, #0x1B   ; SET UNDEF mode
    MSR cpsr, r0

;*------------------------------------------------------
;* INITIALIZE THE UNDEF  MODE STACK
;*------------------------------------------------------
    LDR     SP, u_stack
    LDR     R0, u_STACK_SIZE
    ADD SP, SP, R0

;*------------------------------------------------------
;* SET TO SYSTEM  MODE
;*------------------------------------------------------
    MRS r0, cpsr
    BIC r0, r0, #0x1F   ; CLEAR MODES
    ORR r0, r0, #0x1F   ; SET SYSTEM mode
    MSR cpsr, r0

;*------------------------------------------------------
;* INITIALIZE THE SYSTEM MODE STACK
;*------------------------------------------------------
    LDR     SP, y_stack
    LDR     R0, y_STACK_SIZE
    ADD SP, SP, R0

;*------------------------------------------------------
;* SET TO ABORT  MODE
;*------------------------------------------------------
    MRS r0, cpsr
    BIC r0, r0, #0x1F   ; CLEAR MODES
    ORR r0, r0, #0x17   ; SET ABORT mode
    MSR cpsr, r0

;*------------------------------------------------------
;* INITIALIZE THE ABORT MODE STACK
;*------------------------------------------------------
    LDR     SP, a_stack
    LDR     R0, a_STACK_SIZE
    ADD SP, SP, R0


;*------------------------------------------------------
;* SET TO SUPERVISOR  MODE
;*------------------------------------------------------
    MRS r0, cpsr
    BIC r0, r0, #0x1F   ; CLEAR MODES
    ORR r0, r0, #0x13   ; SET SUPERVISOR mode
    MSR cpsr, r0

;*------------------------------------------------------
;* INITIALIZE THE SUPERVISOR  MODE STACK
;*------------------------------------------------------
    LDR     SP, s_stack
    LDR     R0, s_STACK_SIZE
    ADD SP, SP, R0

    MOV PC, LR


s_stack         .long    __sstack
s_STACK_SIZE    .long    __S_STACK_SIZE
i_stack         .long    __istack
i_STACK_SIZE    .long    __I_STACK_SIZE
f_stack         .long    __fstack
f_STACK_SIZE    .long    __F_STACK_SIZE
u_stack         .long    __ustack
u_STACK_SIZE    .long    __U_STACK_SIZE
y_stack         .long    __ystack
y_STACK_SIZE    .long    __Y_STACK_SIZE
a_stack         .long    __astack
a_STACK_SIZE    .long    __A_STACK_SIZE

_tc_pattern:
  NOP
_tc_passed:
  NOP
_tc_failed:
  NOP


    .end
; Rev.No.   Date/Time               ECN No.          Modifier        ;
; -------   ---------               -------          --------        ;

; 1         14 May 2004 15:51:32    914              mwarner         ;
;                                                                    ;
; Initial common c and asm source for c test case development        ;
; Initial common c and asm source for c test case development        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Rev.No.   Date/Time               ECN No.          Modifier        ;
; -------   ---------               -------          --------        ;

; 2         17 May 2004 13:18:20    940              tomash          ;
;                                                                    ;
; take out DOS end-of-line char                                      ;
; take out DOS end-of-line char                                      ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Rev.No.   Date/Time               ECN No.          Modifier        ;
; -------   ---------               -------          --------        ;

; 2         23 Jun 2004 16:57:23    1836             rnag            ;
;                                                                    ;
; updated for c6x                                                    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Rev.No.   Date/Time               ECN No.          Modifier        ;
; -------   ---------               -------          --------        ;

; 2         30 Sep 2004 14:37:30    3070             xkeshavm        ;
;                                                                    ;
; Disabled fiq and irq in boot.asm and added fir_irq_enable.asm      ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Rev.No.   Date/Time               ECN No.          Modifier        ;
; -------   ---------               -------          --------        ;

; 3         21 Oct 2004 18:14:49    3582             xkeshavm        ;
;                                                                    ;
; iincreased the stack size to 0x2000                                ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Rev.No.   Date/Time               ECN No.          Modifier        ;
; -------   ---------               -------          --------        ;

; 4         29 Nov 2004 09:07:21    4399             xkeshavm        ;
;                                                                    ;
; Entrypoint section added and gpio4 and gpio5 logic implemented for pass, fail signature;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

⌨️ 快捷键说明

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