|
|
9 H% I7 L) ]: ]0 a, O& S在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
2 z$ b4 ^4 I4 I/* 重新配置程序入口点 */
1 s. X! @0 E" E-e Entry- /****************************************************************************/" E9 {2 k; K) [0 h2 ?, k; R8 f, e* d% U
- /* */
$ [5 k0 \% c' k/ M' k - /* OMAPL138 及 DSP C6748 内存空间分配定义 */
, I! N) r4 j4 [% M - /* */6 }+ A0 A. {+ x' j; O
- /* 2015年04月20日 */
* ] _6 Z; K) E/ Q0 d8 v" k2 t - /* */
) s5 }3 q" Y+ ]9 z" w+ c - /****************************************************************************/: j/ b# A" k; J+ Y
- /* 堆栈 */
K" X: s( ]6 |/ O* W; d - -stack 0x80002 b; p$ d" ~4 b1 o( C' ?
- -heap 0x2000
- q; F' T4 v4 ` - : U' l7 A! A. t7 z) S) I2 r
- /* 重新配置程序入口点 */
( w: S; U3 u2 K; I* F - -e Entry
X# ^4 w/ x6 p) z7 H8 }! n; D
4 _+ X3 z/ ~" d" I- r$ x e- MEMORY
5 g7 r3 C/ K2 P: ?& c5 E( k: \; ^" ` - {+ w# i i$ A9 ?; Q) x8 A& G
- #ifdef DSP_CORE [0 q$ v. F3 a x7 r, F" W- S. s8 x
- /****************************************************************************/
" T6 s( _+ |" o2 I$ H5 K - /* */
1 f" Q+ A5 k0 Y j3 F* Y* Y' F6 | - /* DSP 专有内存区域 */4 p! N; Y- }+ @7 K" [) ]2 V
- /* */" C1 R! }% N; y& w) \
- /****************************************************************************/( x2 Y. T* _5 _# J0 P9 K
- DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */9 C( i+ Y2 h2 y) U3 \1 i- m; z
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */. s+ R6 O) x+ G( J' w7 T& D# i+ M
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */9 P& l* K" G& h8 P; o$ V9 \' O& m1 Y
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
' w1 ]' S* K& v* f, T8 N+ o - #endif
复制代码 这是一段汇编代码用于切换到特权模式
# r& j* r+ B/ I8 D) G6 n% }! v8 {
Q; V# G% n) }* A8 _+ |2 S2 WOMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
- c* g* ]1 |6 p) Q. p- ;******************************************************************************) F0 U/ N0 I' M$ ^
- ;
: @% A* M) \* M; A+ V - ; init.asm - Init code routines+ h7 Y/ U5 T9 @: ~: q
- ;
/ ]2 |# q. S' l/ I# s3 Q - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/) I# _0 n) L3 P* W
- ; All rights reserved.5 O) K0 s! K1 u8 Z
- ;
6 o# m3 \2 a% M3 c# N" _ E - ;******************************************************************************
5 H7 B: F6 J) L! J& [ - ;****************************** Global Symbols*******************************
( v8 t3 A% X0 W9 P* Q - .global Entry
' e T: N7 B9 k# @ - .global start_boot
9 k, r# m9 Y' A I K- ? - .global __TI_auto_init
8 y! G, N" l1 }# p
Z2 X' \- y! |: H/ K3 q- .ref __stack
8 g- ~" s' m4 r) q3 Q - .ref __STACK_END
" Q: P0 h3 c4 d0 K - .ref bss_start) s$ g4 M/ w9 I- z# P* I4 L5 r' l8 X
- .ref bss_end1 A/ c) V& @( R/ |7 |
- .ref start_boot
0 {& m0 ~& R( t5 I+ F2 Y
) G7 x7 k- o0 n+ n `- ;************************ Internal Definitions ******************************
& ^5 ^# z, m4 T9 b _, Z' m- B - ;6 B; F, h0 ^0 r7 H! r
- ; Define the stack sizes for different modes. The user/system mode will use# [: E& i; c0 |7 h
- ; the rest of the total stack size
! p4 |6 @+ t0 p- ?; K5 P! ?9 M+ K - ;
. e5 @3 @1 t+ \' h* A - : m8 H' U2 k) t, H' Z$ r' \4 }
- UND_STACK_SIZE .set 0x8
% u4 A3 L& p8 N3 ` - ABT_STACK_SIZE .set 0x8
0 l! }8 n0 X C! H+ C W& u - FIQ_STACK_SIZE .set 0x8
* y, o# a0 S: X4 K - IRQ_STACK_SIZE .set 0x5004 s6 g0 ~( j; }! e
- SVC_STACK_SIZE .set 0x88 l5 P$ |; s7 R0 B' x7 Q) P
" l( Q" m- [3 p7 Y2 D' r- ;
, n8 J' d( C6 h) X+ S5 {- C - ; to set the mode bits in CPSR for different modes2 s/ B: W8 I' N7 i
- ;
$ b* h3 g4 U* [ - % f/ k3 M( `7 j1 K* g
- MODE_USR .set 0x109 Z" m- K! r0 d3 w5 n
- MODE_FIQ .set 0x11- k. ]8 @3 I# t) f- i( \! U
- MODE_IRQ .set 0x12: a0 _3 v- U1 u$ l1 |
- MODE_SVC .set 0x13
b+ C$ ?# p" t* I7 r5 o1 }& P - MODE_ABT .set 0x172 q) [& a6 Y2 Z. w; i
- MODE_UND .set 0x1B/ U5 d( p" e# a9 a3 x7 Q
- MODE_SYS .set 0x1F8 g- O0 I; i% g- Q& Y( b6 b
- ! @1 E6 D) w" a7 J: j
- I_F_BIT .set 0xC0. l m% b% X& e4 y
- + h+ E) V7 v6 j& E6 ?: p3 w; [
- ;**************************** Code Seection ***********************************9 {4 J7 A; C: t& F0 O: ]
- .text7 E7 X6 N- s6 Q9 ?- N4 s3 c D
- 7 w2 l/ E$ a7 O7 l H( z& E
- ;
1 c9 A4 b# Z; N. ~& ^ - ; This code is assembled for ARM instructions
- }4 _7 K1 h. b9 Q' x) A5 c - ;
- c* A$ d* h% y, U! Z# X0 g - .state32
1 f; ^ A) Y, E) n - " i$ t& f7 @! r- F8 W
- ;******************************************************************************+ S: A1 j% e; F3 {
- ;' B; ]6 l3 h- m* x. i9 A
- ;******************************************************************************
& j1 ?7 X$ H8 S! e& Y$ V4 H - ;
. ^& E4 d4 Z& |/ L - ; The reset handler sets up the stack pointers for all the modes. The FIQ and4 e# X1 a' b# C! B' s; T( w, n
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the) F: k$ b: |7 \5 o8 L
- ; main() function.7 i# \! L$ f, B! z
- ;
3 \/ ]2 j3 p% u2 c8 b - Entry:
* f9 k( u5 i& z0 p# l7 i - ;$ H3 |' h1 \# o/ B! I( ?
- ; Set up the Stack for Undefined mode' B$ [1 ?6 @) ?9 e) l! c7 l
- ;
/ p/ K ^7 X2 B) ] - LDR r0, _stackptr ; Read and align the stack pointer. \. t) Z8 a6 \3 p1 z3 j& X
- SUB r0, r0, #8! L1 {) b. g1 K7 r
- BIC r0, r0, #73 r+ K$ E. w5 O, ^
- MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
" g" X$ x! y9 c3 R - MOV sp,r0 ; write the stack pointer7 K4 D) C9 [6 [+ r$ J
- SUB r0, r0, #UND_STACK_SIZE ; give stack space0 `5 h& z1 L: z" X
- ;! _; p9 l& `& Y9 n
- ; Set up the Stack for abort mode
; V) i ]. V& W" J0 @ - ;
9 L; g3 z+ G% r* @ - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode0 O* F I0 ^$ j1 H$ D; r: O8 r* G
- MOV sp, r0 ; write the stack pointer
. U" v. ~2 H$ o q, u - SUB r0,r0, #ABT_STACK_SIZE ; give stack space- C9 y' Z* X8 X/ F
- ;
) R, O y) s' N a" R - ; Set up the Stack for FIQ mode
' G6 ]8 Q: H! }/ e9 O - ;: S' O- D, Z+ w8 ^( p, H7 \
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
5 C9 v3 S% y6 J' b4 b2 u - MOV sp,r0 ; write the stack pointer K9 l- a; k6 _' d) S
- SUB r0,r0, #FIQ_STACK_SIZE ; give stack space# p! N! c% | M
- ;
# G6 W" H" B5 i* ~ - ; Set up the Stack for IRQ mode
" ?2 p" l! q" A) G1 ?2 o T - ;
0 T. I5 _/ Y6 t: K8 u* S - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode$ R6 |- u8 X0 H' ~
- MOV sp,r0 ; write the stack pointer
- p/ G" [- p4 m - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space1 M( |$ t. h" t% l+ y- @' ]) k' l
- ;# U8 O6 ~6 m- D5 A
- ; Set up the Stack for SVC mode
2 f* o- B7 b8 y0 H2 L( p) a$ q - ;
6 ^+ f T6 d$ I2 [8 d/ q1 u% B - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode- D6 b' g6 g: S6 s' [ W
- MOV sp,r0 ; write the stack pointer
3 \7 c: D+ b2 t+ d4 V" o2 @) n - SUB r0,r0, #SVC_STACK_SIZE ; give stack space3 {' z9 y; _! V
- ;# B1 t& X! M. E
- ; Set up the Stack for USer/System mode5 s: B7 N% w% q6 c( U0 _, k
- ;# {6 U# A( E' Z: J" r
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode0 l7 U0 W' {" a- X5 j6 _
- MOV sp,r0 ; write the stack pointer W* y5 n9 e& }( Y! G1 f9 B4 g8 g
- 5 h: w; k' n3 Y5 V% a
- ;5 c( X6 K# R5 B6 a9 X/ j3 V- B' Y @9 E
- ; Clear the BSS section here
4 n5 {3 O- O: a( H% F - ;
. J9 j4 }' s% c& Y - Clear_Bss_Section:
- @) R2 Z. [' E% F" L% C - * ]% f* F0 b2 T
- LDR r0, _bss_start ; Start address of BSS2 `" c k6 ^9 u4 w% K
- LDR r1, _bss_end ; End address of BSS
' x0 L6 K7 y& G! O4 ]4 r2 Z, D - SUB r1,r1,#4
+ c8 K/ b; x" X9 u4 o - MOV r2, #0' ]4 P' U" t4 M9 j3 n
- Loop:5 G1 d: a |: E; x& f
- STR r2, [r0], #4 ; Clear one word in BSS
% u( [8 p+ O) a4 I( P! |5 `* j3 N - CMP r0, r1, a' d* u$ Q$ J+ g
- BLE Loop ; Clear till BSS end
' l$ q" a7 a% e3 _+ R& T" x - 6 e# N6 X7 o4 ^$ b$ X# x& [
- BL __TI_auto_init ; Call TI auto init1 }. ^. [% X, m3 V8 T. C. y: c1 o
- * v, I& |" y' C2 R/ B
- ;2 D8 @. p' J$ U' G' M6 A6 E
- ; Enter the start_boot function. The execution still happens in system mode
* ]( ~6 R3 G$ K9 ? - ;
( ]# n1 w* |) i% p - LDR r10, _start_boot ; Get the address of start_boot: ]& x: b" l% }, n
- MOV lr,pc ; Dummy return 4 A( J) A# S3 x1 D
- BX r10 ; Branch to start_boot
5 |. D1 ~: {' g1 X$ t. ^ - SUB pc, pc, #0x08 ; looping8 R% N! Z9 x" j& U* Z3 _; B
! p) p4 k# J( }8 G* Y m& i- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode' L/ D }4 {; Q: u( C
- ; BX lr1 B$ s: N: N6 x, U' }+ j
- ;; Z8 S7 y) ^ h# Q4 Y3 y
- ; End of the file2 M: d1 Y% ]9 A, a Z/ k
- ;
) ~; o' f9 f; L) K, D, O5 W - $ g, G9 u# f, i; k
- _stackptr: C" ]* l, W9 U) b& h3 s
- .word __STACK_END+ f& t7 C6 t7 C! w
- _bss_start:5 {$ Q) Y- t; k# [: Z I
- .word bss_start
, D9 P( @- E0 X4 b' g$ L5 @ - _bss_end:/ ]& ~% T& J5 Q9 j$ x
- .word bss_end3 e$ f" \- y: x( G% P4 M1 z
- _start_boot:
, K8 i* u) W. C8 R. ~6 U. b7 f+ ]# R - .word start_boot7 D% u$ Q3 z/ r, d
- _data_auto_init:1 h2 H% D1 D; D4 g- ]
- .word __TI_auto_init Q- [# [( N! }* A$ J* s: ^$ U$ `
- .end# f: y) i/ ~9 g9 W) E. W" g Y( I
- $ B$ U( z5 T5 C: w" ^
+ q% x( U. o- D& z6 O9 G- : X! ~+ ^% w2 v, P0 Y/ w
复制代码 0 P. E2 D. D) e3 B1 T- ^( m9 K
+ H- a; v. J4 S4 i" j `
- S( O- `4 S5 i9 i Z( v% L5 j0 Z; S* H
, ^; s! y' P2 f7 \2 O E
|
|