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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑
* m/ s$ r0 d. c+ d1 J( f3 l. U: o! B$ T" X
我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器  l6 `) V  k" f4 f* s. j2 }5 c+ v

/ {# g2 Z* e+ Z2 x& y5 p3 G  P1 D, k2 b6 {% J) I: y+ H4 @  x) I! f
我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:5 F: o' `) Z* G3 K4 Q' }

6 J% G' E6 G5 c  R  H& @- E( c
* G3 a- I3 \3 f( K- Aint main(void) {. A! q! b- \) n+ n. @( v/ [/ G3 i, F
        
' J$ Y4 a/ ?; v4 L8 R        //使能GPIO
" p! E% O# j  |* \0 @5 w        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
6 M! b# V) l3 [                            PSC_MDCTL_NEXT_ENABLE);" _) B" s8 \; g: ?1 Z0 Z) l; F- A

- p& n; w/ N1 m. j! t, M9 p        HWREG(0x01C14124)=0x88800800;
$ P5 l/ Q. i" C1 a8 R  I4 o}6 y, u5 f, N! a$ ~! \/ u

2 G+ y. G) b- x( C( m& x7 @单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)
# g+ U# V1 w; W+ j运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)
/ e2 a9 a% Y2 p. G/ y( s/ g- l- q# H
我想问一下,为什么我管脚设置不成功???
# I3 G- g3 `* z5 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:50) m6 J8 p; p9 q0 b% y
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句4 D% o$ h/ Y1 W( A& {  o
/* 重新配置程序入口点 */
9 t6 ]9 Q2 k! N/ n# z! G- @( d-e Entry这是一 ...
- B/ k( O# a, d9 z  b4 y: b
你贴的代码太复杂了,我得慢慢看,慢慢吸收~
2 R2 D$ c, W1 f" \. f5 \2 Q8 s/ b) N+ R* R% h
不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:344 i% t3 {, r' X! T/ F* ~
,高手~~~4 o" z7 x( c8 {6 w  l
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...

0 p: z) O  F. Y2 F# Y8 E) F1 Q+ \7 O在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
4 w) X2 [) H% p5 ]/* 重新配置程序入口点 */& x( h$ s6 E5 e6 E
-e Entry
  1. /****************************************************************************/+ b$ g( q) L- T
  2. /*                                                                          */* u# X& S! J9 u# ?1 @6 Q! ?# N. X4 q2 L
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */1 w% ^7 Z+ w8 o7 h- V& C+ K' P
  4. /*                                                                          */, ~  ], w% O) r/ d+ O; Z$ H0 K" m
  5. /*              2015年04月20日                                              */! k- s0 m# k8 \
  6. /*                                                                          */
    . C/ O/ ~: o" k0 U+ `4 x; }+ J
  7. /****************************************************************************/# w. p! h' g2 z
  8. /* 堆栈 */4 i" @' P7 D; U+ ?! r: C. Z
  9. -stack  0x8000$ x2 T' s! l7 V3 ?6 k7 X5 G
  10. -heap   0x2000
    4 h' @9 q8 l1 D0 r/ E7 S$ j

  11. * {" Z$ d% T' a6 W1 j
  12. /* 重新配置程序入口点 */
    ' p; j" B7 i9 P' ~/ s2 G
  13. -e Entry
    ( e- {. h9 A9 H2 K) Q9 V/ k

  14. ' b+ w1 g8 b1 @1 H
  15. MEMORY
    - n" K) Q/ U! j# J
  16. {8 d; j7 _' H3 S8 V  D
  17. #ifdef DSP_CORE' _4 K. j* u: G2 \) I2 m5 s
  18. /****************************************************************************/
    7 {( e0 J  q" t; f* C9 x# X
  19. /*                                                                          */
    $ p* s% h/ u# X
  20. /*              DSP 专有内存区域                                            */8 C6 S8 B5 e6 ?8 @% o7 \
  21. /*                                                                          */
    5 E0 a/ n- D1 `4 D; |! {1 o: W; G
  22. /****************************************************************************/8 _9 V# W  X, l) `6 O
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */0 W9 ?7 y& C& d3 Y* g
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */
    3 g& l0 n4 j. k8 V* Q$ ]3 h
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */  r  v: ]* `$ R% j1 W( x
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */( u) R) |2 b3 L' d5 @6 I3 u9 o* m: r
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式
, ?- h+ z7 {: p8 u- |
8 I: K$ O: i9 JOMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm$ u9 x. U" j% w. ^; X% D
  1. ;******************************************************************************
    5 g9 k- z% i1 t
  2. ;
    , I+ F' z- n' a7 a4 r8 ~; }' W' u
  3. ; init.asm - Init code routines4 B8 o7 q* B& y- B& k  Z
  4. ;
    * f! s2 Y6 {) u* B( R3 S1 a
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/0 d1 C  K% [$ m$ t! z6 i
  6. ; All rights reserved.
    7 f% I8 a; J2 K: L" o: J& ~8 ~
  7. ;% ~) T6 c2 a  F! G
  8. ;******************************************************************************
    ( ?9 n& f% W+ [$ u" ^
  9. ;****************************** Global Symbols*******************************
    2 c- b# I' L6 \" v$ w7 r
  10.         .global Entry
    , t8 G; w4 u% ^$ y" p, S% E- j5 r
  11.         .global start_boot
    ) A5 N' p+ M; g) c
  12.         .global __TI_auto_init5 f% ^% T- c0 @. y

  13. : Q! n0 ~2 h4 U) H! N
  14.         .ref __stack0 d! ~, t( C3 ~  z9 t
  15.         .ref __STACK_END, ^! H* ~4 o2 D" x
  16.         .ref bss_start0 D' M4 A; ~" y) L: Y% e
  17.         .ref bss_end' N' r! A; Q0 C# F2 o: M
  18.         .ref start_boot
      \: p  B: n& `

  19. 1 A# E: ^) n' u+ w$ G: n
  20. ;************************ Internal Definitions ******************************) l, l% [% K: B, R' W
  21. ;
    & g# I, t+ ]. \# H5 o
  22. ; Define the stack sizes for different modes. The user/system mode will use" F2 |& V( W4 W
  23. ; the rest of the total stack size7 S* K% o7 y* H% B
  24. ;
    # k- [, }  Y. F* B6 S! Y

  25. " g" d- k& r6 N5 O! s% L
  26. UND_STACK_SIZE .set 0x8
    ' P9 \( @9 k+ y3 b* T5 f% {- Y
  27. ABT_STACK_SIZE .set 0x80 G% @( D; ?+ c8 p; {/ N, b, j& x
  28. FIQ_STACK_SIZE .set 0x8
    : n- \0 X4 N1 K3 }6 l0 K
  29. IRQ_STACK_SIZE .set 0x500
    ' d0 @5 ?4 U2 p: d) A, ]) e6 [2 P
  30. SVC_STACK_SIZE .set 0x8* D6 ], H9 u9 M! w$ v- c$ o" W
  31. ' j0 k* k6 ~7 i) _: }6 `! C
  32. ;
    6 A9 S) j9 |; g% h* N4 A
  33. ; to set the mode bits in CPSR for different modes  y4 [+ o- p& y# R' g: @
  34. ;0 ]% s# n" ^: [, J  S7 p# l# y
  35. " ^, K: x0 _5 ?! t/ z
  36. MODE_USR .set 0x102 i! W, c9 D/ ~6 d
  37. MODE_FIQ .set 0x11! w* h, l4 O) W8 o# }
  38. MODE_IRQ .set 0x12
    * f" B7 p/ K$ p: z# {' \! Q1 a
  39. MODE_SVC .set 0x13
    0 ]. {/ a2 U+ X( G% D4 b
  40. MODE_ABT .set 0x17, ^3 m/ k5 H; f2 t9 V0 E
  41. MODE_UND .set 0x1B
    6 o" D2 b! n( b. s( _  C( o5 v
  42. MODE_SYS .set 0x1F$ C- K, r- I' b% ^  [
  43. 2 ?. g5 O( {% S* B0 x' S
  44. I_F_BIT .set 0xC0
    % _0 F! P8 ]2 {& |, ~5 Q* U

  45. % ?& f" x* z# K+ g
  46. ;**************************** Code Seection ***********************************
    : |3 V3 K: b4 G
  47.         .text
    2 C7 N) S/ s& m" `

  48. 5 I; }! z2 c4 k
  49. ;9 V# k8 V0 |9 F
  50. ; This code is assembled for ARM instructions- b' W9 k; z/ p' ?/ r; ]( n
  51. ;
    ' h# M+ V, d8 \6 w  n
  52.         .state32
    + o! e) d, V) o

  53. * a& A- x; K2 m( P: a
  54. ;******************************************************************************
    - {( D& w1 d  m% e; I" j
  55. ;* l! y+ j: ?5 H% o: {$ y. `; \6 ^
  56. ;******************************************************************************/ f$ @2 S0 S( g$ |
  57. ;
    5 U4 E: M4 F" b
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and
    1 j; t4 A8 a* g0 C) }# U+ G
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the2 ~' Y0 ~7 P+ q# b; J7 t
  60. ;  main() function.  {/ }0 [( n! K8 T! I3 T1 F. E" z
  61. ;4 ?5 x% E& h7 ~* j1 k/ A' G
  62. Entry:
    / F* z3 J% ]5 P. U+ V7 }
  63. ;% S8 y! R% H: X- N( N( {( e
  64. ; Set up the Stack for Undefined mode( D9 T$ n5 D- M8 F! W0 Y
  65. ;
    : q0 R& {$ S' n
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer8 g+ c/ O5 s; \- |7 p' W
  67.          SUB   r0, r0, #8
    4 t4 n* z" Z- u5 u6 y/ h  s+ r
  68.          BIC   r0, r0, #7, l! N6 }5 u2 h) I3 `5 s  e9 z- H% S% u
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode
    + s4 H  U# g$ |- A
  70.          MOV   sp,r0                           ; write the stack pointer5 w, C6 j% y* O( n) k! ]
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space
    ; g/ l$ u+ I: s
  72. ;/ V. u9 }% f4 y* Z3 R
  73. ; Set up the Stack for abort mode4 e, _( _" x5 v6 }' @5 \/ V
  74. ;" A6 \9 g; Y" i% ]  m2 a
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode2 r7 t; z. G3 \  y1 R. N* w
  76.          MOV   sp, r0                          ; write the stack pointer
    " A3 }5 o7 }: k, v# e5 ^
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space( F5 h; _; O) e1 N- u0 K* B
  78. ;% s, z( V9 e$ I; D5 L3 L, Z
  79. ; Set up the Stack for FIQ mode
    8 B4 P# m7 b' {, W
  80. ;1 x" c5 Y! ~& E8 s- T
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode9 w' e  D  @; W0 \7 y
  82.          MOV   sp,r0                           ; write the stack pointer- ]) m2 s1 u" _# {: z7 o; g+ ^* q
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space7 @) |  d3 J# B8 F3 M
  84. ;
    ) S$ `' c+ c0 V% d
  85. ; Set up the Stack for IRQ mode6 V8 U0 v  E" I
  86. ;
    3 v5 r9 t. L0 F5 j# P
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode
    6 [6 \+ U. G! k- C1 s& ?0 `; p! a
  88.          MOV   sp,r0                           ; write the stack pointer+ l/ g7 j/ ]6 E, Z; `) z
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space
    5 N2 W: d6 B/ e1 Q7 [7 k
  90. ;5 n: P2 w/ A5 r9 ~* l9 P
  91. ; Set up the Stack for SVC mode% T: j+ x7 ?; ?9 m  f5 a0 w, t9 F
  92. ;
    1 d+ k6 x6 W( I" G: v, k
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode6 n- F% H1 q* G
  94.          MOV   sp,r0                           ; write the stack pointer
    " `/ g9 g2 l: f3 _) a4 P8 Y6 D
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space
    1 V1 `* U8 V+ P" u( ~/ t
  96. ;! H% D% O5 Q) n! t
  97. ; Set up the Stack for USer/System mode! O; `" W% {7 c$ ^7 P: d! V
  98. ;2 n$ U* n. W# ?$ X6 F/ `
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode& E& \- j2 [  e; p7 ?
  100.          MOV   sp,r0                           ; write the stack pointer
    % s' q/ j4 \3 ~! \; M' x
  101. - J- q9 v) k' Q% S
  102. ;* U0 c! D/ q* M0 ~1 S" y. {7 j
  103. ; Clear the BSS section here
    " P: {8 E# U+ T% N; ^( k
  104. ;7 d; B9 {9 P, i8 g4 m7 P7 p$ \- n: c
  105. Clear_Bss_Section:
    ( ^& g* b9 m/ P/ F) ]

  106. ! _) F8 k$ ?. {
  107.          LDR   r0, _bss_start                 ; Start address of BSS4 s7 v' m  |: x+ Q. f$ f8 |4 U$ e
  108.          LDR   r1, _bss_end                   ; End address of BSS
    6 \  U# K9 [; ]6 C' }
  109.          SUB   r1,r1,#42 z" x6 u7 t6 }* x- w" `: A
  110.          MOV   r2, #0! ~& c3 l- C: z* N: Z+ S' \! x5 a
  111. Loop:
    8 X' o, y# e; M/ b
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS+ ~. d$ U  A8 D0 h! _: J
  113.          CMP   r0, r15 L" E- v9 v4 o! v- S+ N5 j
  114.          BLE   Loop                            ; Clear till BSS end
    # |+ L, ?4 s$ x! S0 f  r' K

  115. ( l$ Z5 O4 h* }! V% h
  116.          BL    __TI_auto_init                  ; Call TI auto init
    9 e: }8 }) n: _, t9 n
  117.   k( ^+ ?& @' A
  118. ;
    * l8 h9 C# \7 J
  119. ; Enter the start_boot function. The execution still happens in system mode" N- z( ~1 w1 Z% q; ], N
  120. ;9 n+ t1 g1 j; E  a
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot0 I3 H3 g' _; k: d! Y
  122.          MOV   lr,pc                           ; Dummy return , q- f7 l$ g+ S' }$ m; n$ F$ ~
  123.          BX    r10                             ; Branch to start_boot- o: q$ u, B. d* N
  124.          SUB   pc, pc, #0x08                   ; looping. I; E8 i" i6 `* F

  125. : c  _- u+ O) M, u3 W& H5 o
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    - P/ ?( q' t8 }4 G! N5 u
  127. ;         BX   lr
    3 v% `1 b, g# C
  128. ;
    7 J  ~( `9 e, R' M/ f3 I% r
  129. ; End of the file
    8 I, e+ x1 w" I3 l' Z& |% G1 }. O
  130. ;
    ; X5 [# c" X- u3 j1 v

  131. . |8 q4 w: k4 H) o- T+ f- n
  132. _stackptr:
    - y; e/ {* h5 `6 o  _
  133.     .word __STACK_END" {, f% n7 N7 z, e6 T
  134. _bss_start:* V8 I6 K4 I7 c* S1 p4 W
  135.     .word bss_start
    3 `& q$ K  T' G4 B2 u8 D+ y0 V
  136. _bss_end:
    ) Y# K8 K4 [( l! Y, c" @
  137.     .word bss_end, @' A) k& ~* m+ M# \
  138. _start_boot:) H* n: M. X, V/ B8 N/ N3 }. h4 @
  139.     .word start_boot6 m6 A' f7 @, o7 X
  140. _data_auto_init:( S) U" W% F- U$ ?; O4 K
  141.     .word __TI_auto_init6 W$ W, m8 M; f- S! \) ?+ x+ ?+ e
  142.          .end# Y" ?! k8 B$ S( G- c( P0 V: j  y& J
  143.     5 ?+ c: @  \8 A6 U; f5 r% M
  144. 3 Z/ T; v" Z9 u
  145. & V7 M2 k* V: E/ E7 P* O; ^$ @0 C7 c
