|
7 t* ]+ U7 k L5 G; e6 L. i6 I1 a7 U
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句* _! u8 F- ?/ z9 {
/* 重新配置程序入口点 */
. W( e3 {0 m$ r0 }8 T-e Entry- /****************************************************************************/
, j y% s0 h" t, v, y. Z - /* */+ _; E8 q. i/ X( I' _
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */
& s/ R+ {" ^, B! | - /* */- |0 j( a) h4 v, b
- /* 2015年04月20日 */
6 S8 ^; b& s3 Y. V7 M+ n0 O$ D6 b8 ^ - /* */% j7 O! N9 x7 L% q- \, a2 k
- /****************************************************************************/
2 B) |0 ] [1 r& p; W - /* 堆栈 */* k3 D# m, U/ ^- p5 N
- -stack 0x8000, h2 w3 k ]' w& m" M) i$ K
- -heap 0x2000& h! F% p4 k# b4 L
7 I& P/ }/ K3 G& p& s- /* 重新配置程序入口点 */; N6 ~( p. h9 W5 A2 a% c: S4 Q
- -e Entry
1 |: ~; n4 T/ H- Q' |+ ~ - + r0 }3 F: E8 S6 U0 k0 t. R
- MEMORY$ | {3 z9 D; l F6 J6 n
- {
7 M# H. q' `" ]1 s( x3 n5 T - #ifdef DSP_CORE& L2 q. {- j7 I6 p
- /****************************************************************************/7 v, `& }% X4 Y
- /* */ @; R3 C1 g) V1 S7 J" d: ?( W+ A
- /* DSP 专有内存区域 *// \2 W$ X4 G' _ I# |9 ?% u
- /* */; q+ G3 ~: S6 N( i" M# I" D6 h
- /****************************************************************************/6 c3 j3 [6 s9 u! [6 C
- DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
& g, |, D+ A* L - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */; T' l2 _# B: r7 I# {$ |
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */" ~, e, u5 G' _& }
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */7 }. m( l1 p$ |0 O) Y( J
- #endif
复制代码 这是一段汇编代码用于切换到特权模式
: _0 ~, z& U) s/ r* T- k# @1 L) x# U0 _1 M# v( m$ c
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm- R" |% @, g% W/ d& ?
- ;******************************************************************************
9 b+ P) Q+ I! T% e- d - ;
5 G0 ~. W3 x) v* L3 M( S - ; init.asm - Init code routines
! l+ y% E' C) j% `( G- f - ;4 H: ~3 P9 }- ^% T
- ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
* U% u/ Y8 S! r8 o7 \ - ; All rights reserved.
( e: v! ~+ U) ~( @$ U4 V! ?! f- X - ;
4 U! B6 v$ _5 C - ;******************************************************************************0 p' i( }) R4 s: k$ n
- ;****************************** Global Symbols*******************************
7 _9 _: m! u7 j; r( M4 ^/ S* T - .global Entry
* [% x$ D! p6 H+ ? - .global start_boot' f/ n8 K1 d. H5 O1 l9 l) c1 _4 H
- .global __TI_auto_init% V. O6 i# ]8 Q# J$ z, Z; \1 u
- 1 i/ S' G# F- H6 X7 g9 G
- .ref __stack: b$ V- X$ O- T" b7 i: R/ c/ j9 G
- .ref __STACK_END
/ x7 j% E) N" n7 E% d - .ref bss_start
! P. @8 }! Y: u" i. g( F - .ref bss_end" _. B6 q8 L8 `( ~
- .ref start_boot
$ T# Y3 \$ V" j1 s4 l
" Y6 A2 r3 ?6 l+ w- m' ~6 I- ;************************ Internal Definitions ******************************
; H0 Z7 B% X" m1 h& j p6 a5 q7 m' h' z - ;
2 v' w2 v7 A& N7 m: A& i) ` - ; Define the stack sizes for different modes. The user/system mode will use
; g9 [7 @# M4 f. L - ; the rest of the total stack size
, u, u% y" R0 ?' M - ;
; N5 R- Q3 X) l8 W. H) K - " \3 r l' E9 m/ X; r. D
- UND_STACK_SIZE .set 0x8: w0 \' ~# A" l* ]1 j& q" T
- ABT_STACK_SIZE .set 0x8
2 i6 R8 N$ V B - FIQ_STACK_SIZE .set 0x8
. R8 k2 D) ^3 `5 U - IRQ_STACK_SIZE .set 0x500# ?0 Q- d& {5 ?2 }/ z/ S( j
- SVC_STACK_SIZE .set 0x83 y. e4 H. e! I, S3 N
# _3 j Q: {* w- ;6 j0 O* ~' U, @
- ; to set the mode bits in CPSR for different modes9 f) ? |4 R2 a5 v# x
- ;7 R+ I) T/ x" X9 E, Q$ w
- # @. H/ ?3 ^( I: ^: f( C3 }
- MODE_USR .set 0x105 u' q0 i- Q& {. k
- MODE_FIQ .set 0x11& i! T; a# G- m) f8 L% M6 Y
- MODE_IRQ .set 0x12
3 ~9 h* q: K7 D# ~3 i4 z. ? - MODE_SVC .set 0x13
& B* w1 q, @, I, J) p7 T - MODE_ABT .set 0x17
$ C" q! u$ F2 z" i8 Q/ x - MODE_UND .set 0x1B, o# }7 ~! m6 u( X9 {3 O$ T
- MODE_SYS .set 0x1F+ c( ]! d }' b7 L, M% O
- ) r9 l9 i& d" {6 } H8 B
- I_F_BIT .set 0xC0
% Y6 m3 J, F! e0 L% p - . I- C3 P' R" h" h$ N7 m
- ;**************************** Code Seection ***********************************9 s* T( j' g) N
- .text
0 t4 Q: Z+ }6 A9 B - , D: ~) ~( I7 m4 r8 Q: U
- ;7 |4 O, T" A0 g x$ g& p. ~7 v8 _
- ; This code is assembled for ARM instructions
1 s; f+ N- Z4 r9 ~- V) R$ G4 [ - ;
. i" k3 e3 t0 z E2 Q+ o4 k - .state32: M- M$ W$ e( o$ b! q
3 |( G7 j/ H3 `5 J8 z- ;******************************************************************************
6 |4 P$ s- J8 {* K( {1 ] - ;( v9 H# t5 d" w% M/ Q
- ;******************************************************************************, c1 f9 G$ ?; ~+ h! V1 m
- ;
) j O1 b& `+ \ ?1 E4 a - ; The reset handler sets up the stack pointers for all the modes. The FIQ and
3 v2 `& h4 B& C2 d0 ] - ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the8 T( y, W% }! Y# Y( k9 n
- ; main() function.( I8 Q' n" W Q- n
- ;
) G1 E+ v6 R) Y# _# Z - Entry:8 h& x0 B5 |! i% p! N
- ;
& G" s/ u/ O6 I - ; Set up the Stack for Undefined mode! ?. i3 X* s' [5 H7 [
- ;
+ L' K* w$ O" @, L A - LDR r0, _stackptr ; Read and align the stack pointer
) O8 ^& @; A* S" g1 I8 f6 l0 ^ - SUB r0, r0, #8
3 E D: E) d& l7 V - BIC r0, r0, #7
' a& q6 O" S# b$ L - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
! S: }- I4 e9 C - MOV sp,r0 ; write the stack pointer
, j" v6 K- T) c# Z - SUB r0, r0, #UND_STACK_SIZE ; give stack space
1 H: ~) ` H2 i" E, E) z - ;. }# ^% p$ x7 p( j' k* E |
- ; Set up the Stack for abort mode
. z0 ]7 p$ C0 `4 i, C# \( _6 g - ;$ H# Y' J; i8 \& e' F" I& D: Y
- MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
, B \4 E) j" u% ~% l - MOV sp, r0 ; write the stack pointer
- C) O; ~/ i+ o u1 x - SUB r0,r0, #ABT_STACK_SIZE ; give stack space
& b' T8 ?- B6 C. k - ;' D, e' @, G7 _
- ; Set up the Stack for FIQ mode
7 H) b) P1 ^9 t1 I7 F- W - ;
. {! v! V* I7 _/ Y" v - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
5 x' |, q I4 S( s) X G - MOV sp,r0 ; write the stack pointer, _& n, K0 A- w! U
- SUB r0,r0, #FIQ_STACK_SIZE ; give stack space- X1 }+ w' n1 a* q& ?' \) Y
- ;
# b; U; K$ N2 A4 ?* K* x - ; Set up the Stack for IRQ mode8 A% ?9 O8 m3 p A7 `$ b& s
- ;
) U% O/ O9 S3 ~) r - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode" d, y0 j [5 @+ E
- MOV sp,r0 ; write the stack pointer. G; T4 N+ Q2 T9 t* f6 ?
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space O2 w* @, u6 d/ ~. N& I6 W
- ;
& g |$ d- B5 r z/ c' }" O - ; Set up the Stack for SVC mode. b* Y0 C9 n8 |8 s# r
- ;3 H* E Q1 ^7 O" p
- MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode9 A o6 I7 U2 Z( @/ M) { l
- MOV sp,r0 ; write the stack pointer
$ H/ `- j$ c4 f" n; }1 x1 l( Z* J8 U3 j - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
, x0 d+ v3 ^& ?/ ` - ;
6 P0 I" ?8 \! v! C3 u4 V8 r - ; Set up the Stack for USer/System mode
1 `2 q/ k7 k( r: T - ;2 X2 p# B) X, Q+ @4 V
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode( @, a' J% L9 V' q6 Q
- MOV sp,r0 ; write the stack pointer
1 l, M. X" ]* F6 r' H8 [, V: T$ ^ - - j& i% W# Q# j6 u7 d
- ;
0 s& E2 R* g# e: g: r% v3 _& b - ; Clear the BSS section here, f% J; Q$ t: X
- ;
& R" a g; G H - Clear_Bss_Section:
; s& d" a4 g2 d
/ F3 K6 r; }- ^- LDR r0, _bss_start ; Start address of BSS: o" h% `. O# i" a' @* h3 E
- LDR r1, _bss_end ; End address of BSS
) N; q- ~ K+ @6 X+ o1 c - SUB r1,r1,#4
! C' h- u3 E/ ~ - MOV r2, #0
0 x. g% g. E1 i+ D N- N - Loop:0 _# J5 J* l0 `1 j( c
- STR r2, [r0], #4 ; Clear one word in BSS$ u7 V+ j/ _6 g6 B0 v6 m0 \$ m
- CMP r0, r1
- m3 E2 X# T' D6 t) S- ~3 R6 _ - BLE Loop ; Clear till BSS end
1 E6 J! q5 s6 p) D6 ^ - 7 B& h1 O6 Y' L; s3 d* \3 l( \
- BL __TI_auto_init ; Call TI auto init# `' J# T( O3 h( g. }( b3 V
. K+ A7 m$ v, `2 }( U- ;
( E7 @& H2 c1 w3 @+ X) l$ t8 y" {5 g - ; Enter the start_boot function. The execution still happens in system mode9 J1 n, l2 n7 l- ?$ y5 u
- ; b: z/ v( E! r
- LDR r10, _start_boot ; Get the address of start_boot
8 `& O. b4 `4 Z( D; d - MOV lr,pc ; Dummy return / w X$ Y) |) G* M' C# p
- BX r10 ; Branch to start_boot+ T7 g- W$ _% ]" d
- SUB pc, pc, #0x08 ; looping+ m; W, H) }- y" L: i6 A
( t4 X+ f- S- c w- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
( {9 l$ ?' V) i! f) {4 J - ; BX lr+ [, [% _( w7 {$ P* t2 z5 v
- ;: H+ h/ f' ` X% E7 s2 z0 N
- ; End of the file0 r* T6 {. n4 y# _6 ?! {. `6 d
- ;
8 ^% g- q, s7 X) o: x
" u: m1 e0 t& R' T1 P+ E1 ]3 X- _stackptr:
# u$ M6 D! t* B" ?2 ~: v - .word __STACK_END5 Y, F! X1 O7 E, L
- _bss_start:$ x4 F6 L( ]0 r; X
- .word bss_start: O4 [. h; A- }- A* W9 F
- _bss_end:" o" D7 M' K$ Q- S
- .word bss_end
. H. p2 I! L1 a7 T& r1 M# U - _start_boot:
7 I% @6 h9 }$ ]+ \+ h8 o - .word start_boot
0 g& @+ t1 L! Q9 W) F2 D0 g - _data_auto_init:
+ l, u' C" e) W# h! ]6 B - .word __TI_auto_init2 h9 H3 Z$ E7 p% G) b+ E0 [9 Y
- .end
9 L% y$ {) s+ i3 p0 Q6 Y -
2 Z: T- q& l$ q5 L4 i7 p7 c% C5 ?
, h P3 f( L6 S: U- H) D: M7 u- , z9 p8 z- ^ q, C( k- D- o9 f& z
复制代码
0 S3 R3 A+ N! J: n) ~, i! X5 ]9 i$ N% ] l" Y3 p
' N7 F- B; O: \3 {' m
5 ^5 ^/ I# v5 x( m: `. B" d. J* H8 a4 y& u/ D# ~7 L1 s; p4 `! N+ `
|
|