|
4 u D5 g1 K) ?1 [在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
# m8 B* m0 v) @% z; h: G' p0 C/* 重新配置程序入口点 */; o- ?2 Z2 o; ^" }3 b0 N$ H( H
-e Entry- /****************************************************************************/
' T/ ~+ g! V# U - /* */
: x) e' @6 j3 D4 S - /* OMAPL138 及 DSP C6748 内存空间分配定义 */. m5 r k/ u( y4 R- o! h
- /* */
" b J: X) [. F1 Q/ t0 S - /* 2015年04月20日 */" F$ G1 i) h: B" {8 p, b
- /* */
$ K4 U+ v, q" g6 I9 d9 } - /****************************************************************************/
; U' u& [$ d& O# F - /* 堆栈 */
# o6 W4 q$ ]( C7 h" u - -stack 0x80007 S9 ^( y( o: s: Q/ S% T* p9 x
- -heap 0x20009 ~/ W4 t( x) o6 t; {( ]2 m
, N8 t' Z3 V" E* | _! p- /* 重新配置程序入口点 */* S. g# z7 P. m$ @* K
- -e Entry9 K+ ?' H# {4 N3 s
$ F+ |- r- Q. ^7 P t$ }: ]# B- MEMORY
. K$ O) V( r4 r- y( B1 J x o - {; q! |4 p- l; m5 H! O' a( w
- #ifdef DSP_CORE4 M3 a7 s& S: {" V" A1 ]+ z/ Z/ i9 D
- /****************************************************************************/
$ M: D s: \7 L# T# M/ ]! [ - /* */6 ~( ]8 U4 p1 R5 S
- /* DSP 专有内存区域 */6 f8 \% e( `+ B# Y/ J
- /* */, h# N4 o- M2 J. o- F
- /****************************************************************************/
: O" b$ B. [$ Y! R8 Z, q Y/ r7 v - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
x& y. B8 Z( i9 {4 \7 \3 P0 N# @ - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */4 r3 j5 p9 a0 c4 `1 f* i
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
/ g5 Q" [/ a1 ]( ]* n; ?- g+ ~7 x8 | - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */5 \" t' c$ B- z3 W. C, R4 g
- #endif
复制代码 这是一段汇编代码用于切换到特权模式
% [& B8 h7 f3 g" Z7 }5 t8 B Z4 l( V4 J* W& S, {
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm* k4 M7 H2 V F+ f. Z& _) x0 h
- ;******************************************************************************
) O1 Q& A6 e7 N1 r5 i - ;& e! |7 N& l- u
- ; init.asm - Init code routines; y) ]+ N! n6 X
- ;
) M9 _4 n& Y9 \1 k - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/7 Z1 z: `$ n, x* p0 q
- ; All rights reserved.3 m+ Y: s# L4 K+ ?$ P
- ;
5 J& O- k/ L4 k* H. w2 C. @5 Y/ D3 n - ;******************************************************************************
6 K2 }4 \& Z4 ]! X - ;****************************** Global Symbols*******************************
) J2 s, {: q* }1 i, h3 N - .global Entry
' y0 F0 o* E8 {! e2 ^ - .global start_boot+ {+ ^2 F8 a2 `# T# L0 f
- .global __TI_auto_init& q, J2 P& H3 P' K( F9 [5 Y
9 i7 f+ G; d6 Y9 V- .ref __stack
/ T9 _4 O8 Y5 j# ] - .ref __STACK_END: I$ c' x+ P1 W# g5 F2 d |
- .ref bss_start
0 Q: ~5 ^8 D) m, M1 i# K) N: M9 n - .ref bss_end G1 u" d: Y* L: I1 I/ \
- .ref start_boot
1 s4 L$ g% X' V+ D) ? - $ Z) m2 j% G- F& p
- ;************************ Internal Definitions ******************************5 j6 j" T4 [6 o+ O& {0 x
- ;! y6 W. L( V1 w1 C t
- ; Define the stack sizes for different modes. The user/system mode will use' Z% N) p1 V0 N! v5 g! @
- ; the rest of the total stack size
1 t" R+ a# q. m1 M - ;9 g7 y0 X8 w# \' A
- T7 S# n: @( ]- UND_STACK_SIZE .set 0x83 k+ \1 u7 h8 J O- G$ @
- ABT_STACK_SIZE .set 0x8
, h/ ^. U9 q. J+ p& T - FIQ_STACK_SIZE .set 0x8
! B! ?2 Z) b2 E7 v; x1 u - IRQ_STACK_SIZE .set 0x500
2 v: [) s+ L: q1 G5 t: ?* h& q - SVC_STACK_SIZE .set 0x8
/ R1 \8 h: I+ k5 K6 ^
; k* u- J5 o2 N. Q( y! T- ;
% c7 L( L0 g& s6 J6 ~& ^1 A- t% b - ; to set the mode bits in CPSR for different modes
J; g, s% V) |# { - ;8 y/ P, }+ C4 L; L D% N* U
- 4 E* z+ E# D, l, r& a0 I+ n# S/ d2 S; s
- MODE_USR .set 0x10" d. _5 x F! z' |9 M
- MODE_FIQ .set 0x119 Q7 I8 p$ u# N8 f7 l
- MODE_IRQ .set 0x12
& u+ P- L. M5 O4 F& L - MODE_SVC .set 0x137 y b! @! @+ R7 u8 n$ q! `
- MODE_ABT .set 0x17" y9 b; K5 P; l6 Y" q/ t
- MODE_UND .set 0x1B' c5 z# e: Z4 ]3 J* h( R! s# n
- MODE_SYS .set 0x1F3 O4 p) t0 ]9 m3 z! {
- r: `9 t }; p5 p4 @- I_F_BIT .set 0xC0& e5 r! Y9 `" K, i5 a
- * {, s+ l2 j& x
- ;**************************** Code Seection ***********************************
& q5 B. W( t% r1 y% f - .text8 ~1 `2 o6 }0 f& E5 h
- + T% z; n+ X. u$ b
- ;7 V! y! B0 ~ {. ^. l# k
- ; This code is assembled for ARM instructions$ \1 Z# j- ~, `" p! }
- ;9 z% g: m" t8 J+ K2 g( W
- .state32* W: k. |3 s9 ]4 Q' U! c- c
& J7 Y! O! s; D+ h6 o' X% s- ;******************************************************************************
/ O) ?0 T, m: i C; c* m - ;
H$ o3 o& n- Q - ;******************************************************************************
. ~7 V) b, e) \% F' P: j e - ;
3 s# M, h2 l8 ^1 U - ; The reset handler sets up the stack pointers for all the modes. The FIQ and/ N4 I& D3 f. C# H2 ^ o* q
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the9 l5 i, v3 V1 i6 \( Y4 h# z8 q
- ; main() function.! u6 T9 p+ A N% h B) f: R
- ;
/ h3 m4 t# H( y( R' [ - Entry:/ ~: `' G" D) c4 V' [1 e# c
- ;
0 ~& p; |$ o+ J! W3 A - ; Set up the Stack for Undefined mode
, p/ J' M& c$ \# C! t- h6 c2 n" L - ;# g% C1 n( K y1 |) G# `
- LDR r0, _stackptr ; Read and align the stack pointer7 D7 q0 {. j& z- c
- SUB r0, r0, #8
5 [0 V/ o. G# ^6 q7 M - BIC r0, r0, #7
5 t1 A9 M( e6 r, U# v - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode- ?+ D7 R' D7 ]8 Q) ~% s+ o
- MOV sp,r0 ; write the stack pointer3 i( E0 a! j* o* S2 M. ^
- SUB r0, r0, #UND_STACK_SIZE ; give stack space4 J: P1 c2 f6 \) G+ X1 L3 I
- ;
% m/ Z2 r- G4 d; ^ - ; Set up the Stack for abort mode# z. i% C s) M, S
- ;
, |: z5 u# ^, y. [, I - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode% ?) H& `% {" a! ] f$ E) j
- MOV sp, r0 ; write the stack pointer
6 D! L. s5 D/ j9 |' q - SUB r0,r0, #ABT_STACK_SIZE ; give stack space
) k# b! ]3 j) J& ], l. O1 A5 F - ;
6 F* \# {9 o2 S) t, V. D3 P2 L/ ], W - ; Set up the Stack for FIQ mode& w" q/ s, q, A: Y. c% y
- ;
8 z4 W, [6 }! }% K - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode4 q6 t$ o/ k/ u1 Q+ j
- MOV sp,r0 ; write the stack pointer
" j5 z' q& n& P/ E1 [8 X - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
9 f5 E8 f1 i4 |2 r - ;
+ I8 O$ @, r0 H0 ?; E+ J0 g - ; Set up the Stack for IRQ mode- P# `1 D' z( f/ Q: P9 c
- ;
8 x1 p4 v. [' p9 @$ ]: Q( }& O - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode L5 v# f( v2 r# j
- MOV sp,r0 ; write the stack pointer
! R1 q/ J4 a* a# o3 B. j/ F - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space" T- q3 B- g" W% h1 g
- ;$ ?9 V. i) w' H7 @$ I4 U: e
- ; Set up the Stack for SVC mode& F; n$ ]( A1 r
- ;
* V# O6 S! a* a% Y - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode/ o" i; H j1 @% V. R B) S3 K5 |
- MOV sp,r0 ; write the stack pointer6 p. H) B$ W0 n/ c* t8 B% A" {
- SUB r0,r0, #SVC_STACK_SIZE ; give stack space* j, ^& W5 i h6 F# {+ I3 w3 r2 J
- ;0 x9 f% L |5 z% t* X% V
- ; Set up the Stack for USer/System mode# w; @! ^9 h0 _7 B( \5 x4 h
- ;
( {8 @3 u) L6 L - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode T" G* ^2 I5 R
- MOV sp,r0 ; write the stack pointer) U& B O: D0 L* e$ `, M& b o
- , K- ~# w7 F* q. i% T
- ;
Y0 h2 k( X7 T - ; Clear the BSS section here
f: F: U7 s+ E: i7 o - ;* l9 {, M' c2 {$ Q
- Clear_Bss_Section:4 g2 Z: L6 P' _
- . P$ h* i! B+ Z8 D# M" ^
- LDR r0, _bss_start ; Start address of BSS' c) {3 n5 ~1 b7 l6 s4 ~" i& y- V9 ^
- LDR r1, _bss_end ; End address of BSS
% @* G* @0 t* E9 x, n - SUB r1,r1,#4* I2 Y7 ^5 `3 E0 E
- MOV r2, #0
+ M3 j/ F7 z4 H2 C$ D - Loop:. w2 \8 q V) j3 u" v
- STR r2, [r0], #4 ; Clear one word in BSS5 [# v# _! w5 p3 h2 O
- CMP r0, r14 x+ q5 B2 ?6 v
- BLE Loop ; Clear till BSS end7 ^" Q7 E7 ]% l2 R6 P4 \. E4 A+ h
- : J5 h! _ G0 r
- BL __TI_auto_init ; Call TI auto init
, I4 j6 {$ q: V, D; R
% D) X" e e* ^ n9 X- ;
; C& y/ t# X V0 A$ X3 x - ; Enter the start_boot function. The execution still happens in system mode
; O' o: R: w: `( C2 k$ F3 v' p - ;) r- Z# c# |8 Z- P
- LDR r10, _start_boot ; Get the address of start_boot$ |, i8 [6 V% t' ]7 n
- MOV lr,pc ; Dummy return 3 p/ A' \; j8 d/ q3 S
- BX r10 ; Branch to start_boot; Q: u6 q( q' S- k& ]6 E2 S" \
- SUB pc, pc, #0x08 ; looping
6 K8 E$ g- F3 ] `4 D8 g2 j
% C& I3 _+ {: U( D- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
' k- @4 `* Z. b. |4 o - ; BX lr; O9 o- n+ Y& R. v" k3 r' h- Y' I
- ;
# R" ?% r/ |/ @4 g; O: t6 S - ; End of the file4 r+ P0 F+ ?# d' |' V1 @
- ;
3 P0 D7 ]% ^6 w3 z* G( `$ `
1 K& w, j+ n- Q' [) G- _stackptr:, [0 H+ q/ Y5 s6 |* @+ B# n
- .word __STACK_END
. I- y) |0 Q d* X. z0 K' N - _bss_start:
7 J1 J* s" _" Q& {8 g4 U+ b - .word bss_start) Y8 j2 [+ e# w# l4 a3 l
- _bss_end:% E5 W2 d6 j: E) z
- .word bss_end
# Q2 Z5 ^4 I9 k* u! B3 N- i - _start_boot:
% _9 N, u' c) m; h" q - .word start_boot
/ d' K; l' w1 Y1 b2 B7 ~ - _data_auto_init:
6 v' i! |' e* [; W1 h* `7 }$ c - .word __TI_auto_init' ?9 _; b% s9 ~# _7 Q9 z) _
- .end* D0 R" T" N) P6 A5 e
- % J y, z! T+ R
r8 p( V; j/ ~# t
8 ]7 F" N7 J% h. q
复制代码
2 S6 v, u: i( D/ _$ o" `# m* @/ C
5 e* z) `! h; W8 [) _
& O2 f0 x0 W, Z. I, U! I4 o7 ?+ u3 |+ T% f; F* m
+ P+ C9 d, x2 S& ~' x0 S3 ]
|
|