复制代码

: D& I6 |9 U. a" S1 [! [! \
% p! j' ~  n/ F( b& |5 f
( m9 U* a2 ^, N
0 N: A2 F6 p7 E6 d# O& F* s. n$ s! C  x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:59$ t5 t8 \) t- Q0 [/ c) v  Z
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式4 V$ O* H& O6 R  Y. Y/ m/ Q
DSP CPU 不存在这个问题
: F  ^: y( F" E9 t" _0 I ...
( T7 _9 `& w1 o( p* |; S
,高手~~~+ z/ [. \0 A% x$ J! ?" L  g
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    ( q; P# }6 E  @; h; z

  2. $ D% f& N) L; t- [8 n. @% g% B
  3. int main(void) {' h, w! a8 ^# H: I! N
  4.         HWREG(0x01C14124)=0x88800800;* b7 Z  i$ m& y# R
  5.         return 0;
    # S2 c& _1 V% }# g
  6. }
    3 `" l; y+ ~/ `/ r
复制代码

  v; ]6 e* F* V6 t- A+ g这个单步调试的时候就没问题,能够改变内存值。
$ _. X) f) ?  z2 \! Q  X再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!
- W& K6 P6 i; V- c
, Q# f- V% r3 I# g那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?( t$ D5 }  f) v- d6 l  O5 b' y
还是我应该找你们GPIO_LED那个程序调用函数的源代码?% E+ j* I  r# `* e/ R% C% V( J  B1 o

