|
! g, i0 V/ n- W$ k4 W) t% B S: ~在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
. s; Z! ?5 h# C/* 重新配置程序入口点 *// C% q4 y) }- T' w& p
-e Entry- /****************************************************************************/
; F+ R0 s/ \ H/ v v - /* */; e5 l; Y: l1 [! @
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */
6 E2 H8 s, U+ g X1 r$ H - /* */
9 O4 v0 P- _# |6 r - /* 2015年04月20日 */& Q: A, T7 a7 q' U
- /* */8 M! F4 `' ]8 [
- /****************************************************************************/5 ~/ a, P2 o& j! o, J
- /* 堆栈 */
/ z/ s ]) D( Z, ]6 F/ V - -stack 0x8000& y" O: y/ W0 H' y! e; Z
- -heap 0x2000
0 ]( b! i5 V2 Y: j
2 m, _. |$ I; B7 K9 J& |- /* 重新配置程序入口点 */0 m! T9 j3 L3 y. c' \/ u
- -e Entry9 |1 x( y7 \& H+ l O! a
0 G( N2 q9 E: ~0 h$ M- MEMORY
! x, C% e. _% u+ T/ S E! O - {2 Q: k# c: _( T N. [
- #ifdef DSP_CORE, A* j6 \! G: f6 w9 m& i* r
- /****************************************************************************/, L% |! {6 A9 c( h" a6 z& d4 [
- /* */
[8 A+ x c) _5 |5 n - /* DSP 专有内存区域 */, R% U$ z! ?3 f {) z, }
- /* */# |+ Y% y. M7 Y7 y6 P, w I2 b5 T
- /****************************************************************************/
6 C3 q8 S. e0 T' \9 R6 ^2 ] - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
3 U+ q! n: m& s9 P5 H0 A; w) y) P - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
& S, ^2 N" z2 H: f' V - DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
+ ?" r8 K7 x7 h2 F$ {+ L: P! ~* W - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
* y% Y6 U9 A: N9 Y. q - #endif
复制代码 这是一段汇编代码用于切换到特权模式- h; O) q9 A2 p
3 M+ `- I: r: P: A* g9 K3 GOMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
4 E" G5 ~/ y$ B- ;******************************************************************************
" z# h: _6 E0 ?, s6 p+ }, j. Z - ;+ n2 T8 x, W' H4 e& t
- ; init.asm - Init code routines% j( [) |4 v$ e
- ;
: D0 D) g2 J3 ? q# ] - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
9 i; M; k' r! ? F; I: w2 N - ; All rights reserved.
3 `% k) @. Q. u; U0 K - ;
7 b2 p! p) C6 ], {* m - ;******************************************************************************
3 O& C1 J& a! l* h2 ^ - ;****************************** Global Symbols*******************************. Q2 C# M. W$ ]1 x3 B( K) \4 P) W
- .global Entry9 j! _; c. L3 E% [8 C9 O/ L3 f
- .global start_boot
* Q3 E, n; o( N& u/ \! K4 w c! P9 k# i - .global __TI_auto_init9 Q: v. P8 P, s2 X& a& G
- 3 m, J6 `) X! s8 J% y. o# U# J
- .ref __stack
1 n5 ~5 C5 n9 r0 z$ m/ W, E7 m - .ref __STACK_END
# I7 o0 R5 c" ^ - .ref bss_start
; J2 b: \6 b! _. \6 I - .ref bss_end
' B' o2 h) r& G0 X2 O! e: }8 `7 i- u - .ref start_boot
4 B4 C0 `. b9 M% o H
" L5 L; d$ z7 I8 x5 ?/ j/ v- ;************************ Internal Definitions ******************************
, d9 R% }7 s& e) }6 |; U - ;
0 k4 C4 [3 E: d0 ?$ W - ; Define the stack sizes for different modes. The user/system mode will use
- a6 H8 B- r) ~/ l7 R$ e" I - ; the rest of the total stack size8 ]% [7 H& b* k/ U
- ;! L/ U( N, P4 \$ o4 p$ v/ m; W
3 ~ w- ]& A- e$ s: i4 e1 ]' Y- UND_STACK_SIZE .set 0x8
7 K. n# r; C) F% r) x" ^6 | - ABT_STACK_SIZE .set 0x8- x# G/ K( M- |4 B
- FIQ_STACK_SIZE .set 0x8$ E& n; q1 A, x; x
- IRQ_STACK_SIZE .set 0x500
7 ?4 q6 c$ a0 c# ~3 L P8 Q- G7 G - SVC_STACK_SIZE .set 0x8
6 Y8 g1 O3 C0 ^4 g7 a$ F
4 \* d& E& t ]9 e* w" Q- ;
% i) v7 S" _ }# Q$ e& d0 l - ; to set the mode bits in CPSR for different modes7 R0 `4 x) {3 O/ O H3 v
- ;+ Q3 S; @( S3 b6 f! N# f
- % X' f7 I: C: W" e
- MODE_USR .set 0x10
* [. M1 g$ P$ n8 x* E - MODE_FIQ .set 0x11. ?; T; `' W3 ?$ Y
- MODE_IRQ .set 0x12
6 R: A2 X7 Y, T' m4 e$ H - MODE_SVC .set 0x13
, R) b% j& I+ N6 Y - MODE_ABT .set 0x17
6 f" \4 D( o( y$ b- | - MODE_UND .set 0x1B+ s3 {$ [) M$ J# b1 u6 J4 o) t
- MODE_SYS .set 0x1F
+ s( S' d6 Q% x8 c - 7 ~2 v! {$ d ?# C, Y
- I_F_BIT .set 0xC04 T7 Z1 X0 S. q
! B' ?* ?) _/ g* |- ;**************************** Code Seection ***********************************
9 N& v2 ]# q1 o9 \3 Y - .text3 }/ y5 G1 d. O3 K' w1 O0 f$ A! R
9 Q! [7 w7 R% i0 B. e- ;
& |% ?* W/ o7 m( t6 Q - ; This code is assembled for ARM instructions* C- F" {: ^: {! R, m4 `; K6 g4 y
- ;! b7 x/ v5 | G8 m0 D6 @
- .state32
/ ~1 a+ Z* g3 I+ z) N! v
5 u4 V+ q; \, J" B+ R1 }# q a, _* j- ;******************************************************************************
5 g! M0 ?* J9 X - ;0 I1 \4 _* ]' Q
- ;******************************************************************************
% y% [, ~& [* }0 k - ;
& T e& J3 S( a. K2 T0 f; A - ; The reset handler sets up the stack pointers for all the modes. The FIQ and
; ?: k+ {: r2 R1 x" `* b; e; F - ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
[# s) b. \5 p) I4 }5 X - ; main() function.( t7 q3 X& v! g4 _/ T% Y
- ;2 G* X2 U/ `: F& e& R- k: y
- Entry:
. E# h; w" `# _3 U - ;) u* a' v+ v7 s) |
- ; Set up the Stack for Undefined mode
2 h: I3 N- M6 u1 I - ;5 N2 a1 B* M' w
- LDR r0, _stackptr ; Read and align the stack pointer
# _0 d6 c0 ]# o& ^4 ~! ^ - SUB r0, r0, #8
+ U% |; l) ?# n# {1 w( n% t - BIC r0, r0, #70 b- t( V" G: K+ p$ ?$ w! Y
- MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode7 \1 V8 O, c" E$ O- \; n& O" w
- MOV sp,r0 ; write the stack pointer0 g8 D0 \# T; h& ^; L, k
- SUB r0, r0, #UND_STACK_SIZE ; give stack space
6 O3 B. R" v9 f. E# G! f- I& |) S [ - ;3 O+ ` _' Y) U( o. e$ S
- ; Set up the Stack for abort mode
% h5 p) q# U# I9 {' n - ;
' T% O6 G$ v7 ]8 t1 x - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode; b: F3 m9 w: g$ i
- MOV sp, r0 ; write the stack pointer
2 x" W' A/ V( W- |+ H9 w. Z6 _& @ - SUB r0,r0, #ABT_STACK_SIZE ; give stack space3 I' w; E4 ?, S; F# A
- ;
8 H+ M7 Q$ {. N5 }( h - ; Set up the Stack for FIQ mode1 d6 V7 `1 s; p! \# ?6 w: g. i+ ^7 Q
- ;
* w( Q2 N4 w+ V4 v - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode7 @& n7 @7 o& M" }1 N6 }
- MOV sp,r0 ; write the stack pointer
3 k: D# Y. X) R5 I - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space- N# x3 U$ f7 ~. }, {
- ;" q2 t3 [3 s. g+ ^7 p% {
- ; Set up the Stack for IRQ mode, P/ g+ g: l1 T2 t& E! ]1 P. h$ N! _
- ;
8 z6 K9 }8 T; j! g W: S - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode
l8 X K" g7 L5 L) k5 C - MOV sp,r0 ; write the stack pointer# O+ O$ q* d" i X4 B6 `+ t( N3 {
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
& L d2 a+ v0 n - ;
1 Y% S" h! v5 R - ; Set up the Stack for SVC mode
& O" X# j1 R* l - ;
0 d7 L3 t* n) F& F6 Q7 H - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
; F: l! k0 u. f# k( H# Y - MOV sp,r0 ; write the stack pointer
7 u" I( Q7 o' Y - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
! U' c+ ~6 u: z; b( _ - ;
9 g# S: b* E, x% h: b/ n) v# a - ; Set up the Stack for USer/System mode5 t+ b2 L+ \1 s. Q/ v. [9 R( f
- ;6 O$ P8 J' ^. N' M
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
+ b9 C1 h& A, h4 w - MOV sp,r0 ; write the stack pointer
9 v6 ^2 I6 q- T) c - 6 v) y& q/ V5 E$ F
- ;
! f3 L+ b7 K2 Z - ; Clear the BSS section here
" _2 \0 N' y5 ~& m - ;/ F1 Z0 U6 U7 Q H
- Clear_Bss_Section:
: s0 u# k8 m. T( [
9 b! v; H/ _; M1 F: O1 U- LDR r0, _bss_start ; Start address of BSS1 V' u9 O4 B& L; N* ^8 g( N( Z
- LDR r1, _bss_end ; End address of BSS
' {% P4 V# u/ B: p - SUB r1,r1,#4
2 R0 x' S% J9 V- g( H: R' N - MOV r2, #0
9 ^5 m. d3 @2 G4 J2 S n6 z4 E - Loop:
4 g- G1 Q4 j E, P& G - STR r2, [r0], #4 ; Clear one word in BSS
# Z2 q' V) a S' W - CMP r0, r1 `+ v, r6 _/ H! u% P( g2 a! u
- BLE Loop ; Clear till BSS end$ s5 n* z5 r# e9 C: ?
* o- c5 X4 ~6 w6 O0 B0 d- BL __TI_auto_init ; Call TI auto init
0 g! J0 t/ E5 _: {. L - , [+ s1 {# I( s! S/ N
- ;% O8 D6 R+ y* g0 l
- ; Enter the start_boot function. The execution still happens in system mode
1 H, Y& `) }5 Y+ M6 b - ;
& i' G4 u) H! b7 U. D - LDR r10, _start_boot ; Get the address of start_boot
& t9 ~9 I6 H& j+ ~! Q: a% D - MOV lr,pc ; Dummy return
0 u& A6 i# W: ? - BX r10 ; Branch to start_boot; p; \" L- _2 M; Z/ ~
- SUB pc, pc, #0x08 ; looping
2 S) \; P2 J1 L - 7 J5 O$ W( T& T, g' E7 H2 b
- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
3 n8 z% l$ p1 M5 J - ; BX lr6 C" o/ p' d8 [% y" f" p. |# E7 C
- ;
H6 D% D& L9 ~5 T( Q0 q - ; End of the file. ^( C+ V4 T7 J
- ;
( t1 p2 s. z7 y+ `$ Z$ X
0 O5 q7 J1 b$ F8 h# K: u- _stackptr:+ O( `" C/ |% V
- .word __STACK_END
. q7 q9 \- f" K9 k7 G - _bss_start:6 ]% ^( k; h6 b& n8 x6 z
- .word bss_start9 O: |: d0 c( j7 S6 q Y$ [
- _bss_end:. C( i* z, V* Q+ r Z
- .word bss_end
, A: ~; x/ W) Q% E+ V, ^ - _start_boot:* Y+ x9 Y& h5 S& Q
- .word start_boot
. r3 T" ?/ w+ }) H! k! |6 t - _data_auto_init:
; c3 a: z, A5 x" D$ G - .word __TI_auto_init& e. _' ^. l% U* Y$ @4 ?
- .end) l }) H4 _9 i3 E/ J) C- t
-
# I k7 N5 J: P! e# w
0 V, L5 B& j' m* z2 M/ H2 S- * G1 D4 \- f: v
复制代码 . Y; [# w7 s" H; P8 N7 ]
n C" u+ a! q9 z- B
/ ]. W4 I$ d& v
! A/ X1 N) ?/ ` U3 d3 b" K- g) l- V1 k& U2 F1 ^
|
|