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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑
0 z. |0 z2 g. p0 w: a0 a+ g, O3 l+ o: x# ~3 R/ e- Q
我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器$ m) l+ W; O  x2 v

0 G* I' f2 U8 \2 K+ \' @+ @0 Q5 t2 }" q4 M/ l8 P, B# B3 h
我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:% j; |5 |7 x" F0 \" n
1 ~2 Z/ r5 `+ F7 N) c9 \

8 X5 ^, e6 z+ }int main(void) {
5 Y+ w" F, d; E        
8 P. b' }/ g( K0 p: X7 J        //使能GPIO
% u* q- v2 b+ \2 }        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
/ i* D% ^8 a' @                            PSC_MDCTL_NEXT_ENABLE);
4 P& h5 A* f% t& X8 h8 Y$ O
9 ^% C, y/ ?" R, ~- J* w" A' ]* ~        HWREG(0x01C14124)=0x88800800;( y* ?% W8 m* M* R2 d" r
}
( N& v$ |$ N1 ?6 Q, Y% D7 K- s
, p0 J8 F* q9 N单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)
& R" S0 L: f( b) ]运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)1 B8 b6 V8 v( J% Q

3 R0 z- m0 i; K: _我想问一下,为什么我管脚设置不成功???
5 U, W9 B6 e" P3 E0 [. K% }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:50
0 l+ ~" r" y. g# M在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句  z6 N. t6 V/ x3 H  R! i2 b. z
/* 重新配置程序入口点 */0 `! z' c1 z5 c) v
-e Entry这是一 ...
9 m# v; h. M) V9 \! X/ ^$ F
你贴的代码太复杂了,我得慢慢看,慢慢吸收~
- O$ d0 h  k9 Y# o. p/ U
8 Q/ N. N% h. C5 c  G不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:34, b+ c$ b1 Y' r( W
,高手~~~
, C9 G% m6 |' V" K/ i正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...
+ p9 y: E  r6 o6 @4 q
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
4 P- S+ f: m( \/ b6 x/* 重新配置程序入口点 */
+ P: @: E4 r/ l) W0 D& j- e-e Entry
  1. /****************************************************************************/
    2 p  X( }+ c. m* _2 m. O- u2 s$ ^2 l
  2. /*                                                                          */
    # f( R$ V0 R  W; Y: p* j/ e' X; N6 N
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */) v7 B; A1 \8 D8 q, P
  4. /*                                                                          */
    1 y( ~% I4 Q* \# Z
  5. /*              2015年04月20日                                              */! k# F5 n+ Z$ z$ R$ t7 k7 d
  6. /*                                                                          */5 W3 y/ I' Z' @; T. y/ `$ }+ ]. E
  7. /****************************************************************************/  _' T8 E0 [, S3 p2 X# [
  8. /* 堆栈 */
    ' K3 ^; _, h1 ^- c8 n& m+ L; X
  9. -stack  0x8000" h" X$ Y8 b  Q2 H
  10. -heap   0x2000
    ; p1 p0 T9 Y& D5 ^4 C- V* c

  11. 2 P/ R$ h8 c0 ?: I  b: N: E2 F
  12. /* 重新配置程序入口点 */
    % o% K, S& B. c' r( k* E
  13. -e Entry5 H0 I, s! i0 C, e+ h% W) v0 G7 R7 q

  14. 9 P, l9 x! Y1 g; ]: u* I* D
  15. MEMORY# ?/ Q  x; K8 ~8 f/ R
  16. {
    7 M9 X7 f# q* S& X7 L
  17. #ifdef DSP_CORE
    9 Q! D2 Z, G3 D% O6 P
  18. /****************************************************************************/
    + s' t4 H- u2 B$ L  _
  19. /*                                                                          */. K6 ^& L- e, K& u/ w" g
  20. /*              DSP 专有内存区域                                            */
    + i$ ~9 z! y. u6 K6 b
  21. /*                                                                          */
    , ^/ k; \  R4 H
  22. /****************************************************************************/
    + K/ [& R4 m4 Z6 e1 B1 l
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */( W+ L7 Y% }3 ?, T0 ^6 P
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */
    ( J3 c) f+ C* z0 \/ s/ I, X
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */# |& l- x/ B3 T# L( W5 l
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */
    0 b( Z$ p  o1 v( j; M6 Z' x' a& g
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式6 k5 V% Z/ l7 e6 \, S# r) c- b+ v
9 X5 ~; x% ~! ?
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
9 C9 ?7 B( ?4 Y1 A
  1. ;******************************************************************************
    # S6 \, j+ e( H( T* |
  2. ;, Q4 f+ P9 A3 J8 p
  3. ; init.asm - Init code routines
    * Z% [: ^7 z3 ]+ p$ x' c, S, a6 X
  4. ;2 b$ a* F2 L" U9 P" k9 Q1 `' n
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
    / y3 M( c, G6 G8 e5 D" {4 z
  6. ; All rights reserved.
    7 _. r4 C3 l3 B$ e- W+ K+ N& u" |
  7. ;
    + [0 x: P) w/ i" z! B9 h
  8. ;******************************************************************************1 h* W) }% n" h
  9. ;****************************** Global Symbols*******************************% Y' a0 u$ q1 K6 w9 z
  10.         .global Entry
    , }% \9 M5 I7 b, P
  11.         .global start_boot
    8 y5 i" B4 x* c8 D" ]6 U& Y
  12.         .global __TI_auto_init
    ; ?! N2 J& m  G! H

  13. 8 g+ T( i1 u, J4 P2 _8 \+ A
  14.         .ref __stack8 y. d, F% ^' A. {. f6 Y
  15.         .ref __STACK_END
    ( K0 R* W$ ^# D2 R- u
  16.         .ref bss_start+ k3 R5 V2 K6 V) R) ~0 M
  17.         .ref bss_end9 w: Z& i6 u  K/ r4 `
  18.         .ref start_boot& J! h6 ~( x2 j) A& a4 ]! P0 x
  19. & e7 S( d* ^" N5 H" k
  20. ;************************ Internal Definitions ******************************# n$ E: z" O* M
  21. ;
    7 P, S. ?7 u, T
  22. ; Define the stack sizes for different modes. The user/system mode will use
    4 R. w1 \( i! M9 w. P
  23. ; the rest of the total stack size
    8 A4 T9 `! m- u) P# C
  24. ;% F. y, M* s: w, o
  25. 9 |3 k  f/ w* n* v/ f1 A
  26. UND_STACK_SIZE .set 0x86 P! t- V" n: g% x7 h2 d- r
  27. ABT_STACK_SIZE .set 0x8# w( u0 U- X4 g* H# N' M# G
  28. FIQ_STACK_SIZE .set 0x8$ V( ~8 M6 q4 n! G5 O6 r% K3 r7 J
  29. IRQ_STACK_SIZE .set 0x500$ P( R; x7 O6 c! v9 O
  30. SVC_STACK_SIZE .set 0x81 @3 M* a# p$ m; h1 J% h9 Y
  31. 6 G& O$ Q1 _2 d; _+ Y
  32. ;
    . S2 z2 n+ _1 q0 t' x# ^
  33. ; to set the mode bits in CPSR for different modes
    # K3 f+ H1 \. C
  34. ;: Y0 Q# y, j2 [& m
  35. 8 c% ?( R4 \, r9 J
  36. MODE_USR .set 0x10
    2 I0 d3 o1 e! ]" C: H
  37. MODE_FIQ .set 0x11
    ) F: ]7 g( ]; e
  38. MODE_IRQ .set 0x123 l' B. t9 a! T; R8 C
  39. MODE_SVC .set 0x13
    : t+ f9 A/ \% t4 a# T' x* K& u
  40. MODE_ABT .set 0x177 h! g* P% d4 s, T
  41. MODE_UND .set 0x1B
    : f6 D/ ^( i5 P$ w0 J, h
  42. MODE_SYS .set 0x1F. U# Y2 z( R' C* G
  43. 5 U, M' f) B5 r+ a% Y8 \2 \
  44. I_F_BIT .set 0xC03 k$ j, E2 S. H- j' y( A5 H7 N
  45. ; Q, ?& j* k  V
  46. ;**************************** Code Seection ***********************************
    % r- ]0 w7 [$ c" `- I# A
  47.         .text
    & L. G9 o; A) A8 a! v" \9 }, r

  48. ; z' D/ f8 Q7 l3 X: j
  49. ;, U0 m/ e0 ]6 i( B% a( f
  50. ; This code is assembled for ARM instructions  X$ N- @! q) p5 C
  51. ;
    3 }4 p' Y+ \4 @& _
  52.         .state32
    * a- g3 O, p$ h) _0 f3 p
  53. ( J+ h4 D, X( r" i
  54. ;******************************************************************************1 s4 @4 }* v- r# W; |  H. z
  55. ;& h2 L$ I% C0 R; k  c0 ^
  56. ;******************************************************************************
    7 Y5 w; u, T0 K- z" Y
  57. ;
    + K3 y$ C# C7 @5 |
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and% [1 K1 U2 U* R7 o/ G: ~0 Y& d
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
      h, q1 _, |  [3 ~4 a) N
  60. ;  main() function.; }9 Y- [7 Y/ T3 V% Q2 I
  61. ;& r3 \1 f8 b6 ~: m: y
  62. Entry:
    , d% x! \  n7 k
  63. ;
    : V( Y& V, Q, T' y4 Y3 w
  64. ; Set up the Stack for Undefined mode
    ' K6 Z0 y: q! `! k5 ?, c
  65. ;
      e, Q$ I& H' U3 W; m
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer6 n  B6 [5 i) U
  67.          SUB   r0, r0, #8
    : K4 ?" N; e8 }5 M$ f+ D
  68.          BIC   r0, r0, #7
    : B) R9 a# G2 W6 Y! k  D) L
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode6 l$ h4 _4 L, Z0 J
  70.          MOV   sp,r0                           ; write the stack pointer
    ! l* D$ r( M3 d2 j
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space
    ) r3 t% F" ^  ?0 D
  72. ;
    2 A6 Q$ U! y: S
  73. ; Set up the Stack for abort mode* `5 M# j) y/ [
  74. ;; v, ~- S2 c' \3 F
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode
    , ^) j; m: i/ t: v4 h0 f+ Q
  76.          MOV   sp, r0                          ; write the stack pointer1 T; H% h: o6 o- j
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space
    - \/ M/ k! y2 m1 P! Y
  78. ;
    # @6 `  R  c0 r8 ^
  79. ; Set up the Stack for FIQ mode( ?& z4 Q# {2 ?0 v
  80. ;
    - c/ j" e* B8 u: K' f8 N& m
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode2 [% m6 D3 {: c# ]
  82.          MOV   sp,r0                           ; write the stack pointer& S9 q8 p1 R* Y/ H- K
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space% f! p8 `. O6 S9 s
  84. ;
    5 o( Y0 ~4 G; Y4 W& c3 C
  85. ; Set up the Stack for IRQ mode: t) o: F; u, Y
  86. ;% n8 n" [6 l  J; K( H9 n0 ~
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode
    1 q4 ]6 v2 V  W- ~
  88.          MOV   sp,r0                           ; write the stack pointer
    & l+ h3 n' B: D: {- p, P: S9 ]
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space
    ) [: }+ n+ R2 ^+ O( H
  90. ;
    ' I8 a( P9 U6 ]  V1 U. u
  91. ; Set up the Stack for SVC mode/ @+ {$ R2 c* _, z
  92. ;( j6 v8 @- ?: }% e4 c3 G
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    0 ^: h, `# f3 e: `. j/ i' ~
  94.          MOV   sp,r0                           ; write the stack pointer# J  [6 e! G  l' Y6 U) p7 L
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space6 E& C) l3 s+ t) E/ M
  96. ;
    : k; @% V0 `' _$ P% m& B7 j! ?7 ^
  97. ; Set up the Stack for USer/System mode
    * j9 r: T+ Y+ s# A( K3 j
  98. ;
    8 ~. T/ j( {4 \2 F3 ^* r8 L2 {% u
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode
    / b# F# ^8 P3 h) t  q
  100.          MOV   sp,r0                           ; write the stack pointer: k* O9 S4 i* T

  101. ; E0 r- ~! }. t
  102. ;- F( U: F# A2 F5 W8 N9 S5 o2 I# F
  103. ; Clear the BSS section here* H8 a9 y+ F5 y# }+ v: w8 M3 H" W! Y! a
  104. ;
    7 P" f9 v# k7 q' g+ M0 Y' X
  105. Clear_Bss_Section:
    ( N9 U: J7 f0 X) P% O: R9 E8 u
  106. ) E( j/ r& p2 {- d/ l
  107.          LDR   r0, _bss_start                 ; Start address of BSS0 R1 W) m# c* e; ~9 C4 ^1 s
  108.          LDR   r1, _bss_end                   ; End address of BSS
    8 }& }) s4 c! h' P  a9 B
  109.          SUB   r1,r1,#4
    , R7 Y! @4 R/ Y3 V
  110.          MOV   r2, #03 b  J/ }2 a3 }1 A
  111. Loop:: ]* S$ l2 z, L6 n8 j) G$ _# o0 v
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS
    & N9 e, W: r; ^3 J$ K- C2 F1 C
  113.          CMP   r0, r1
    8 [; l5 b+ l# W+ i
  114.          BLE   Loop                            ; Clear till BSS end
    * i, X+ I# O4 Q% f3 b" l! \8 b& y1 m

  115. 3 i; x" q. [( g5 E
  116.          BL    __TI_auto_init                  ; Call TI auto init1 d! h+ s$ u! X5 w1 b% E

  117. * @  V1 w4 G; T- S
  118. ;6 F* ], e/ m* u5 N+ ^/ k7 T% ?
  119. ; Enter the start_boot function. The execution still happens in system mode$ {, K4 `& k5 ^
  120. ;
      `+ b8 w+ f7 U+ w
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot
    ) [0 s3 y$ B' |
  122.          MOV   lr,pc                           ; Dummy return
    0 H- N+ \! @* k0 Q0 s: i' F! r" F$ Y
  123.          BX    r10                             ; Branch to start_boot
    0 x8 V+ w9 |2 Q' G# w
  124.          SUB   pc, pc, #0x08                   ; looping3 K/ s2 }) X4 [3 A

  125. $ M9 v; F* q+ ?5 a/ h% w3 `9 O
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    5 h4 T& U0 b- D5 {5 M
  127. ;         BX   lr$ m" Z* g& O* g3 R
  128. ;' s! m- M. L/ S$ s' y1 S& f0 c
  129. ; End of the file
    + _4 `$ {. W$ W4 t' d
  130. ;6 Y3 U/ S! D8 \

  131. ; {5 [' {) R! Z9 [) u
  132. _stackptr:
    7 F# R2 N+ N" A8 f' M0 o$ |; H
  133.     .word __STACK_END( t1 _& D( ^* f3 p, S" {
  134. _bss_start:8 a' w& X& Y( D7 g, {
  135.     .word bss_start# R5 `4 ]- Q7 ~0 ^% Q9 I% p
  136. _bss_end:
    ; _) X/ r% ^. F1 g
  137.     .word bss_end
    / f- k% @% K! y+ e, R
  138. _start_boot:
    % {+ s: n- J0 p; Q
  139.     .word start_boot( ^5 U$ V  m8 N& _. U- f
  140. _data_auto_init:/ r/ O& T# l4 X) ^" z
  141.     .word __TI_auto_init
    / z. E, {6 R* E, n9 B5 d
  142.          .end1 C8 ^  l  v  @8 @
  143.    
    + Q" N$ z+ n, P& Y* |% f5 a, l

  144. $ A/ C! Y2 i2 a: R7 [( `9 E* d( ]
  145. ! G0 E! C- ]: `, r) w# _: k
复制代码
/ x" [' @# W  H; O% y

  r% {' t% N$ O' a1 Q6 _4 t$ z2 g/ H  _3 _; [
6 N; [  n% S2 e7 k

6 }% p7 j9 `( V: W$ ?; e3 E
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:59
; T1 P. X3 i+ u; Y! ]( xARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式1 G9 i  R; k/ H* N( }: I
DSP CPU 不存在这个问题4 h  o* X) K: u! \. f. B& w+ ~) j
...

& h; ?: v$ i: _$ |  D2 `( r,高手~~~* X' j9 x: O3 o+ X8 u+ x
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))2 {3 Y4 f  R+ T+ n5 y, O# p
  2. 7 m: s) t, u! g3 o- Q
  3. int main(void) {
    ' S! C# u) `/ b1 B7 |) r; A
  4.         HWREG(0x01C14124)=0x88800800;
    : G6 z7 }/ i* A- s2 q
  5.         return 0;- E6 x; A& F9 Q7 w4 Z! _! s; Y
  6. }
    & k, u+ \6 g5 Q  W) ~5 o0 Y
复制代码

  y+ O5 D0 g$ L- x5 Q4 |这个单步调试的时候就没问题,能够改变内存值。
% d) p% {4 A  w2 w再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!
+ Y9 E! X! ^$ J0 Q
! j( O2 I' l; W% |- |7 F' B$ J+ Y那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?
' d/ R! i/ C4 E% K, g" a还是我应该找你们GPIO_LED那个程序调用函数的源代码?
" O7 a/ L+ ^& T0 W; C4 B

点评

在 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:408 e  Z) h2 W  V( W) k
会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...

# {5 S0 h4 ^% O) d3 n" \; o0 y5 f" O9 u8 C% i1 K7 l/ Y7 m

9 q3 u6 ]2 u- ~5 g# P$ pARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
. v6 F2 U7 J! h; y: aDSP CPU 不存在这个问题6 w8 O# J+ F# K7 F5 P4 c; y

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09
+ O. d- K' V8 [) X+ A% d+ T4 Z可以读写的,应该是你的代码问题
$ f5 q8 |" d: U7 J: M) b可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

- C# u- y( j. G# z$ \) W  R会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[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# A5 n9 S4 ~2 F* o
可以读写的,应该是你的代码问题8 `) _; M) o. h) {# [
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

8 B9 o! q# x- j5 x9 L0 @' G你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库
' L+ k5 \7 M( T$ N5 X函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))  c* i" L  {6 Y  `- z; o
  2. . a6 F8 x8 G  J) A* K
  3. int main(void) {" ?" i3 B: `7 y/ C) [" m
  4.         HWREG(0x01C14124)=0x88800800;# {5 ?; q4 T6 l& i: y* p
  5.         return 0;& N0 B. J) h- c2 g! i
  6. }# w$ F8 M/ k9 X1 @
复制代码
1 S6 U2 R" z. l. m' `( K2 f. ]
9 n  Q5 _0 @$ g( z9 ]$ T. _
主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变
& E' ?8 r3 {6 R, i* ]! K( k% m) x) Z& ]' n" n1 D# C; @7 }
, J3 W6 L# p7 p; j4 [# S3 g
然后我把程序变成如下形式:' `: c$ D$ R1 F! s+ g
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    , H; a$ P2 T- w' C+ K  d: y
  2. 4 \7 b4 Z$ ]( O/ T5 b
  3. int main(void) {% P8 ^! A+ R' Y3 }* m. l2 M& m
  4.         unsigned int temp;
    3 @" F) L7 i9 Q, K. Q* B
  5.         HWREG(0x01C14124)=0x88800800;
    & p& {/ B# d# D, Y
  6.         temp=HWREG(0x01C14124);
    " y: }1 |/ \' i( e2 x, Z
  7.         return 0;) `1 b+ q( |/ s3 F% l
  8. }0 r8 K, Y5 {/ K9 H
复制代码
  ]: f( j; ?: G5 Y4 F

% U: c7 M& h. t( p# b运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变
6 D6 r/ J& ?; `+ p( a通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000
; x% o9 b3 z$ I& I; ]然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题
& B3 G  X! V& M' p6 k
, l$ I8 p9 D: Q6 D# Z: K
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:09
+ t9 _" E: u( B6 Q4 r# a! |可以读写的,应该是你的代码问题" U% U( E4 T: B) R
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

- U9 w# J( L3 z# K5 d3 u) M# j首先,谢谢你的回复!
5 t7 Y9 n; Y; T7 z2 e
# S9 t. d# `9 K: f" f: _你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;. q% q8 Q5 D4 K' q0 R1 I
第二句直接对地址写数据,有什么不对吗?4 i' E$ i* f( j( n; T! `- ?6 D6 z

/ J$ L8 \8 o0 y% W$ I4 s而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?
& y3 _" `6 ?/ T) r
) M0 b0 U  G; l5 Z% M, ]因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
板凳
发表于 2017-4-21 09:09:04 | 只看该作者
可以读写的,应该是你的代码问题
9 o- f0 e# v' V% s) b; c6 i+ H可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验" ]5 @0 t( ?& _" u6 a/ m. V
实验一:
5 G4 |2 z2 `5 ]- D# ^8 K在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句
: z6 q- q5 |3 D. }( [+ N7 s* O# _' o. P
' y* b+ Y% R, H4 P/ y                HWREG(0x01E26010)=0xFFFFFFD8;0 q; |% z. Z1 x
                HWREG(0x01E26010)=0xFFFFFFFF;
! L  S( v5 ~/ X$ Y1 u$ k6 J' S/ S单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)9 O3 X2 v- }$ B5 k7 y
若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。5 P" x' p* t3 K# |* v( q
- l2 d" q2 x( r, x& q
实验二:. X  w* c* P1 M. n( _* {2 [
若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
3 R; C: T6 _0 c( e6 m5 O; n; t! ^' R9 ]/ V# L
                value1=HWREG(0x01C14124);
5 d0 b7 [8 l! Y# g- B+ z2 Y$ @# _% I: V2 \- U) a2 r. [" S
通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 00:04 , Processed in 0.050653 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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