OMAPL138端口复用设置问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8092|回复: 9
打印 上一主题 下一主题

[已解决] OMAPL138端口复用设置问题

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑 3 W5 J  P4 b5 Q& i  ?0 [: S% k

1 t4 l- d( X0 c1 m我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器
: Z7 L% {9 j4 F# T" R& A
" D1 e8 j" J; M3 N: Y6 F/ P) I# l0 Z& D. @* {
我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:
3 O8 O, ?4 [! K' R; @
+ b  N* I1 R! T  `1 l
3 F# f8 d/ l+ `, B0 P# v7 zint main(void) {$ E$ Y9 G( @& a2 T
        
2 p3 ?; C4 z" p; K+ l8 i        //使能GPIO6 @+ }( L- q9 ^  P
        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
* R, [1 B* P2 N6 X+ o                            PSC_MDCTL_NEXT_ENABLE);
6 r1 h/ m; \# `3 q5 b0 ]
+ ^9 R2 b# S' ~: m" k        HWREG(0x01C14124)=0x88800800;
3 o) y* _# `% K0 [. K, a/ i! E; |}
; B* K3 U9 O' }8 Y; l$ M* I- n& I9 p- i) a. g1 Y. X
单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)
/ ~$ @1 v/ C- d2 k" r" W运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)8 n9 Y8 }9 F' N! U- B% O

