|
8 {2 h; D/ r5 h3 a& O
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
( W2 N4 a4 n8 S. o- F7 v* m1 u/* 重新配置程序入口点 */0 E" c# f) R" o
-e Entry- /****************************************************************************/
S0 w7 q, W( E5 A1 A7 O8 s4 p# A - /* */) J' Z; q$ |. H! y, c" F% Q- I
- /* OMAPL138 及 DSP C6748 内存空间分配定义 *// z. J1 U) h8 c" G
- /* */
5 I9 }& Z$ D, Z) K/ b4 ]7 m$ _5 N - /* 2015年04月20日 */4 z b: Y: s/ G- m: q. ~
- /* */- i8 \' T C3 w1 J( `: S6 b7 Z* }
- /****************************************************************************/
7 F1 Y% m) V4 K: }' p' I% `- D# |6 C" | - /* 堆栈 */( r# J6 \0 h9 }! Z1 S+ D+ ?+ ]
- -stack 0x8000
& {* H5 E1 D2 T - -heap 0x2000+ S6 D5 ]; j, Y% k) j. m
- 8 r1 r, E/ Y& L- j" k) E
- /* 重新配置程序入口点 */' P& m3 Q. ~9 r k' u
- -e Entry& U+ P( S$ U2 @6 n+ {2 a. f. f! u
/ H3 e8 E3 i3 D; h. d) p5 W- MEMORY8 X1 z8 `# l, n/ Q7 L
- {0 U. _$ y# w2 |; a9 n$ ?
- #ifdef DSP_CORE* N; }6 c: d' I: l$ n. y! C& S
- /****************************************************************************/
# \$ f( f% ]( F# f+ \0 X; p - /* */
$ C+ F' P! e! N+ M2 I - /* DSP 专有内存区域 */
; j8 y7 g* v/ I/ q" w - /* */9 M+ ^; Z% c; I8 m
- /****************************************************************************/
' Z7 P2 b# x- X - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */2 o. w V& [) ?( g6 M
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
" B, A& }- j2 X: d9 T5 M - DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
L" g& |; w: \! i) u3 a - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
% U0 g2 U% E, y7 @+ X* [2 t - #endif
复制代码 这是一段汇编代码用于切换到特权模式
8 T u1 F/ s: d w* |1 |; J
3 b& K/ V% J; v; v8 i7 @OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm& N) g: g+ U0 r0 p- C
- ;******************************************************************************3 W5 |* L+ I: Z9 G* y2 u9 G
- ;
! }0 {' G( j0 c - ; init.asm - Init code routines/ q) l2 H6 z4 ]! Y
- ;
* l3 p) d! K8 ?: n: b* Y# q - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
/ L4 c+ m9 O8 i4 v2 g - ; All rights reserved.
! @0 d* W$ ^( C, O - ;1 T! r! H% J* I& b( U4 a$ ^) K
- ;******************************************************************************8 c8 A% B2 {& @/ |. t! o
- ;****************************** Global Symbols*******************************; o# A2 |% i7 ]. r
- .global Entry5 ~ m0 M: h9 O- p
- .global start_boot. D0 {3 r7 Q3 O' g: q5 e5 g
- .global __TI_auto_init% n5 x5 M3 c5 W$ `' l
6 c$ A' h0 q+ h7 C7 D+ E- .ref __stack
m- D' g/ P8 S$ y - .ref __STACK_END V R0 }4 b2 P+ [3 V& p9 X* f" u3 x
- .ref bss_start
2 N. m1 _- r+ g) V5 s4 M3 q* p - .ref bss_end1 p" V0 O9 ^) E' m( x# }
- .ref start_boot
! N d9 E* {6 l+ j; W - 6 X3 C) d7 X" h$ i
- ;************************ Internal Definitions ******************************/ d( Y# [4 ^/ @8 m
- ;& {! v1 L6 W% ] I# v. \
- ; Define the stack sizes for different modes. The user/system mode will use
5 o3 {4 J) ?/ s' m! n8 x$ W" F - ; the rest of the total stack size
: g3 U6 _1 ]% v* B7 b" Z - ;
+ Q+ o& B6 s3 J9 N' d, j3 B - + R1 W1 L% ], `. X' e9 B4 ^- f0 A) ~
- UND_STACK_SIZE .set 0x8: N: B4 S" }( i: S2 h% ~
- ABT_STACK_SIZE .set 0x8
, b- z! a9 L! m+ x - FIQ_STACK_SIZE .set 0x89 V$ A \$ v1 q; z) g2 m
- IRQ_STACK_SIZE .set 0x500
4 m9 U. i: i9 h - SVC_STACK_SIZE .set 0x8
" h5 T9 j! j2 d* B" D - / g/ d! X8 h# y- v/ q" ]" }/ V& w0 F
- ;& T; {+ \" A+ n, r
- ; to set the mode bits in CPSR for different modes* s! b0 P+ D. P
- ;
; m( H6 j6 @5 M4 | - ( h* m% d' m; l& H2 T
- MODE_USR .set 0x10
) K0 A2 @3 c+ i3 \. w - MODE_FIQ .set 0x11
4 i" n1 n/ @; M$ s# M% k' N' C, s8 O - MODE_IRQ .set 0x12 _: F% Y: N2 l; w9 t& n/ k
- MODE_SVC .set 0x13; ?' b# M; H' Q, J
- MODE_ABT .set 0x17. C; a! w$ y" s: G5 C
- MODE_UND .set 0x1B
; ?3 S) p' O5 [+ D/ d3 y - MODE_SYS .set 0x1F4 F4 d' H% O$ J, D: G& s2 B+ m' |
- 8 w9 @+ A6 b9 ]1 j8 R8 O2 \# j
- I_F_BIT .set 0xC03 E) P* n: L h( K
- # Z( Z K J2 G' m6 `9 u# R: k
- ;**************************** Code Seection ***********************************
; }- L" O( S$ g - .text" e7 D+ S6 ~6 q* a
- # m6 [+ o) K! C- W+ V1 t0 K6 ]
- ;; W6 x: p& @/ ^& w) N% R
- ; This code is assembled for ARM instructions
1 m: X1 n8 r7 L0 Z. | - ;5 }' B! t n* K& y5 {
- .state32: y* l6 J$ D* b% B; K- G3 I
" l' p3 R. c' Y; j- ?9 t' @- ;******************************************************************************
+ o- k- I: b, F1 I; ^: I7 N# O- Y( g - ;9 L5 v0 Z; M j' ~7 Y2 M0 N
- ;******************************************************************************* f4 D. z: K, E2 W& b& S) {$ b# s
- ;
' j$ l7 F, F9 C* N5 |0 ?, g H - ; The reset handler sets up the stack pointers for all the modes. The FIQ and/ K7 b7 a7 A) }$ d
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the* X6 S' n: O& ^/ y, X! _ B
- ; main() function.
. T' ]# Z& @4 A; k- G - ;
( r; e. m$ ]3 k4 W - Entry: g$ t J5 J, ~
- ;
& b+ T) \2 @; \5 B - ; Set up the Stack for Undefined mode; G/ ~8 W" D( |& q% I
- ;
4 W3 m+ E- P& `% ?4 U! o/ A$ K - LDR r0, _stackptr ; Read and align the stack pointer( V" N. s; h/ o* Z' U) d
- SUB r0, r0, #8- i- l) ^7 P# f% J# g. W% T
- BIC r0, r0, #76 s$ e8 x# z% V: s
- MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
" r9 w4 X4 ^$ Z - MOV sp,r0 ; write the stack pointer5 K* p3 L" |) E% l- _5 @
- SUB r0, r0, #UND_STACK_SIZE ; give stack space
/ ^8 M% {# {) M* j7 t - ;
1 B+ o( @" O4 Z# A V8 N( a$ ^' h - ; Set up the Stack for abort mode" B' ~: X; @) u, V7 o" U- H/ B- v
- ;
$ U: E4 T' _% D2 {* K0 o4 x. P - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode4 C$ v4 L/ C1 y* u/ a
- MOV sp, r0 ; write the stack pointer2 J" q# u3 ~' _
- SUB r0,r0, #ABT_STACK_SIZE ; give stack space* e& L5 M8 g W& _0 ^& m9 g
- ;* k, {1 g1 l2 k4 y+ ]$ ?
- ; Set up the Stack for FIQ mode
+ z" _: H0 ?+ |' @$ n; r - ;1 u" o/ W" I+ T% ^+ k V. H C
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode( T0 Z3 p- } }. H) q
- MOV sp,r0 ; write the stack pointer
% c0 j/ j. K+ W$ l7 b% Q4 d; S0 P - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
2 \) @- I4 S/ a2 N1 a d - ;5 l/ m8 c- o, |- {: W. x' v
- ; Set up the Stack for IRQ mode3 E$ X2 o: _( ~( G4 L
- ;% G% k+ @+ @ G
- MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode: V( ^4 L: `. `% Q) Z' S* K8 t$ Z
- MOV sp,r0 ; write the stack pointer. S/ J! X7 l0 {: j0 d8 p
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
; ?0 N' y, R' i: y4 G - ;: v: S! L9 \, o' m1 {
- ; Set up the Stack for SVC mode# }# f) p3 c+ h+ Z- }. ]# h
- ;: B! W$ R l3 t+ Y5 I* f; G% j4 _
- MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
8 d. M" [5 H5 c* J9 R1 }: X - MOV sp,r0 ; write the stack pointer
7 e# q* L: @: }) m0 M- J" J9 I* @ - SUB r0,r0, #SVC_STACK_SIZE ; give stack space
9 D. K2 H8 H; a' f - ;4 K! |8 _0 v* a1 u
- ; Set up the Stack for USer/System mode% ^/ ~; _2 B/ g5 m
- ;( y. p/ o) ^. \
- MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
! y' r: {/ b, H2 C0 _2 N) E B - MOV sp,r0 ; write the stack pointer
* p" Y' t. B% q - 7 A5 `4 q' m9 U; K4 V! a% a
- ;
2 [+ H$ l5 j, {: V. ^! x5 ]. C/ N - ; Clear the BSS section here
1 R* Y9 X5 R2 O4 x - ;4 h& ~& s3 n' F2 ?
- Clear_Bss_Section:0 q# |: }3 V% t- N' j6 } a
- . X8 ?; t q* Z) k* R: G, ~/ Q/ ~
- LDR r0, _bss_start ; Start address of BSS; Z' A9 r2 D* `" J3 C3 j
- LDR r1, _bss_end ; End address of BSS* z$ O! |2 L: h, g; k7 m r1 Y
- SUB r1,r1,#4
/ a- @! F0 I& R' l7 P: @ - MOV r2, #0! {' F! T+ m7 `: L8 J
- Loop:1 f5 \/ @) q# o
- STR r2, [r0], #4 ; Clear one word in BSS) p D* X4 q& m1 d
- CMP r0, r1
2 H. L; W( m& Z9 W, O9 }$ c - BLE Loop ; Clear till BSS end
0 R- `7 C9 a2 l4 ^2 y* R - $ H+ [ I2 p9 n& z8 s
- BL __TI_auto_init ; Call TI auto init
$ p2 p) r" L4 Q/ _) r# p$ z# l# K - ( x/ r" W! Y1 {7 A+ z
- ;
& ?- s- r5 g* H0 J - ; Enter the start_boot function. The execution still happens in system mode& B6 c: j, t6 T! J) K# d
- ;
" B+ R6 [, K. Q( `* Y- `+ m5 O - LDR r10, _start_boot ; Get the address of start_boot
! b2 j4 s4 ^; D- F; o9 p - MOV lr,pc ; Dummy return : D$ T# d9 s2 ~$ l5 I
- BX r10 ; Branch to start_boot
Q/ h; `# r7 p- o9 \- J' F& H W& P: f - SUB pc, pc, #0x08 ; looping
5 `& `. {" y' ?+ Q3 [
9 O& u8 h* y- T1 C$ w% ?/ h- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode# n: X9 w5 B, F$ l
- ; BX lr
7 u* @/ c& Q: K# @' t5 Q2 E - ;
& Z$ M9 V+ q: [# h9 O t c$ R% c% n - ; End of the file
( `7 D7 [3 H. _ - ;
0 v0 h/ Z3 @- v p9 V) a
G0 @* x1 v* `7 F2 h- _stackptr:
; |% q4 r% ~" Q+ u6 w - .word __STACK_END
" ?) C3 g% z# T$ O6 o5 |: A# ~ - _bss_start:/ X" o8 a9 V+ Y) U v# \
- .word bss_start
8 ]0 j9 |% U" ~3 ^- k8 j9 ^ - _bss_end:
, t! ^0 `' F" v$ N; F1 ?+ X" h - .word bss_end
; a# I; W3 F- Z; F8 E3 [, { - _start_boot:
7 r6 a" {3 w% n! y# {* p - .word start_boot. x i- C6 \, |% d# K5 c
- _data_auto_init:! o% J- ?2 R+ ~7 @# X8 f- h8 G
- .word __TI_auto_init/ q! B5 N6 Q7 z |5 M1 m! j
- .end
4 g. C4 U6 G3 ]- }# F* Y% Z -
- t, ^& Q5 J7 C) n$ x7 D' A - m9 K: w) y; q, Q
- 6 g D. I' I! C' p& M3 g( k! j& |: N
复制代码 1 i/ y$ ?9 V$ Y. N8 q( Q j
8 s8 f( x/ ~0 Q0 n. G2 P- T! [! t- W1 L* A/ {; d% o
. q: R& @/ D$ m2 I4 |4 Z% a8 @2 f* l* g
|
|