|
1 D$ o2 }. _- m# i5 O在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
- i9 K' _0 C# |# V0 q: S U/* 重新配置程序入口点 */' v: _# H; z/ w e; ~4 l8 p
-e Entry- /****************************************************************************/
8 m3 v1 H2 Q0 n( I! w" H# X - /* */, i+ v9 {6 }1 t' \/ \. `/ _
- /* OMAPL138 及 DSP C6748 内存空间分配定义 */
) ~( K7 ?3 L3 _7 c: Z - /* */1 S4 ?: b8 H) d& ^
- /* 2015年04月20日 */
' r, S$ Y/ }; y$ G5 d0 [0 k s - /* */) T, [+ P; w# z+ s, B1 N
- /****************************************************************************/6 J# p3 \6 F; \& b
- /* 堆栈 */
4 m2 j: }4 ~; s" l0 E1 Y( m - -stack 0x8000- Y Q/ W$ t2 N/ r
- -heap 0x20001 _$ I! U* p. |5 {0 [' T1 `
- 4 P# s) @ H |5 K0 v6 d& T
- /* 重新配置程序入口点 */$ @: m0 E* ~3 F. B0 y5 x
- -e Entry
9 o; m0 L; [6 ]# V% L; [ - 6 E2 Y7 l) x/ N8 X- H
- MEMORY
( t" z/ M: O! R) ~" h& S - {( S/ _9 w. p- V
- #ifdef DSP_CORE) C# e7 o6 i3 }5 D2 x4 U2 C
- /****************************************************************************/; M% `1 y8 ~/ @3 A M" z4 d
- /* */
7 ]0 `# H/ @$ O( O - /* DSP 专有内存区域 */% b8 ?& ?; C% N8 R4 U! ]1 @) n
- /* */+ t& O5 Y" K. M: O: |5 ~9 ?* a
- /****************************************************************************/
$ e! s( e7 @9 V; M0 \8 p - DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */$ K8 K% D5 n4 }0 d
- DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */3 G" z; e6 T3 b _ }0 I& c1 m* `; [
- DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
* h& [7 l% ]' \: r4 D$ o - DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
$ a# e Z, U! a9 G# V - #endif
复制代码 这是一段汇编代码用于切换到特权模式. @5 Q; k$ x w3 n$ Z. M
% p. E6 C+ m7 F
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm: m0 t0 q) A0 y, v3 g0 h0 N3 ^
- ;******************************************************************************" L' n$ }3 c, x! \
- ;
" j% P" |9 P" I5 j* V8 W - ; init.asm - Init code routines7 a% t' z$ ?, H! f
- ;, g5 y3 v, |: z& u8 J( x( R
- ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
. L9 j) ]* ` Q! ]7 e: v - ; All rights reserved.
5 k( Z' m4 N% d" t: y" }' W5 [0 | - ;9 D$ l. L: i4 S* e1 R" l
- ;******************************************************************************
! D. W' J% U1 [ - ;****************************** Global Symbols*******************************
0 E5 ~+ Q# {* |* f8 o - .global Entry
' P1 f! x! O* s' M: a& P) I( s" } - .global start_boot( T1 @6 `' h6 m4 G: ^
- .global __TI_auto_init
8 ?# T- r; G7 Q6 M - ! n+ P6 k# D+ e( Y6 N% F+ `
- .ref __stack& a7 s" A1 u7 J. d+ k1 o( `9 e9 s/ X
- .ref __STACK_END# X: J; e; f3 n9 H. W
- .ref bss_start* ~) f6 h2 o- A" `$ K7 I
- .ref bss_end
5 i* B: S! m; X; _; j# A - .ref start_boot
& o4 V3 t! d& i* u1 d - + Z% x0 S4 f0 p2 v/ }! D
- ;************************ Internal Definitions ******************************1 C9 h1 ^% p; p4 N: E, i9 {
- ;: }% \( X5 u: S: ?8 G% x6 L, [, L
- ; Define the stack sizes for different modes. The user/system mode will use9 t9 \" H, `$ C1 x4 W) D' N3 S: f7 @
- ; the rest of the total stack size# m2 |3 X# Y" B% J- [% b4 X& Q
- ;
0 y7 V0 m* B: H. F
0 ]$ p6 T% j( }4 a: k; i# o& B* Z- UND_STACK_SIZE .set 0x8, \8 U) F- i1 R: x/ A! X
- ABT_STACK_SIZE .set 0x8
" j Y4 U# F. w" M! O - FIQ_STACK_SIZE .set 0x8: p) \5 h: K% t$ A
- IRQ_STACK_SIZE .set 0x500
! v" d8 b& J! @$ {) O5 N! A - SVC_STACK_SIZE .set 0x8
) K# _7 d: P! ] - : q- k2 }! ^# [
- ;8 z* a$ C3 f9 h- u
- ; to set the mode bits in CPSR for different modes
& A6 V5 |, F. X# D8 F) v1 Y - ;
: J, }; c5 U: y5 o9 b - 2 w- K. N9 p3 ]
- MODE_USR .set 0x10
- S# v1 D; R. m$ L& A$ [ - MODE_FIQ .set 0x11" i4 o' u+ ~1 `0 L+ \1 m
- MODE_IRQ .set 0x12! j; _7 P3 X# t0 z2 N8 _0 _- v9 U
- MODE_SVC .set 0x13% O# O1 n/ Q" G! y/ [7 ?; B/ K
- MODE_ABT .set 0x17" L0 c/ m/ D4 R; V: c6 m2 q
- MODE_UND .set 0x1B( m& l# x2 V4 b, K6 K
- MODE_SYS .set 0x1F# `6 v9 X6 e1 J% Q
: I# y3 m0 t" _. K) [8 B9 e5 F$ i- I_F_BIT .set 0xC0* O) w5 V6 N% \# q3 e4 o
$ Q' B& q5 N$ |- z4 t- ;**************************** Code Seection ***********************************9 ?( I- |: B8 h2 n) C! Z/ `
- .text5 @ Q% k0 [7 j) Z7 h( d
- 4 l3 k8 q- ]3 T
- ;3 Z! C" r5 e2 T1 Z0 B; F# g0 A
- ; This code is assembled for ARM instructions8 Y" c3 w7 Q4 V
- ;
; [* G! }* |# u) v - .state32- d% x3 j8 o: Z, c) @4 g
8 v2 {0 `( y D i$ |* t- ;******************************************************************************
- W, T8 |; N$ d; l& [ - ;( o% H4 M0 h$ [9 a6 ?( @& V) S7 ?
- ;******************************************************************************, y5 ?; A$ l; [* A' w, X
- ;' h% E8 _: ~& R) L1 f
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and/ K4 l; P) q" }+ H
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
' t" P; F# Q. o) | - ; main() function.
: g0 D0 c( S: ^; v0 ~0 H% `/ e9 I - ;3 g3 z. v3 x' r2 b
- Entry: L8 A9 |; G' ?4 V4 L! u$ B% d9 E
- ;0 |# p% R% c" W
- ; Set up the Stack for Undefined mode7 k9 G0 ^) U% |2 ?
- ;
& a( A$ v0 ]4 T* A/ o$ b2 ~ - LDR r0, _stackptr ; Read and align the stack pointer" I8 n. V( X0 j8 E$ a0 b
- SUB r0, r0, #8
6 b: ~$ p l2 L+ C2 @ - BIC r0, r0, #7) m! d, l# ]; O, Y# l" s
- MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode
9 S! }$ B3 i* P; A' a - MOV sp,r0 ; write the stack pointer: k9 M7 e4 t. G+ a! d% N
- SUB r0, r0, #UND_STACK_SIZE ; give stack space4 c% q4 V& z' N
- ;9 d! k& k) i! X; v' `
- ; Set up the Stack for abort mode& p) Q$ p% _' z! g8 {
- ;
$ A8 k1 k# G3 v; L. _: y; [ - MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode. M+ m: t( N; h3 y$ T* Y0 e, d4 I
- MOV sp, r0 ; write the stack pointer) l. U3 |1 d8 J5 X
- SUB r0,r0, #ABT_STACK_SIZE ; give stack space
" l3 I6 O1 Y! }( U# G9 f0 X( N - ;
$ I: [5 _, _- W' z d9 v - ; Set up the Stack for FIQ mode) D- \2 v/ z% {/ c3 c$ Y
- ;0 g8 t! m9 ]5 \$ l( a/ y7 {8 b
- MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode
% E9 h# Y+ K! ~( t1 }2 G6 @ - MOV sp,r0 ; write the stack pointer
2 W9 }2 R+ \+ [% h3 t0 v - SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
/ T+ S+ N/ a6 f/ \' D3 ? - ;) ^4 ^" V9 [+ T3 U' ^
- ; Set up the Stack for IRQ mode
+ C: E; L/ J: d2 S9 [6 } - ;
6 Q7 v7 E+ u6 N - MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode
7 f% v2 F% ^3 Z - MOV sp,r0 ; write the stack pointer
: D) X8 h; ~; d5 O& J/ T - SUB r0,r0, #IRQ_STACK_SIZE ; give stack space' R" O5 ?/ N u3 u
- ;
" l* e4 e# \% `( q - ; Set up the Stack for SVC mode
9 J! T* E( }2 T4 `4 K2 W - ;" l* Q# s3 b1 ?6 i- Y1 b. D
- MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
9 E7 [" ~8 R5 u+ T - MOV sp,r0 ; write the stack pointer7 c$ d$ `9 b9 D9 Q" U( h8 j. [
- SUB r0,r0, #SVC_STACK_SIZE ; give stack space
4 `# J& j3 K$ z# P- n2 |& t& x% f - ;( [4 ^7 {& e* N9 j* l, ?2 ]7 Z5 I
- ; Set up the Stack for USer/System mode
+ [; I4 Y }" e" J - ;
2 r- C% R5 ^8 L0 g! H! d - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
; D2 b ?8 x" b! v% `# [; q4 W. k5 j+ m - MOV sp,r0 ; write the stack pointer
/ P0 }3 P% p5 r' p* R; }2 a
' ~' \) T. D, D) s) |" f0 G- ;, w0 d+ ~$ e2 I& [7 K
- ; Clear the BSS section here
# x9 t0 p* f# J) `2 I4 I+ c% T - ;
8 E" C5 t( F% B |( t - Clear_Bss_Section:: x% S# h( B* c, b: w2 {, c* e
% A. Y& z1 J3 B- LDR r0, _bss_start ; Start address of BSS% ~: Y: _( P% N& X
- LDR r1, _bss_end ; End address of BSS- _$ X6 Q0 a8 ]' `9 M) g
- SUB r1,r1,#43 x2 u3 g# O, }3 ?$ @, h
- MOV r2, #0% x% e: {1 N$ Y% o. S1 }
- Loop:
9 M" D( e* ^' D& T+ R - STR r2, [r0], #4 ; Clear one word in BSS
9 f7 G% ^' A# l' Y% F/ j9 h7 r( p - CMP r0, r1
( e, V* O% k0 x, g9 c; @ - BLE Loop ; Clear till BSS end3 O$ ~9 H+ W( e! z; j, W- t3 N
+ k; }8 x, |) R# t; P7 {: O+ \- BL __TI_auto_init ; Call TI auto init
- ~( J. d, ~- e9 a7 v+ H' `/ N
6 E% j- {% ?1 J8 X2 U$ U- ;
2 ]3 O/ o1 e! u# Y6 ` - ; Enter the start_boot function. The execution still happens in system mode
% v& x; A+ B; F3 ` - ;
* z6 a9 n/ ]% s+ }/ D" F - LDR r10, _start_boot ; Get the address of start_boot# O7 O0 [8 f- R9 `4 S
- MOV lr,pc ; Dummy return
/ C7 j1 S3 l Z, A. z - BX r10 ; Branch to start_boot4 K# \! N% M9 M& X; `) v( M
- SUB pc, pc, #0x08 ; looping
3 Y) u/ u; ^6 R, f" j - ( I' f- P2 L5 @+ Q# m6 F; m2 s, S
- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode
) E+ ]3 w) Q5 _( z - ; BX lr' a3 l5 ~9 I+ A9 F+ Z
- ;
4 @! H; S& E& g# W# P1 [/ U W - ; End of the file
+ w+ r& L# K- r7 }7 [3 F" E - ;
: m1 T- f# |. T0 q
7 M! i4 c/ w( K3 }' R4 y- _stackptr:
5 Y1 t, w2 N8 M* d, c9 x - .word __STACK_END9 j, S- \6 `! o
- _bss_start:
. b* i1 D* V2 y( S8 G9 t - .word bss_start
6 }- A* i6 k. M$ }: }3 z9 ]- _ - _bss_end:
v' A& R2 o X+ ^ ] - .word bss_end
7 M* V6 ] _6 b0 E( [, f8 T - _start_boot:! g2 _6 C0 a- L% a4 I: ]/ A
- .word start_boot
) v$ k# f# b+ w( M* _: ` - _data_auto_init:6 e% I, E. m2 o
- .word __TI_auto_init
( z/ _! ~+ M0 Z* z5 _ - .end* X1 A5 z3 H0 D5 l0 w5 R& F1 S8 H
-
4 y- R% L! R! f& z - ( b$ d7 Q8 d+ C
- 0 s3 X; x( j1 M6 M2 ?
复制代码 - k" T* [7 U7 d6 T+ w# r, K7 V* q
8 n& z* H1 W* Z8 F, B% |' h/ F: D- H
3 _! p+ {* Z* Y0 k' p. T5 T5 G
. J c6 G% L1 x0 Y4 R0 x/ R' c* W/ h |
|