|
+ h. |9 _) x9 I: _; M4 W- ~在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句4 n* L. r* @' P- u* E1 `, Q
/* 重新配置程序入口点 */
1 v3 R& m' N; ?2 m: `5 `9 j-e Entry- /****************************************************************************/' P# @/ E0 n) a6 l7 p$ y- Z* b/ v: h! Y
- /* */+ P; u1 r; F+ {5 S; T! M2 L5 K9 M
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */
' u8 Y8 P1 P, r- P - /* */: F+ c8 t1 d: F9 c& a% F1 L
- /* 2015年04月20日 */
8 j( ~2 O$ U; o. e; I k9 q* K - /* */2 |' c& y. J/ l, t1 P9 e( ]# T8 O1 b7 g
- /****************************************************************************/4 z. n! a$ @9 r4 N) j. D% r
- /* 堆栈 */
# c5 Z) t5 ^5 I- A& H - -stack 0x8000
# F! S, c' |, B) B3 y3 T - -heap 0x2000
+ y8 i( b; p) U; u/ n
+ m- r" T. L3 j; i9 y: v- /* 重新配置程序入口点 */
5 h9 N7 W- u7 b8 ^& D% H4 [- L' x - -e Entry
; l5 S8 Y+ m! _
8 N* L. F% ] V& A) _" b% |( O- MEMORY2 v1 F2 z( N9 O8 c) J8 n) o2 R% }
- {
1 z5 f4 u2 b1 k3 s/ M% j& J - #ifdef DSP_CORE, k# `) j$ X& V
- /****************************************************************************/# z3 Y% J2 U; ~( ~
- /* */# [, ~3 k- c. W* w; t
- /* DSP 专有内存区域 */* u! _- O- B5 l7 Z, x
- /* */
) |( ^2 I" @9 C" Y - /****************************************************************************/
4 g9 L6 B; c/ W" n$ x9 M/ Q - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */ b& x$ c I6 H: @) v
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
7 m% ~2 ~2 V, N' i - DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
" s3 s* k( Y# d' Q3 `4 d - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */! r' k% h; Z k5 u. j/ }& v' o$ o
- #endif
复制代码 这是一段汇编代码用于切换到特权模式# A( u* I/ D* R% ?( t d
* L( m5 A' \/ Y" L0 YOMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm, |- p" r; |4 S+ T& n) H
- ;******************************************************************************
' m! b+ Q- L* ]# J; ~1 _0 b: ?1 P - ;
% x8 n+ K( w0 g0 n - ; init.asm - Init code routines: `) r4 E1 w* }% A* j: M1 Z
- ;* m" B( O- }* S Q8 s2 Z1 P/ f
- ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/- G) f! q) y2 ?' U) T& Q: u
- ; All rights reserved.+ Q) |( Q# Y: ?
- ;
0 I9 B# V' c7 `2 ?) y - ;******************************************************************************/ X5 O8 z& p; i' b, [/ U; o0 U X
- ;****************************** Global Symbols*******************************8 i( Z1 t% O! n; O
- .global Entry$ j/ [1 Y$ t& r/ ?# ^; M* W! u
- .global start_boot
/ k: D: c/ }1 [. v8 u - .global __TI_auto_init
) R4 y9 K% ~! b. G& i
" r& R* I& s0 Z/ e- .ref __stack' k' O$ ]8 E( @4 p% R
- .ref __STACK_END
- @5 ^& R6 U" G9 l' Z/ I - .ref bss_start
- }4 J5 d M# j5 u - .ref bss_end% B: K. K! k+ x
- .ref start_boot
5 u' r" c: u5 d, o6 P
5 {/ @& ^ r E, S( W- ;************************ Internal Definitions ******************************
5 O& r% j' b/ h1 w+ U- t - ;, S* p8 I9 e# }0 ]5 U
- ; Define the stack sizes for different modes. The user/system mode will use6 e' S4 B3 b: T7 C9 k& v5 i
- ; the rest of the total stack size
/ X! K* B0 u) e9 ~% p - ;3 y9 u: r n& r! O( G- m( i1 D B1 x- ]
- }! G0 |9 U* g- L
- UND_STACK_SIZE .set 0x8
# H! d* o, N9 E+ V - ABT_STACK_SIZE .set 0x8" v2 R" a, R; h- P f
- FIQ_STACK_SIZE .set 0x8# J- d. A6 r' S
- IRQ_STACK_SIZE .set 0x500$ E5 o% }, o6 X" }0 X# T
- SVC_STACK_SIZE .set 0x8
' |& q( t' ^3 y# e" b - 5 ~( {5 o/ B N/ p- A
- ;
6 r- ?- I1 _/ ~ D/ K - ; to set the mode bits in CPSR for different modes3 y$ T) i* C# ^/ c' b
- ;! ~1 f6 H4 j4 O5 h: v
- 4 B- _+ n* s( o9 b
- MODE_USR .set 0x10
1 E; d9 q' `7 g - MODE_FIQ .set 0x11
. ?+ r: G" d1 T% f - MODE_IRQ .set 0x12+ @9 ^# a( K9 d+ Z/ ]4 J6 w8 ~
- MODE_SVC .set 0x130 P n( q! Q' e& k* L5 Q5 P a4 D
- MODE_ABT .set 0x17( h- B+ ]) c6 t1 u9 n2 m6 r9 z; e% D3 x
- MODE_UND .set 0x1B6 Q/ g- P( C0 D( h2 {) G
- MODE_SYS .set 0x1F
% G q' j- |7 N8 I - / F2 }3 v E0 Z2 r7 W- ]) m% ^
- I_F_BIT .set 0xC0
3 f1 p7 z# j( _$ L" {/ f2 N* g
8 G' m" c6 @' M# L3 V$ V- ;**************************** Code Seection ***********************************4 Z" ?* [4 a7 b/ Z- m
- .text, y1 N, L8 Y2 B- Z. }' c( a I
- ; a/ Q, Y8 ]( C
- ;2 Y/ O" n' U$ E2 S8 {
- ; This code is assembled for ARM instructions
( d) ]) s( d8 l7 d0 `+ m: }. P - ;, @" U" C6 \2 q; a9 n4 ~; f) M0 b
- .state32
8 e2 X- n* l; F2 j; W. ^
8 B! z ?: B+ `# m& O- ;******************************************************************************3 ]1 q# @: U2 Q9 V) n- e# O# L
- ;4 V' @ e9 @' N; C5 [
- ;******************************************************************************; O% n* D) }7 c6 x' M. N' T0 q$ s1 z1 _
- ;9 `' U1 ]8 ^3 w& J' b* i2 g
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and
6 T7 Z! v S" a& c$ I - ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
2 s( v8 j+ d) c) H - ; main() function.1 x2 x$ d& z& y m/ t8 e
- ;
+ ?; W5 v2 M6 \ - Entry:$ [# L" q/ @0 l t2 e% e. q* ^
- ;
" N% l! N5 j" G3 {' h) L - ; Set up the Stack for Undefined mode; T& H; f4 O3 w
- ;5 Q# z" Q p) ]7 F
- LDR r0, _stackptr ; Read and align the stack pointer
, A0 G. k* B, } - SUB r0, r0, #8
! H# q6 m8 k+ ^3 _3 J5 N - BIC r0, r0, #7
% E. P( M8 E" c - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode5 F" w B' F" ~6 ~( n, ]4 Y( o
- MOV sp,r0 ; write the stack pointer. b' q1 o9 Z$ Q* G! d& v
- SUB r0, r0, #UND_STACK_SIZE ; give stack space
- N( R7 I& `$ O: t; M F, N$ G - ;& z J; h9 m8 V, r
- ; Set up the Stack for abort mode6 U u1 ^ e$ I" i6 n* o
- ;
7 M0 _7 U$ M; D# T* O - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode- d# Z( ]6 q# D+ T* i+ O0 }' A
- MOV sp, r0 ; write the stack pointer
$ v! x5 o3 S p1 U2 c& C% M! {/ Z% e, g - SUB r0,r0, #ABT_STACK_SIZE ; give stack space9 U$ B$ w9 b- R" d+ {5 E
- ;
4 [% [- ]+ t0 I( E) S8 N - ; Set up the Stack for FIQ mode
9 t5 G2 I; b6 f* ^ - ;
, s) R4 ], }0 v0 m+ H - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
4 b( ~0 i- v/ J! B" P8 @ - MOV sp,r0 ; write the stack pointer
3 ^# s$ b$ H7 W2 {+ i5 k6 A" j - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
# O/ k* [4 ~. V0 D; h" M - ;
, \" v9 U& G% \7 K5 V1 z {0 A - ; Set up the Stack for IRQ mode
. C: {' `! M$ Q6 K( V/ W# x - ;9 B) P% F" |6 l- m4 n1 s1 P
- MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode
% D" a6 g& W: ? V - MOV sp,r0 ; write the stack pointer
6 b* K7 q& C. z" n' P/ w0 ?4 P! j - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space) f+ O5 @# k. X4 X/ x7 d* G( u/ `
- ;
D& b$ N! A5 j. k - ; Set up the Stack for SVC mode; H4 i5 O) m/ U0 C
- ;
* g0 _# s2 i$ p9 R ?+ R7 j9 X - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
/ E7 n5 E+ T$ k/ N1 s2 R - MOV sp,r0 ; write the stack pointer; v9 F$ H4 [7 p7 [5 P# q" ~! v: Y; |
- SUB r0,r0, #SVC_STACK_SIZE ; give stack space7 Q3 m: i; i' B4 x) v
- ;- }/ N: W/ R2 z. E6 q
- ; Set up the Stack for USer/System mode
| Q+ P6 b4 j: n - ;
5 F3 w4 H/ S5 R - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode3 {, b* I4 c* ?) C
- MOV sp,r0 ; write the stack pointer1 T- H1 F1 m0 W3 s# k0 p
$ P" R* m3 W9 y5 S, |# }- ;# R W' ^/ t! W2 J
- ; Clear the BSS section here. b, Z# P+ B+ P, ]3 I
- ;
* g) _/ Q' Q$ m% ? - Clear_Bss_Section:
/ a/ i- |- c3 s6 s( `5 d; ~ - 2 P7 `: S$ X8 `1 s
- LDR r0, _bss_start ; Start address of BSS
0 n" h4 p" V" I; p - LDR r1, _bss_end ; End address of BSS0 Z( J& O1 V& O, } k3 l
- SUB r1,r1,#4( U/ d: q8 L% S |
- MOV r2, #07 _0 d" k- h! ~/ b
- Loop:: }9 A4 l: D" K% a$ t
- STR r2, [r0], #4 ; Clear one word in BSS# p. U5 Q8 G1 X/ m2 e8 {9 H
- CMP r0, r1
- Y) ]2 u: O! e* O; y - BLE Loop ; Clear till BSS end
! n4 }+ h4 d& W5 Z1 o D, Z0 p - & @) v2 k0 W T6 ~ O& u6 U
- BL __TI_auto_init ; Call TI auto init
# W, |" S& U7 H% Q. T5 K5 l' F9 I2 D
4 o0 J# f. l2 P# L* f5 g- H- ;/ }: L9 o3 R4 ~- q# R% O
- ; Enter the start_boot function. The execution still happens in system mode+ p0 N+ @0 ?! {$ H; Y/ C6 l9 k
- ;/ B7 R0 y' i: Y4 l0 e$ f
- LDR r10, _start_boot ; Get the address of start_boot1 b) [. ^& |6 D( u3 w5 { J
- MOV lr,pc ; Dummy return
& T; z: p1 u a - BX r10 ; Branch to start_boot+ M2 I7 `1 g# C; i. O
- SUB pc, pc, #0x08 ; looping0 x" `6 Y% Z9 _7 C( G# V% j
8 D4 h3 ^/ Z) X6 m2 @- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode$ Y, h/ S$ o7 q! K3 C0 u' _& P, {
- ; BX lr- q; h/ P) C0 t- ~. y0 t
- ;
' r. V7 j" h* m$ i x - ; End of the file
, l, H( W) a" A1 L - ;1 A n; ^8 x6 @; C
: [8 `0 t; _, ]1 H+ h- s" p' g- _stackptr:6 H# v. q' `( b
- .word __STACK_END( d$ p! Q. ?) x* G2 F
- _bss_start:0 }# O+ }* S3 u$ p" a. n* s
- .word bss_start% Y( l6 u3 X6 u1 ~/ @7 K2 y! G
- _bss_end:
8 m. S& W! s3 Y% g - .word bss_end: j2 G' r7 K- w* z
- _start_boot:, O8 |- h6 I" ]) D' A6 s
- .word start_boot
! S3 g0 F( X' e4 t5 P8 \0 F5 Z d; c - _data_auto_init:
9 w# E: u4 _. w - .word __TI_auto_init8 O( W4 C& O2 U, g7 r& @- \: d( k
- .end
# E3 ` i# U: T6 C9 c, L8 [ -
E' m% z& |8 |9 m# r+ Y
}, [. ^7 Q; ]; f* w, w- % F) O# C1 W# C' r) b- \( R
复制代码
. `7 k; `' p2 d5 h8 T" m4 ^4 W) i$ M9 X$ K
3 ]5 H$ c3 E, a+ |7 W$ z: H
/ i5 H7 u6 T" w3 A+ V% V" i' D/ v/ q$ A
|
|