点评

在 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
7#
发表于 2017-4-21 13:59:36 | 只看该作者
unicorn06 发表于 2017-4-21 11:40
6 ^# x% L! }+ X" D9 s9 W3 n1 q. W会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...
" x0 @7 ~, U1 s) o
' S" H6 d! f$ l) z3 e* m  ?4 b2 y* h/ w

9 U/ G! a. r6 Y% o/ Q7 ~4 jARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
# ]4 x- g, I& F) u8 g6 r  H. c2 @DSP CPU 不存在这个问题" t. C0 U; |/ A9 L; }

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09
) Q( \7 a  g% G" ]* \可以读写的,应该是你的代码问题; Y* N4 ]/ D) k3 ~$ p5 ?2 @
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

! Y* w0 k) ~2 J  J会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

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

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
5#
 楼主| 发表于 2017-4-21 11:39:04 | 只看该作者
human 发表于 2017-4-21 09:09+ b7 H9 F( u. F3 w: V
可以读写的,应该是你的代码问题
- n9 S0 }! j% \& s) F1 Z可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

1 |' g7 c3 I, }9 U. t( ~你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库6 ]6 T9 p! q, c1 d# a# \. X/ _
函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    ! z  |/ {# S4 N2 b# `8 b
  2. ! z6 _$ a1 }7 q, ], t
  3. int main(void) {
    , l- F( q+ M  j$ H6 i0 C
  4.         HWREG(0x01C14124)=0x88800800;
    7 L: h9 H  Z9 a* _3 X( v: `$ t
  5.         return 0;
    5 Y- N" ]9 Y8 C/ }- E( I. d7 A. V
  6. }3 E" {: ?: y. E, j. O/ U0 e' U! o; T
复制代码
+ ?" p1 P6 G" L$ r- @$ M0 o
5 k+ J" s! _: E, b& B1 a
主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变
2 W  x  Z( Y7 |7 [) P# o; x6 E1 m8 l! H

3 x# _+ ]7 G  y7 ^# N然后我把程序变成如下形式:
  P  M+ s: l8 s& k
  1. #define HWREG(x)     (*((volatile unsigned int *)(x))); n3 u- x5 L+ z* `9 A2 K
  2. 7 o7 H" n! E2 Q4 N) n: j
  3. int main(void) {% Z0 f: R8 {: {3 \
  4.         unsigned int temp;
    # S% p, |: Z# y3 O
  5.         HWREG(0x01C14124)=0x88800800;
    7 U1 Y2 e/ A8 V0 {! p
  6.         temp=HWREG(0x01C14124);& V) A4 A/ R, j
  7.         return 0;
    ) B- k1 f3 N% ^6 h, t
  8. }& U4 \( @; s0 U' v" X2 n! t7 g3 A
复制代码

! k+ ~3 n9 K7 K4 q$ q/ Z3 C  ]9 a. q: P8 g0 W
运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变
. D$ \. w  R# f# A0 f) v$ g1 Z通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000
) ^. X! g! K: W4 k0 _' G然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题
% a7 U2 d. |" v' H8 u0 S( ?, m  d% V$ W1 O- m* Q! a
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:097 x" e) U" R) X* B0 _
可以读写的,应该是你的代码问题
; O: o/ b" K: T可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

! F5 L) y( e' \+ _8 u% J首先,谢谢你的回复!
- t: D; a3 l! w9 d2 ^! b' w) F
# w( R0 B  J' d; T$ G你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
  Y! b  Q5 c, Y- n第二句直接对地址写数据,有什么不对吗?
/ Z/ [& l" f4 ~* t. n, i8 [' Z* Q8 \4 I9 M! j9 \
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?
6 L$ ?! m0 R! p$ v0 t, `: T% r8 v* s8 a6 U1 M, a
因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
板凳
发表于 2017-4-21 09:09:04 | 只看该作者
可以读写的,应该是你的代码问题8 j" p9 N$ }! |( j! m* c; k1 s" p- @
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验
0 T+ T, M/ v; ?- l) V# f实验一:0 F" k" B8 V2 V, |
在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句1 e9 ^$ U* R5 n1 H% |0 l, A
, J7 V! E! U& ]  W9 I8 j8 w' i8 Z
                HWREG(0x01E26010)=0xFFFFFFD8;
9 k- Y7 u; ^0 N/ [% Y                HWREG(0x01E26010)=0xFFFFFFFF;
+ l& U6 ~9 f( C6 A4 O9 Q) I! v单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)
3 |1 M8 d4 e2 u6 Y3 ~3 h" @若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。
3 R6 z$ C' Y' M/ i# X) c8 c' Z
. o. c8 J6 `3 v$ r5 `1 w$ G实验二:0 Y& I+ O! l* U# g/ d# H& S
若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句2 C1 s* Z3 V. B1 O( ]

- \# C4 F2 E9 L! y* W, T5 [                 value1=HWREG(0x01C14124);" `2 O8 o* z2 ]

9 T4 O9 }6 {9 p  v2 k3 S通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 19:21 , Processed in 0.055722 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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