|
4 W2 k2 X% Z$ H" _" O B5 K在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句( i" I* z9 X1 Z& [8 c- }& y
/* 重新配置程序入口点 */8 G" I% P3 q- F0 x! h D4 c( ^2 y
-e Entry- /****************************************************************************/
' K7 N/ A" G% p4 e4 C2 j - /* */) O4 g' w% ?' [& |
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */
) K/ z7 ?1 P1 J1 i- m2 ~8 ~$ R - /* */
4 m# D4 a7 r N7 d. F+ k - /* 2015年04月20日 */
6 I+ u. a' L6 Q4 y0 V8 h* ]3 E+ h* v4 M/ ` - /* */
p) i# m/ [: D: x: G - /****************************************************************************/" X" L: X; ]% B; |1 y2 m. m0 u
- /* 堆栈 */8 D% p+ X/ y9 k( e" E
- -stack 0x8000
2 i# p( X5 H- Q$ Q2 @9 R% y - -heap 0x2000
$ h6 a2 n$ q3 c" j
+ Q( f2 F" P' z# ~7 J( A- /* 重新配置程序入口点 */
: c( g: ]; y- K# ?6 k - -e Entry9 V6 H/ O2 k3 T4 a% }& I
$ D9 S9 @1 k A- MEMORY7 R$ H( B; V9 l' Z2 U
- {
5 K! z# N4 f2 {1 C* E - #ifdef DSP_CORE
8 I- W" u C& m0 T9 `/ H! R1 F - /****************************************************************************/: {5 F4 r# D# n. j: p
- /* */
: s* `' k6 _) [8 w% v9 _1 ]4 \ - /* DSP 专有内存区域 */
h9 J+ l: R, x, ^* q - /* */9 c* H( z3 }" f9 F8 x5 T6 V5 L
- /****************************************************************************/
" g8 V% C" F: C - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
/ z4 n( |1 ?; X3 }$ t" J1 C - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */8 ~. v7 E* `- t3 N6 N) \
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
2 `. x1 l& j' J# x/ c ~ - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
8 R3 ~5 @( L; t+ q. J$ t' j: [' [; ~ - #endif
复制代码 这是一段汇编代码用于切换到特权模式& r. ^- v, K! B$ i; Q
U& v! |3 S( d+ U
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm/ v' @& e9 ~0 T* K/ I
- ;******************************************************************************: W) D9 i8 d+ J+ x1 h5 m. j' H. P. N
- ;$ E% y7 M, w8 |' e+ E
- ; init.asm - Init code routines
0 x6 j* Y* ~% X3 ~% e - ;5 Y# h$ L- A+ j( B; g- C
- ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
" C1 k' U1 V- b: \5 y0 F - ; All rights reserved.0 x1 q. S k5 S. E$ G& R
- ;
3 p) G. D3 X! w - ;******************************************************************************
% d2 s! \/ D: W1 g - ;****************************** Global Symbols*******************************" g2 [; y. h- z( v0 @( C
- .global Entry! G$ W l& ?/ |( j$ [ K' i
- .global start_boot1 b+ B7 u, g3 T
- .global __TI_auto_init+ n# c1 Q! `. B9 k& S9 F1 w" i- Y9 W
- 7 y2 Q# M2 s' _) r& @, ^. F
- .ref __stack
8 \* w0 V7 s! A0 F - .ref __STACK_END( k2 M# {% S& A! Z t) y( C) ^
- .ref bss_start8 r: ?) Z; Z4 v- f) F+ j8 m1 @8 F3 Y
- .ref bss_end. e2 j: q8 j! D/ N E9 j3 q5 x
- .ref start_boot! v3 \9 I- Y8 D* K! w5 n- M" v E) Q
- ; C: J* `. G b( e6 P; {/ ^* f, g, @
- ;************************ Internal Definitions ******************************" ] l( Y5 X/ p, ^+ o1 k
- ;
; `+ v9 A- }: ?- O - ; Define the stack sizes for different modes. The user/system mode will use! K- `& C n% c0 c, n, O
- ; the rest of the total stack size
p9 k1 S. v7 J - ;5 N! @. c" B1 \& Z* E# @. x
% q* `0 e3 Z; J3 E. ?* u; X- UND_STACK_SIZE .set 0x8* o# U' T7 g3 G9 E( P8 ` r
- ABT_STACK_SIZE .set 0x8
2 r* M8 [. _; R# y - FIQ_STACK_SIZE .set 0x80 L( u3 [+ ]9 \; Q/ {* ^! Z3 o. G
- IRQ_STACK_SIZE .set 0x5000 V, L) d0 q: A% `# s
- SVC_STACK_SIZE .set 0x8 z; a P1 e( [
- ) N; q" L& N. n4 |
- ;
5 P$ B4 u3 k5 ^4 h - ; to set the mode bits in CPSR for different modes
) f) q' e9 a& S7 q/ [2 V - ;
$ L# L& [& u/ }6 m2 i9 p - 1 }$ B% |! v& l/ r# f# `! P
- MODE_USR .set 0x10* w$ \1 H9 u' k' q, a
- MODE_FIQ .set 0x11# k" W7 L6 ?) @7 G# E' ~0 F" b V
- MODE_IRQ .set 0x12
0 l0 P0 r) ?9 {$ l - MODE_SVC .set 0x13
7 I; g% {$ W0 d0 }3 u7 I+ X' P - MODE_ABT .set 0x17: O1 V6 u+ `# Y9 J. A* f/ ~
- MODE_UND .set 0x1B1 ~9 \4 X3 a, U& i$ c1 p" y
- MODE_SYS .set 0x1F& u/ ]$ z7 Q, g; H2 O6 ~
. N' l) h. k3 y0 K7 z- I_F_BIT .set 0xC0
& W& {/ K+ ?! i& A4 c' A
2 q6 q2 F$ `2 E& J; e- ;**************************** Code Seection ***********************************
# A7 {* R _$ u4 @ e; R+ [ - .text' p6 N- k" T5 ^( Z8 [0 I
- 7 ]9 V$ D; `2 F+ j
- ;0 } O( ^, V. U0 l* G
- ; This code is assembled for ARM instructions
7 q1 L/ l* d0 Z! n+ S/ x7 s9 c - ;+ X5 T7 h* t2 w
- .state323 X! j2 [5 P9 i# I
- 8 }# d( Q+ a( z3 x) O
- ;******************************************************************************4 g- k7 l, n, u* d3 ?3 j
- ;
5 p4 \) b M, u; a. N7 n% o - ;******************************************************************************
6 @2 V8 A8 Y9 _# B2 d - ;- D4 u# h% l' ^" z
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and
( @3 Y9 P Z$ h( U7 A0 e - ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
" A( G" m9 e. m/ S. k1 w1 _ - ; main() function.* L9 L+ W: F" [) q
- ;: b' F4 S8 F- w+ }9 D0 d1 \0 v
- Entry:+ g: }8 u5 W3 z8 f. R3 x5 h
- ;
; B a! v1 H9 v5 O! i1 d3 s# y5 i$ h - ; Set up the Stack for Undefined mode, u! f) o2 t! _7 f0 g
- ;
% ?5 {7 ?1 A8 F5 `, O B& a( c - LDR r0, _stackptr ; Read and align the stack pointer
( P7 `/ j4 s, T4 H' L - SUB r0, r0, #8" R" R/ Y+ \5 ~( Q( W8 l) b
- BIC r0, r0, #7
p {0 I. B$ j, k5 Q' D - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode+ C0 e$ _ ^" `# q
- MOV sp,r0 ; write the stack pointer
- O9 f t9 h: C7 f8 ^: ^9 X - SUB r0, r0, #UND_STACK_SIZE ; give stack space8 S8 o; _, a7 W6 F2 u$ ~
- ;
3 g" S" x6 X. j, p - ; Set up the Stack for abort mode+ `3 p$ [$ I6 o# C) _: h0 j* V) f& R
- ;2 o# N/ [/ E( r$ z! L, S9 O
- MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
. G) u7 u( N# x3 \ - MOV sp, r0 ; write the stack pointer
9 U7 ?1 j& Q, }$ N; p - SUB r0,r0, #ABT_STACK_SIZE ; give stack space
3 @$ r+ E" H c3 E4 d9 C - ;+ l: z3 x& K2 _8 ?/ m+ K) W' m
- ; Set up the Stack for FIQ mode
# J5 Y" m, r8 @) o) m# l - ;* \. j) x; Q* M" l1 m6 ]
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode" Y, ?6 g% e' J K& F" ~
- MOV sp,r0 ; write the stack pointer
# I! R9 r0 e, m/ F( k - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
! s; r3 G& W8 s+ ^ - ;7 k ^1 s1 {0 b' z$ L
- ; Set up the Stack for IRQ mode
$ w2 z8 f; B0 q: U* @# I) i - ;
* N. `4 A* A4 J4 R - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode
$ N% I* C# o3 u3 N; }- q9 M - MOV sp,r0 ; write the stack pointer* A+ i# t' y/ [ U2 w( C# u6 Z. `
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
- G8 ^3 U3 B& P9 I( \ - ;
; u. @ w/ `; f+ n. Y$ l - ; Set up the Stack for SVC mode
2 T) ^3 j" J# t% t - ;
; g( m; B5 q6 ^ - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
# v; x7 ]- q% x2 ~, R - MOV sp,r0 ; write the stack pointer
2 [- {2 j, k! ^6 z, v! I - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
% M- ^) S0 f3 Y% \# ` - ;" S; {* Z" [* i6 s7 w# o3 f
- ; Set up the Stack for USer/System mode0 i. ?+ Y: v. w$ p2 f: ~& d
- ;
6 Y$ M' ^ A+ |- j - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode* s% y7 L# _, ?/ t
- MOV sp,r0 ; write the stack pointer
2 w- Y* K ]5 x7 J2 n- d2 \2 ] - - e, \) g8 m" A L9 N* l7 k5 G' Z
- ;
7 {( i/ x. K5 f T: z+ K - ; Clear the BSS section here$ j3 u k1 w5 X+ p# l
- ;+ r5 V/ q6 P( C3 ]6 w2 R' U
- Clear_Bss_Section:1 s) l+ S- @! m/ z
) A' N' Z9 ?. {9 D; l- LDR r0, _bss_start ; Start address of BSS' S9 O" D2 ]$ x
- LDR r1, _bss_end ; End address of BSS9 N5 a5 a: q! O7 H/ s
- SUB r1,r1,#40 [7 Y. J+ n8 }+ p
- MOV r2, #04 {; ^! ]. U' E( u# K, B; W G K
- Loop:
8 t& N( [& w7 C - STR r2, [r0], #4 ; Clear one word in BSS3 o, f5 v6 p A# J- I, @! S- `: O: d
- CMP r0, r1' R# F' Z1 [6 ~: p/ e, Z" B
- BLE Loop ; Clear till BSS end
, x. u: d0 H3 U6 F
. V, c0 e/ W& ~4 B& f9 z* l- BL __TI_auto_init ; Call TI auto init
- ]7 D& W+ E0 d, Y! Q! {6 z
" T& {" c" h( n9 J5 A8 n- ;' h: V2 b) R- N" e/ T$ Z
- ; Enter the start_boot function. The execution still happens in system mode
9 }! A# W) t4 k" h+ Y - ;
. s0 o( f' l& g6 T - LDR r10, _start_boot ; Get the address of start_boot% N0 p) l8 Q1 v7 T' X( v
- MOV lr,pc ; Dummy return
- a4 J/ E* S% ~4 Q( g - BX r10 ; Branch to start_boot
( ~' T2 j$ i' W0 T - SUB pc, pc, #0x08 ; looping$ v* F) B: E, Y1 B; E2 W8 O
0 m4 O% V8 M, @" [5 ~- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode$ o$ p6 f7 ?7 h3 ^. r& p' N+ C6 h
- ; BX lr
) h, i% i, a: Q/ p3 _' }# x" c - ;
# o, V% j7 M# r9 X - ; End of the file
" u4 o) v5 Q3 K& h; z& q: Y - ;
' p8 W5 v4 E4 U3 A
6 @. J5 b6 ~" ?4 g) P! ]' f# V/ \- _stackptr:
1 B$ K. z8 J4 x: E+ B7 o - .word __STACK_END3 d2 N4 T" ?! O7 q3 `* t
- _bss_start:$ @2 ^+ f4 T/ }8 M2 f6 x
- .word bss_start2 d, _" A( W8 x2 h! B( N, s8 l+ H
- _bss_end:. V) L8 l! o! F; g! f- v3 @7 U9 \$ h1 [( ]
- .word bss_end+ r( S/ f1 O( u( E/ T; w$ w
- _start_boot:
9 z! j8 P8 g7 `% x4 P2 J. D - .word start_boot4 Y+ p7 t1 d+ g: J2 }- {
- _data_auto_init:: |5 s# X) U8 H( l; R
- .word __TI_auto_init
7 n; V: W3 b2 @$ j" t - .end, Y+ J- o0 K! A; O7 d4 p
- $ z" S$ ~$ F2 T
o% [& w2 e+ [% t9 t( m9 [, L- 8 \8 `' J* P( F( }/ i
复制代码
) i" M2 p7 ^6 |: y: C0 d/ O1 j" K/ P& r0 l. N) p
5 e1 ~1 _4 {* t9 X
7 U# C; l9 S# x/ g3 `
9 L2 W& K5 O0 D/ f
|
|