|
/ \9 I o6 [2 Y7 |8 x8 w在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
- E' p* r; _& ~/* 重新配置程序入口点 */: @* I3 f, v: m+ J: U) k8 L" r+ k
-e Entry- /****************************************************************************/
- d- q( G8 p4 I; q - /* *// Z4 y o, u5 {* Y
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */5 ?4 }3 t9 I! W( G- g' w
- /* */2 j; Z8 N$ v3 u) ]$ l' ]
- /* 2015年04月20日 */
+ Y. u1 q( s7 _; D. _! W - /* */
) a$ K2 i G; U9 D9 y - /****************************************************************************/
5 E( P$ v0 }6 F' R( w% p* ]* Y - /* 堆栈 */
: S! S# q. S8 L3 Y - -stack 0x8000; {9 l3 ], L! r
- -heap 0x2000
; v1 W$ b+ k# C& Z; ?" e* X+ A - 0 t2 ^9 F8 o. h! t
- /* 重新配置程序入口点 */ B6 ~+ s8 P( p5 ?! a4 |" a
- -e Entry# P. E! f2 ^8 a# S, Q$ ^+ ?% o
8 X* y! r4 U( ^; P4 }- MEMORY, G! A1 u) G+ T$ s( ?
- {
6 B6 K; X3 V0 i$ _; k - #ifdef DSP_CORE
3 u. H. w' ^' r$ r - /****************************************************************************/
" Y; d- {2 P4 N7 Y# z, U6 j" S - /* */
0 C4 K; J) b% o0 | - /* DSP 专有内存区域 */
U2 F: Y) Q& p( u2 d - /* */
: _% v5 L. V7 |3 ?3 b+ g7 n - /****************************************************************************/( P0 o; U( e Q. ]1 B: [
- DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */ J" Y( e* k0 t2 Z2 K) V
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */3 ]& E$ S1 Y) _4 G7 i; ^
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */4 {- s, e9 a u% b. I$ ?
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
1 G0 w2 E% O1 i v- B- z3 ^# r - #endif
复制代码 这是一段汇编代码用于切换到特权模式1 g3 `. R! f% Y f% D/ f6 T
( O2 a) y3 o7 U! s+ \; k+ {! eOMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
0 k2 a$ s3 {% M3 H7 M- ;******************************************************************************. ~; C/ D$ v L' U. I
- ;4 }" T! t, Q2 r( z% q- W
- ; init.asm - Init code routines- j+ W+ D- |; ^# @5 X0 A: R+ j
- ;
$ P4 c; \) [; O% N0 u+ J - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
a- h$ G, x- S) b3 U - ; All rights reserved.
. m- L$ \5 d3 M# k' W' e; k9 M - ;# Q( t$ K3 |& U! q: o$ b8 e d
- ;******************************************************************************
/ y5 ^+ U' N& x& X8 _. F3 |7 H - ;****************************** Global Symbols*******************************2 P1 {# |$ ]) T9 K3 F* I) S
- .global Entry
' l" j& x' f5 S/ o% [% B$ P - .global start_boot
" H% E# T) x/ j' x5 w) w( h - .global __TI_auto_init
4 }8 f, z! b) U" [ - 7 [+ f8 r. E1 m2 w& B( x$ ~
- .ref __stack
; |! Z+ h4 u" G/ | - .ref __STACK_END8 `4 |& n7 Y% I7 o. v$ X6 r/ U0 \" E
- .ref bss_start
1 W, V: F5 ?* B' r - .ref bss_end" B( q* u8 e& O }7 q% c
- .ref start_boot
7 b, Q* T" L) F3 p1 N - k" b* g; I4 s Z
- ;************************ Internal Definitions ******************************/ `# o6 B G2 t! E, \; ^1 ?
- ;; l! I! [$ I1 J
- ; Define the stack sizes for different modes. The user/system mode will use
/ E( A: l3 w! _5 ?1 D - ; the rest of the total stack size6 k! @" w4 {7 v6 B& u
- ;' `& @( A' w/ R# Y! t
9 ?: E Q3 f" v Y; Q/ b1 o/ |0 x- UND_STACK_SIZE .set 0x87 m7 d$ u7 L1 {8 L& A, b. ~9 g
- ABT_STACK_SIZE .set 0x8% G! X, m6 b( O5 w6 W9 a
- FIQ_STACK_SIZE .set 0x8
8 j7 J D0 \$ E& } - IRQ_STACK_SIZE .set 0x5005 q5 e4 e9 Z& U# v; O; F
- SVC_STACK_SIZE .set 0x8
# S* U, K; _( ?/ N1 D3 b1 |8 @
8 ~- n6 V& I0 ]- ;
M, L5 L" {; l( z! o - ; to set the mode bits in CPSR for different modes# u# Z a9 W/ [( q, ]# y
- ;3 W4 z" Y9 v) [
- ! H; h! s5 U: M4 S
- MODE_USR .set 0x10! T* `5 B( C& s8 Q0 {. {- F6 a/ o
- MODE_FIQ .set 0x11
* H5 A5 A! J* k9 w- [4 i - MODE_IRQ .set 0x12
* X+ v9 Q( ~4 l5 F% b) J& k7 X - MODE_SVC .set 0x13
8 D% t. Q: y' R" V5 Z6 A+ D - MODE_ABT .set 0x177 V; k" _ z( y# y# T0 j6 E3 i
- MODE_UND .set 0x1B$ W( \+ |; Y/ `4 ~1 T4 P
- MODE_SYS .set 0x1F) N* D6 b) p1 C) E4 H3 V) }" T
- 4 I5 R- V* f( D7 f+ t: |
- I_F_BIT .set 0xC0
% R( J( W- A- l# y3 c - # A" u# m# s# V" I L* v2 m5 W2 P
- ;**************************** Code Seection ***********************************
0 M* x6 P0 I D' F* u - .text
2 i7 n4 r7 T9 u4 p4 T7 l( T - ( r# x0 D8 P# h+ B l
- ;; U5 A5 T& h* [6 d+ a
- ; This code is assembled for ARM instructions6 K K5 _& t; [
- ;! I# ?/ s8 @7 Y3 i& U |3 S& J
- .state32' G3 p6 b. _# u! l, d- g
- " K, P% x2 X# x- G' z( f0 s6 N
- ;******************************************************************************7 s) l- E1 f4 u9 K3 g4 k
- ;: N8 X \' }$ W# X0 U
- ;******************************************************************************9 j {4 i1 D( K7 P( w! a2 [9 k' h4 k+ `
- ;, Y! D+ f/ C. S6 f K5 k9 T1 R+ t
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and
0 o/ Z+ Z; b# @. y& C# R1 R4 S5 ` - ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
9 h% ^2 s( q% C( x - ; main() function.
' E( q% Q) z% z. K% [1 D5 ? - ;
7 R5 g( O4 t; r7 ~' b: v+ ^9 h* e - Entry:7 V0 c/ \6 \/ C1 R* }
- ;! V3 @6 S& z4 n+ z1 S8 K
- ; Set up the Stack for Undefined mode/ T' ?' [4 _) O' q8 \
- ;( I2 t- u0 q+ ^! z/ \7 r
- LDR r0, _stackptr ; Read and align the stack pointer! R! P: q B5 \% \" Y3 a0 w
- SUB r0, r0, #8% o; n( F3 `6 L( p) R7 s4 M
- BIC r0, r0, #7
- g7 O" _! z; V. H$ u$ b* p; O6 T - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
2 K" V5 V! i; b& W! Y/ K/ }4 M - MOV sp,r0 ; write the stack pointer
4 S2 h: Q# O/ ]( S - SUB r0, r0, #UND_STACK_SIZE ; give stack space
- q+ z% m) s8 E8 y9 K - ;5 s8 [+ t5 l/ @+ r9 O
- ; Set up the Stack for abort mode0 s$ t1 z$ A3 P" F% t
- ;
3 V/ R0 _( h5 o% v" _4 o - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
/ u& u: M5 q3 k3 A - MOV sp, r0 ; write the stack pointer
3 L l3 p) E, b5 B( g6 V+ h. j - SUB r0,r0, #ABT_STACK_SIZE ; give stack space
( t4 o, K& `" ~8 b: `0 e - ;2 k1 z6 h5 P( b
- ; Set up the Stack for FIQ mode
4 O7 z, I) }8 u1 D" @ - ;+ @& f1 \' N4 j6 Q- L6 h
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode9 v1 G( i2 D4 w7 |3 T% \1 _3 x- ]% w
- MOV sp,r0 ; write the stack pointer G* Z, E4 t: ?
- SUB r0,r0, #FIQ_STACK_SIZE ; give stack space7 k; w$ a/ R) _
- ;
# \) f; V, y! ]5 m! t/ Q! R7 F - ; Set up the Stack for IRQ mode- z0 x/ j: e0 n4 ^5 b3 J2 A! z
- ;% m$ K1 X; g2 S) O
- MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode" h# Y1 ~/ ~1 s) {
- MOV sp,r0 ; write the stack pointer
# K0 H* I' T7 t" ?# }7 p - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
$ |7 t+ Z' k% f6 `4 H R* _6 y - ;$ j* i9 K# m4 m, |. g% ~( {4 w
- ; Set up the Stack for SVC mode
$ l6 s5 y' F9 |: J1 @3 h7 m( D2 A - ;8 Y" Y+ M+ h2 ^7 o
- MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
: L2 h$ f" b+ f9 O( r - MOV sp,r0 ; write the stack pointer
9 \2 x* z2 X/ L2 M/ A# n9 S - SUB r0,r0, #SVC_STACK_SIZE ; give stack space9 K& @- B0 F3 z' Z# a/ B$ f
- ;5 E9 B, s2 x6 v
- ; Set up the Stack for USer/System mode# ^- J# c( b9 @; E
- ;
0 |( M- D8 i3 b6 z. k9 Q - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode' {5 W3 |/ W& D
- MOV sp,r0 ; write the stack pointer
9 F8 Y$ `6 ]7 Z" }8 {! o - - x5 D- d, t2 A Z" c
- ;
! V; i9 z0 N' v ]$ b: ^2 { - ; Clear the BSS section here2 d# ^$ t% }1 F8 h
- ;+ W1 s9 Q+ o; |8 A" j
- Clear_Bss_Section:
0 w# G5 _$ G7 I. X% m# R" R* p - ' M) W+ t: g* J
- LDR r0, _bss_start ; Start address of BSS9 r7 p/ `' p6 a0 ~4 z
- LDR r1, _bss_end ; End address of BSS
4 ?2 \( B3 R9 t - SUB r1,r1,#4
# G. M, P. ^7 T - MOV r2, #0+ z5 s! F" g# F
- Loop:
0 }. y; A) `* r2 {& k+ ` - STR r2, [r0], #4 ; Clear one word in BSS
: p# f" q: a1 l0 z O$ M - CMP r0, r1/ i3 J2 l! I7 \# Q+ @% W) c
- BLE Loop ; Clear till BSS end
/ F, b3 U1 G) D4 R8 W - 2 c! z* U2 q; b5 \9 ?: |1 Q
- BL __TI_auto_init ; Call TI auto init; N' G3 g5 A7 ?, f, i) b
# D6 I7 s- z. ~7 A9 s7 w* ^- ;
; t. }5 L e A5 Y V - ; Enter the start_boot function. The execution still happens in system mode: [, e0 C+ \% C; G5 E" ^ K. n1 j
- ;3 Z& X0 E3 {4 E1 ~
- LDR r10, _start_boot ; Get the address of start_boot
9 V6 q9 \% ^6 b6 @ v2 N+ z, z - MOV lr,pc ; Dummy return
: e" p/ [1 k4 U; j+ l- l+ x - BX r10 ; Branch to start_boot
8 K0 I3 s& Q# G: ?, P/ R% z8 i - SUB pc, pc, #0x08 ; looping
8 I/ H1 w4 r' ~4 A+ l$ z% z
* Z( w8 {, Q. K: v7 B, i4 N- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
( M Y. Y! q$ E/ ~ - ; BX lr" Z. v( t i/ }% i
- ;7 z. m) A5 {9 j
- ; End of the file
' @: ~5 m$ h7 t1 [ - ;" H, `# L) M N& ]7 _( W
- , R$ Z0 T1 w; k2 m0 ?
- _stackptr:! U4 }% F4 R2 {4 \+ M& i
- .word __STACK_END
0 [% P: ?0 Q; A1 E9 f - _bss_start:( A+ L7 ^" ^# f9 x+ R5 x
- .word bss_start) x8 `9 C0 Y! o8 w: ~) y
- _bss_end:4 ~- ?* J! |6 k5 w3 \7 {9 N
- .word bss_end
- }9 i$ D7 C1 k' N W - _start_boot:& ]& \# @0 d+ a1 ~9 ~9 e/ g
- .word start_boot6 J% d- T4 G! J4 o* g
- _data_auto_init:
" [! k. Q8 P0 _! l0 Q1 u6 [ - .word __TI_auto_init
7 x( m* @4 g1 F {4 @ - .end. a. u' v6 [* K$ m7 G$ J
-
1 d* b% D) j- V% F; P9 F! t - & |# b$ `$ h: u* y" T
- + O9 W8 ?4 Q0 S3 V
复制代码 * \) C/ y- I; w: Z' V4 T: ~
9 c( V# S) e0 O$ _8 h1 `. {$ H
6 Z; ]" U4 I) o. [. a# h& G! u; h: j
4 r. G0 S) d" x2 s- G |
|