|
) o: b l5 N x( @+ s在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
: W$ K" I! Q% n5 r8 T% p/ B/* 重新配置程序入口点 */
: ]7 e7 b7 i: r5 X-e Entry- /****************************************************************************/
* ~. ~8 _9 D3 q- P. W - /* */
$ K. u* _9 i' x7 D* h) @ - /* OMAPL138 及 DSP C6748 内存空间分配定义 */2 s- g2 E; Q" T# z0 T+ L4 \
- /* */
/ B# u% A E0 T3 }! {6 h \ - /* 2015年04月20日 */ P/ m) O u2 E# W0 T
- /* */
4 \7 p/ i$ X( Y2 F* d! F - /****************************************************************************/
6 N; m( y$ D6 s0 l: g - /* 堆栈 */
" X6 ~2 s) l b2 @( R5 G5 b, G j7 G- R - -stack 0x80009 G0 {6 Q: Q3 o3 W& z# I3 c+ k7 E
- -heap 0x20006 a5 ?* j# [) C9 z+ j( \( g
8 m2 c. S5 V: z- /* 重新配置程序入口点 */
) Z0 r! [' |4 P2 _% [/ I2 { - -e Entry2 d7 L7 D: y6 ]% F$ x
- 4 M/ \$ `' _, h, L+ C
- MEMORY
+ p5 z" e0 A8 B, v2 M. G z - {, \' G5 I' h; i0 A' J* k/ l2 X3 V
- #ifdef DSP_CORE
! _8 b+ c. K; l- @* R$ R - /****************************************************************************/6 ?8 W, P8 R x& h. O" H& U
- /* */
4 J5 \6 j: b- R6 }3 N; U! K" T1 U - /* DSP 专有内存区域 */& S2 P' r2 z! Z% {% S
- /* */* s; R5 n2 q% z# x5 C4 `
- /****************************************************************************/
8 @( k% v- S2 c5 [4 q - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */8 {* t7 \8 r# [
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */1 q% z s- v7 s# a: G
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */8 \! m( _3 L x- [4 } C
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
/ {+ @# B$ [; p4 E4 U - #endif
复制代码 这是一段汇编代码用于切换到特权模式
! B5 y: h! u z" M% q3 B/ e
& \1 g2 L% a' d. \; VOMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
1 |4 _) m; C" n% A' v! x- ;******************************************************************************
) ^' i, c; d: R - ;" m/ j a7 z% `( C# J+ y) m
- ; init.asm - Init code routines
' l' k1 `& y5 E8 w' n, @' A - ;
6 j$ d8 m8 N5 b, P6 a+ _0 n/ J2 w" ^3 S' B - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/8 P# j0 n5 x/ i4 ]; p
- ; All rights reserved.
; o7 [3 n# |. ?. c - ;
$ R; O5 s, Q. S& I0 T9 Z: a - ;******************************************************************************" |6 v. b& D( h. k+ i% s
- ;****************************** Global Symbols*******************************
* [3 V$ z% l( b3 y2 g - .global Entry
! h. v8 G+ ?! v8 J# R9 N/ K - .global start_boot
, ?. n7 H; ?. s3 y$ p9 U! ~ - .global __TI_auto_init$ e0 ?. c4 p, V
- - h3 ]4 c5 K7 `9 F
- .ref __stack/ `. }% r/ a3 x s9 E, a
- .ref __STACK_END+ R& n" E9 Z7 L2 i1 B7 W5 h0 [! ~
- .ref bss_start
1 V& V: {( I& T* _9 e( Z' F - .ref bss_end
/ r4 k8 i, x" j( J8 R - .ref start_boot
0 G6 R, h/ P+ B9 r1 a- k1 o
% K( K. Q0 z( S. K! `- ;************************ Internal Definitions ******************************- d. l$ N; s2 H4 c- f
- ; g/ d7 r5 Z! q$ F. P7 Y
- ; Define the stack sizes for different modes. The user/system mode will use+ K5 V% r5 M8 ^ l0 e
- ; the rest of the total stack size
2 T: P1 P! q5 L - ;0 m2 x; x2 \" U5 e3 a7 v0 X5 a+ [
- + w: N# Y. @4 d; p* y8 L$ @
- UND_STACK_SIZE .set 0x8
& V' P1 j5 \5 z - ABT_STACK_SIZE .set 0x8
- V9 V9 L+ g) Q- U3 Q1 Q( U! @7 k - FIQ_STACK_SIZE .set 0x8
& o+ B2 B1 \; h# y5 @% B v - IRQ_STACK_SIZE .set 0x5004 b2 H6 c: u5 {+ J, x1 p5 B
- SVC_STACK_SIZE .set 0x8
# a' }7 [+ \4 M# E' J
! P4 Q: ~$ J$ Q1 l2 g. ~' ]- ;
* A; F9 K$ ^* H# n - ; to set the mode bits in CPSR for different modes' ^9 [" {8 V* l% P: @1 ?1 O4 X5 M
- ;
1 H, D$ L! q- F: R - 2 c4 n0 T6 ?# @) H$ T
- MODE_USR .set 0x10
" P! Q& F8 ?; _9 v - MODE_FIQ .set 0x11
l9 D5 a# _9 k - MODE_IRQ .set 0x126 J" W% v; c% P5 ]5 b e" T2 {
- MODE_SVC .set 0x136 W" ~$ L% e- Y) n; b
- MODE_ABT .set 0x17! G; M: D* s; d1 `
- MODE_UND .set 0x1B
* {( m. S5 z8 c% Q" w3 X - MODE_SYS .set 0x1F. e7 x- @, {' P: V2 v! \7 Z
4 o, y& f4 M7 e" d+ o- I_F_BIT .set 0xC0
% \ W; @0 Y' H7 z - / T& J+ @* v6 n9 `8 H
- ;**************************** Code Seection ***********************************
, r) `9 Y" m0 N6 I7 V/ ? - .text! \0 [' C- V3 H
# [8 P7 H5 C' N5 V! U- ]3 I. X6 D- ;' k9 c0 T( l) F9 a+ a
- ; This code is assembled for ARM instructions
+ P% J/ i/ c( Y+ E# Y- ]. u - ;
& ^4 B7 p' `3 }# q! D4 F - .state32
6 r, }$ g$ J+ r- z" J# P' `" F
% Y. c, A# n! D3 e9 C# @- ;******************************************************************************8 w$ m7 N2 i$ P9 I* o
- ;
+ s9 K0 Z0 D+ p - ;******************************************************************************, }8 r6 X7 j& _5 `
- ;
& v; j% O+ ^' H2 N - ; The reset handler sets up the stack pointers for all the modes. The FIQ and* c9 W3 U) R! T' R8 Z" U
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
3 @$ M3 B* I: f% s2 S# @. L# R( t - ; main() function.
2 f, Q! i! C+ L - ;
# p3 p0 T- S0 \ - Entry:
$ r- s( d& v% N' w/ g - ;
7 d" X* R T" v- I - ; Set up the Stack for Undefined mode
& V7 U; Y2 ~- ?- [ - ;
& j$ _& A: h, j# H - LDR r0, _stackptr ; Read and align the stack pointer
4 w+ f' V7 f; r1 R/ z4 x, q! F. n, N7 } - SUB r0, r0, #8
- U }8 ~% A) _' h - BIC r0, r0, #7
0 x2 O M: p( N9 ~4 h - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
$ M7 @! ^9 i) ]: ^- n - MOV sp,r0 ; write the stack pointer) U6 D- ~$ @( K& }7 h6 D$ d
- SUB r0, r0, #UND_STACK_SIZE ; give stack space
i9 {9 ?6 t, m" `1 \. q+ z1 T- s - ;
/ y/ `4 q9 H) X- k( z: @ - ; Set up the Stack for abort mode
- C8 o* K: ?% \: `4 z7 ^ - ;
! b# E/ e4 z0 m+ y- T - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
& {% d7 N# h" B8 C - MOV sp, r0 ; write the stack pointer
m, X5 U. {9 c/ h( v3 L+ l - SUB r0,r0, #ABT_STACK_SIZE ; give stack space4 H5 T& T+ H! R, U9 ~0 @- {' Y
- ;
) L s2 J. z- X) O5 a - ; Set up the Stack for FIQ mode
( X4 |) h/ ?+ S' j1 V5 ` - ;
0 v) \; s/ M3 s Q9 U$ r3 ]' P - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
2 D" [: d `/ d: z - MOV sp,r0 ; write the stack pointer
* t& x; L% J+ \8 M3 o5 W; H, R - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
: o4 q1 w5 I7 K* A* P - ;: Z! H5 A* m$ }8 S
- ; Set up the Stack for IRQ mode, E/ i! Q1 h1 P0 _" b
- ;
. J: J6 x n! ?; {5 ~; [ - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode
3 y/ p. t: L* u0 X& u - MOV sp,r0 ; write the stack pointer
2 ?4 K' t; J" t- N( q5 _- ] - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space9 ?1 |: `: _# h
- ;/ @! k% z6 D% }8 K" _3 E# c
- ; Set up the Stack for SVC mode
7 D* V$ q# {1 }0 U/ O - ;
2 F# Z! j) z: g Y v - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
$ I2 j% a: m# _- B - MOV sp,r0 ; write the stack pointer& |" d1 q+ I t) F) o
- SUB r0,r0, #SVC_STACK_SIZE ; give stack space
' p A+ G3 r8 k. X - ;; K/ Z( {' s1 H4 ^! H0 u' m
- ; Set up the Stack for USer/System mode
) b* _& a" e3 v b - ;
7 b! i: Q6 v" f) F6 P4 w - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode( F4 u7 |- ]% z9 @ l3 _5 v+ Q
- MOV sp,r0 ; write the stack pointer
- ~1 }. X% J8 D2 x9 B. x8 ~; u k
+ j/ S0 g' o# o- ;& a7 p6 m; ~+ @' M) F+ S
- ; Clear the BSS section here9 _3 ~3 \8 e' |8 M. M6 c
- ;
% X4 V& p0 A6 y5 S H P - Clear_Bss_Section:2 O. e2 F( j& A
- * G/ z0 q1 n f( [. s
- LDR r0, _bss_start ; Start address of BSS
& u6 e+ |( g# E' [: R - LDR r1, _bss_end ; End address of BSS
& _# K6 i9 X9 W5 g. T; i% \ - SUB r1,r1,#40 Z7 n' i6 k2 D9 H$ Q+ E5 Q
- MOV r2, #0. p* E# U- w0 d* G9 Z1 b
- Loop:
. O- U6 C" z1 ~% E! E) a - STR r2, [r0], #4 ; Clear one word in BSS, ]) c# A# p8 s5 N ]
- CMP r0, r1
C1 b& ?: z* V4 T - BLE Loop ; Clear till BSS end
3 {: B% m: Y2 b$ I* W; n - , f" A! B5 b# r) D+ b
- BL __TI_auto_init ; Call TI auto init0 U6 X) I' M8 ?- z: o& }
- : K' u7 M. G \ n
- ;
: n6 }0 n' Q- {; A - ; Enter the start_boot function. The execution still happens in system mode
' v( I# h' M' H$ f: K - ;. D1 c0 p* U4 K/ I* z4 K
- LDR r10, _start_boot ; Get the address of start_boot
3 f# c; l0 ~2 \: P+ d1 U - MOV lr,pc ; Dummy return
: }/ G& M' j' Z) {& Q7 K3 o# h; s/ a& | - BX r10 ; Branch to start_boot
! G3 ^: A' j( S( j3 B - SUB pc, pc, #0x08 ; looping" L- e9 [ O9 B. s
* T+ [- U+ E' W: a4 m- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
1 I) L) S- T2 K5 G% @" d, h3 y - ; BX lr
! i Q* M9 c+ V q5 g" c - ;) ]& I' `) F0 a( T) c
- ; End of the file
8 B3 F% M7 `9 \& q7 W* x - ;' b7 y/ K+ O b0 ]
o; b$ T% P% d4 U% Y" s4 n- _stackptr:8 \% k, |5 M% K" v
- .word __STACK_END
- s1 `# |* j6 z# ?) B* A( b7 ^- m - _bss_start:
' x6 x& y& m) A7 r+ b; @ - .word bss_start
9 Y2 J. j6 t4 K3 I" f - _bss_end:& e) l/ g4 l6 e: Z! E
- .word bss_end
' ^- x3 F& `$ y2 J - _start_boot:
# m8 A: p3 Q7 H# L ~/ p: x - .word start_boot
1 P4 h w( g1 p: D H - _data_auto_init:
9 C8 ?8 q5 s/ S - .word __TI_auto_init
4 t6 K: L- A: Y( U - .end/ _3 f/ N* j y) x! o
- 8 j* h& p# D2 |" C( ~. Q/ w) m1 i
- 3 n/ l) z2 }3 P! q% L {& Q6 l) q) u
) J+ o% A ?( T6 W }2 y
复制代码
6 x, y. a: D$ I J$ W/ {9 ^$ \* L" H( g5 Y+ V# \
$ b7 P8 k6 T( d: @9 S; y
' U4 o' c2 m2 e' J
! T* x% G7 \, t3 s3 m% \" O |
|