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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑
" Q! B( V, f' g! G$ `, }, d
6 l+ O2 }2 Z. V  X. D8 f9 g我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器
! y0 y& _, Y. M+ X4 S
$ H3 J5 t4 D+ s# [* s7 `! f
7 I  o( a. z& E8 A: R# P$ ~2 s我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:
* y( E6 ]* h! N3 W" K
" Z, f6 k2 `! }9 Q8 k, `
6 R6 z3 d$ l3 fint main(void) {- Y( N  ~) l; A* @
        5 Y2 _* z; `# w4 k
        //使能GPIO; E* q  j' E; K3 _: ^- P
        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
7 `( q2 b& j! P) h! }* p' u. q                            PSC_MDCTL_NEXT_ENABLE);
9 {8 M0 B/ f  F$ X3 [2 y9 f* h$ N0 V* @5 m# x5 k
        HWREG(0x01C14124)=0x88800800;9 }7 |( l; M7 q2 j5 V) a
}
: `" n& O! l0 V9 a9 g7 O: t& J- B
单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)
9 P. {9 \8 w/ U' E运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)3 Y9 X- J1 |/ d/ \
: b$ P  o4 T0 `8 ]' ^/ _
我想问一下,为什么我管脚设置不成功???1 |8 B. j7 n7 ?) c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:50. d0 k# U1 L6 r& `6 r( W- q
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
$ n3 s# s- X/ U/* 重新配置程序入口点 */
! }, e+ a# M7 z1 L* W- P-e Entry这是一 ...
9 i- `6 O/ T6 S8 R6 R
你贴的代码太复杂了,我得慢慢看,慢慢吸收~
7 ]& }# r: m) {3 b" x7 y" i! Z' D" {, E9 d- f( ~
不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:348 {4 F: H! W8 O5 p. R8 \
,高手~~~
  M2 p! F! j# c  R正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...

' |$ y+ Y. T* `8 M' L在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
7 g, d$ Z3 i& U% L6 C% p* O6 h/* 重新配置程序入口点 */
9 U9 F/ _2 S& {3 J5 [1 U8 |& k-e Entry
  1. /****************************************************************************/+ C# y% _5 |# D' ~
  2. /*                                                                          */
    / z( G( i3 Z7 b+ Q: u  K
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */  G9 L! r1 I/ [4 n- q/ _; q
  4. /*                                                                          */; _  I% a" E! F+ N+ i
  5. /*              2015年04月20日                                              */, E# o9 i+ Z2 t2 G4 ]4 |
  6. /*                                                                          */" N+ X7 S/ H0 ]) w7 G7 I  H
  7. /****************************************************************************/
    ' O6 @8 o2 Z$ V; H& m" e0 V) P) I- c
  8. /* 堆栈 *// ]5 {' @( ^, h9 r* J. j4 I
  9. -stack  0x8000
    # d- G0 ^: E6 G: `  v" n8 M$ p
  10. -heap   0x2000
    ! l/ _  J+ ~' x( F
  11. . R( M9 i4 _7 X2 Q1 r' o# O( H
  12. /* 重新配置程序入口点 */# e/ ]4 J( `/ [: }: n2 |& Y! E' q
  13. -e Entry
    - y# y% Q/ Q$ u

  14. : h1 D2 M/ D( R
  15. MEMORY
    * C- H; G0 e( N' v( j5 E) t
  16. {4 ~4 D1 [$ _$ R1 ]
  17. #ifdef DSP_CORE7 n: l3 {' b3 u% l
  18. /****************************************************************************/: g9 ~; S: o  w' ^2 d& i; @- v4 V
  19. /*                                                                          */
    % c  q! @& `  w% M# B; S0 n4 Q
  20. /*              DSP 专有内存区域                                            */1 @3 \/ ]5 L! |; i* r% f
  21. /*                                                                          */" H. P) Z% L2 [/ F: O; \
  22. /****************************************************************************/
    $ g, _% R$ Z8 ]( S4 j! @0 U, N9 x( L
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */
    5 X0 |2 a+ L+ b. w# ]
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */* s9 _) h9 z: d) F0 r  N* C
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */
      K: Q/ N4 }& G5 a: f  h
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */
    ) L. H0 L- g, u" ]# z
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式
  L: D2 O! }6 N1 Q  k# e) `5 v8 H% G
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm7 r5 t; t" G2 ?% c* A9 I- p
  1. ;******************************************************************************$ E% g# y6 @& {4 C
  2. ;8 r7 Z5 P$ |" t- w3 G1 ~
  3. ; init.asm - Init code routines- y7 u: `6 C! ~) q
  4. ;
    " d/ l8 q( l2 }' M
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/% ?. o8 a8 c& E: c7 O& c1 t& O
  6. ; All rights reserved.0 U. B% u. u$ b5 `+ O
  7. ;6 W5 @( @& H$ O" X
  8. ;******************************************************************************3 D2 F5 \2 {0 y, t! a# p3 A
  9. ;****************************** Global Symbols*******************************1 |) W; [2 d9 e9 ]( K9 Y" h/ @$ _
  10.         .global Entry
    % T" v! @3 Q7 c1 E$ u; W; J
  11.         .global start_boot
    $ N+ `3 k6 H8 S. Z0 g0 J) E: H. A
  12.         .global __TI_auto_init
    $ V( m1 ?9 J' Y1 x
  13. 9 l8 M7 k9 T' i$ |
  14.         .ref __stack
    6 t  {  h  f$ J8 C0 o' c/ Z2 ]
  15.         .ref __STACK_END
    # G* u* U7 t9 k+ Z
  16.         .ref bss_start  h) @- d2 ~7 {# _* C# h
  17.         .ref bss_end
    " h/ v, Q; v, i
  18.         .ref start_boot3 o! `1 I" i) w/ z7 G7 E
  19. 1 \1 e. V" w- x* N
  20. ;************************ Internal Definitions ******************************- |5 X6 B- b7 D5 g0 J2 Q
  21. ;
      J4 {0 j6 z7 K- T9 e. g5 ]
  22. ; Define the stack sizes for different modes. The user/system mode will use/ q- R8 e# Y0 I. x* M3 K- ~% ]( o
  23. ; the rest of the total stack size9 k8 N. L( q/ L. y# L# R! h9 q
  24. ;6 `, P3 D: [: s2 |2 `

  25. * Z) v8 W  z/ P; C, e
  26. UND_STACK_SIZE .set 0x8
    8 A# \! g# ^; x" b. G) f* a
  27. ABT_STACK_SIZE .set 0x8) A2 D- ~5 A# @% W: M9 ?  x
  28. FIQ_STACK_SIZE .set 0x8+ a2 c+ s8 m& d
  29. IRQ_STACK_SIZE .set 0x5002 l) i  m" N" I3 T
  30. SVC_STACK_SIZE .set 0x8- M7 F- Q$ g" U4 }6 X
  31. 5 m7 y9 l+ x6 N2 o  Z& f0 t8 L
  32. ;: j9 P1 N, K: {) I% _' z# A, _
  33. ; to set the mode bits in CPSR for different modes
    0 T* o* @7 |3 c3 Z) L$ j
  34. ;
    + D2 z# o" l# @) h" s9 @& j
  35. ' z6 l# O5 d1 z" c" r
  36. MODE_USR .set 0x10
    3 W7 R1 @) _0 l2 v4 a% C( a
  37. MODE_FIQ .set 0x11' _. l$ l+ Z. h) L, G  f
  38. MODE_IRQ .set 0x12/ `! Y$ b% c, l6 V- i: O$ e
  39. MODE_SVC .set 0x13
    ! w! @8 b- ^+ o0 a* B
  40. MODE_ABT .set 0x17
    ! {* n" s- h' K0 V& I
  41. MODE_UND .set 0x1B
    8 M6 K# R  r( ~
  42. MODE_SYS .set 0x1F
    - y8 _. ?" B. t2 h  c$ ~

  43. 5 x7 o3 ~& Q, N% a: f+ `
  44. I_F_BIT .set 0xC08 m, @1 O# @4 B
  45. 2 L/ H9 b4 k, g" C
  46. ;**************************** Code Seection ***********************************
    # C' Z* G3 t: l, I% }$ s# G
  47.         .text& j+ r# a/ v- m8 Z* g! F$ o0 p
  48. : W7 J' B+ Y5 b' o. t* V
  49. ;
    3 S$ m* b; l& D7 |3 [: }+ ~) t$ p
  50. ; This code is assembled for ARM instructions6 z* C5 t# q, K+ h/ R
  51. ;" B  r- j  C" t; R4 o
  52.         .state32+ n. E& D* a; |9 g" Y% A$ x8 B2 f

  53. 7 J4 U' Q; t( e$ T8 U+ q, j
  54. ;******************************************************************************: M; E6 B- e( N4 w2 H
  55. ;
    ( j2 M8 _  O$ Y3 M2 T  \
  56. ;******************************************************************************
    0 C3 O/ ]& v+ \) ?  E, F
  57. ;* A2 r0 D+ G2 s4 `2 \* q
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and/ i. D, C/ u! l$ f% f8 ^. r
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
    + q0 w; i8 u5 S& e# @
  60. ;  main() function.% X8 Z' ~5 o* `  p8 U! ]) R
  61. ;$ V; ]+ V! U; X  r. |- u
  62. Entry:
    - p$ A9 `" [, f6 R( u
  63. ;! p! F* `& o- B! A6 ?, d( H, z! I
  64. ; Set up the Stack for Undefined mode
    5 R7 ~7 j- {; q& m1 b
  65. ;
    1 J8 ~0 d8 t% ^% }, F8 Q4 r! c% p
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer* ]1 _6 l& r. A3 z3 L* Z* y5 a
  67.          SUB   r0, r0, #8
    9 |7 ?3 S! F- e2 D/ R$ j) o9 O
  68.          BIC   r0, r0, #7
    3 O8 K3 k1 |  U7 V$ I
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode
    ' g* r1 Q2 v6 s0 x
  70.          MOV   sp,r0                           ; write the stack pointer0 _+ S9 Q% `4 S: ?6 k
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space5 [& |  M" t# a1 L0 e0 s
  72. ;
      b% s* R) p+ @2 R
  73. ; Set up the Stack for abort mode2 F' R) n. t; i4 z% ?
  74. ;
    / F7 u8 }$ }7 n4 @3 a% ~
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode- M$ F3 e+ n+ o8 ?: w
  76.          MOV   sp, r0                          ; write the stack pointer$ U  j( X/ W8 `7 t& Q4 T% S) {
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space
      s( C, ?  g' n
  78. ;6 r- X- E2 X9 c: Q' T1 t& V' o
  79. ; Set up the Stack for FIQ mode
    + o: W5 E6 d6 R' N, L6 U* V
  80. ;
    ( Q9 U* V+ _% I' c% N* ~7 o5 G
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode7 h8 ]* y& K& v; \: b  r1 v
  82.          MOV   sp,r0                           ; write the stack pointer
    / `' [; W  o% ^* c
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space4 q* N! G0 b) ^: i1 Z
  84. ;7 |; n' t6 M- E/ C0 r9 ?. j
  85. ; Set up the Stack for IRQ mode( _7 |% z; O7 Y
  86. ;9 n2 \/ w/ b/ n& F, L% _
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode2 J3 F2 a0 M. l% B, q" a( B
  88.          MOV   sp,r0                           ; write the stack pointer
    7 ~% E) g: \8 J8 g  H6 s
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space
    1 X% ~) I: t. k2 G( h1 q& f
  90. ;1 d+ a4 K1 I9 m- z2 F1 b' ?
  91. ; Set up the Stack for SVC mode
    $ i0 s5 B- t& g' j) F# I; W* k
  92. ;
    . Y( v) W7 p  P8 F
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode1 G6 l1 p! K* I' O3 w
  94.          MOV   sp,r0                           ; write the stack pointer
    % Q% F/ M. \0 w* r9 A
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space! ?8 M6 n: @  i$ g
  96. ;, h. W& X1 n: Z$ W4 Q1 |
  97. ; Set up the Stack for USer/System mode8 p9 L0 r/ ]) L. a" K- {1 ~: l
  98. ;( K5 B! y0 \3 P+ u- U
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode' C& J8 ?1 D2 [7 O/ {! m4 }
  100.          MOV   sp,r0                           ; write the stack pointer8 m# \- I. C; P7 ?) J
  101.   @% R( f4 D  R2 d& e
  102. ;
    9 f+ x5 G) u6 B3 b$ k& l& }' M! x
  103. ; Clear the BSS section here
    * z5 K) W8 T6 s2 [4 N1 A+ l" j
  104. ;
    5 \! Z" S- J8 B: U1 J2 E
  105. Clear_Bss_Section:* ~  x& l" t8 r  k0 I

  106. / A$ a3 t; w& T
  107.          LDR   r0, _bss_start                 ; Start address of BSS
    & t: \) q0 l# W4 F% `4 y% t
  108.          LDR   r1, _bss_end                   ; End address of BSS. U8 S9 O+ c, W2 |/ o  q# t3 Y0 n
  109.          SUB   r1,r1,#4* i7 o# C7 G" A7 Z; A
  110.          MOV   r2, #0
    5 o4 Z4 J9 q' G# M) a* Y
  111. Loop:- o2 L& m" h3 G7 s
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS/ K8 y" {* J- ~5 d8 K
  113.          CMP   r0, r1/ k; T" o9 U! U5 g3 i) Z
  114.          BLE   Loop                            ; Clear till BSS end; N  a5 |4 X; v; _( E

  115. . O# F5 y4 J, g/ z( D3 i
  116.          BL    __TI_auto_init                  ; Call TI auto init$ ]+ S2 Y# Z2 r* X$ ^% N1 U4 ~
  117. 7 ^# {4 M8 `; f) y7 E- T
  118. ;
    6 d( k: o& @) I3 {* U  f
  119. ; Enter the start_boot function. The execution still happens in system mode1 ~: r/ I1 e+ x
  120. ;
      ^$ @, M* B5 S2 n9 y
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot
    . o: w% T2 H6 m
  122.          MOV   lr,pc                           ; Dummy return
      |+ O8 C- K8 v) O9 j
  123.          BX    r10                             ; Branch to start_boot
    ' k* c& f: |  w2 P
  124.          SUB   pc, pc, #0x08                   ; looping( Y2 ?  U) w5 j2 o9 K' e1 G- h

  125. 4 o( S) P+ w2 B$ {6 e
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    1 u7 E6 `! j2 J7 A/ d
  127. ;         BX   lr
    , O3 B' P& {) Y
  128. ;
    + i/ C$ S- B2 f( e  N  B) h/ O8 k( G$ u
  129. ; End of the file! _2 x- G2 J3 X* Q& I0 L0 Q6 Q8 `7 i
  130. ;
    4 n- W7 x8 U& r% l# W4 U7 N0 D
  131. / B1 ]  t0 e' X+ q3 D
  132. _stackptr:# l: N  R. ~  x" v; f* \6 ~" q
  133.     .word __STACK_END
    & [) E( n# Z. Z  U3 X
  134. _bss_start:
    / i2 z9 W" i+ v. a
  135.     .word bss_start
    4 y2 |* q4 ~: |  |
  136. _bss_end:
    8 J* I3 m* ^9 {  F# _. a
  137.     .word bss_end
    4 t- _" q4 V0 z
  138. _start_boot:/ K; M+ u: H0 C) l) U
  139.     .word start_boot2 x7 C5 Z$ i( u, L' B7 z" Q. ?
  140. _data_auto_init:
    " V/ F, y! p1 r. H: R# w
  141.     .word __TI_auto_init
    7 ~) L* E: A. y4 z+ b& Q
  142.          .end& N' h, t, o9 B1 I( f
  143.     ! p2 k, h8 D$ T4 r% x" f6 M4 }

  144. . L, @6 b3 g( e* y. j8 }

  145. 4 X) s4 `: k6 P/ Y/ n
复制代码
5 W' n& g; I7 }1 _& |

6 p! N' l% ?% E$ B9 n% ^. @6 l& i! I- s5 j! l* E

  C  i8 |4 a: L$ ?4 D
% x! w, H' U+ v5 ^* F+ J
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:590 H, ~, s; O& N* p7 A0 |5 s9 C/ U
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
: y; |) ~& e5 [8 y; l) l2 RDSP CPU 不存在这个问题& M6 A8 Q5 i$ f. l+ r4 q
...
1 H. [* F1 x1 L( I0 ~  a
,高手~~~# b; G# d- B) @6 ]7 j: F: ?0 F# _
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x))): H1 {* u* ?0 @2 ?! T% Q+ Z% e
  2. 8 t" Q+ J& A$ O% s0 x% S4 b9 ?6 y- l
  3. int main(void) {, P! F7 P" e) Q5 g8 O* H
  4.         HWREG(0x01C14124)=0x88800800;
    8 @( ?  Q7 D, {, d7 w# J/ A2 r
  5.         return 0;. ]3 k# a4 Q" g+ }
  6. }" N7 x, J3 Y0 r& W+ @
复制代码

' J2 F2 z4 ~/ Z2 k; K这个单步调试的时候就没问题,能够改变内存值。
* ~1 \, ]# C5 }4 T# X再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!! C% a& v, i( X) a- c

  V: f! u! {" i4 h: S7 I, T8 R那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?. k/ p. O5 o; x5 g
还是我应该找你们GPIO_LED那个程序调用函数的源代码?; \8 I9 B' m; r& ~1 R/ \

点评

在 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
% F2 y, P' K5 P- k' t$ T会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...

. C# V9 ]( V! a1 z3 \% K; B: l
( J1 f! T4 M3 I4 R# ]6 J& F
0 j2 a+ ^+ N* N' H5 j- \  S9 T( q2 RARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
2 S, Z6 t1 n% Z: K! g0 _DSP CPU 不存在这个问题
2 A2 X9 x( e. P1 l( o8 ~

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09) n! r  @* R' R) n
可以读写的,应该是你的代码问题
" x. P+ ]2 ?* y可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

* K% U- s6 `' V* [+ S& I+ B; o$ @会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[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:095 e, T: d6 s$ k$ b  x
可以读写的,应该是你的代码问题! {* k: t# l! x( X' F+ l" v
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

' E- R3 ]% C: ?8 H$ [: E& D5 e你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库
8 ?1 {- G! X" g' k函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    ! f5 a/ G1 u4 a$ B# P9 w# |

  2. 3 Z6 B8 B5 I2 r# i/ E$ W( m4 ^
  3. int main(void) {
    + Z( U. r! X6 m1 ?1 X
  4.         HWREG(0x01C14124)=0x88800800;6 B8 n& U3 n7 [/ A/ R- S
  5.         return 0;
    % j  u3 s  S" E, f
  6. }
    0 Q4 w. Y5 i1 I7 b
复制代码
* b1 s% d5 \9 {  U/ q
# A1 f" L/ [" |$ d5 f/ B6 M
主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变
/ n4 Y, k! b9 u! `6 J) u
# P7 W/ k3 s$ y. S- b$ o/ c$ K  }( s1 T* c  A8 j7 N7 A4 T
然后我把程序变成如下形式:, q6 b5 }7 {+ ~7 z# x
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))' T2 ~# J5 Z5 m4 d2 E: `+ l

  2. 7 A7 Q( x- z. k- A% d
  3. int main(void) {" K7 H, B9 f0 ^& `3 h) ]7 F1 ^
  4.         unsigned int temp;7 o/ G% V) L! @- \0 u9 P0 ~* F
  5.         HWREG(0x01C14124)=0x88800800;
    1 r( \8 [) U3 G, {3 Z' X' I% a8 l
  6.         temp=HWREG(0x01C14124);4 z/ t4 {" G2 S* n8 i/ {) d% Y, u. F) {
  7.         return 0;
    . B  ?! @1 `' S. l3 w" B
  8. }, B6 \7 e3 j: R8 p3 G3 H) f- a: d- t
复制代码
+ m) O/ l2 E% I2 E4 J" j  j, d

  B6 @$ y1 b6 h  `/ Y! J运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变( v1 i' `8 s- ]6 w
通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000
5 Q% H- e4 x5 ?- [然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题
9 J) ^9 ?& h" @3 _1 I% B2 M5 O; `# Y, i! g! d" Q/ e& W0 s
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:09/ s# T& Q- a' Y. r) `$ d: e3 z
可以读写的,应该是你的代码问题
! [# v# x, i' t) Z6 l9 X- q可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
+ r4 J% q& W+ [" W
首先,谢谢你的回复!6 Q" }- K. w0 j# A1 R1 J

3 D  J% s( l6 m& \  q你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;8 w* g6 f7 {) W4 f/ k- x
第二句直接对地址写数据,有什么不对吗?" N* v3 c. {  w5 L# W+ w; H
; m7 m0 D% Y9 k# ^: M4 r! E' J
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?  R, L* d& ~' M' U/ L1 t# M4 Z$ ^

2 {" G4 ?, Q. T; U* S0 A因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验
6 |$ r* @  [& t* E9 T实验一:8 K0 @5 b- @2 u" b
在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句4 m/ C9 z  F7 e5 T3 w" h4 W

0 b; L% d9 A" x- H2 n/ A                HWREG(0x01E26010)=0xFFFFFFD8;" ~$ M) H& U" S/ m
                HWREG(0x01E26010)=0xFFFFFFFF;
2 x  M8 [0 ]. {1 [3 Y单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)
. m' S% W! x1 k6 Z8 f  G若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。' J" f8 b; x, J2 K9 `3 G% M! a
4 ~3 S9 [, R' c) s
实验二:
: g% f" x: a& C* ]3 ?+ a- `若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句' N6 o* O( `( f# K' E) C6 n; y

, x$ ]# `% Y) M% g% L                 value1=HWREG(0x01C14124);
* G7 D& G8 T4 F! b6 p
$ K. F! N' \" R" J通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 11:46 , Processed in 0.051143 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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