|
8 @- [8 S$ K$ F+ j% l在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
9 O$ F) o9 u, M. h' |/* 重新配置程序入口点 */6 `8 ]1 b1 d; L; r2 A
-e Entry- /****************************************************************************/
* X# C4 c# [/ s. m; l - /* */
~* [1 K0 d+ H& z3 \. X9 z! L - /* OMAPL138 及 DSP C6748 内存空间分配定义 */
$ {( B9 `* F% h- M) G A- p/ M - /* */1 f* s* c7 e$ H& \3 l& A
- /* 2015年04月20日 */) ~9 @% e5 W2 E. k8 }
- /* */
9 U6 Z& H1 C& x f+ N - /****************************************************************************/
1 k# |; Q, `: w- ~6 K8 D, x - /* 堆栈 */2 E# f: q' \1 b! V" Z/ ^+ h) g
- -stack 0x8000
7 E5 D* N1 l9 _! u - -heap 0x2000
+ N" U# f, Z1 c8 f* Q4 \! |; s - 7 y6 k7 S& r! L+ a; N! D
- /* 重新配置程序入口点 */
& I! f9 R5 O- J, ?5 S9 T* `' I$ L - -e Entry1 T1 f7 q; U A8 z2 V) ?% Z
, }3 O) |: D C' @, c% C$ Y0 q- MEMORY) s# R/ N1 d. _1 V: U7 I* z
- {) V) E) i0 }% L) ?) }. M$ g
- #ifdef DSP_CORE! |* P5 M; }; N4 ^, R
- /****************************************************************************/( [: p7 B3 q7 j/ L6 N+ Z0 N- l
- /* */# e. Z' s) Z( r
- /* DSP 专有内存区域 */: h' a( O- r7 U8 p
- /* */
$ b5 A' ~. h6 }( ~( P( J - /****************************************************************************// o& j1 z9 E- q1 x& x
- DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
0 W" V* l j/ r* m+ p: d# \ - DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
. ^1 b- U% b* Q - DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */3 n; J/ F/ j% O% c. _* }
- DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */' F! D' f* o$ H; K! y
- #endif
复制代码 这是一段汇编代码用于切换到特权模式
0 b8 `9 k+ ^0 X1 {! M- F& g) z o3 V. `, A; Y* `7 L
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm7 D# n' t: \. v Z1 `4 i; O3 C
- ;******************************************************************************
4 j8 j1 t) [0 K$ |. }- X7 m3 Q - ;& \5 f* D% u- [' ~
- ; init.asm - Init code routines% i' r: S( `. @2 N2 `3 \! I
- ;
$ s% I) m" q6 R! I9 J - ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
! Z# {% x2 ]4 Z; O - ; All rights reserved.
6 C4 H+ ^( X: q - ;
* X& N) V' j Z. i, b! z: v - ;******************************************************************************
% B& p+ C! S3 D% v - ;****************************** Global Symbols*******************************8 J9 k! W+ P: h
- .global Entry
/ B* D7 P9 v2 i& V - .global start_boot: \5 S# E% w* \ [& o
- .global __TI_auto_init
2 q0 i# K* Q4 E
! X0 k. I9 r; F+ F3 ?) S0 F6 w3 k- .ref __stack0 u: M' z I( c- ]
- .ref __STACK_END
4 Z5 n" X, u- J5 { - .ref bss_start5 T' W! a0 a" c, M: S
- .ref bss_end% a4 }( t- ^: Q2 V4 W# s
- .ref start_boot# H; x& N6 k, @* D* ]
- , v E# ]! n! T, f+ A1 p, ? c
- ;************************ Internal Definitions ******************************
9 x% Y, d- Z" k5 U( v8 [) G' | - ;, b/ L9 y3 k, `9 _
- ; Define the stack sizes for different modes. The user/system mode will use* l, m4 f' W! N8 w" g
- ; the rest of the total stack size
* ]! |+ r, x9 Z w0 E+ k) E) C* I - ;! G3 c. ~& A5 A7 q4 ]
% t( X- ~/ O+ M& C- UND_STACK_SIZE .set 0x8
: U1 p Y" c- \. | - ABT_STACK_SIZE .set 0x80 }% O' S# b" R/ o9 ]+ `
- FIQ_STACK_SIZE .set 0x8
0 {# Z' l& G) K m! ~ - IRQ_STACK_SIZE .set 0x500
" G9 a8 }, d3 ^& C; F, R! i t4 e! ? - SVC_STACK_SIZE .set 0x8) n, v7 a1 d8 S5 W! D
- . y: D9 u2 E* h0 o0 K2 }
- ;
- t# m; l% J5 P3 f7 L - ; to set the mode bits in CPSR for different modes
( N' ?2 u. l" A5 t T - ;
- n1 e3 e! X/ L o1 u: R7 R
8 ^( \6 u, m7 R: a1 | d) K8 `- MODE_USR .set 0x10
' A5 e7 p# ~7 {. \ _% @ - MODE_FIQ .set 0x11
3 I. M7 z0 d" S" v% C! l) ~ - MODE_IRQ .set 0x122 s$ t! j4 K- T1 V. R
- MODE_SVC .set 0x13
2 }! ~7 y" i' U: D ~8 R- z( v* R& C - MODE_ABT .set 0x17. g* u( h' X1 A% I
- MODE_UND .set 0x1B/ Q; {' x4 U, p1 ]
- MODE_SYS .set 0x1F4 e0 p7 g8 D8 m& W, H. X Q- i
- & I3 V: M) |: w5 T2 W
- I_F_BIT .set 0xC0( C' ]- O# s; B" h6 u4 w$ s
- 6 F' W* @7 |& k( V
- ;**************************** Code Seection ***********************************5 ?" u+ K8 n0 c
- .text+ V6 L4 x! b! O9 M- C, s; I" W/ i
- $ w, w" r; {! Y6 d; L, u, p8 }
- ; K, L/ d, Z1 J5 I& \; }, k
- ; This code is assembled for ARM instructions& q3 ]& p! r; `' p
- ;3 f& x' J. S1 b B
- .state329 A: o2 F3 ?. |4 M! U
- # [- B! m4 y( C" i6 J) s
- ;******************************************************************************5 }6 J! X1 [4 o9 V+ J: X. B
- ;* t0 r# @. }; k) ] o+ j
- ;******************************************************************************: U, M3 h7 G& {% K( {
- ;3 e, P% d" W% M: @: y+ X
- ; The reset handler sets up the stack pointers for all the modes. The FIQ and3 A; M8 d V( `7 C$ C
- ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the' h# ~. ^; b% v6 e$ D' e4 d
- ; main() function.
; b5 A. X8 h. _& F- j6 ~ - ;: X8 {) W% s$ m. s
- Entry:
5 J$ G% t# n" G8 B" [. n - ;& g6 s) ~+ {7 u9 y k! ]% q
- ; Set up the Stack for Undefined mode
7 p* R0 E8 U- _* \5 X4 r - ;
; ?7 {2 Q% }6 p# {. { - LDR r0, _stackptr ; Read and align the stack pointer( z, H5 L, Y5 B. l
- SUB r0, r0, #8
* M' _: G$ L: r - BIC r0, r0, #7
$ N( Z; N2 ~2 g8 H* { - MSR cpsr_c, #MODE_UND|I_F_BIT ; switch to undef mode2 |" j" B, \6 a T* t7 ~2 B- J9 M
- MOV sp,r0 ; write the stack pointer
: I! G& h$ U* k9 q1 v3 | - SUB r0, r0, #UND_STACK_SIZE ; give stack space
6 ^! N1 G1 J( G9 S - ;, o. W; T0 U" ~: [. w# U
- ; Set up the Stack for abort mode7 C1 }1 ]1 j0 ^
- ;$ z- t4 }1 n5 Y* t* [. `8 T
- MSR cpsr_c, #MODE_ABT|I_F_BIT ; Change to abort mode1 y# @$ a) I0 C( B: R+ L1 ^
- MOV sp, r0 ; write the stack pointer2 L' ]% @' Q8 }
- SUB r0,r0, #ABT_STACK_SIZE ; give stack space2 N8 D+ N4 m% f/ D6 N) P
- ;9 C3 P* o0 D6 ^' K( P
- ; Set up the Stack for FIQ mode s' \% z$ y3 t8 @$ w) g5 g
- ;
3 s9 Y6 S O% Q6 F - MSR cpsr_c, #MODE_FIQ|I_F_BIT ; change to FIQ mode7 O1 ]# I) D. P8 T) f( ^
- MOV sp,r0 ; write the stack pointer- s4 U: K' K" J6 Q2 e1 [7 _
- SUB r0,r0, #FIQ_STACK_SIZE ; give stack space
; \( n# E3 a6 v$ s4 W5 F/ ~ - ;
/ J/ K8 \8 E$ I% x8 Y - ; Set up the Stack for IRQ mode
: `8 F6 N+ `8 G" p - ;" v2 b5 U/ M7 ^- ?
- MSR cpsr_c, #MODE_IRQ|I_F_BIT ; change to IRQ mode
0 I, E7 F% ]- J- X6 H6 d, A: z - MOV sp,r0 ; write the stack pointer( d$ r1 \6 R( {0 Z
- SUB r0,r0, #IRQ_STACK_SIZE ; give stack space
1 j& o" [' g2 S% |9 n - ;" U3 a5 k7 j$ i2 i; b+ h- M
- ; Set up the Stack for SVC mode8 h$ o9 V% B& K7 f
- ;
) F& q' k# _% w) i* P - MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode8 J5 x, P/ v* b* b* D" z+ Q+ Y
- MOV sp,r0 ; write the stack pointer1 Y. E; @0 x$ }% a1 ?
- SUB r0,r0, #SVC_STACK_SIZE ; give stack space
" }1 `6 d7 D0 {* { - ;
- a* i; g+ G7 W% d8 E - ; Set up the Stack for USer/System mode& ^" F) Z9 f, b4 J7 E/ }4 Y
- ;
9 Z8 M, F4 m: r2 {8 v - MSR cpsr_c, #MODE_SYS|I_F_BIT ; change to system mode
% e- l7 |$ F! ?) C - MOV sp,r0 ; write the stack pointer
7 X: R3 W: `5 C, B3 x) x( ]
/ Y. R5 k# N% y+ l+ Q- ;
0 P) G. j* c: z1 V. F5 _ - ; Clear the BSS section here
/ j2 }3 k0 P* d6 u' { A - ;
- ]$ B! T+ `& {, U - Clear_Bss_Section:9 w# q- t3 W. {7 t u# c! h' \& ~
; S8 e5 ?3 [" C; q# }, [- LDR r0, _bss_start ; Start address of BSS G' v& L/ z9 m0 p/ G$ q
- LDR r1, _bss_end ; End address of BSS% n) y. G% P q+ P$ q
- SUB r1,r1,#4
* r) [% A( X: Y! E8 ?5 ^ - MOV r2, #0 L/ f/ d' C) H% i. {+ Q
- Loop:
Q7 x1 M6 a: ^5 b& w4 N( A; a6 l - STR r2, [r0], #4 ; Clear one word in BSS
" I) s2 n! j- U0 L) O3 f - CMP r0, r1
}0 q& K. W# O! A- H- p' G - BLE Loop ; Clear till BSS end7 V' T. b0 R0 R! F0 F7 J
- ! R# N) a6 U6 ^# M' W t; _7 K3 x
- BL __TI_auto_init ; Call TI auto init. a6 k% S3 R6 X* x L, m; u7 l
% [* ^" F6 |7 Z9 x' r9 K- ;; j8 o# t, U5 j3 W6 v4 V
- ; Enter the start_boot function. The execution still happens in system mode0 g. Q0 F$ D8 i6 U( o1 N# t
- ;
& b, L/ `2 `# p5 J6 F4 v - LDR r10, _start_boot ; Get the address of start_boot
* {3 |1 `5 W$ K m# V& b8 B% U& a2 Z - MOV lr,pc ; Dummy return 5 p# {1 m7 T2 w @0 }; W
- BX r10 ; Branch to start_boot8 ?! O# t/ a: ~1 d9 {8 t9 a
- SUB pc, pc, #0x08 ; looping
# a3 E" S2 G z5 m: A - h v" ^0 c! t% f0 e
- ; MSR cpsr_c, #MODE_SVC|I_F_BIT ; change to SVC mode. v6 y$ O/ `3 p
- ; BX lr% P) Q& M }2 A8 I
- ;1 @- \/ ~, a2 r, t" s; Z
- ; End of the file- l3 r5 b1 e" A
- ;
# _; b) f6 X5 D
% i0 z2 S- O6 @, y( O- _stackptr:# E% ^; s! }8 ?' W9 N0 g+ g
- .word __STACK_END$ q# q9 ^5 q: \
- _bss_start:
* l) D* c. c1 N* P: H- Q# f" J - .word bss_start
( Q W' e1 z6 {8 z+ K4 E - _bss_end:
. \5 l( Y5 [1 W) n$ r. M - .word bss_end
2 {. F. i* H0 s" C - _start_boot:- s% f4 R0 P; v! r- B/ E
- .word start_boot# R9 m% v' @2 [% x
- _data_auto_init:, d5 e; K+ a. J& x1 G6 Y8 l
- .word __TI_auto_init# I0 | X3 }$ R
- .end
. w2 z/ Z0 ^, d6 Y+ b -
8 y1 g) H2 z0 U! Z' J! @& l9 O5 e - : o5 P* \, s$ P8 v
- 6 D+ S% l% {. T& Y3 @. W+ P! E
复制代码 % m2 b; _# ~' z7 w+ h& e4 Y- V
. B0 d& |8 O Z0 c6 c
, X$ G8 r& c4 Q% D9 A/ M8 u' ]" ?$ Q
1 {4 r3 G/ E# R' S+ Z4 K
|
|