|
1 H2 i6 S9 B. @0 O6 _( w在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句& Z8 D2 ]; q. M/ g3 f, [
/* 重新配置程序入口点 */
; m* L# |& ]0 o$ S5 v r-e Entry- /****************************************************************************/
0 ~& J& K- [2 G1 c' l+ h* M. `. ~ - /* */
9 j: F% G' W# e5 u& F# n. q - /* OMAPL138 及 DSP C6748 内存空间分配定义 */
7 n+ x ^4 r; t8 J7 L - /* */5 n y9 Q t, j' _/ I) h
- /* 2015年04月20日 */5 A/ e+ x$ D4 E7 Z" e
- /* */" K& h4 v/ ^5 M6 k$ Q
- /****************************************************************************/
9 C6 \7 s0 }& H% _: W# K* A - /* 堆栈 */, x$ k+ {# g( ^# c- o$ U
- -stack 0x8000
4 u4 K, u) ~8 X+ S - -heap 0x2000
5 R) P( T6 B" u! t2 S - ( r* [3 D. |- P2 e( k7 |+ ]
- /* 重新配置程序入口点 */ e* m O) E! q1 J- d
- -e Entry
- n. X; B B. `& O* P7 x! L0 n - ! g" ~1 w- G$ @: \; ^* H
- MEMORY
. X5 d$ ]" ?7 H( R* B: ?' @ - {8 F1 H3 B% g' l
- #ifdef DSP_CORE# c2 }* R( D7 c6 p# [: O
- /****************************************************************************/
* C7 _- F7 u8 c, u+ u - /* */
$ i& ?+ g7 W& F2 v( } - /* DSP 专有内存区域 */
1 f+ S3 w k0 D$ _1 p+ X5 U - /* */
; _" O, f( y( j4 Z6 s# W. {! c - /****************************************************************************/
6 }& h. e% W, ]& Z - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
" ]4 E0 I+ Y" P' H$ e! d - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
+ \1 u [" b e5 P4 K) X - DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
9 w' T0 t+ s, C3 R: [ - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */: s3 n2 C. n3 _% i
- #endif
复制代码 这是一段汇编代码用于切换到特权模式
|4 i& i1 h6 f% N7 p$ F) X( J# m% Z4 z1 C* A7 \0 E
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
' {0 t- [& [. E* S6 V; L$ a- ;******************************************************************************' O1 ~6 c ]- s% W$ ]! ^1 @1 ~0 j
- ;, Y% | }6 n; }, L+ I/ R4 @1 ~
- ; init.asm - Init code routines( A0 M, M( }" W6 B' S
- ;7 Y5 }9 [: A! V9 q3 H9 L- c
- ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
F$ D% S% Y w* m - ; All rights reserved.
( w) }% O7 ~0 d# [, s" r) l - ;1 ]$ O* A1 j; a! R; X$ m0 \
- ;******************************************************************************( x% I, \ ~" t+ p) n
- ;****************************** Global Symbols*******************************
) F! S- n$ f" w; x* r2 q - .global Entry2 K5 Z0 ?4 |4 [
- .global start_boot- S1 b; R3 h u: K+ P
- .global __TI_auto_init% R- @1 s' \! E5 @( ^; f
& ~4 E* H" S, ?3 @9 S- .ref __stack2 d! E3 F% y) o* z
- .ref __STACK_END' w2 u) `) l$ h2 ]" N5 i Z
- .ref bss_start) b3 S# L f2 Q4 r y
- .ref bss_end# t8 u$ U3 |5 L9 n% y2 o p( [
- .ref start_boot/ y5 W h# K0 h+ N8 q$ U( o' P8 t
- : \0 f T/ u) r2 y& Q$ n
- ;************************ Internal Definitions ******************************
. z2 j0 z) L! m; Y1 ` - ;7 p1 v- }4 d0 n- c" ]8 F$ Y9 H2 h- G
- ; Define the stack sizes for different modes. The user/system mode will use
, P8 e/ O- W7 ]) C: C - ; the rest of the total stack size; k+ N; k& b! S# L
- ;
( f: T# V! j; R8 d) N' w
5 d. r# t& O0 `9 _- M# C- UND_STACK_SIZE .set 0x87 G4 p9 u1 ?5 O" A( o9 z
- ABT_STACK_SIZE .set 0x8& }3 B( A o# P! ^8 L, G
- FIQ_STACK_SIZE .set 0x8
~' n( Q7 T6 G/ `) w - IRQ_STACK_SIZE .set 0x500
5 Y: ~5 l3 _& j' R' O; A+ c$ l - SVC_STACK_SIZE .set 0x8: m& |$ h$ o$ r% S. g" v
- h5 n- H) H# Z2 V: g
- ;- ~5 `( M! w* ^* e2 Y; q: O k
- ; to set the mode bits in CPSR for different modes- H" E( |# W) `1 l+ j
- ;
7 I* E. A$ R$ ~9 J9 D* w
' H3 ?$ Y6 a' i* ]- MODE_USR .set 0x10! X5 _- ?- U2 x
- MODE_FIQ .set 0x11
4 z$ a) _6 E: y - MODE_IRQ .set 0x12
; i B, @! g! h2 l& h+ f1 O/ b% h% w2 j - MODE_SVC .set 0x13
4 z; X/ z" k+ I1 D4 Z+ |- R: s - MODE_ABT .set 0x17
, P( J" Z/ u/ S& H* |) t5 ]( E - MODE_UND .set 0x1B
( E9 Q6 k5 i7 ~ - MODE_SYS .set 0x1F
: }- d5 `, X/ C0 s/ s; ~4 a
6 [% o, A* z8 U$ q$ D* M# P- I_F_BIT .set 0xC0+ g/ c) u: y# i% R0 R
& E t/ Z- T0 X- ;**************************** Code Seection ***********************************
/ ^. e2 C) B& b# d9 K - .text
7 d z( w8 Z. S0 o4 d+ Y: ~
& M- A. r4 v9 S% u# z/ K, ~- ;
: H" C( \5 ~/ w. p" m* q - ; This code is assembled for ARM instructions
/ d7 a4 ~. w4 r' N - ;
3 |( I$ k- k m& k - .state32
( ?0 P/ z1 `7 E( | - / l. D. Y$ o" O. F6 F% S a
- ;******************************************************************************
; @% y- k) @( g - ;
$ _8 {5 Z w6 {; o( U& V - ;******************************************************************************7 H6 Z" l, b# z3 N5 l
- ;
! e3 o/ C" t% _ - ; The reset handler sets up the stack pointers for all the modes. The FIQ and
0 H/ x+ f6 F" u# E - ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the# Z$ v1 J v/ Y O4 A
- ; main() function.; E) s; p. c9 v! C
- ;
5 O2 z6 t: \9 n3 M, {# B - Entry:
( z8 K! ?2 p: y9 v - ;
4 m# b+ N& G d% l; r" I - ; Set up the Stack for Undefined mode
5 ~, Q0 Y7 b P7 ~ - ;" {+ S8 O D/ W6 b- h
- LDR r0, _stackptr ; Read and align the stack pointer
4 e0 X y: M: z; c - SUB r0, r0, #8
+ T e; ^! q5 G - BIC r0, r0, #7
. ~) u3 `0 l. l. |" m: }, O) f - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode ?$ N5 p) b+ t. ~1 _
- MOV sp,r0 ; write the stack pointer
& ~" y! E0 @8 I$ e - SUB r0, r0, #UND_STACK_SIZE ; give stack space2 ?& s4 H% O) n3 B; y( I
- ;& x2 v, i8 B6 `, Q* @
- ; Set up the Stack for abort mode$ [1 C& D1 u( I' t+ ?
- ;1 k# S! r1 R- X
- MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode
" s3 L3 f4 |2 j+ j - MOV sp, r0 ; write the stack pointer0 [1 e! _# ^) a2 Y5 d' j9 v O0 r8 H
- SUB r0,r0, #ABT_STACK_SIZE ; give stack space# A$ [$ T z7 f! k& U5 O6 [0 s* N
- ;
& N" f" G5 b2 j0 Z% ] - ; Set up the Stack for FIQ mode, m* n# E+ ^7 _/ a: Q. C
- ;
# D0 o1 |& [& Q/ l - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode/ X2 B, W: k9 }% G9 E; R4 V
- MOV sp,r0 ; write the stack pointer
3 V3 [. v4 A& B9 z4 { - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space7 ~5 g8 s/ i0 A0 ]1 ?
- ;
1 }/ k, k; n* a4 X - ; Set up the Stack for IRQ mode
. n2 Q& b! S$ X z; y) p' F# } - ;+ ~& \+ x5 r. ~# ~7 o0 ^
- MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode
0 T7 Y6 J& Z. { - MOV sp,r0 ; write the stack pointer& y% C* j0 p% ~/ v- o
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space6 V" B- g: p. t3 ~
- ;7 H B4 K" j& P* ]% P
- ; Set up the Stack for SVC mode
0 [. `) i Y( ]6 m - ;
) F# W3 q1 `) a" C, D - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
4 g2 P; Y$ K' {1 R& P - MOV sp,r0 ; write the stack pointer
- g( d: t g9 E4 _5 ?+ G - SUB r0,r0, #SVC_STACK_SIZE ; give stack space7 r$ n4 H" }' _! e
- ;
+ O* [# G0 Y# ~+ t* H - ; Set up the Stack for USer/System mode
L' ]5 _; d% s! E - ;# Y' J' a2 J; i0 E; n; N5 u
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
- l; {2 z( C+ e9 s# P - MOV sp,r0 ; write the stack pointer
, F3 g8 |* ?# g" w6 Q( E0 l& A& q
k Z3 K8 |8 y# _1 R- ;
0 X! i# ]- U" o0 @. M - ; Clear the BSS section here
' E+ H8 a% _7 o( W* E j$ t# z - ;$ l6 }+ s: V& ?$ D$ Y$ ]) Z
- Clear_Bss_Section:
: ` ~/ h9 M% ~+ m* ] - 2 P9 a# I; J* ^/ S; M' S
- LDR r0, _bss_start ; Start address of BSS
7 _2 @3 Q% n+ |4 g% v0 ]2 f1 P! D - LDR r1, _bss_end ; End address of BSS
# F1 Y. ]4 A' Y( T) O# ] - SUB r1,r1,#4
4 Z J3 T& X# ]3 w/ n, l* P - MOV r2, #0
) ?8 w* W/ @0 e" e* O& h8 x5 V - Loop:
7 I2 v0 O, R2 H9 ~( C - STR r2, [r0], #4 ; Clear one word in BSS
, }7 R! e8 ? J3 S) M - CMP r0, r1; N. L. k5 Y+ j
- BLE Loop ; Clear till BSS end
; J% d! v- M& _4 q
* j: U. U0 W7 n3 I5 `; b- BL __TI_auto_init ; Call TI auto init, }7 t2 k8 \1 J; e0 F1 p5 ?" j
9 u6 ~: j3 u7 _( g+ |- ;' i. z0 ]( v/ f- w
- ; Enter the start_boot function. The execution still happens in system mode* E o4 }3 }6 M# Y$ k
- ;
/ j, K, F* l* h) l0 i# w- B+ C - LDR r10, _start_boot ; Get the address of start_boot
( c; v5 [. d7 p - MOV lr,pc ; Dummy return - U& B/ Z4 I9 D: z* r! Z
- BX r10 ; Branch to start_boot1 {, [: j0 K8 j" H
- SUB pc, pc, #0x08 ; looping
, a4 F0 [) [' s. F4 K \/ G9 t$ R - ' ?" V" |/ e- |5 i; v/ W
- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode" f9 |) w$ U2 l( |; _* z7 ]& J) v4 L
- ; BX lr F- ?9 {7 i1 } q
- ;# M, O, m( ]- |/ P" v
- ; End of the file$ c9 m* `5 F' _% J" l2 [4 z- F3 i
- ;
! i1 _* k3 f; h+ L( }
) d& A# V! V+ B( Z- _stackptr:9 i% Q8 v# T) s4 s% h3 Y9 ^% z
- .word __STACK_END) u5 C" c: ^( ^+ C0 J& ~! z
- _bss_start:
- T. e8 R! c9 V% `- `+ y6 h - .word bss_start
) t( Q; M6 P1 ?, s - _bss_end:+ Z* @5 S, H4 n$ N' t4 n# M" G
- .word bss_end
) I) _0 A+ M$ r: u - _start_boot:
6 P& D$ Z: `. U - .word start_boot
& @2 q! v4 {3 [1 S. o }( r/ u - _data_auto_init:
N$ n* o# s' s' ] - .word __TI_auto_init
+ s! }: H L; V2 t - .end. U% k" C# { [8 O
- ( F$ l3 n: v c
- 6 _; G, h0 s1 R+ p
6 m& ?6 U$ j/ h! t) L$ W
复制代码 . |* T% h+ B, U9 l, h' I
+ ]& W; ?2 h6 P1 b5 p( z4 {; r- t/ T. @
& c3 r8 I, q- _ I4 k
; O* `% z* e0 c B3 `1 U! ^ |
|