|
h. X* r" m7 u0 x" }6 ]8 B
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
( {! t+ o: q5 b, v( _$ q/* 重新配置程序入口点 */
B1 @& L/ W0 Y8 F4 ^-e Entry- /****************************************************************************/
5 |7 E" k1 B! N; g0 A0 _ - /* */
' _; c# S1 `7 D0 U: A, ^ - /* OMAPL138 及 DSP C6748 内存空间分配定义 */7 u) R) r# h, O# {( J8 w9 p }
- /* */4 u. x+ K& O" f) _7 l$ E
- /* 2015年04月20日 */
2 Y3 p; t6 w1 s - /* */
* s6 W1 k0 o X9 } - /****************************************************************************/
9 W" j) x! @! U1 v - /* 堆栈 */
' f# s5 U5 K: n% s - -stack 0x80002 _7 _- D/ `0 q9 l& [4 H# k$ B
- -heap 0x2000) z" V- {1 [" P
- 7 y) }3 h! x$ @- A8 \/ M
- /* 重新配置程序入口点 */
8 Z. }7 F2 g+ b# G/ @ - -e Entry" |6 E. N0 H$ z$ e5 Q6 e
- # j. [, }6 Z+ Z. Q$ `
- MEMORY; `7 K& w0 I- v9 s) ~% z$ F2 R
- {
( x9 G( L! [! n: M+ ^1 q' E! Z - #ifdef DSP_CORE
, N4 M% W+ `$ T* V& n6 b9 B - /****************************************************************************/
' z1 @ D: _" {& G2 V7 B3 a - /* */
& j$ V( v, r- I - /* DSP 专有内存区域 */8 O! b' _2 z( a6 F2 E* ?. q# l+ q
- /* */0 m+ l% e2 ?- k3 T& P& Y, L
- /****************************************************************************/' q( ]5 S% g6 D1 L! j
- DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
+ w0 l' s% W6 p8 H4 Q9 f8 q: I) E - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
1 v0 ?7 W$ c1 N# }6 R# c - DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
P ~* M% @4 L4 B# s- h - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */ q6 X1 O t6 k
- #endif
复制代码 这是一段汇编代码用于切换到特权模式" L: V4 X9 Q' @) t) d5 }" w* M9 o
% P5 w) n4 k8 j6 N" V; F2 G
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
. E3 I( b' w) m/ l" _- ;******************************************************************************' i& W* G0 C- p: T& e
- ;, H3 w' l! x6 @9 j+ r
- ; init.asm - Init code routines
/ t8 q. h: W+ ?/ K - ;
3 }; k; H0 k0 x; L: u$ }- C - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/$ O8 i7 K6 S4 h
- ; All rights reserved./ o5 B& @* b3 ^( ~
- ; R* t q: i. a8 @& w* s
- ;******************************************************************************5 Y8 r( S5 z1 r- t/ |; L
- ;****************************** Global Symbols*******************************: Q$ [; b7 R5 n1 [5 z% \" e4 N, r
- .global Entry% @3 G9 f) c' F1 z, @" v; X
- .global start_boot
: A* Y$ ] j, F1 Q - .global __TI_auto_init" ~6 |! e- _% P) b! c) A! D
8 E, X1 e" ^9 |3 K$ o+ t3 k, J- .ref __stack
0 G& U: W5 H) z/ j$ S - .ref __STACK_END! a- N$ k2 N. n0 e `6 b: A
- .ref bss_start k7 t6 G3 U; |( C6 Q
- .ref bss_end/ ^% x- _2 l+ D, u0 u
- .ref start_boot7 L# P# f; t# V/ E
- * @% f D* r/ D3 d8 z' n% M9 l8 B
- ;************************ Internal Definitions ******************************! F- F% }( h, G3 v( x! p) u- ~
- ;3 p. h5 B4 y& p' J. G8 L; `
- ; Define the stack sizes for different modes. The user/system mode will use, J+ D ]5 z/ u' n p
- ; the rest of the total stack size
5 P0 j) w R4 T - ;# T( l# i! J7 j& b+ C+ F
- * {9 O* ]0 t* n$ u, w8 O" T
- UND_STACK_SIZE .set 0x80 c$ H: {7 T A2 A" y
- ABT_STACK_SIZE .set 0x84 d3 _- ^" v6 E
- FIQ_STACK_SIZE .set 0x8
) v1 ^& m! G/ b0 _4 M) x - IRQ_STACK_SIZE .set 0x5004 `; ^# N+ M6 f3 z+ V0 R
- SVC_STACK_SIZE .set 0x87 j- P. U: n( A! Z2 h4 q0 O* ~2 |
, I- k+ y, j: n6 _- ;" t8 N; g9 s6 p; B4 ~( M
- ; to set the mode bits in CPSR for different modes
% P0 @+ `7 Z2 R& _ - ; p1 U2 q- G7 n/ F, V/ v; Y
- . L; y& R' X: a/ a" E u
- MODE_USR .set 0x10
4 t0 ~% c/ c# A) {- ^& U4 X - MODE_FIQ .set 0x11% E. l0 C7 ]( c
- MODE_IRQ .set 0x12# i7 u8 z' h% K" u" C5 K; ]' B
- MODE_SVC .set 0x13: f( |; W2 e) U" Z
- MODE_ABT .set 0x17! C& V7 V) Z& s+ @# |4 K. q
- MODE_UND .set 0x1B
) l3 r) o0 i3 ] B+ _* A - MODE_SYS .set 0x1F# M& P( @5 R: d- i
' J8 G7 @' O2 k- H5 c& y! d2 e- I_F_BIT .set 0xC0
3 o4 s. {4 h3 S3 Z8 Q6 V* l" { - 8 u8 `/ l8 L5 B% I5 x2 V" x& \2 b
- ;**************************** Code Seection *********************************** k; P% N: V4 V7 I
- .text
' q% ?3 r( a- c - * W: P* K4 j" E! \8 C6 s
- ;* G- ^ V; j3 ~# I
- ; This code is assembled for ARM instructions0 {( R/ w0 P3 v- G' i* e& o* o( f
- ;! K9 h5 I4 O2 p( Y
- .state323 y1 F4 {* D1 h# k
- @5 d) S/ Q5 n2 J1 ]9 ~- ]
- ;******************************************************************************5 T- ]7 @( o- a8 _
- ; M2 a4 I4 c6 ^9 P
- ;******************************************************************************
) S; p K1 i0 f [, F; a# f* V - ; J% z! [ F8 j
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and% C( @3 }0 K2 ]% Q7 Z5 o
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
- O' b! l/ C3 I - ; main() function.
7 H6 X. K; ~( b( ` - ;
; S1 ]. Q' e+ f9 }6 w/ z ? c# o" w - Entry:& [- F8 v! Z* v1 \: t
- ;
- m3 S$ J/ |" Q5 m: u d" ?5 _* @ - ; Set up the Stack for Undefined mode* A3 Z) y9 Z8 ~. }- _
- ;4 |( d9 P. u. ~
- LDR r0, _stackptr ; Read and align the stack pointer" Z/ Q' W$ O& G$ Y
- SUB r0, r0, #8" M4 f4 G! o+ S
- BIC r0, r0, #7& `3 \) b, t8 Y3 U' I
- MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode+ c" r& h; |. s! W/ a+ g
- MOV sp,r0 ; write the stack pointer
+ a& z3 Q. \ a! J# F) Y9 `- o - SUB r0, r0, #UND_STACK_SIZE ; give stack space
$ {; R: j5 i' H& H' `" B1 h) o6 B; a - ;
8 F" _4 L& y% G! W G - ; Set up the Stack for abort mode
& N* {: a% `) w. N, D0 h - ;
: E* O2 h: @# Q6 X( Q: w - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
; ?; Z# L- k4 D/ n - MOV sp, r0 ; write the stack pointer4 n+ ?' g3 [/ o4 F8 J
- SUB r0,r0, #ABT_STACK_SIZE ; give stack space
- }* @% a" T& f6 p - ;& B- N: d+ z; B
- ; Set up the Stack for FIQ mode
3 w" x0 J9 g# s' r - ;7 Z( V' ?9 O( }6 ?& }# r7 i! x
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
0 X! T/ I% E) z& o - MOV sp,r0 ; write the stack pointer: x) o1 ?# }; f
- SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
( R/ b! s, {, E# m% P) ~3 k) Z, d9 s' v - ;
6 w$ D+ K* e* ]- ` - ; Set up the Stack for IRQ mode1 ~3 ?2 }% c- k% [ w; _- F
- ;
7 f9 D2 T# d% Y- C - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode9 P* `9 ~4 ]" F" j( O
- MOV sp,r0 ; write the stack pointer
9 G: \/ Y7 K* I2 s - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space2 N2 h0 P8 M# [2 f5 r$ [
- ;; a$ L+ b8 N$ S* F/ K
- ; Set up the Stack for SVC mode
( J4 z) G5 _% ~! i3 C9 ~" r, I - ;3 `! @5 X5 J3 ~( O4 b
- MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
: r- `! \& K4 L, ~0 W1 J% h - MOV sp,r0 ; write the stack pointer
+ p" k9 R* |6 V% a - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
% E: n0 ~& i( b: H- ? p. q - ;
" @7 u) I( U3 G* y2 o9 v2 B* K( D - ; Set up the Stack for USer/System mode' u2 n: ]4 v: `* d3 p
- ;/ _1 f: D7 B% r7 Y
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode& w1 w" m7 s. L$ o3 P
- MOV sp,r0 ; write the stack pointer
$ U, t/ k+ o( H! E: p
8 p E; B- v2 e K- ; w& |" L- \$ a- v# |
- ; Clear the BSS section here
) H$ _4 r6 d' O9 _: i* s- P1 o - ;
& g8 {! f( c# _* d" D& E - Clear_Bss_Section:
8 \+ A7 U" K9 Z+ l. A% O3 ? - * d' r5 G) L1 Q2 e# \! h
- LDR r0, _bss_start ; Start address of BSS
5 E, {3 l7 U% x* G, M - LDR r1, _bss_end ; End address of BSS
7 [7 @! t T$ a3 p5 } - SUB r1,r1,#4
/ Y f' ~5 @; K2 Q% Y6 P! a - MOV r2, #0
0 A; L- i* [6 E' `) ~ - Loop:
1 ?0 Y J% [0 R6 p h5 O* Z+ p - STR r2, [r0], #4 ; Clear one word in BSS
0 t4 |5 U7 ? X( ~7 H- _% l. c - CMP r0, r1
5 N# v. r# {! u9 n" Z, N" ^5 b( } - BLE Loop ; Clear till BSS end
4 F; \: t' ~+ h' r4 e3 @1 b - # Y9 x: K3 E0 j0 L
- BL __TI_auto_init ; Call TI auto init5 w. E4 Y2 s$ O( }6 c, F
! e N1 \& g5 m8 [$ p- ;& R9 {5 G! ?9 I! [' W
- ; Enter the start_boot function. The execution still happens in system mode" V4 V( D4 c! o/ u! c$ Y2 }8 S
- ;( T( S+ j2 r. M3 C
- LDR r10, _start_boot ; Get the address of start_boot
1 @9 t F1 ?( W - MOV lr,pc ; Dummy return . |& v& B% j6 Z9 }, L& P! @
- BX r10 ; Branch to start_boot
# p& d, D5 D9 p- _" B - SUB pc, pc, #0x08 ; looping0 O' H5 X* x9 ~% f5 ?
- O {# f. n. Q1 H2 r/ @4 a- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
8 b E' l4 ?4 D' l - ; BX lr S. V0 v' o U2 B) U, h5 Y: ~ k
- ;
3 \+ B) R5 _2 D' E" E9 R% ^ - ; End of the file
8 T! W1 r5 ?( d2 R! s; x: n, L1 r - ;
" m, o* Z+ m, s1 h9 F+ _ - ) q e; Z, J$ L' _3 C w
- _stackptr:
& M7 u0 O2 l q8 x - .word __STACK_END
* t4 `, ]2 l/ n* d5 Q& s - _bss_start:
( n/ z6 R4 { X N - .word bss_start% R0 L/ C4 ?3 J% k
- _bss_end:
0 q! L- _1 |! K9 ^) u% l$ S - .word bss_end
" y6 p! I# h' b% k0 w/ [8 }! n) ` - _start_boot:
1 y4 a3 B% O( A6 z& X - .word start_boot
7 b7 L6 [7 {% w% W - _data_auto_init:! i2 p5 \2 U+ i0 G1 v3 B
- .word __TI_auto_init/ l$ p& R) q$ H
- .end8 [8 Z7 j& r/ G# B. t/ N: d d" ?4 ?
- $ a/ ^, d; s/ k3 J4 t
- : p+ x5 ?) @6 u( J/ E* g
) n0 i$ ?" g F5 v
复制代码
: l" W' ^3 `( K0 w6 `. s0 K5 Q% W$ r5 J4 o! j) q$ u
, K5 n5 N" t6 W1 ~1 f# q
6 F; g0 o: a6 C. C% z1 z: q7 d9 E2 H' h8 G& E6 _1 Q
|
|