|
' E0 L& j) P6 S5 ~在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句8 |( c, N% ~+ I) R6 {
/* 重新配置程序入口点 */
, d# k5 z* {8 k( y: ]; R, G0 B$ C! G-e Entry- /****************************************************************************/" }5 ~- D$ l. U) t/ a2 ?; |
- /* */; n, a. I0 y/ J& p ^- v$ u4 k0 c. J( i
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */
0 U( \, j( B+ Q* T - /* */
7 e7 B4 l/ S B a" e9 R7 { - /* 2015年04月20日 */
9 f% j. ~4 y( s - /* */
6 ]7 S7 @* u% Q5 e: b% V - /****************************************************************************/
- u! r1 C1 r/ R# T - /* 堆栈 */. z P4 Q) {! b0 N, J
- -stack 0x80003 B% J' P* |, W- {
- -heap 0x2000. H; B# c7 u W! @8 O) b3 E
- , T3 ?3 ^# l2 x" b1 ? q1 O5 E
- /* 重新配置程序入口点 */3 Y8 ?7 v2 ~6 r a9 {
- -e Entry
/ @# {0 P4 k# f- E: I% H: h5 g - ) _2 H% j% a5 ^8 t- ~2 Q8 r) y
- MEMORY5 @! ~8 G* \+ l
- {" M, {+ X) h$ N% R9 U% C `6 P
- #ifdef DSP_CORE1 E9 I! ]: n- l7 c
- /****************************************************************************/
f4 }( v" p8 h6 j5 ?7 W* M - /* */
+ H4 W& ^! {) u: `0 Q - /* DSP 专有内存区域 */
0 A; b( [6 w2 k# h% ]; G - /* */8 d3 i$ V3 U O& |
- /****************************************************************************/
: m2 x: C0 E' V1 K/ \0 e - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */8 j1 J0 V$ T4 A) C: T5 e0 V+ V) W
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */, c: q; A: G' ]
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
8 F$ ?% j$ b/ l5 M" N0 E - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
! |" M, O0 I9 u' y+ ~% u0 u - #endif
复制代码 这是一段汇编代码用于切换到特权模式
' ~1 f! h8 P- F. D# R5 r; ]/ A3 n# a' X9 L5 j
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
4 a* [1 _ a0 _% a- ;******************************************************************************) ]/ L; n. U5 p" k/ s* f
- ;( `+ X. d7 D- |8 {% n) }
- ; init.asm - Init code routines- A/ m8 ]1 P) v; \
- ;
8 W! A( E3 T1 A: \/ N! J - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/2 n5 Q: q3 Q+ A- c
- ; All rights reserved.
+ \3 w- w& S4 n' z: ]% `# R - ;. {2 u$ R: k$ b o9 g1 s; d6 K
- ;******************************************************************************
' [" {) m* b b$ S, Q - ;****************************** Global Symbols*******************************
$ }& j3 `2 Y" e2 J - .global Entry* z3 ~% W( K6 B2 C# e
- .global start_boot: v: Z9 q# C1 @) i
- .global __TI_auto_init& o$ p5 o1 |' H ~5 I
- 2 w$ V! N- |/ |. d: }
- .ref __stack% {! ~, E, X4 F, u+ x5 ^3 s
- .ref __STACK_END" t' }0 P& Z$ V9 D B
- .ref bss_start; e! w( l; F$ }$ w
- .ref bss_end. m# z: x$ h0 ]' x2 M& S( q4 h) v; q
- .ref start_boot5 i6 _, x8 i4 j, O o Q( R% |$ k
o- j8 P' h$ p s( `. @8 p- ;************************ Internal Definitions ******************************
2 c# W( Q' r' G9 f6 S - ;
7 b+ k: p- ?& ?! h - ; Define the stack sizes for different modes. The user/system mode will use
E9 h2 h! M5 a- `: J1 R - ; the rest of the total stack size* C+ L/ @1 R9 J5 {/ b! H6 b
- ;* I g. k- ~7 Q: E, ?5 v* r- D
- + j6 |' o0 @4 t* C3 b4 x
- UND_STACK_SIZE .set 0x8
3 R# w5 F! B9 H0 p - ABT_STACK_SIZE .set 0x8( q( A1 y- D' l {. ]1 r% q
- FIQ_STACK_SIZE .set 0x80 z0 j0 ^3 V3 [! l& [
- IRQ_STACK_SIZE .set 0x500
1 r2 \) n0 z/ }) I/ w3 b - SVC_STACK_SIZE .set 0x8
3 Q1 |+ ]% ^* M3 i$ S9 ~ - 0 G0 C5 P! A# j& o6 c* v3 c
- ;
. l M0 h8 T- T% w% V - ; to set the mode bits in CPSR for different modes
4 Q# |7 G2 p, D5 m! A2 }- t - ;4 s- P" k4 H6 \% M* _( |
8 D" O' l* B& y/ N3 s' Y% b- MODE_USR .set 0x10
6 x0 o+ Y: x4 P! a: n2 x - MODE_FIQ .set 0x11
1 j5 k$ O! H- Z! I) `1 H) N6 @9 c - MODE_IRQ .set 0x12: g# F7 i4 Z" p0 ^: a0 W* u, x. L
- MODE_SVC .set 0x13
# ~+ c& N$ t& Z# A) v - MODE_ABT .set 0x17; d6 v9 Z6 |. X; X
- MODE_UND .set 0x1B3 ]' Y" C& z) `6 C0 E3 ~8 N- Z( d
- MODE_SYS .set 0x1F
, V/ ^7 F) V0 _4 z7 |5 U
. _+ M+ `. j* d+ S6 y- I_F_BIT .set 0xC0) b, b% V5 Q% q# Y( n( y' X0 C
- % B/ [+ {! \* j0 J2 _
- ;**************************** Code Seection ***********************************( A$ T+ v( j) }
- .text' w1 Y* Z. v$ p0 U, e
- 4 k8 q: r8 V1 G' a/ J
- ;) p8 E# u0 _+ v! G) i# l
- ; This code is assembled for ARM instructions
, p Z- l- H, Q% _ - ;' Q% {6 Z" \5 [- {. u# T
- .state32
% k3 H g* s1 G' d9 d9 T! j1 E - - _$ d; P3 B! q4 M5 v: D* h v- I- h% s
- ;******************************************************************************+ a: i4 N4 J2 S! W4 r2 V
- ;" s2 I( i) G$ I1 d& Q# h
- ;******************************************************************************
5 y4 R2 j1 {2 E% K/ c5 [+ G - ;/ y. T$ q. C) o# G* m; B. u
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and+ |/ R0 z! L8 s6 R( U2 Y+ v @/ q
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the! F3 |. ]* Q! d' M: E
- ; main() function.
5 {0 `. M. g! e+ }% X8 P8 o/ \ - ; }( g3 ^" P! F+ s" T
- Entry:5 Z. D* R3 ]8 a/ G/ Z# Q/ g
- ;, [7 G% K6 R" S+ c
- ; Set up the Stack for Undefined mode
0 }5 `3 F$ w. U% Q$ t: n - ;) P( I7 r F2 B# c, B3 B- G
- LDR r0, _stackptr ; Read and align the stack pointer; t+ `* E. L" s0 S) h9 h/ Q
- SUB r0, r0, #8
( Z$ L; L2 ` o t - BIC r0, r0, #7
5 g( P( G& r5 h - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode2 ]3 Y, |, e& [
- MOV sp,r0 ; write the stack pointer3 l2 \0 L2 c/ m# g: M# ^' I
- SUB r0, r0, #UND_STACK_SIZE ; give stack space
' v n* \+ E8 {. V3 r# W4 O1 ~$ n - ;
D$ @* |/ z0 R/ c" F6 ], m - ; Set up the Stack for abort mode
8 ~' z5 u, t2 y* R4 z - ;
; \7 i" p' k& M$ @, P9 c - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
# B1 A! x n& J( l9 B2 e4 F - MOV sp, r0 ; write the stack pointer
4 ~! J+ O+ \8 z& l# O7 ]8 c - SUB r0,r0, #ABT_STACK_SIZE ; give stack space
+ f6 G3 f! I6 o2 Y5 \# Q. E - ;
3 o7 p& d, `& Y" [2 @5 H - ; Set up the Stack for FIQ mode4 y5 J# b1 r8 t& ^
- ;8 I* t9 d0 o+ w: d
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode7 Z1 _. T5 d$ x& W) y# w# ?$ G; |
- MOV sp,r0 ; write the stack pointer
3 i, P6 i; H/ }+ j3 v - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
( f# b2 j9 Y/ u) V - ;% x1 w1 ]5 [8 m& ^/ R, e2 z
- ; Set up the Stack for IRQ mode
0 [. e+ c( e6 r- j5 K5 y; Y J - ;
( R! r) n; L3 Z2 l: n - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode) G+ [; c& ^) L
- MOV sp,r0 ; write the stack pointer- d2 f9 W1 g: G. Y1 ?
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
% V6 u7 P- @, l2 Q9 S* V6 T; p/ k; C } - ;
9 t' x; _4 V# A7 B9 n* s- U6 N - ; Set up the Stack for SVC mode
0 t8 h; p+ t# U4 k" {; B - ;# H' j. E# R4 h) z* M, x1 q
- MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode) c" J ]5 K% o- M1 X
- MOV sp,r0 ; write the stack pointer
4 ^1 n9 z+ t3 J2 {! W k' h - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
, W) |0 |5 }* x) _$ y - ;
! J E- C' X9 j* z' S2 J - ; Set up the Stack for USer/System mode! X$ j4 z ?. r
- ;& I* Q' `" u+ _2 `; G/ b
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
2 B) s2 D5 P8 Q* r# G/ U1 }* Z - MOV sp,r0 ; write the stack pointer
7 F4 U* X' c: c% D# u, q4 s - 4 J1 ]0 Y# Y; h- r, k* x0 L
- ;9 Z7 o' ?* \! O: S- {- r
- ; Clear the BSS section here6 [' Z9 j7 k/ U2 E
- ;) ?7 x3 v0 ^6 E5 E- g
- Clear_Bss_Section:, v) A& _* }# |5 ] j' `* C1 u% t
- ) b" ^* k+ d# }$ y: s& H# g! f
- LDR r0, _bss_start ; Start address of BSS3 `$ L# b+ C" ?
- LDR r1, _bss_end ; End address of BSS, d( D4 {: j8 R
- SUB r1,r1,#4' B4 k' w$ C: P* m5 S
- MOV r2, #0
$ |! g( Q, x5 e" i- k - Loop:
- q+ ]# {6 m: U% e - STR r2, [r0], #4 ; Clear one word in BSS
% H, O5 @$ K2 K, Z# O& A - CMP r0, r1
! Y8 C- b5 X/ e& d$ d3 l3 Q - BLE Loop ; Clear till BSS end
; e$ e9 c; }1 e# ^ - * \0 Q2 {, K; w0 y$ i5 F. B! S
- BL __TI_auto_init ; Call TI auto init
% }8 l5 L9 a# S* X - ) h7 t! |# T! `: T7 w& ?
- ;
" r4 \5 Y. W; o2 }4 i/ v5 r - ; Enter the start_boot function. The execution still happens in system mode
( _& z; S+ t0 N! O) \; u- H - ;" ~, o; H: r; o
- LDR r10, _start_boot ; Get the address of start_boot
8 C0 ~. m* C3 ~0 U. [8 { - MOV lr,pc ; Dummy return - ]: m. E2 L) [5 i) x* w+ y* k, O& o
- BX r10 ; Branch to start_boot
% ?6 m" M. X) y( z0 u - SUB pc, pc, #0x08 ; looping
b( V' A0 s4 c) u% J( a( r
. G1 l4 z+ M( c3 `1 w! {- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode4 S% `6 ?3 X \3 W% V
- ; BX lr) N7 I7 w+ b/ _2 u7 A
- ;
4 Y( T$ V1 |' s - ; End of the file# v/ A9 _( P/ O( }2 X# i
- ;0 y1 \ s- {* R2 J
1 D; I4 F, L# _. j. Q7 X. ^0 ~1 O/ `- _stackptr:& A$ J5 I' D. i" O3 G5 S5 O
- .word __STACK_END
: Q0 i/ A: o( t2 [2 G& a - _bss_start:
3 Z' h! U# J! R/ I) ` - .word bss_start: {5 Y& X; ^0 `* y7 L
- _bss_end:" t; Y+ b' C( J+ }+ m/ K2 R2 U# l8 G
- .word bss_end
1 e5 P5 l" q6 L9 Z4 m - _start_boot:
+ s% f+ i& M" k( J$ s - .word start_boot8 i5 W( R/ A. w7 {0 V; Y
- _data_auto_init:0 N- ` j m* G3 A+ X& {; [& _
- .word __TI_auto_init
# s6 v6 L7 q. t, F/ i+ ` - .end
% b7 L3 h4 n- X -
6 K8 L4 A4 D& a' M4 F: W - 9 w. X" Q5 F( {+ I6 d& w
- ( v9 d, E' K) U$ @* l2 F
复制代码
: u! C% X; L, J8 a/ a. Q, @$ i' F# P
4 r q. i* Z. B- l2 @( l% b
, s6 h& x/ A6 W& I( D
' r& z: |% Z2 f' f% t& t3 M8 ~
" f: ?# H5 ^2 v' ] |
|