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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑
5 x0 g& ^2 B4 D& Y6 z3 |# v& Y9 T0 e% o. y* w2 O9 _
我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器
+ k) F  Q' M# ^# h3 N; t  c& V- r0 \. I- A- Z' h
# R$ `0 ^: D+ }9 u. r  [: M, P* d
我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:5 `) c  }5 k* S% A- }$ ~8 F

2 }) T8 W1 {6 s- p* a* A
) S- B7 y! {$ D1 N1 s9 B; z7 eint main(void) {4 G8 L9 ]; @( a: N' _
        
) \) {" t( \1 J        //使能GPIO
5 o) L7 [- s3 V2 O) D- K) V/ X        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
0 H( S; ?/ j3 ]% {  d" S0 }, P                            PSC_MDCTL_NEXT_ENABLE);+ ]( _, i7 V2 x- B' W
4 U8 P, R/ T0 B5 ^% |3 j4 T
        HWREG(0x01C14124)=0x88800800;* {. b. F) k& m& {  B" w
}
5 U, K3 }- U2 E! j. g( J# |  C% O. a' y: Z
单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)4 l- u' D0 s6 S
运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)
4 s1 n2 S8 K0 F  J! O: V6 J# y% A6 }& H+ C" @; {) ]" n
我想问一下,为什么我管脚设置不成功???
- n6 z9 M( o1 O: c+ Y/ M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:50- m& ^5 [3 R( {( k* I/ t  L+ s
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
& g9 I0 i5 h8 }! O3 z/* 重新配置程序入口点 */
& w9 j9 d2 f* G6 z+ j% T2 a: x-e Entry这是一 ...
) p; ~; Z  C' A, R3 n
你贴的代码太复杂了,我得慢慢看,慢慢吸收~/ w" T- ?4 H" s/ X" C  a

2 u. P& u; Y1 E3 l, K+ V' S) z" t不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:34$ L* }$ r; U( _, ~
,高手~~~
; i! A0 m  U. |# u. s& ?, c正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...
  h. X* r" m7 u0 x" }6 ]8 B
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
( {! t+ o: q5 b, v( _$ q/* 重新配置程序入口点 */
  B1 @& L/ W0 Y8 F4 ^-e Entry
  1. /****************************************************************************/
    5 |7 E" k1 B! N; g0 A0 _
  2. /*                                                                          */
    ' _; c# S1 `7 D0 U: A, ^
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */7 u) R) r# h, O# {( J8 w9 p  }
  4. /*                                                                          */4 u. x+ K& O" f) _7 l$ E
  5. /*              2015年04月20日                                              */
    2 Y3 p; t6 w1 s
  6. /*                                                                          */
    * s6 W1 k0 o  X9 }
  7. /****************************************************************************/
    9 W" j) x! @! U1 v
  8. /* 堆栈 */
    ' f# s5 U5 K: n% s
  9. -stack  0x80002 _7 _- D/ `0 q9 l& [4 H# k$ B
  10. -heap   0x2000) z" V- {1 [" P
  11. 7 y) }3 h! x$ @- A8 \/ M
  12. /* 重新配置程序入口点 */
    8 Z. }7 F2 g+ b# G/ @
  13. -e Entry" |6 E. N0 H$ z$ e5 Q6 e
  14. # j. [, }6 Z+ Z. Q$ `
  15. MEMORY; `7 K& w0 I- v9 s) ~% z$ F2 R
  16. {
    ( x9 G( L! [! n: M+ ^1 q' E! Z
  17. #ifdef DSP_CORE
    , N4 M% W+ `$ T* V& n6 b9 B
  18. /****************************************************************************/
    ' z1 @  D: _" {& G2 V7 B3 a
  19. /*                                                                          */
    & j$ V( v, r- I
  20. /*              DSP 专有内存区域                                            */8 O! b' _2 z( a6 F2 E* ?. q# l+ q
  21. /*                                                                          */0 m+ l% e2 ?- k3 T& P& Y, L
  22. /****************************************************************************/' q( ]5 S% g6 D1 L! j
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */
    + w0 l' s% W6 p8 H4 Q9 f8 q: I) E
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */
    1 v0 ?7 W$ c1 N# }6 R# c
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */
      P  ~* M% @4 L4 B# s- h
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */  q6 X1 O  t6 k
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式" L: V4 X9 Q' @) t) d5 }" w* M9 o
% P5 w) n4 k8 j6 N" V; F2 G
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
. E3 I( b' w) m/ l" _
  1. ;******************************************************************************' i& W* G0 C- p: T& e
  2. ;, H3 w' l! x6 @9 j+ r
  3. ; init.asm - Init code routines
    / t8 q. h: W+ ?/ K
  4. ;
    3 }; k; H0 k0 x; L: u$ }- C
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/$ O8 i7 K6 S4 h
  6. ; All rights reserved./ o5 B& @* b3 ^( ~
  7. ;  R* t  q: i. a8 @& w* s
  8. ;******************************************************************************5 Y8 r( S5 z1 r- t/ |; L
  9. ;****************************** Global Symbols*******************************: Q$ [; b7 R5 n1 [5 z% \" e4 N, r
  10.         .global Entry% @3 G9 f) c' F1 z, @" v; X
  11.         .global start_boot
    : A* Y$ ]  j, F1 Q
  12.         .global __TI_auto_init" ~6 |! e- _% P) b! c) A! D

  13. 8 E, X1 e" ^9 |3 K$ o+ t3 k, J
  14.         .ref __stack
    0 G& U: W5 H) z/ j$ S
  15.         .ref __STACK_END! a- N$ k2 N. n0 e  `6 b: A
  16.         .ref bss_start  k7 t6 G3 U; |( C6 Q
  17.         .ref bss_end/ ^% x- _2 l+ D, u0 u
  18.         .ref start_boot7 L# P# f; t# V/ E
  19. * @% f  D* r/ D3 d8 z' n% M9 l8 B
  20. ;************************ Internal Definitions ******************************! F- F% }( h, G3 v( x! p) u- ~
  21. ;3 p. h5 B4 y& p' J. G8 L; `
  22. ; Define the stack sizes for different modes. The user/system mode will use, J+ D  ]5 z/ u' n  p
  23. ; the rest of the total stack size
    5 P0 j) w  R4 T
  24. ;# T( l# i! J7 j& b+ C+ F
  25. * {9 O* ]0 t* n$ u, w8 O" T
  26. UND_STACK_SIZE .set 0x80 c$ H: {7 T  A2 A" y
  27. ABT_STACK_SIZE .set 0x84 d3 _- ^" v6 E
  28. FIQ_STACK_SIZE .set 0x8
    ) v1 ^& m! G/ b0 _4 M) x
  29. IRQ_STACK_SIZE .set 0x5004 `; ^# N+ M6 f3 z+ V0 R
  30. SVC_STACK_SIZE .set 0x87 j- P. U: n( A! Z2 h4 q0 O* ~2 |

  31. , I- k+ y, j: n6 _
  32. ;" t8 N; g9 s6 p; B4 ~( M
  33. ; to set the mode bits in CPSR for different modes
    % P0 @+ `7 Z2 R& _
  34. ;  p1 U2 q- G7 n/ F, V/ v; Y
  35. . L; y& R' X: a/ a" E  u
  36. MODE_USR .set 0x10
    4 t0 ~% c/ c# A) {- ^& U4 X
  37. MODE_FIQ .set 0x11% E. l0 C7 ]( c
  38. MODE_IRQ .set 0x12# i7 u8 z' h% K" u" C5 K; ]' B
  39. MODE_SVC .set 0x13: f( |; W2 e) U" Z
  40. MODE_ABT .set 0x17! C& V7 V) Z& s+ @# |4 K. q
  41. MODE_UND .set 0x1B
    ) l3 r) o0 i3 ]  B+ _* A
  42. MODE_SYS .set 0x1F# M& P( @5 R: d- i

  43. ' J8 G7 @' O2 k- H5 c& y! d2 e
  44. I_F_BIT .set 0xC0
    3 o4 s. {4 h3 S3 Z8 Q6 V* l" {
  45. 8 u8 `/ l8 L5 B% I5 x2 V" x& \2 b
  46. ;**************************** Code Seection ***********************************  k; P% N: V4 V7 I
  47.         .text
    ' q% ?3 r( a- c
  48. * W: P* K4 j" E! \8 C6 s
  49. ;* G- ^  V; j3 ~# I
  50. ; This code is assembled for ARM instructions0 {( R/ w0 P3 v- G' i* e& o* o( f
  51. ;! K9 h5 I4 O2 p( Y
  52.         .state323 y1 F4 {* D1 h# k
  53.   @5 d) S/ Q5 n2 J1 ]9 ~- ]
  54. ;******************************************************************************5 T- ]7 @( o- a8 _
  55. ;  M2 a4 I4 c6 ^9 P
  56. ;******************************************************************************
    ) S; p  K1 i0 f  [, F; a# f* V
  57. ;  J% z! [  F8 j
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and% C( @3 }0 K2 ]% Q7 Z5 o
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
    - O' b! l/ C3 I
  60. ;  main() function.
    7 H6 X. K; ~( b( `
  61. ;
    ; S1 ]. Q' e+ f9 }6 w/ z  ?  c# o" w
  62. Entry:& [- F8 v! Z* v1 \: t
  63. ;
    - m3 S$ J/ |" Q5 m: u  d" ?5 _* @
  64. ; Set up the Stack for Undefined mode* A3 Z) y9 Z8 ~. }- _
  65. ;4 |( d9 P. u. ~
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer" Z/ Q' W$ O& G$ Y
  67.          SUB   r0, r0, #8" M4 f4 G! o+ S
  68.          BIC   r0, r0, #7& `3 \) b, t8 Y3 U' I
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode+ c" r& h; |. s! W/ a+ g
  70.          MOV   sp,r0                           ; write the stack pointer
    + a& z3 Q. \  a! J# F) Y9 `- o
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space
    $ {; R: j5 i' H& H' `" B1 h) o6 B; a
  72. ;
    8 F" _4 L& y% G! W  G
  73. ; Set up the Stack for abort mode
    & N* {: a% `) w. N, D0 h
  74. ;
    : E* O2 h: @# Q6 X( Q: w
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode
    ; ?; Z# L- k4 D/ n
  76.          MOV   sp, r0                          ; write the stack pointer4 n+ ?' g3 [/ o4 F8 J
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space
    - }* @% a" T& f6 p
  78. ;& B- N: d+ z; B
  79. ; Set up the Stack for FIQ mode
    3 w" x0 J9 g# s' r
  80. ;7 Z( V' ?9 O( }6 ?& }# r7 i! x
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode
    0 X! T/ I% E) z& o
  82.          MOV   sp,r0                           ; write the stack pointer: x) o1 ?# }; f
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space
    ( R/ b! s, {, E# m% P) ~3 k) Z, d9 s' v
  84. ;
    6 w$ D+ K* e* ]- `
  85. ; Set up the Stack for IRQ mode1 ~3 ?2 }% c- k% [  w; _- F
  86. ;
    7 f9 D2 T# d% Y- C
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode9 P* `9 ~4 ]" F" j( O
  88.          MOV   sp,r0                           ; write the stack pointer
    9 G: \/ Y7 K* I2 s
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space2 N2 h0 P8 M# [2 f5 r$ [
  90. ;; a$ L+ b8 N$ S* F/ K
  91. ; Set up the Stack for SVC mode
    ( J4 z) G5 _% ~! i3 C9 ~" r, I
  92. ;3 `! @5 X5 J3 ~( O4 b
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    : r- `! \& K4 L, ~0 W1 J% h
  94.          MOV   sp,r0                           ; write the stack pointer
    + p" k9 R* |6 V% a
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space
    % E: n0 ~& i( b: H- ?  p. q
  96. ;
    " @7 u) I( U3 G* y2 o9 v2 B* K( D
  97. ; Set up the Stack for USer/System mode' u2 n: ]4 v: `* d3 p
  98. ;/ _1 f: D7 B% r7 Y
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode& w1 w" m7 s. L$ o3 P
  100.          MOV   sp,r0                           ; write the stack pointer
    $ U, t/ k+ o( H! E: p

  101. 8 p  E; B- v2 e  K
  102. ;  w& |" L- \$ a- v# |
  103. ; Clear the BSS section here
    ) H$ _4 r6 d' O9 _: i* s- P1 o
  104. ;
    & g8 {! f( c# _* d" D& E
  105. Clear_Bss_Section:
    8 \+ A7 U" K9 Z+ l. A% O3 ?
  106. * d' r5 G) L1 Q2 e# \! h
  107.          LDR   r0, _bss_start                 ; Start address of BSS
    5 E, {3 l7 U% x* G, M
  108.          LDR   r1, _bss_end                   ; End address of BSS
    7 [7 @! t  T$ a3 p5 }
  109.          SUB   r1,r1,#4
    / Y  f' ~5 @; K2 Q% Y6 P! a
  110.          MOV   r2, #0
    0 A; L- i* [6 E' `) ~
  111. Loop:
    1 ?0 Y  J% [0 R6 p  h5 O* Z+ p
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS
    0 t4 |5 U7 ?  X( ~7 H- _% l. c
  113.          CMP   r0, r1
    5 N# v. r# {! u9 n" Z, N" ^5 b( }
  114.          BLE   Loop                            ; Clear till BSS end
    4 F; \: t' ~+ h' r4 e3 @1 b
  115. # Y9 x: K3 E0 j0 L
  116.          BL    __TI_auto_init                  ; Call TI auto init5 w. E4 Y2 s$ O( }6 c, F

  117. ! e  N1 \& g5 m8 [$ p
  118. ;& R9 {5 G! ?9 I! [' W
  119. ; Enter the start_boot function. The execution still happens in system mode" V4 V( D4 c! o/ u! c$ Y2 }8 S
  120. ;( T( S+ j2 r. M3 C
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot
    1 @9 t  F1 ?( W
  122.          MOV   lr,pc                           ; Dummy return . |& v& B% j6 Z9 }, L& P! @
  123.          BX    r10                             ; Branch to start_boot
    # p& d, D5 D9 p- _" B
  124.          SUB   pc, pc, #0x08                   ; looping0 O' H5 X* x9 ~% f5 ?

  125. - O  {# f. n. Q1 H2 r/ @4 a
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    8 b  E' l4 ?4 D' l
  127. ;         BX   lr  S. V0 v' o  U2 B) U, h5 Y: ~  k
  128. ;
    3 \+ B) R5 _2 D' E" E9 R% ^
  129. ; End of the file
    8 T! W1 r5 ?( d2 R! s; x: n, L1 r
  130. ;
    " m, o* Z+ m, s1 h9 F+ _
  131. ) q  e; Z, J$ L' _3 C  w
  132. _stackptr:
    & M7 u0 O2 l  q8 x
  133.     .word __STACK_END
    * t4 `, ]2 l/ n* d5 Q& s
  134. _bss_start:
    ( n/ z6 R4 {  X  N
  135.     .word bss_start% R0 L/ C4 ?3 J% k
  136. _bss_end:
    0 q! L- _1 |! K9 ^) u% l$ S
  137.     .word bss_end
    " y6 p! I# h' b% k0 w/ [8 }! n) `
  138. _start_boot:
    1 y4 a3 B% O( A6 z& X
  139.     .word start_boot
    7 b7 L6 [7 {% w% W
  140. _data_auto_init:! i2 p5 \2 U+ i0 G1 v3 B
  141.     .word __TI_auto_init/ l$ p& R) q$ H
  142.          .end8 [8 Z7 j& r/ G# B. t/ N: d  d" ?4 ?
  143.     $ a/ ^, d; s/ k3 J4 t
  144. : p+ x5 ?) @6 u( J/ E* g

  145. ) n0 i$ ?" g  F5 v
复制代码

: l" W' ^3 `( K0 w6 `. s0 K5 Q% W$ r5 J4 o! j) q$ u

, K5 n5 N" t6 W1 ~1 f# q
6 F; g0 o: a6 C. C% z1 z: q7 d9 E2 H' h8 G& E6 _1 Q
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:59& `& ]- @! @, i( w! ?
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式2 O* V1 Z4 y( ]* t; Q+ k. l9 Y
DSP CPU 不存在这个问题3 u% y, Z9 p( Q1 G( N1 z
...

/ F) E- l" g) B) ]" N0 x,高手~~~4 e5 T# r) G; }) ^
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    " y! i- r3 w" J6 j  b+ c2 ?5 @

  2. / z7 c7 N' q& m4 O& E
  3. int main(void) {
    3 G* D! I: Q5 Q* Q2 b6 [3 k
  4.         HWREG(0x01C14124)=0x88800800;* ^( i2 B6 ]* I$ v
  5.         return 0;* T* F* u+ o& N' Y  `" T3 L
  6. }
    * c  f9 {6 Q3 m8 t  Q
复制代码

4 ^: ^. E# k  J  E" h3 i/ H这个单步调试的时候就没问题,能够改变内存值。* X: ?) f8 T* `! X2 e
再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!
, E' P8 ]! C7 e* H8 g$ Q
% v! G3 \, o* G/ G那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?% m: J& p& a$ D& _3 B4 K  D
还是我应该找你们GPIO_LED那个程序调用函数的源代码?9 u6 Y  K2 z! T6 W2 O) U

点评

在 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:401 ]5 \- E1 N( B9 |! f7 _, Z4 v
会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...

7 _3 Y& o; e- Q& e0 w4 ?( W+ u; ~$ h( ?& L7 i' s& j. l! Y  S

# S6 r* q' K; XARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
5 a9 @4 n0 C! {7 }DSP CPU 不存在这个问题
1 q1 @# ^( g1 l- M. z! M

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09' L7 A2 V: s& h0 S/ u. p, q
可以读写的,应该是你的代码问题
! v  L1 ?( _% }8 \可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

8 C2 Z$ I! R4 r) Q, ?' x7 B会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[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- B- J4 e/ x- x
可以读写的,应该是你的代码问题
* V/ \) K$ X; U可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
& I: p+ w6 R3 k" a5 {
你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库) I% b2 E3 f5 H7 B0 L1 U( R$ ^; x
函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))( \: U8 k, r, w2 ^/ t
  2. 3 _' b  u. z+ @
  3. int main(void) {
    % |7 U8 `# f7 l0 L
  4.         HWREG(0x01C14124)=0x88800800;+ o! [  `8 z9 w  a
  5.         return 0;
      g% |2 z: v. G0 b- u. K( D1 q' \
  6. }$ c3 b; F# j5 M' o: Z
复制代码

. P  o8 N8 K2 S5 N
" H7 _5 n( s$ s4 ~) M1 S主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变' L% {" v  _$ Z) z7 h
9 ~4 H2 i* Z: _% S( T0 z0 W

) e2 I" \: v/ c6 u( q3 Z) S' |然后我把程序变成如下形式:) C( \. w' j$ t* ?# V
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    / K! c: o% T, f& {

  2. 7 h( P2 ]3 g. l& O3 e
  3. int main(void) {& x1 q* g- v' c9 e5 `9 q! K3 B
  4.         unsigned int temp;/ m( D2 m5 _7 s+ D9 I5 z0 w. F
  5.         HWREG(0x01C14124)=0x88800800;, h# M- ]; Y$ G) q
  6.         temp=HWREG(0x01C14124);- e$ I& Z8 ?& D. n/ x2 ?
  7.         return 0;
    & Z% O7 J$ g1 W* {8 V* ?3 T, T
  8. }
    0 N- W1 N/ u7 n2 K
复制代码

: q! M! k: r. Z4 w$ k- A
: m; W. V3 v& u8 t6 Y: ?% {+ I运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变! W& A6 T4 j/ M1 `, ^& D4 p
通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000+ B( I1 ?- ?) ]% h5 C
然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题7 e: y& ?7 ^8 r+ T* {
6 A& D! g( U) }
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:09$ r  S' b( S7 x" A: R, X' B
可以读写的,应该是你的代码问题
: [6 {0 F( H, U$ O1 _$ t4 v可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

& m0 P1 ?# g/ W" k/ \! S首先,谢谢你的回复!$ ~9 g% _3 P  K6 B7 s) [. _

5 x" Y$ }0 Q! k. i) U6 K你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
( L+ V! L& q* f第二句直接对地址写数据,有什么不对吗?* E" Q/ f  \" i0 c! G+ ^4 D
( `0 N& W) H, m/ p# {
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?* I8 Y& M3 Z; |( Q5 A1 k

2 C( G7 F/ Z9 I5 Y8 N因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
板凳
发表于 2017-4-21 09:09:04 | 只看该作者
可以读写的,应该是你的代码问题2 `) J, U! ?. o& W- [: N( C
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验; n4 w1 |# [+ W7 X8 M7 r
实验一:0 i  h( e5 b' X- ^
在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句+ n# P; r0 E& d

0 \* M9 z- T  R7 r3 G7 ~6 N                HWREG(0x01E26010)=0xFFFFFFD8;! p* \9 ?) z/ V7 c# z5 d2 t/ l+ F4 R
                HWREG(0x01E26010)=0xFFFFFFFF;
: O" g4 u- i$ ^( F单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)
6 q4 s. T/ e5 l3 a' N7 P若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。' R4 u$ l1 f% o7 c
' X3 N" {7 w4 u- R4 \
实验二:
2 z) X$ a7 c, }0 u* `若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
) ^; x/ r7 d8 D4 Q0 C7 z% d! I) Z1 o3 i" ^8 a
                value1=HWREG(0x01C14124);
8 k/ B3 q! p% l$ q2 g4 _9 o" |* A: l( b/ ]3 G3 |% C
通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 22:03 , Processed in 0.050397 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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