|
, W3 q$ ^' w* T3 p, _; q在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句9 S5 Q2 i' t) a" T2 y( w3 V
/* 重新配置程序入口点 */+ d+ t9 e. O5 G5 S/ o
-e Entry- /****************************************************************************/
& e3 y7 `9 E I3 w, V$ M( c0 J; q$ I" h - /* */
+ x: U* W- ?: B( S8 ^ - /* OMAPL138 及 DSP C6748 内存空间分配定义 */
- Z' W$ s$ H5 n w! u! [, v& w - /* */
' Q3 O$ }7 G+ d$ `+ |$ z# l5 W2 t - /* 2015年04月20日 */
5 B/ X0 ^6 n, k& c8 i1 ~3 L - /* */
" t- K( G5 v% ?- x( u+ w - /****************************************************************************/
5 w$ g- K. D8 ?3 f* ]3 I - /* 堆栈 */" i* h' e4 ~, {) Y6 s7 I) U
- -stack 0x8000
/ Z, ^$ x o8 K4 ?) a1 N9 E - -heap 0x2000' |+ }. u7 q* W" W
- ( ]; p1 L" C8 s
- /* 重新配置程序入口点 */
. q9 { G( G4 F2 z8 g8 a) n2 i - -e Entry
- k" G6 I8 w; O& `6 l% s) M, Y+ R5 S
# @5 A" E/ ^- K7 d' {- MEMORY
& i& E. e. U( L+ [8 O k: ^ - {9 L6 r, h# c8 l( J" v* y
- #ifdef DSP_CORE
& O7 U c0 T J, C. f# r. u3 ~ - /****************************************************************************/
3 d( Y' w5 A# y- V+ o8 f - /* */- t/ q1 i! F- |$ ^% E% u
- /* DSP 专有内存区域 */ ?) N& Y1 Q, }2 ~" K: [ ^4 S
- /* */# W0 `6 o4 y, o: \+ f& s: o
- /****************************************************************************/
{, Y( p0 z- N- C$ N2 Z/ r# o - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */: _) I* C1 k1 X1 c5 y+ |5 w
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
& v, K* R1 v) P# ]' e- v - DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */) v. e3 }9 Y, a
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
1 m- B# I6 Y$ w2 b! k- u7 V - #endif
复制代码 这是一段汇编代码用于切换到特权模式5 n0 f, P* K/ H4 @* X5 ^: ~
! ~" x3 l) k0 w% O
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm! g* Q Y/ a) i7 o/ V% U
- ;******************************************************************************: v% j A5 t6 W% k' b
- ;8 N) t h, E2 b. P; F' }, v
- ; init.asm - Init code routines3 @6 Q" d2 l- X( m( ~ t
- ;
5 s8 H$ ?" r& F, ^; }4 G; J2 |$ ] - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
; y g4 S. j" Y - ; All rights reserved.7 c4 A4 S6 r7 G$ V' n9 ^& f
- ;0 S+ W" j' W5 N6 w w# k
- ;******************************************************************************
( a6 k6 O* a3 r* S - ;****************************** Global Symbols*******************************: {3 {* R% {+ G7 H' _$ p
- .global Entry4 j5 p0 E* \! h8 ^9 e1 f
- .global start_boot9 Q3 e( v4 Z1 |- d- A8 I: F/ K, J
- .global __TI_auto_init& a& E2 P2 b$ y8 N1 {. L, a) ^
- 5 B6 B3 ?6 N. r! h
- .ref __stack
' g3 P% y. X% C; R- [: z- D - .ref __STACK_END; S6 O' m$ X+ w& Z8 M
- .ref bss_start+ Z8 j9 K ^* f
- .ref bss_end" S, D: @" a, Z9 D m
- .ref start_boot
2 j) |. p( r# e) y6 ]
4 `/ g' N Y! ~- ;************************ Internal Definitions ******************************
% d5 @0 @$ x M+ f3 S" ^, c - ;, E- n* _ }! a% j& s
- ; Define the stack sizes for different modes. The user/system mode will use! K" Z7 X0 c. [1 t
- ; the rest of the total stack size
; j! K: G! H1 t& y5 Y, a4 e - ;
/ W$ t% S* M% r7 _ - " V7 n6 T, M5 O
- UND_STACK_SIZE .set 0x86 o# o a h0 Z
- ABT_STACK_SIZE .set 0x8
1 b. u$ f3 K5 d/ v& Z - FIQ_STACK_SIZE .set 0x8
1 [3 H: \% V1 V6 ]) _( X: u - IRQ_STACK_SIZE .set 0x5009 Q( \6 C* a% ~5 a* n. T
- SVC_STACK_SIZE .set 0x8$ f+ z9 i0 l; M( C/ h
& z" i: u; b) S# L- ;6 Q: [6 D7 x; t/ H
- ; to set the mode bits in CPSR for different modes
, M( e, A" E( }* Q - ;
! r; _" o- Z8 r+ k" n6 i - & Q" E9 c0 k! e
- MODE_USR .set 0x10
2 A. [' H' P% u( I$ @9 _- x - MODE_FIQ .set 0x11( b' q6 F. X6 {3 d* ^5 Q
- MODE_IRQ .set 0x122 N$ F5 m! `* y) t
- MODE_SVC .set 0x13
- e3 k( S" |2 ^" j( d2 S7 `& \) X - MODE_ABT .set 0x17
0 h2 E& x, I' w, w. X0 J - MODE_UND .set 0x1B4 {# g' G6 ~" Y1 b' r7 X
- MODE_SYS .set 0x1F. i; }9 G5 o2 ?
- ! D) o- X9 |4 Z( v; C; x" h+ Z
- I_F_BIT .set 0xC09 e# z3 ^) D8 ?2 }/ {6 Y4 Z6 v" H
- " U7 X( y& g% _: R
- ;**************************** Code Seection ***********************************
/ L& d' z8 u/ h. H; W1 q: x - .text
# y4 o! D F# A3 ]! @/ p! D - 3 k6 t' V0 u# \) X, H2 t
- ;
; Q3 U) ]6 m) R: l - ; This code is assembled for ARM instructions
M/ `1 ^/ ?2 {7 J# Q$ B - ;
$ n S5 O+ M* t! `7 S - .state32( A. B U. y, i4 b3 Y
- : M/ T8 N! E2 Q
- ;******************************************************************************
4 O+ x! F% p% U7 g- l" f% _ - ;3 a' @: L3 R' W4 A
- ;******************************************************************************
8 F3 ~$ }; d4 e' Y8 g6 n - ;) ?) q8 _, r( T
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and5 p0 y# X. g2 n- T
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the, W" Y/ i( B) K# {/ ?0 p. d
- ; main() function.8 I2 X9 U, e! C
- ;* K4 A# P- g9 p, m8 Z$ s
- Entry:
1 _# f& C, o3 o6 V) j2 j4 F* Z/ ]) } - ;
8 G9 k+ x( O- \$ H: S3 p4 @3 ^ - ; Set up the Stack for Undefined mode2 G& z$ N* x& n
- ;
0 w, @ [, K( K( Y; ?# D2 K) Z - LDR r0, _stackptr ; Read and align the stack pointer) S" t' p* H e; @# c1 \
- SUB r0, r0, #8! s/ u& n p6 j' ~, u* h6 P' _3 M
- BIC r0, r0, #78 ?4 k. W) V" X/ k
- MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
' W6 e" e [! C: c2 B1 m# f - MOV sp,r0 ; write the stack pointer
# ^0 M1 y# |# U - SUB r0, r0, #UND_STACK_SIZE ; give stack space: \& W+ _& l* b3 |% x9 g
- ;/ p! C2 k1 r2 @' x; |, i0 K
- ; Set up the Stack for abort mode
2 j. @( |8 A/ i$ m- ^ - ;/ m9 R+ n7 T/ m! K. d/ u( y
- MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
7 T$ q. `5 s4 D, A - MOV sp, r0 ; write the stack pointer
1 u7 _0 `. i/ ^) e" C( o - SUB r0,r0, #ABT_STACK_SIZE ; give stack space0 o* _/ y1 o) v6 j9 e3 s0 {5 d
- ;, U4 c4 s5 C4 f( P7 n
- ; Set up the Stack for FIQ mode
8 S ^6 N: o; ~ - ;
( J2 ?* {0 u: g/ N - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
0 i8 U' B( ~, Z - MOV sp,r0 ; write the stack pointer0 U. k) P0 {* p
- SUB r0,r0, #FIQ_STACK_SIZE ; give stack space) h- \' r! ^$ o
- ;9 @- O g ]2 ?8 d# D" \. F0 k! {
- ; Set up the Stack for IRQ mode5 y1 m( a# y6 P, A. U: D
- ;
2 X( t, A* U" N# j; P8 z - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode# C0 H }+ a0 ?- u6 V
- MOV sp,r0 ; write the stack pointer% Q0 q/ l+ {/ L& L- [5 A1 k6 _
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space0 Y @( ]1 |3 y* S
- ;, v. S& M. e/ C
- ; Set up the Stack for SVC mode$ E+ @; H) v5 Z3 h1 L8 A* F
- ;
! Q. y- M, M% C( S - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode, h6 `; G$ C2 c% E7 T' B5 d1 p$ _
- MOV sp,r0 ; write the stack pointer
* u0 v) r, u' x) I - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
' S" `& r1 q0 d' K3 T - ;
$ `/ N8 M+ W, x6 V0 ? - ; Set up the Stack for USer/System mode
$ L/ e7 m" c- Y: e { - ;
# l) o7 N% t. G1 _; |- J - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
, P% D/ d4 [) x0 ?" n3 J$ A - MOV sp,r0 ; write the stack pointer
" W4 W) U" ?# B% c
: N& D2 _" J& F) W: \1 D% H2 o' b2 O- ;
- d% j0 r& l4 l" h8 n - ; Clear the BSS section here P, D! N% \# C B- f4 y* h
- ;0 } I$ B/ k* T$ R1 |
- Clear_Bss_Section:
Q0 h. o3 {8 _: {3 z% C - 3 r1 Y8 |1 W; f
- LDR r0, _bss_start ; Start address of BSS
) a$ X+ U( A2 {- x - LDR r1, _bss_end ; End address of BSS
5 G( Y5 Q! G6 ?4 R4 W0 l9 Q- E9 \0 w - SUB r1,r1,#47 t1 k+ C: z8 d6 }7 w$ X2 q
- MOV r2, #0' E9 P6 t2 s1 z2 s4 m
- Loop:( X6 Y3 u; I5 ` Q' M9 y9 K8 y
- STR r2, [r0], #4 ; Clear one word in BSS- M: l% I! e: J, b, H- U; K
- CMP r0, r1. B; |" q- ]+ I# l( D8 W
- BLE Loop ; Clear till BSS end
- @6 e8 t6 M( U/ |% b
4 [. h! Q. K& b- BL __TI_auto_init ; Call TI auto init: w% a* y0 g( |. _3 L# w$ f
- * Z# Q# j) V& Z; H- m3 Y- e; }
- ;
! q" D4 T! c& K( p0 O - ; Enter the start_boot function. The execution still happens in system mode
1 [5 s9 T9 g* d - ;1 [' Y' t7 _1 D* d( a4 |% _
- LDR r10, _start_boot ; Get the address of start_boot7 Y" D: y, c7 U; a' O
- MOV lr,pc ; Dummy return
( m* O1 W% V: q D5 j) J - BX r10 ; Branch to start_boot1 ~7 W% f6 h0 S! B7 T6 ]
- SUB pc, pc, #0x08 ; looping% H% G2 N. g8 ]# q( N$ c: a) ?+ F
- ; \1 r u) U" R# O3 X% @* }
- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
7 M2 G( s z" \% H4 t - ; BX lr
! J+ e, z% ?2 c2 n3 E4 k# V; | - ;6 ~9 w6 g0 n2 c `. P
- ; End of the file
Y2 I5 `# z: E2 n; x - ;: t) _9 M; W/ |7 k, U# \' C
; h# f( V1 X j# L$ M( T* O+ @- _stackptr:
" Z: I4 o# n1 u4 w& L5 c) e - .word __STACK_END; U1 D. Z0 q' c' B5 H! U
- _bss_start:
! r5 h- I2 r' G3 A$ |4 v" T; y5 S2 Z - .word bss_start% ~ w6 Y/ q* v- ?9 A
- _bss_end:
' S& z h8 z+ r - .word bss_end
5 Y* |- I( T; ]1 d# X - _start_boot:
: P M- L, W, `' `) A6 H9 J0 a - .word start_boot& h6 r1 Q% Y8 n' e& Y8 Z7 E( `# \7 @
- _data_auto_init:
4 X/ r& `4 ?8 l - .word __TI_auto_init. s8 [, W$ H: E, f* i+ _
- .end0 \1 K9 Q% Y1 x% E
- / h4 W% _ G) y) D9 S
- 7 E" m$ n0 s3 @6 E
, Y2 U0 B6 C5 Z4 H; B, ~ p! ?
复制代码 6 R: n, Y9 p! U! @
& W( H# U5 A+ V6 w' X$ L8 [% _6 } a
2 c+ S% u# D, b! G% a
: p1 p; d6 M/ |+ w2 c% B |
|