- ~* l! e/ t. R我想问一下,为什么我管脚设置不成功???1 j5 D9 {, E4 z) m9 s% j" g2 `' l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验0 S0 Y' C. g' J
实验一:# |; F2 U  u# d6 g- e& U  _4 h3 I
在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句
9 Y0 C* e! n  P
+ O: h. D- P8 l& f                HWREG(0x01E26010)=0xFFFFFFD8;
& ~8 P/ N8 T" S6 M8 @4 D                HWREG(0x01E26010)=0xFFFFFFFF;/ h- p' H$ t# T' _2 c1 }
单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010): M& `/ G+ q& c. v' T- C/ G
若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。
5 s1 r; U) ?! |% |
. |2 l- S' p$ l$ F3 \实验二:
6 O' a2 z& G* ~2 `5 O若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
/ y+ f7 W2 B! O2 H1 q. y1 V; a( O% W( l: m/ [+ Z
                value1=HWREG(0x01C14124);7 B2 a$ [  i- O3 u* D- M
2 N$ B4 s7 V: G! r
通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
板凳
发表于 2017-4-21 09:09:04 | 只看该作者
可以读写的,应该是你的代码问题
- M. G3 {+ w- C8 w可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:09
. B% D- t, L' B1 j, U可以读写的,应该是你的代码问题( g  G* f1 t' J7 [3 r
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

" i8 [( O8 O7 |首先,谢谢你的回复!# s( o. T' N: Z  o9 z( G
, U. S5 Z; h" k1 T! h
你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
: U( _: R$ u9 [0 D! m/ O$ |第二句直接对地址写数据,有什么不对吗?
7 p' f& s- ?& j# e# O2 n% s: ]" y% I: H8 I( b/ L
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?
' Q5 R9 Q. g. N9 p/ \, ~
- L: p! \' m2 F" D3 }' }8 M因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
5#
 楼主| 发表于 2017-4-21 11:39:04 | 只看该作者
human 发表于 2017-4-21 09:09
" I6 e+ p3 S; k1 Z$ M可以读写的,应该是你的代码问题: f6 n8 C# s, v" B" P9 g% \  X) {
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

  p2 V. v' W0 t  a4 S9 p, U你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库2 E; {' ?$ c" ?- K
函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    ) y. o* c, w" w9 }
  2. & H" B. h8 b3 B" [) w( p
  3. int main(void) {* i2 v- O) G* f: _) n4 e
  4.         HWREG(0x01C14124)=0x88800800;
    3 d7 p6 A/ E3 r* m
  5.         return 0;/ ^1 N+ P# v4 [% h
  6. }" v6 u/ w9 z% @: t/ q" Y4 N
复制代码
: X, _1 Z) t# d3 l
  G0 @; r# I# j5 \5 q
主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变- c: ~; O5 v  p+ h6 M! u% m7 E+ ]* C
5 P! H3 \  f8 l2 o1 @! l" r0 m

4 g* j' U: ^. T  K然后我把程序变成如下形式:5 @% c3 z, E  C. x! Y) u
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))! ~$ b- D6 b2 s* x

  2. # \5 b* `% Z7 {# m( o6 x8 N
  3. int main(void) {4 {+ m3 @! y+ ^  P. K+ K* U
  4.         unsigned int temp;) E3 a" \7 m' L/ ]+ n3 D
  5.         HWREG(0x01C14124)=0x88800800;
    ; M% g. J3 X8 T8 M
  6.         temp=HWREG(0x01C14124);) P! ?1 R( v6 h1 d( g3 `5 M0 R
  7.         return 0;4 r0 z3 h2 s. K+ U
  8. }. H) M( r1 m, n) f/ F
复制代码
' h$ Q9 @; q: l8 d
8 _! c2 S* I8 O8 e4 s* a
运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变
# p1 ?" X& ]( `( S& A7 o, M2 x通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000' u/ c1 w0 L* |& m; J
然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题; ^6 d/ p0 H1 S& A: p+ n

: @) r0 h* O- H: ?( h3 A* A
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09
# p8 {, }. c# t. p$ q1 G' S2 O可以读写的,应该是你的代码问题
, f, X. W) f1 B# a可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

# S3 {( }  h. H% `会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[attachimg]2209[/attachimg] ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式 DSP CPU 不存在这个问题  详情 回复 发表于 2017-4-21 13:59
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
7#
发表于 2017-4-21 13:59:36 | 只看该作者
unicorn06 发表于 2017-4-21 11:40' N) Q/ e- p5 f  U3 e9 u$ A6 V
会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...
, W" l& h2 P% r0 ^

2 t+ {' y& i, r7 l( Z0 G& T$ h1 Y5 U6 b- B& ?
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
. ?! F( B0 u  ~9 `: J/ I0 C/ u/ gDSP CPU 不存在这个问题1 L. P7 e2 ~: ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:59
1 D+ S7 Y  m) v# w. xARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式& @1 {4 F$ P. ]! O7 K" _4 k4 t
DSP CPU 不存在这个问题" u4 c3 {" `' g! W' T( p% f
...
* q- e9 g/ j- M: G% {' X0 W( R
,高手~~~
" d2 T. s# |  p8 D正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    4 X! j1 j" O# M) m/ k

  2. " l- U* R. \6 L5 p9 D0 }+ u. I2 \6 k
  3. int main(void) {. c0 W" g; I1 l* b: S& @, Q
  4.         HWREG(0x01C14124)=0x88800800;
    : X. x4 d1 d$ \0 S
  5.         return 0;
    2 O- M9 Y3 N* o* _' t/ ?9 k1 r) t
  6. }, C; o, G; w5 J" H* c  r* B
复制代码

0 G6 c( k, b6 J0 i这个单步调试的时候就没问题,能够改变内存值。
: p/ _3 A8 p7 H8 V3 e再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!
, n; a: Z+ r2 e" y
5 ~% ]5 k7 a# v0 S: q8 W那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?+ i( z0 y6 B" B
还是我应该找你们GPIO_LED那个程序调用函数的源代码?
; ]( c# h% S5 Q+ A- q

点评

在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句 这是一段汇编代码用于切换到特权模式 OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm  详情 回复 发表于 2017-4-21 14:50
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:34
8 Z9 ^% _( \4 e,高手~~~: ~* |) [9 c$ P$ _* s
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...
4 V8 o4 s4 h- v1 e4 r
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句( y) I/ g2 @$ t2 W3 u& a
/* 重新配置程序入口点 */
! N- _; j- y  w0 L-e Entry
  1. /****************************************************************************/
    + R1 b8 a* y/ ~( j
  2. /*                                                                          */
    : R' e- s2 n: s; d0 C
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */6 w. }! i& R- \" i, |; p# h1 e  J0 |
  4. /*                                                                          */
    ; [" _- W1 e1 M. W- J7 P, u4 }$ K
  5. /*              2015年04月20日                                              */
    1 x& }; H- K' n4 ^
  6. /*                                                                          */, Z, z1 K2 x/ I+ K
  7. /****************************************************************************/
    " g: H( y! y, d! }, e: H
  8. /* 堆栈 */
    5 [1 p8 _9 y/ O( e, f
  9. -stack  0x80001 w6 w. V0 B7 |2 s2 s' ~
  10. -heap   0x2000! z! _6 Q" q) c' O7 ^1 e- r) K; R+ \

  11. / \- s1 A- U# s: Z+ {
  12. /* 重新配置程序入口点 */3 l& R! e" E& K% G: `
  13. -e Entry
    % Z4 H' J9 U3 g. R* N

  14. & X3 P) h  t5 J& _# z
  15. MEMORY
    ' x% G9 L7 t+ m7 m
  16. {
    0 ?2 s/ c1 T: S5 e
  17. #ifdef DSP_CORE( g3 {7 i$ G% D- ]' ^  ?9 h  t
  18. /****************************************************************************/$ i& l, i+ e0 k
  19. /*                                                                          */0 E/ O# E( s( B7 N6 V- p. e% z
  20. /*              DSP 专有内存区域                                            */* A2 a4 c8 {2 H7 M0 F& U9 d
  21. /*                                                                          */$ V& ~3 `& ]% {$ U; a
  22. /****************************************************************************/" T3 g2 A. M* {  f
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */
    : H& N. m" J# j) c: [  U$ Q+ V6 P
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */
    9 B1 |4 Y: _2 V- n0 L
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */$ ]7 L* @2 |  v  j' X$ f  i
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */$ T2 Q4 i0 C) |3 y; c- p
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式; C6 [6 t, e+ r
: e0 J7 M; W5 ^
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm, q# t% V! ^- K# E0 P7 N
  1. ;******************************************************************************# t2 @8 W1 J( |3 C
  2. ;) q5 z1 x  G+ {6 i3 z. V; i
  3. ; init.asm - Init code routines5 h9 m/ [, r" h( P2 A$ z
  4. ;6 D$ ]) [; A* ^! Y0 F6 j* C
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/: f$ V! c0 `7 O3 ]
  6. ; All rights reserved., |  R  `  G8 b  n9 z/ T2 r' \
  7. ;
    % n9 y/ _1 w6 {( p" F; r
  8. ;******************************************************************************; U; \; Q' z& K# S, ~
  9. ;****************************** Global Symbols*******************************
      x" C* p: q- Z. Q
  10.         .global Entry2 d# A% E$ u: f5 x
  11.         .global start_boot  `" v' `# ]( R1 M7 e( N
  12.         .global __TI_auto_init
    ' f! K* f7 e: Y1 a! J5 M; t' ?

  13. 5 r+ \9 f5 V: L9 I+ W
  14.         .ref __stack
    : L2 R3 K1 q' k* r7 o
  15.         .ref __STACK_END& T" ~! Y( ]6 f) N
  16.         .ref bss_start
    . S7 ^, t) P, f  a  C6 w
  17.         .ref bss_end
    2 \7 s* m( H& n# d0 v8 u& b
  18.         .ref start_boot- H* k7 _, ~! a- l# o7 O! ^( o$ x/ l

  19. # k* W. _4 i9 @2 o' a, y& [
  20. ;************************ Internal Definitions ******************************- t  T8 P  D' t
  21. ;
    + K6 |# L9 X  z5 u! _
  22. ; Define the stack sizes for different modes. The user/system mode will use: X' }: l+ ~6 H& N( G' F
  23. ; the rest of the total stack size1 z( a. [( v4 N5 s2 r- q
  24. ;& x/ k' Y3 T" i" K) ~! c/ |

  25. 6 k0 ~- f7 ]5 a6 h9 ^
  26. UND_STACK_SIZE .set 0x8
    9 |0 g& i  h* G% x7 V
  27. ABT_STACK_SIZE .set 0x8
    1 l# m8 v( E4 ]: B
  28. FIQ_STACK_SIZE .set 0x8- H( g: s7 Q+ @2 b4 u1 F4 [( U
  29. IRQ_STACK_SIZE .set 0x500
      G; w4 f$ h- n$ x6 ]! y
  30. SVC_STACK_SIZE .set 0x8
    # O# f" c5 c2 l5 B' R! I- S

  31. 7 k, Y/ G( O' g- q* ?& j  F. C2 T5 u
  32. ;3 r( G2 |9 g/ Y" ~: G& s
  33. ; to set the mode bits in CPSR for different modes
    ( D3 h; l" J  @+ @8 \' `( H
  34. ;4 Q" \; h+ z+ M5 M& L7 w

  35. 4 O1 L8 \% L! B' h. p$ f& {) o
  36. MODE_USR .set 0x10
    0 {2 {( I; k& i/ J
  37. MODE_FIQ .set 0x11
    ; g8 c% }* x! z7 F4 F2 @- M
  38. MODE_IRQ .set 0x12! x& w) Q2 u4 l0 G1 [$ b+ s% i  [
  39. MODE_SVC .set 0x13
      t* R8 r- c! P' l2 s% o! q% m: H5 D3 Z
  40. MODE_ABT .set 0x17
    . P. ]" L- y6 f# o0 s
  41. MODE_UND .set 0x1B* e" ?  n) F" @
  42. MODE_SYS .set 0x1F9 A# \+ j! g- ^5 |1 f" |! `

  43. % V/ F. m9 @2 [' Y
  44. I_F_BIT .set 0xC0. Q/ F3 L8 p" c4 M6 c5 k
  45. 7 B4 _5 V; D' E5 W  Y& k
  46. ;**************************** Code Seection ***********************************7 V+ m1 y6 q* Q/ F& }
  47.         .text
    - `$ V9 z( P- j+ V8 f# W9 L. S

  48. 4 I3 }  \4 |: R4 K
  49. ;
    - l7 e4 t- h) n) `
  50. ; This code is assembled for ARM instructions  U. U7 k, k# h  P4 G
  51. ;
    5 I, N4 N6 ?7 t1 g# y5 W; C
  52.         .state32
    ' G- c7 S7 }' O& r7 \& L2 @  {( x. Y# R

  53. . m# j; M9 E* h$ Z- E
  54. ;******************************************************************************6 J9 W* {8 ^/ G5 v' E6 k7 }
  55. ;! I  h( Q1 Q0 f
  56. ;******************************************************************************+ a) h- i+ O6 ~
  57. ;4 I. c: Q- B* V7 W+ [
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and) Q1 y& o9 j( M4 S
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the9 i" c; t- r: b
  60. ;  main() function.
    ! R; w, N1 C( v/ n* j, b8 i8 q" j
  61. ;. l9 ?2 E2 e7 _; L0 I2 y& ^
  62. Entry:% Q  v$ O2 N2 U  D9 _- `
  63. ;
    . g1 w. K" b. s0 p
  64. ; Set up the Stack for Undefined mode& r# W1 ]5 x: R1 z
  65. ;
    : L" L1 v& z! ?! ~% Z6 I; t1 \5 u7 e7 ]
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer" M. n5 s# p- o/ w7 M" C, m8 \+ I
  67.          SUB   r0, r0, #8
    & `* @& K) @9 M' r% a& N, o
  68.          BIC   r0, r0, #7
    9 E  r  q" B  u) X
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode6 C/ T3 m. ^0 w$ l- `- _
  70.          MOV   sp,r0                           ; write the stack pointer& v& a4 V6 F! ?3 ?$ O3 }
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space+ q$ I7 r5 Y" \& \2 G9 J  q5 r: Q
  72. ;
    " j/ _9 H( v! R" ?* ~, w5 ?
  73. ; Set up the Stack for abort mode
    9 T7 ?8 o4 M+ K7 T2 H" z
  74. ;3 S8 v& @& H& J* X% x1 `5 J
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode5 A: w" s/ ^% t* f! Y( z
  76.          MOV   sp, r0                          ; write the stack pointer
    ; A0 q. a8 ^; a2 W5 _3 B! i
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space
    . {, _- i1 l. @  L% |
  78. ;7 F7 ?* y; @# }4 R
  79. ; Set up the Stack for FIQ mode
    / C' @5 Y# P4 K% R. d2 K, i
  80. ;
    1 f, Q& }( O& O) G2 Z
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode0 _/ C  ~  O8 [$ I0 b; N
  82.          MOV   sp,r0                           ; write the stack pointer
    % ^( o% ~# }8 _; E
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space& o1 G, [2 `# s$ [- c
  84. ;5 R4 A' s. l0 F. y: u
  85. ; Set up the Stack for IRQ mode, l% u& Q( y4 O8 c
  86. ;2 u! ]* ]" w9 z
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode
      N, s4 A$ R8 r8 R4 o7 y( |: @
  88.          MOV   sp,r0                           ; write the stack pointer' l1 u# p  d( T; T% j
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space
    : P! F  _% |) m9 y* B
  90. ;0 X5 H: g. y2 Q! I# N
  91. ; Set up the Stack for SVC mode
    - B' W* _, M6 o  \2 n& }/ ?
  92. ;
    & C3 a8 c- d. ~- U! h1 X$ k( e
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode# a, J" v" r- ~0 ?
  94.          MOV   sp,r0                           ; write the stack pointer
    2 ?9 K; ~% d5 A6 ~3 Y' U1 ?
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space( [# e2 t3 ]5 w6 o' V  \
  96. ;
    2 Y+ S/ a* T- k) D( u  h* A( I5 V; E
  97. ; Set up the Stack for USer/System mode
    , Q9 f# y! S: @+ l3 _) E
  98. ;
    2 F8 B" {9 M6 W4 W9 {% o9 r* n
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode* }: k( b5 U$ x* M
  100.          MOV   sp,r0                           ; write the stack pointer
    & n2 v5 M. h; ~2 X2 G

  101. / G! K0 U. N, e( }: ^, N! [4 a" l
  102. ;
    5 L# K# `6 c) x/ T. r9 r3 h- z1 W
  103. ; Clear the BSS section here( Z4 T0 g* J& ~- Q! ^
  104. ;
    + A/ g& @4 e2 h. v( k
  105. Clear_Bss_Section:: a. e% w: ?2 L

  106. 8 H4 ^; [/ M" Y5 D. Q- w( V4 l% s& X
  107.          LDR   r0, _bss_start                 ; Start address of BSS9 J0 P7 `$ n1 Y- }7 y% B( }, w
  108.          LDR   r1, _bss_end                   ; End address of BSS
    0 ]' S8 m% p5 l5 q( ~* t9 F
  109.          SUB   r1,r1,#4( @" ]2 [' ^7 O5 y0 J' Q6 t; @/ X
  110.          MOV   r2, #0- d8 @# [/ _( w' b, Q- Z  q8 i
  111. Loop:
    5 F6 Y& V) i" O" J
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS' S. }* G& B, o  t% P1 F. _! f' `) g5 W
  113.          CMP   r0, r1
    $ _) A% f) C6 @& E0 v' g7 z8 R
  114.          BLE   Loop                            ; Clear till BSS end
    % J: ?) M' F$ p8 X4 E5 [

  115. 3 ^: t1 F, v' F9 T
  116.          BL    __TI_auto_init                  ; Call TI auto init
    , R6 e0 Q6 p# K2 o6 C
  117. $ M% P6 `8 {  O2 R
  118. ;6 }! ]5 Z  Q5 Q1 z% o
  119. ; Enter the start_boot function. The execution still happens in system mode5 t$ p: v9 C: [' Y( c+ L
  120. ;& b' _' p) r& m, n: x. f, O
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot7 s. O: g4 a% u7 J' k
  122.          MOV   lr,pc                           ; Dummy return + v& n/ D' ~; j4 \0 w2 W2 H
  123.          BX    r10                             ; Branch to start_boot
    . B/ r( ~& W- `+ J, k
  124.          SUB   pc, pc, #0x08                   ; looping6 i* ?! g% |+ H) @, ~
  125. ) _% F  p' ]# X8 d# ^
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode6 H$ v  c' J; i
  127. ;         BX   lr
    " e+ T5 H& F/ ^7 K; ]% o" @
  128. ;9 {# X* e. t6 b
  129. ; End of the file
    * x% x( ~+ a% T( \/ e7 u. c0 K
  130. ;
    / z: J7 X0 Z6 `* _& D
  131. / l/ p! g4 u  r
  132. _stackptr:' V. I) b% _- c) u2 B* s9 q3 q0 i5 U5 ?) y
  133.     .word __STACK_END" D; I$ ?0 D- ?
  134. _bss_start:' J3 ^) \9 \4 @7 x) F% N
  135.     .word bss_start# C6 M1 @; y4 e- n- j, j
  136. _bss_end:
    9 E+ H$ b! W: \
  137.     .word bss_end/ o$ d2 r% d  z+ Q
  138. _start_boot:
    % t0 X: J% S( \* k  W! }" a
  139.     .word start_boot2 P. \1 ^  ?1 b' ^( L
  140. _data_auto_init:
    7 I; i. s) O, ^
  141.     .word __TI_auto_init
    2 w8 l, t- t  b1 _, K5 _- E
  142.          .end0 t7 P) x8 ]7 k- e# F. v
  143.     . r$ D+ h2 ?7 j0 O& `

  144. % `; w$ \. q7 ]5 a, J

  145. " }1 K# [; k, U' A
复制代码

. J1 c. ^5 x" y3 k/ `9 }5 |, T( X. i; Q8 s
3 c. k& L5 ]- D
0 V& k# E# z, \3 r

7 d- s  a  r! q
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:502 i0 Q' X9 \4 u" z
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
6 i# C9 T+ E, O) ~/* 重新配置程序入口点 */$ h# U6 n4 W8 h* K7 V
-e Entry这是一 ...
) D0 `4 `! B0 C) G+ l$ a+ {  c3 g- `
你贴的代码太复杂了,我得慢慢看,慢慢吸收~
" N% p7 O2 t! l* [7 D- ]0 m6 Y0 h* t( Y; u1 c$ T
不过非常感谢,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-10 22:12 , Processed in 0.050499 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表