|
- y4 x$ V! u- J- V! s在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句* ]& M8 e& a/ ]
/* 重新配置程序入口点 */* E/ F7 k, K" V2 U9 j& u
-e Entry- /****************************************************************************/! j) F% ~. k. v2 D
- /* */
2 ^/ S- ?* U' o5 F9 U - /* OMAPL138 及 DSP C6748 内存空间分配定义 */
. Y4 M! O1 J% h8 u% t# T* w ? - /* */
. X' h6 }) t$ j+ Q7 A8 j' S - /* 2015年04月20日 */
4 G, j& E0 f8 B F( @ - /* */
! T0 O5 N9 c9 P$ j/ B& z- Q - /****************************************************************************/. W3 ]8 q" G% ^; I4 u8 t; C! V
- /* 堆栈 */
2 S% P j" A) Y1 K: x: @# B8 ] - -stack 0x8000
5 ^8 X( v& H4 f+ k5 B- T - -heap 0x2000 x0 y4 f, C% W2 D7 {& J! C
- 6 Z( j5 ?) M8 ~# T V# T) g
- /* 重新配置程序入口点 */' Z* M. M! ^3 S$ a3 D, E, g) M
- -e Entry3 c% q7 m9 C, F3 C
9 a! N8 N5 z) b* [& Y- MEMORY" a u2 a+ n1 B: C3 S
- {
* m) ~4 w4 _! d9 a% T( i! n - #ifdef DSP_CORE
' V2 j$ f6 u* [8 \ - /****************************************************************************/3 H- ]; B3 g/ G: r9 P2 R
- /* */# l1 s. P/ @( R3 }5 k. d
- /* DSP 专有内存区域 */
* g; f4 }: V$ t5 [- ^2 H/ L% Z - /* */! |8 l6 |, f3 P7 n9 x( s$ l
- /****************************************************************************/
t& n# ^1 D& J! x - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
7 F/ V# I. y2 W2 E2 H- O1 U# z+ f - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */! I. d4 z, c# Z9 \8 ^' x- |
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */# s, ?0 a, a# u2 F! |' B
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */5 X+ A+ e& ?# }# B- _2 u0 C# c
- #endif
复制代码 这是一段汇编代码用于切换到特权模式
# J5 \/ ?/ p' _
4 n3 y$ e3 G' H, @OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
/ Y& n1 C1 _% Z- c8 ?* p l2 \ O* j3 v- ;******************************************************************************6 r2 N0 w6 m# i: d8 j
- ;
3 O* _% \/ A0 _& n6 g& T9 X - ; init.asm - Init code routines$ g a! r! Q, {! U& J2 F
- ;# A# Z- J: V V( I# J ?! t
- ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
; n( f, H2 ~9 i$ T7 Z! z% R - ; All rights reserved.( V, m; L8 D9 h Y4 Q3 e5 R% e3 w
- ;( i8 o; c3 N4 Q5 j! [
- ;******************************************************************************- d9 x8 n: ^# _
- ;****************************** Global Symbols*******************************
1 P* M3 M/ j% G9 ~ - .global Entry3 Z: N) d( M! H2 Y& j: l
- .global start_boot: R$ {& `4 `8 F8 V/ }) ?( L
- .global __TI_auto_init* q+ U1 q% q3 E! `
- 8 \& M9 K5 E% Q9 t- O1 q' B
- .ref __stack
4 @8 O& G0 j0 t - .ref __STACK_END! A" j* r$ K1 |" p7 p
- .ref bss_start
$ p/ R8 J) }' j5 b - .ref bss_end0 a8 W! o% x5 n6 _5 Q+ [. f; [
- .ref start_boot6 \/ U4 c2 K% k/ y Y* P
8 [# B8 p: n c7 b- ;************************ Internal Definitions ******************************
: E+ P$ G% t% f. ]# S f' G - ;( B6 Q" L8 X% |0 s
- ; Define the stack sizes for different modes. The user/system mode will use
9 u) ^2 b7 t4 V" k - ; the rest of the total stack size
0 D" j# b0 {+ P9 m, w, ` - ;5 U0 A8 Y" [0 n5 y8 m, e
- & t3 N8 Q3 z* u- ^" {
- UND_STACK_SIZE .set 0x8
( L# D3 \! a$ T; X - ABT_STACK_SIZE .set 0x8/ d1 ~1 S) v5 i$ P# m+ T
- FIQ_STACK_SIZE .set 0x89 i2 h7 X: \1 x" ~$ F
- IRQ_STACK_SIZE .set 0x500
7 I% W0 \$ a c8 _7 J: Y - SVC_STACK_SIZE .set 0x8
, }. y$ }+ c$ k& u' Y* c$ G - 5 k4 ^9 d; n# b. q4 j
- ;8 b- A! D# S1 j' M) {! m
- ; to set the mode bits in CPSR for different modes9 i3 t1 k5 E, M, h
- ;% I1 T# h& f$ i* Z% m5 L7 }
- ! y& C4 ~- [+ q
- MODE_USR .set 0x107 A' S1 s: n9 G
- MODE_FIQ .set 0x11, f6 b4 U' x \$ Z. Q# C
- MODE_IRQ .set 0x12
: B2 H+ Y- L& }4 T+ K4 |3 f5 G! } - MODE_SVC .set 0x13
: @5 l" H5 e! Q" C - MODE_ABT .set 0x17
( s9 Q0 e2 D, V9 y0 t; B2 L: z - MODE_UND .set 0x1B
/ u8 }* M6 ~3 o; l. d8 ^4 N& l - MODE_SYS .set 0x1F
1 s; S Q1 L& ~8 {8 }* { - 7 e1 n# L! H% T- e' R/ j) W j
- I_F_BIT .set 0xC0, P& f% V @ b. [1 R
- * o g; B2 O5 H
- ;**************************** Code Seection ***********************************
+ j. e! A6 a- p - .text3 g( b2 r0 x3 y. o) T2 [2 T- X
- , j" K8 y+ p* o
- ;2 X4 a0 C; q+ e" r) {( y' W
- ; This code is assembled for ARM instructions& ~5 A% d: e$ }* S1 g
- ;4 V/ R% E) ~7 ^
- .state32& A2 H E6 U) A) ]9 H4 e u1 f, C( ~
- + O# _2 d6 i% p# U2 i
- ;******************************************************************************
+ j+ h* ~% o) g# w5 `" _& K - ;' c' H, V8 n+ N2 U. d- D
- ;******************************************************************************
0 M) c( o; q6 d# L0 W! L0 l- z - ;& S0 Y" n6 l" F: ]' y4 Q# H3 t' C9 U
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and
9 F6 M4 J7 Y3 R ~; }( q - ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the" Z {. c5 o8 O/ x! E% M8 I
- ; main() function.
+ X( u" g7 \. L' r% h: X. Q+ m - ;
2 @5 ?8 c1 P4 J2 x' { - Entry:. [4 t; p5 v3 l4 i. \! Z
- ;
& Q- ?2 D1 Q, w# y3 d" P6 w - ; Set up the Stack for Undefined mode
/ j3 E/ J! {' j9 m$ T* k - ;
3 T0 O7 e* U0 W- O - LDR r0, _stackptr ; Read and align the stack pointer2 N5 F8 |8 y2 N& Y1 G [
- SUB r0, r0, #8. U" c$ Y" u; u9 c) N% x
- BIC r0, r0, #7
; a3 I ]7 T {2 J/ m, U - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
% g0 R+ ]+ o3 f* |9 _7 o - MOV sp,r0 ; write the stack pointer
7 A/ Q0 ]$ l; s. L3 w - SUB r0, r0, #UND_STACK_SIZE ; give stack space1 M3 B1 ~( A1 m$ E g' z8 w6 d
- ;
* X, [2 ?4 J! ~1 w: S2 h# h - ; Set up the Stack for abort mode
$ k" f+ P& z% g8 i! ~$ G+ g - ;' |3 M3 C3 E1 _. ?4 H
- MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
. o! I- ~2 W: Z, t - MOV sp, r0 ; write the stack pointer& v! a- ^* _$ b# m b0 R+ `9 g
- SUB r0,r0, #ABT_STACK_SIZE ; give stack space
. t7 C+ V9 O% A; I O - ;
9 \4 z3 b4 j4 L9 M; G7 v - ; Set up the Stack for FIQ mode
% u3 X a0 H$ x+ R$ Q0 U: t$ m - ;5 L# I' q. M: X2 D$ h
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
, W; f" G) Y- I* | - MOV sp,r0 ; write the stack pointer
) }& W& g; h5 s, |- d4 k - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space4 _2 M! J: I6 D0 E. \/ L4 ?# B
- ;
1 E1 O; G+ B% s% D* y6 `! w. S- \6 W. u - ; Set up the Stack for IRQ mode
; O. @" x# n3 {1 Q2 y/ U( D - ;
( o, a3 L$ {. }- x7 D/ j - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode; `. L( V7 s8 _: o! N+ Q/ W( @
- MOV sp,r0 ; write the stack pointer6 O! z D; @+ z$ _9 \2 \" a
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
: Q8 R' K0 i( a7 ]: N$ m - ;3 p/ `6 V. v0 a1 v/ ?, f2 W
- ; Set up the Stack for SVC mode$ l0 A/ d: j" ]3 {1 z* P
- ;
1 {' m; a/ [$ O7 ]: s9 G n - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode: D/ ^( A- A8 \9 W. m
- MOV sp,r0 ; write the stack pointer
/ v1 k( Q6 }4 i) P0 Z3 E* x - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
4 o; C" Y( a# r4 I - ;
, P6 [% O$ ^/ w# q9 s7 o5 d ^% G9 N - ; Set up the Stack for USer/System mode: I2 ^0 d4 U" D3 ?3 f
- ;
& d8 S/ Q5 I6 c# l" w% ]- k - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
7 {# Q& W) H7 j7 N0 i+ T4 b5 ~ - MOV sp,r0 ; write the stack pointer2 J" a: m' B& |/ ?" y0 ?7 I; T! {- i
+ a' k+ W' k' q: g3 }# c, F- ;
% |+ O* {- ]7 |- o - ; Clear the BSS section here
! Y% u/ W7 O; C) } - ;$ N9 g! _3 x. E/ _$ C! S9 y
- Clear_Bss_Section:
9 X5 k2 M! V3 u) C, ~; b) a) y& a
% t4 k2 L8 S, k S5 _5 \- LDR r0, _bss_start ; Start address of BSS
/ p, U! w& N5 ~+ y" L# M2 k5 n, | - LDR r1, _bss_end ; End address of BSS. I' U" x0 ^7 E2 ^ C9 b7 F7 S
- SUB r1,r1,#49 T4 _ }7 H7 z1 B& U1 Y, L
- MOV r2, #0
6 q, A0 j$ D& T) V8 u - Loop:, d) u% d6 g3 K
- STR r2, [r0], #4 ; Clear one word in BSS
, i7 W- L. P. r! Z - CMP r0, r1( P) m. b8 P. H* Z3 B4 Y/ }
- BLE Loop ; Clear till BSS end" p, G# U6 x9 q8 D$ M2 B, Z2 U- B* D$ ]
- ) [% @8 X! f" P3 u# x% O
- BL __TI_auto_init ; Call TI auto init
. u6 n$ Z- x& ^, H! I/ m u: ^ - R' C" P {& P( F
- ;
8 A2 N6 m# G$ U: G; k( ^( X - ; Enter the start_boot function. The execution still happens in system mode
6 {7 D2 I9 w8 C9 S2 q - ;
( Z3 W+ h7 y4 l! @! W" N' M# _3 `+ Q# D - LDR r10, _start_boot ; Get the address of start_boot
3 [. c, ^" ?3 R1 _ - MOV lr,pc ; Dummy return
9 b5 A4 c8 {; C" Y$ Q6 l - BX r10 ; Branch to start_boot
8 c. ]3 J3 _ V: P - SUB pc, pc, #0x08 ; looping
8 K" d' ]) |& S: ]* Y) Q+ P
3 ^6 S0 A* k3 B! s9 v: d- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
$ O1 z6 j; E& k9 f - ; BX lr9 j5 q6 F v+ v. u( z3 G
- ;
9 p' A; t% N2 @$ [+ f2 A- r - ; End of the file5 `: b5 a& k- [. y) ?" S
- ;! @5 D* L8 C) L* U# K" q2 X( d5 s
- _ O* c) z0 |2 ^2 p8 _- _stackptr:; D, j2 O* ?5 V E
- .word __STACK_END
# ?3 S5 n' p: b' [: ]. z - _bss_start:
; f3 |. V% ?5 U; E! ?* T - .word bss_start
+ N& p$ Z0 S% { - _bss_end:4 t1 o% F I* Y6 b* L- ^' y
- .word bss_end
1 v/ J, _4 Z4 \ - _start_boot:: B' \5 m& b6 k6 Z% d: _% f7 I
- .word start_boot2 q# ]+ f1 F6 C: w: H
- _data_auto_init:
7 S q- W% a7 t3 ~7 C S: M4 q - .word __TI_auto_init0 ?/ X' m6 @$ p
- .end/ A K" B( a& ^' Y( D7 _
- + g: ^9 m0 K$ E7 A! C0 T
: W) y) F5 {: o7 a- J
8 h1 l6 k: m& m8 Y
复制代码 " x+ @) f6 j8 t+ {+ k6 t% v9 s( V2 w
/ i7 a6 m6 u- q: {4 ^& ^# v
* w# J/ G$ J$ z, K3 Q4 _
: w& Y& _4 ?0 I8 ~) m2 ]
1 p. }+ i& ?) D2 ? |
|