📄 arm_boot.asm
字号:
;*------------------------------------------------------
;* 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 + -