|
) X5 E/ b* O8 d$ ~' i! g" H在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句9 }) G' s0 n8 i
/* 重新配置程序入口点 */( \6 x5 S9 [- g% l5 W! A" S& N
-e Entry- /****************************************************************************/3 W m B* t1 u
- /* */7 _( `+ v2 j j; N# s
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */
( ^# [2 x$ U+ T- \' T8 H4 | - /* */
1 K ]& @, B7 i! D% j8 |7 g - /* 2015年04月20日 */+ w z7 ?/ X, h( e
- /* */9 f. a2 V) S, q! ]) e) m6 m: e7 C
- /****************************************************************************/
6 C0 G6 X/ @3 `& R; p7 F/ z - /* 堆栈 */- i% U. j* f$ Q, u! l
- -stack 0x8000
8 j: u: d' H6 ]( m) z. x& ^: } - -heap 0x2000+ L L4 W4 y- I- {6 b: j( W. y$ \
7 [1 i( O& ]! Q1 z$ D- /* 重新配置程序入口点 */, \$ U8 w/ T5 a4 B5 c5 v
- -e Entry
+ x7 K5 Q9 Q' B5 P
# F' V. }6 Z$ Z- MEMORY
, x* R) @0 M/ P9 ] - {# [( w: C* i, F
- #ifdef DSP_CORE
# n, K! x5 _0 W6 n" O3 ` - /****************************************************************************/3 s- F8 P$ Q2 r$ {, D$ Z$ _
- /* */
1 A7 s& T. `& k$ Q8 T: ~* V - /* DSP 专有内存区域 */
( V7 [* [5 Q. _' q) n& V0 b8 o6 j - /* */; @! ]% @3 {1 {: Q/ u
- /****************************************************************************/
; H, f, A- l6 @1 c - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
7 ]) ^$ R5 ^& n6 y8 D4 Z3 n Y H$ ? - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */. }! t, t; j% f5 y- B
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */( ~7 X, [. L( \% X" }0 E9 G; A
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
7 j4 Q& E. S/ N0 M - #endif
复制代码 这是一段汇编代码用于切换到特权模式
* H7 i/ w* m( g! q# K& B
( k& w" M8 M1 h! _) a! H/ ]OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm5 q- i' w/ Q$ Y
- ;******************************************************************************
2 L) y. ~$ k" v/ [! h - ;, c8 \2 p4 O' r- b4 J
- ; init.asm - Init code routines
4 A1 y- W. J2 M0 A! @ - ;4 F. Y' p* D9 N7 q+ Z( g
- ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/: V3 M' ]9 g1 h$ ^* ~
- ; All rights reserved.
% L \6 y: X4 \2 ]0 T" Z$ P - ;
. E y& S9 ]/ P3 A - ;******************************************************************************
# _; y/ b$ N7 q! t - ;****************************** Global Symbols*******************************% c1 q3 E( }6 q7 S, O0 e: t
- .global Entry- ]) F) d: h1 ?
- .global start_boot* n4 u1 ^$ g8 y8 F. ^
- .global __TI_auto_init
; f f1 L$ @4 p' l
S* W2 \5 I5 F# r# Q! b& B- .ref __stack% L/ g' S' p6 R; s
- .ref __STACK_END
) S1 C: o" P Q+ g6 u - .ref bss_start9 b' w. w4 s, A9 z: y
- .ref bss_end
7 l8 l: H/ Z, ]. Y- g. h9 K - .ref start_boot
# P( H5 S, z5 L7 v E( [3 Z5 U
i0 q/ T* p4 ]- ;************************ Internal Definitions ******************************
9 z, r7 a5 |/ K. g& @( I" w - ;
% m; n2 p: j/ t. ~0 v: d - ; Define the stack sizes for different modes. The user/system mode will use
4 }* d/ \% \# _ - ; the rest of the total stack size8 {* p2 Q3 Z% h3 T3 h' j
- ;
3 N! L5 s: c: ~ e# E
" o L, ^ N# P- UND_STACK_SIZE .set 0x8& f$ u) ?; J, ^7 ?2 ^" o
- ABT_STACK_SIZE .set 0x8
0 V9 m; d% B; A; c. x( o* x - FIQ_STACK_SIZE .set 0x86 F- G: M; f( t: p
- IRQ_STACK_SIZE .set 0x500
6 \% R2 Z9 j- n - SVC_STACK_SIZE .set 0x84 j. }$ w N% A; B% d/ N0 A
- i& X7 w% [( J5 w: s- ;1 K. @0 A* }" s" D$ M
- ; to set the mode bits in CPSR for different modes/ w4 R% d; I% Z
- ;* E- d# b8 ]# i6 m7 U9 `( j
- / f5 F: Q" c9 F2 D
- MODE_USR .set 0x10
6 I" s( [( E. p0 O f# o! Y. w9 d - MODE_FIQ .set 0x11, p3 Y, g# m u/ P) V
- MODE_IRQ .set 0x12
7 P5 A) t4 y& ?' W - MODE_SVC .set 0x13
6 g1 p! s" m- V. Y/ p - MODE_ABT .set 0x17
( o+ O" ^- ?4 T- ^5 ]# q* K6 }: r - MODE_UND .set 0x1B [$ U0 N e5 B+ {
- MODE_SYS .set 0x1F
& I d6 `, O$ p; x. K9 f7 S
& b3 S" M' ]( b6 ]$ F- I_F_BIT .set 0xC0
7 y; d) N" K+ w
3 A: `, Q( y& d0 a- ;**************************** Code Seection ***********************************$ H: x U/ Q. A4 O$ ^- _
- .text
( F# s8 S% q+ R: G* U% e" N* u' M
1 k* s! Z: U* n2 G- ;: m2 z) j5 ^; ^
- ; This code is assembled for ARM instructions
, G2 p$ }3 R: q6 D* V - ;/ W u+ A' H- A4 [* k, g5 ~) N
- .state32) |+ `) `& A) t
/ F5 s" V- V# P; |- ;******************************************************************************# O0 T5 a2 s6 V; Q4 I$ [/ u, d
- ;" ?2 e$ }/ d( z+ Z/ ~) K" W/ s' ~
- ;******************************************************************************
& \& l. c) ]/ J8 c( J* \ - ; F. X4 y. A2 D9 U. d4 T
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and; c9 x( z- p$ e r* w
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
& ~' O# q) G6 e- _ - ; main() function.
% j1 Q3 p! k% L! i3 a0 e9 ] - ;
4 O" ~/ Z, |* k! [ - Entry:$ k) w' T: V4 b9 a( p: r
- ;
; v5 J1 Y& n# ]# A6 B - ; Set up the Stack for Undefined mode
6 |' H* [9 C/ @( B% @ - ;/ x6 \1 N9 B5 o
- LDR r0, _stackptr ; Read and align the stack pointer' U: J; M7 X% _1 ?- ^5 `6 {
- SUB r0, r0, #8
{' |% G( q, q) B2 ~ - BIC r0, r0, #70 p4 M p3 |/ ~! n6 P
- MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode! A. m! F) E- |$ s: X5 H E
- MOV sp,r0 ; write the stack pointer
3 T& E A' o0 `* o1 z3 e - SUB r0, r0, #UND_STACK_SIZE ; give stack space
1 Y# X& z9 Y8 @" t" U' S* n( O( z, L - ;
, F `, v" C' @ - ; Set up the Stack for abort mode
, P! o* k+ n2 v, q3 a+ E3 X' l3 I8 C - ;
" Y/ [: W+ E6 e. f R7 F; m - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode& P4 t: P. d/ x) `
- MOV sp, r0 ; write the stack pointer
' K4 r3 h& x4 h p O- J* w - SUB r0,r0, #ABT_STACK_SIZE ; give stack space8 T( q. ~- s' t+ M% n# G+ `: x
- ;
2 d: V$ k* t7 z - ; Set up the Stack for FIQ mode& Q( i; z6 M9 D
- ;
+ I3 l0 B% a* n) m5 h' q - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode/ J5 G, v! ?0 G- c8 `
- MOV sp,r0 ; write the stack pointer
/ H- Y1 u) u3 ]5 E7 u0 S - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space8 C; V2 L! |; \/ ?
- ;
. C& @, F8 M$ Q" v1 | - ; Set up the Stack for IRQ mode5 e% b3 x4 H2 P( H
- ;
' O8 ?6 ]5 @5 i( i+ l C! f - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode, h4 K! j+ j0 f/ p4 q
- MOV sp,r0 ; write the stack pointer
2 [' j0 p; I/ m w - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
: z' h$ Y& l; N# i8 H - ;
+ s5 M) r3 G i, c4 x - ; Set up the Stack for SVC mode+ k+ N+ J% j: }! [) I
- ;0 m% y' q2 b/ f0 U- J" y* v. v
- MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
2 q; V6 Z o" ^2 p8 } - MOV sp,r0 ; write the stack pointer2 x3 F% H) ]0 F% t# X7 _$ k3 h) x
- SUB r0,r0, #SVC_STACK_SIZE ; give stack space
" a `# f0 J: L% i: I - ;
9 Y6 v5 n# A c+ o9 z5 K# M: F1 Y - ; Set up the Stack for USer/System mode
; i1 x* ?5 S1 d- W- d( X - ;8 M4 W5 S. J* x2 H& L: {
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
! y9 q, I- S/ c0 M7 j - MOV sp,r0 ; write the stack pointer
3 d: ~/ Y, K) q5 w: Z. _9 M! B - ( C# l& W2 X* Z7 U) F
- ;2 `% K, M. k+ o2 K7 j+ _' t$ h. O
- ; Clear the BSS section here
' f- w1 [ L% H0 p6 L$ A! j - ;9 b9 x* _2 G# M
- Clear_Bss_Section:
5 ^3 x+ }9 @7 |( P5 V$ t3 v - 8 y" ?" I8 u% M( c
- LDR r0, _bss_start ; Start address of BSS
* }, _: L; Y( r3 k& j* d - LDR r1, _bss_end ; End address of BSS
. E2 j, q' x3 x9 n - SUB r1,r1,#4
! |6 p ]9 [2 j9 j - MOV r2, #0
( k& j; M! o* e7 w m' i - Loop:/ L! E" Y; r) I/ a- X3 C+ O
- STR r2, [r0], #4 ; Clear one word in BSS
% K5 Y. d- M% @ - CMP r0, r1/ K# ]2 C$ M% W1 ?( W
- BLE Loop ; Clear till BSS end7 X+ S, s: J8 Y0 u7 b0 w9 p* ~
- 8 x9 E* A4 x; x
- BL __TI_auto_init ; Call TI auto init
8 b1 \$ C1 O T3 x$ r+ x, @) ]0 a8 U - 2 H- D/ ^2 x& f6 B4 `( `3 v
- ;
/ a: F$ r' f) s P9 i, r - ; Enter the start_boot function. The execution still happens in system mode
7 z7 Q; C# L2 @9 @$ Q4 J0 e - ;
6 W. Z; w4 E0 n: z: b - LDR r10, _start_boot ; Get the address of start_boot
7 n, ?# y9 }, L5 w - MOV lr,pc ; Dummy return 6 \/ |" I4 C5 Y; f* p0 ^: j+ z
- BX r10 ; Branch to start_boot8 }8 r5 J) E3 ]3 s# T0 M9 N
- SUB pc, pc, #0x08 ; looping
: Y8 Q. e! r/ v) ^ - # S, |8 o% {0 z. {! d
- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
: R5 z" n6 j4 b/ k) X - ; BX lr U, X& t9 E4 j3 }8 h
- ;4 j4 G2 h0 A# n0 ]/ |5 m
- ; End of the file7 k& u) ?& V6 f( i/ F* [
- ;
2 O$ P' q! C: L4 v& x7 [1 D1 x9 f
" S) S$ G" k7 D- _stackptr:
: J6 D% V6 ]( x& `7 {: u7 z* c9 ?# [3 K - .word __STACK_END
2 d. f3 R, V# ^6 x - _bss_start:' V* G- I E! w6 |1 [
- .word bss_start
: X5 R; q6 L6 D4 n3 h& Z - _bss_end:/ x* |* U* J5 t$ w" M# u g0 \) S( n
- .word bss_end* m! B7 f1 L" }
- _start_boot:8 C: `7 @3 e9 ]2 l& o3 t3 F
- .word start_boot
( W6 [+ b) D3 b - _data_auto_init:
8 j& S. J z k/ S - .word __TI_auto_init
& @. C& E( _$ X$ i4 [( ^ - .end
& }2 }; m( }- P9 E+ V! t1 k% i - 3 G& L C, a( \) m
1 [1 y9 e0 V2 n- d3 F* O- + M8 o5 y" y7 q: T. U3 a1 v' i
复制代码 6 g1 V2 P) |1 Y" u/ g& {+ Q
. X& ~/ g. e+ h+ A- p: C0 v7 R. I$ t y& X! _. |
3 O0 }% B$ ~; a- d
* V) O7 _8 `" o' N- Z6 |
|
|