OMAPL138端口复用设置问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑 # P! N' |4 }% x7 a2 u# ]1 E* l4 F) {
) ~$ S* r7 L9 i* |2 K, T
我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器
9 a4 v- o, u* {6 }9 t4 s" E2 b$ p0 X% i  f
- x% A+ T/ x9 g8 ?' w1 j' V
我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:
: D& N9 u3 t+ p: I. [5 d6 P5 t' X  R+ K) h5 V4 N1 r

2 v: r8 W) A, y0 Sint main(void) {2 E) g4 c' J& }$ @* C
        
- {9 |# U* g8 e! M0 C( f" A        //使能GPIO8 z6 U1 D# \- b
        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
7 Y# Q  H. s/ {+ l, R                            PSC_MDCTL_NEXT_ENABLE);, k+ ^+ m& q* W& ?- K0 H. L8 q
$ r* Q, E8 W, h0 Q
        HWREG(0x01C14124)=0x88800800;% ^& t9 B7 |3 ~! r$ i; `
}  ~& V' d  [4 X, T

  b$ Q2 c, \" n* |$ j  E' l; Y0 R单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)  |% Z- B6 R: V6 s% C
运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)
1 o6 _2 @% e' K$ M  D
3 B* L  [$ I2 s" J3 f2 i- S3 X我想问一下,为什么我管脚设置不成功???7 B+ z0 H; z) q7 [6 |% E$ D8 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:500 v# h/ P  G- V% @3 ^  i& |% E
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句; w* F  a, I8 p
/* 重新配置程序入口点 */
4 |: Q/ I: N! n2 i! r# ]-e Entry这是一 ...
" r' C  Z0 W9 v8 h: _5 p. {
你贴的代码太复杂了,我得慢慢看,慢慢吸收~' G8 R6 y$ m6 R3 l1 }

( J- W8 L) J7 f1 M, M: [不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:34, s0 F2 Y$ X/ H4 V# T: }
,高手~~~
1 ]* N) k' ~1 k3 D$ D/ g4 |8 q4 Y) O正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...

+ b$ a8 g0 }3 k$ y在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句6 {1 ?6 L5 E- t9 ]) p$ O+ B$ R
/* 重新配置程序入口点 */5 D6 S2 @0 d% ?  I
-e Entry
  1. /****************************************************************************/" f1 n  J( k% X! L6 b
  2. /*                                                                          */1 {; l4 i0 D/ ]0 o4 w
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */
    6 o+ \8 i2 g) K6 B  c
  4. /*                                                                          */
    9 i2 @, @+ k' z5 y4 @) M
  5. /*              2015年04月20日                                              */$ \* c: L* Y/ ]1 Y8 X0 P
  6. /*                                                                          */
    ! }( J8 P. l* \- |2 ~+ u/ E
  7. /****************************************************************************/$ G) t8 R7 s( g: m7 e
  8. /* 堆栈 */
    5 [( H" W' b! A  k# x; c
  9. -stack  0x8000% _/ {/ P4 D6 u$ o5 O! y; I0 x
  10. -heap   0x2000) ~: {; k# L) s* b3 l1 ]+ P

  11. 9 |, {. @# P  h. W- N1 U) a( @
  12. /* 重新配置程序入口点 */
    3 A1 \7 S) R9 z# U" y
  13. -e Entry+ J, h4 f3 ^# v7 o1 Y  J* \1 ~
  14. 2 i- V$ O  w. [+ @/ q: r. `
  15. MEMORY
    0 S) m2 ^6 V( b* F7 [! z" T
  16. {
    ) s8 n8 F- O$ j- \6 v: ~# y
  17. #ifdef DSP_CORE- q3 t, a, i" ~
  18. /****************************************************************************/! c: L8 t' z  l! }
  19. /*                                                                          */8 y& ?+ _  |; {0 p9 l
  20. /*              DSP 专有内存区域                                            */
    1 w+ {* k0 E6 h
  21. /*                                                                          */
    2 V7 C6 f$ @( r7 e$ C6 G
  22. /****************************************************************************/2 ^- W1 A6 V% W( W
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */
    : |3 L6 d8 c- E! K% o
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */- v4 \' J+ H% {( y3 O# N
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */
    ! D4 p  E( m0 q% K6 O
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */% I& d3 G6 }5 f
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式3 \# t! Q9 ~# n. s1 l

6 k$ a' N" }3 m# l" ]  A5 e4 F6 ~OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm& P3 T* j6 ~# [" M* S
  1. ;******************************************************************************
    " z+ _& d! p1 s5 {5 y0 D  Z
  2. ;
    - |. A6 q6 M3 g# ?8 X
  3. ; init.asm - Init code routines
    ' M0 ^- S8 l+ ~, c
  4. ;
    * c* d( J: J/ D. S) L9 i9 ]% i
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
    ( _; {. \4 x1 T' V1 ?: q9 x
  6. ; All rights reserved.
    . ?  T  G( U6 a3 z2 U) u
  7. ;% }+ @  w+ H* N( I3 @  i" z
  8. ;******************************************************************************6 M) x! b0 `* R+ l- G+ d5 ?
  9. ;****************************** Global Symbols*******************************
    1 Q1 h2 ]* K2 ^( ~( {, H# i8 k9 r3 u; E
  10.         .global Entry3 d5 U' Q0 g/ R+ }
  11.         .global start_boot
    % t  U6 u: s9 b8 t
  12.         .global __TI_auto_init
      v5 I( p1 l3 a8 c( L5 G7 M' M# [
  13. ! `- N, V2 s$ J2 T, ^6 W& F- m2 @) B
  14.         .ref __stack
    8 b4 X2 Q  [  T" Q; _, a
  15.         .ref __STACK_END! T  C- s* Q) s% ?
  16.         .ref bss_start( R; D% E% o  p# _( G7 C1 M
  17.         .ref bss_end
    . L6 ]7 R; X% s! T5 k
  18.         .ref start_boot
    ) g6 t6 }% v2 s
  19. 4 G" l! p. y. s
  20. ;************************ Internal Definitions ******************************
    , I" w) M; e5 m
  21. ;
    ) d0 \; y. N: X* U; _
  22. ; Define the stack sizes for different modes. The user/system mode will use
    * l& q' }% t- }; y
  23. ; the rest of the total stack size& Z# `6 L7 V. X, `
  24. ;# l- F/ K$ n. {! A
  25. ; r& |$ n, s1 J3 c
  26. UND_STACK_SIZE .set 0x81 w7 A7 `6 Y/ F  S/ a' k1 G
  27. ABT_STACK_SIZE .set 0x8( ?9 d' {+ w/ ~3 q+ p$ G7 _
  28. FIQ_STACK_SIZE .set 0x8* T, c+ A2 R) u: b) ~2 F. e
  29. IRQ_STACK_SIZE .set 0x5002 G4 e! m- p- R
  30. SVC_STACK_SIZE .set 0x85 B1 o' B# }" X; h/ m" n! D  a

  31. # Z' q/ j2 U. H: q+ f( l/ N
  32. ;( `& Y- f9 O3 O* B- Q
  33. ; to set the mode bits in CPSR for different modes
    ' u- Y$ ?: c: ]3 j
  34. ;9 X9 R% |0 m% Q1 T
  35. 9 ]$ J  V2 Y1 c* ^
  36. MODE_USR .set 0x10- m( z( w: I5 t2 P
  37. MODE_FIQ .set 0x117 U# F' N. k) X
  38. MODE_IRQ .set 0x12
    4 Y1 s) b: k3 v1 y) r$ _2 X5 u
  39. MODE_SVC .set 0x13( {8 w0 k; ?! H
  40. MODE_ABT .set 0x173 g, N5 k5 g- k- `
  41. MODE_UND .set 0x1B
    ) w$ F  U% q" p7 y
  42. MODE_SYS .set 0x1F
    + h; b+ j2 ~1 G5 ]6 t! @% I) R

  43. ! P( }8 S( d9 A6 ^! Z% D. O) U' y# z
  44. I_F_BIT .set 0xC02 D/ x) o1 K5 B5 r7 X

  45. ) r8 U- P1 c& F8 }6 v* }
  46. ;**************************** Code Seection ***********************************
    ( d  r$ i, x1 Q6 \. R
  47.         .text1 m: _% T3 H, |9 x+ j' k% t
  48. ; k, Y+ E+ v! b: P
  49. ;
    ! f' A/ T; ~/ `7 y5 ^! f
  50. ; This code is assembled for ARM instructions
    5 W( E% o7 }8 G- R- X9 c" v. m: L. h/ J
  51. ;& R' C0 k4 n+ H# T8 `6 ^) i
  52.         .state321 F, v" x0 [1 N. F8 p

  53. 7 O2 j( S# d- c6 v+ ]8 @3 C
  54. ;******************************************************************************
    $ p& F5 T4 o( Y2 F! l/ @/ G' F
  55. ;& d3 |8 S! C: V. C. e
  56. ;******************************************************************************
    9 A% u# {: o2 B# p* J
  57. ;6 x% K* M' |. ]
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and3 d: k$ X- K' z5 x& @: W
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the' p5 |- b! A& r- @" y! v
  60. ;  main() function.
    : [7 T3 v1 D3 K. c; d; [2 M- R6 r
  61. ;0 _; N) y: M4 C
  62. Entry:
    1 ^$ x+ b. n7 Z- A/ v  w( L$ O
  63. ;8 x/ O4 A& D. \" f
  64. ; Set up the Stack for Undefined mode4 G1 q( I& y7 t7 k
  65. ;- E# a0 x9 D2 w) |, L
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer3 ]% Y7 [6 j  P/ T0 Y
  67.          SUB   r0, r0, #8
    / m7 s/ d1 G, a2 P) Y
  68.          BIC   r0, r0, #7. f- w" T( k/ q2 n# E; G4 p
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode8 ?7 r6 t" c7 N: B
  70.          MOV   sp,r0                           ; write the stack pointer
    " J( C4 [# `5 M  d1 @1 S" Q
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space! a0 m" V& G4 w
  72. ;8 i4 f4 r) b3 g% M- r( z2 D8 u+ j2 K
  73. ; Set up the Stack for abort mode: z6 f6 y; m6 U/ p: P, B
  74. ;7 u+ C5 Z, Y7 }! y9 f. f) k
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode
    % ~- T0 I6 T$ `
  76.          MOV   sp, r0                          ; write the stack pointer
    5 Q; N& }( ]& B8 d2 o, S* L
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space
    " f$ T; q5 Q6 t& B8 c4 Z+ R
  78. ;9 v: F8 i; ^# Q
  79. ; Set up the Stack for FIQ mode
    , r% @$ ]) Z2 V( b0 @# }& x
  80. ;
    . U, `( _" j0 I9 P" C$ Q
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode: K5 A& k; ?6 w- j% p0 d3 E
  82.          MOV   sp,r0                           ; write the stack pointer9 L* ~$ @8 g' B8 m
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space
    : k7 s+ ^  m7 U' ?
  84. ;/ H4 ~% n. ]! b2 n% ~* o
  85. ; Set up the Stack for IRQ mode
    : m  ~+ v4 h6 f3 [* U
  86. ;
    * c( m, q0 u4 C  s% `
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode
      B0 h2 p% C1 X
  88.          MOV   sp,r0                           ; write the stack pointer0 b4 S% N; I# h4 Z& u, k) K6 k
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space$ w; a: C4 C1 c/ t1 o
  90. ;
    - @1 E6 O5 {/ Z1 g$ W; ^9 W
  91. ; Set up the Stack for SVC mode
    9 f3 x, L6 x9 ]/ l: V  R" `$ `
  92. ;6 B7 }0 k$ R6 `% [+ l
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    " |# n* V0 C. j/ U: t6 q( o
  94.          MOV   sp,r0                           ; write the stack pointer0 }" n' E; C8 A+ e2 U+ P
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space) U0 y& B) i  v( x) U
  96. ;
    . t; D( y/ D( e  |- R
  97. ; Set up the Stack for USer/System mode
    4 Q) h4 y% n. k& \+ k6 Q2 d6 N
  98. ;
    . z8 W- G" c/ [- I0 l% _
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode
    ( J9 w4 J6 ]* D" S- L# g
  100.          MOV   sp,r0                           ; write the stack pointer
    " X- I4 J, v9 _( I

  101. - J* v" ?9 D+ E# G3 f
  102. ;
    : w( s% j! O8 a- f3 @. |' b% @+ Y
  103. ; Clear the BSS section here) Q! j: K* H0 ~% R6 J
  104. ;
    1 r+ m& ?3 h( K" d" f6 s+ E
  105. Clear_Bss_Section:
    ! n! m6 n1 C" ?/ E1 R
  106. " k" P0 U, X3 [& ^3 c/ Q9 ^% y
  107.          LDR   r0, _bss_start                 ; Start address of BSS
    4 P# d% \# G% Y* O' ]1 |
  108.          LDR   r1, _bss_end                   ; End address of BSS; B  ^; u# t4 O4 N3 V9 s
  109.          SUB   r1,r1,#4* n2 n- v7 a. T* _% J- C, t
  110.          MOV   r2, #0
    ' X' t: u3 e8 y/ R( A
  111. Loop:
      i. V9 B& l+ @3 O# w7 J
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS
    9 J0 H5 m# Y- B/ |
  113.          CMP   r0, r1
      T- E6 g0 r* f  I# j) e3 e
  114.          BLE   Loop                            ; Clear till BSS end! K9 X9 v6 b4 U
  115. " X& C" V  M# x1 l' B5 q  B
  116.          BL    __TI_auto_init                  ; Call TI auto init; ~* Z; @; k8 V9 S5 S* x! ~
  117. & G+ @8 ]" j( a, \
  118. ;
    : k4 k* @0 ^" W) {; u( N1 F
  119. ; Enter the start_boot function. The execution still happens in system mode
    ) c! ]2 V1 _- o! e" p: Q5 S3 H
  120. ;0 m1 `% T' B; }1 N" v! s0 ], }
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot
    ! @4 i5 X4 Z1 Q1 A9 z
  122.          MOV   lr,pc                           ; Dummy return + u1 y, P' @& K; ?: s. y4 y% W
  123.          BX    r10                             ; Branch to start_boot* x# E( c  |( t* ]: q
  124.          SUB   pc, pc, #0x08                   ; looping
    * d. N# x, e# T5 e8 `
  125. " r* ?9 A* {$ @  G
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    9 M, _0 T  }; l
  127. ;         BX   lr
    0 ]% G& ?3 I' j* d$ ^
  128. ;
    + x6 I, g2 C, t/ B( |
  129. ; End of the file8 r* w2 F6 c1 |9 c: k* ?' U7 i* N" J
  130. ;
    + U) t: ~5 V3 V9 }- W! w# a

  131. 0 s2 {1 w7 J/ P5 {1 c+ \7 F* _+ `: H
  132. _stackptr:
    # |( \& U' o2 ^  s0 {: h3 |0 o
  133.     .word __STACK_END( y) D$ m, i; A; ~: c$ X) L5 H2 F
  134. _bss_start:. a. e5 J% A7 K; H( v; A7 n
  135.     .word bss_start
    7 G4 f9 t) P" l2 f+ [
  136. _bss_end:# M0 t' U+ g% T' }" R
  137.     .word bss_end, a, Z. x/ ~, Z  A
  138. _start_boot:
    , c- z% d3 a0 f% B+ K$ P0 {
  139.     .word start_boot
    # l( z2 `" L- [+ ^4 h( [4 S4 _
  140. _data_auto_init:
    7 z' q& r6 ?( ~8 Y6 j1 |
  141.     .word __TI_auto_init
    6 T4 d9 S* p8 ?7 [# t5 |
  142.          .end
    3 B% I2 l# k% {6 v
  143.    
    $ l( l2 [  v/ k2 D
  144. & w5 m# }+ _- s) h7 J$ s
  145. ; u; ~( G+ t/ c( t: q
复制代码

4 f- v; f5 s! \5 D$ o8 D* t" _8 F, i/ J9 d

6 j8 A" W3 F% L% O( u% t5 ^- p6 _+ S' y  M1 j. p  D
+ i# l! D# r8 e; N& u1 l( [) f
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:59* r# h- ]1 v* O' `1 X
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式0 q0 l/ I- h+ |9 R: H
DSP CPU 不存在这个问题
) S" E8 v4 m6 h2 h ...

) x: J' e4 g. j& t& Q,高手~~~: i# l+ A, `/ o& d2 |) M' J! L
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))! F, P- G$ r/ w3 ~' Z; r
  2. 9 C0 c$ t. c5 g: r2 r
  3. int main(void) {
    7 V. [& o5 g( `
  4.         HWREG(0x01C14124)=0x88800800;
    - N; ?7 G; S. V  K
  5.         return 0;/ q5 ^( O6 p4 H# y+ `6 C
  6. }9 i  a1 h3 z- s9 a+ ^' @1 l
复制代码

* L" N' T8 D/ p9 {7 t1 c这个单步调试的时候就没问题,能够改变内存值。
! y$ x* m6 J* o' a# W# ^& e再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!9 I. }- \% v0 f! T8 J% I+ j

, i! w3 R* p; a% o; e那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?: K- p+ d4 w: A4 x+ P
还是我应该找你们GPIO_LED那个程序调用函数的源代码?
% e2 w, H( L' P0 w7 }; z" d

点评

在 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
3 H0 d( C+ k+ s5 c1 I- l9 C  C会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...

- w6 H' u+ g1 s" B
, }: F3 C4 u/ x' {$ k
" i9 I6 t5 ^: O! u# Q. W! @+ U& iARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
6 g; |4 I! x* [1 p  `0 e) DDSP CPU 不存在这个问题
8 k7 j8 E& _7 V7 n- p4 D

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09
$ D8 T: n& [6 [9 `9 Q2 Z可以读写的,应该是你的代码问题+ S: E( f3 ~2 `8 M
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
5 D1 U. U2 z4 k6 E1 Z1 i9 g- E5 F
会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[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
  R% F  U* Z/ T8 T4 o( i可以读写的,应该是你的代码问题
5 c9 S. E) `( I可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

, L. {6 g' W- U: n3 y* i1 ^! h# B' X% Y你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库
8 @, d7 C. B4 L0 z3 O函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x))). [4 ^4 |" K1 s) k- e

  2. $ O) B  v) T8 f3 p
  3. int main(void) {: `9 R8 J! M- f3 ^& }7 l5 W
  4.         HWREG(0x01C14124)=0x88800800;$ W1 h9 q$ m1 S! S& O9 h
  5.         return 0;0 v7 b; F7 u0 e7 l% |! S1 G. C' ^
  6. }
    ( J, t0 o8 a* i+ V) M! h
复制代码

5 P% I9 O6 D2 P# L
% I. y. S( \% ^+ A& x8 q" [% S主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变3 i' ]! }5 ]/ k/ x

1 P( h8 c5 ~0 R; k3 F- I' b' b" Y
然后我把程序变成如下形式:
, Y: j1 G% D+ P# o
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))% Y5 I: V( k. ^0 K7 S) F. W
  2. ; c: G1 O. ^7 X
  3. int main(void) {
    7 \. F* V1 v* W' R5 q* ?
  4.         unsigned int temp;& }% _! l; L- q* e) ~; H
  5.         HWREG(0x01C14124)=0x88800800;8 g5 v0 a8 C) C! ^* o! w" B
  6.         temp=HWREG(0x01C14124);3 H0 d3 Z+ e! h- ?  ?- n6 P
  7.         return 0;2 Z/ Q% w) ]7 ]/ r
  8. }
    : D: c$ O) i+ D6 G4 J1 L9 G0 R3 r
复制代码

* S  [- R3 ]% j7 X! k  l, \0 \! r% a& n
运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变2 K3 T" X& ?" y6 S; t5 U$ r
通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000% m8 L) h  t" \" W
然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题' F: y- v+ l) _: E. O/ u7 H9 h
- U; p9 N3 Y! j6 O7 D/ J
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:09
% V9 @) a. h* e( t- y: V可以读写的,应该是你的代码问题3 x/ q8 v3 u; y, d
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

1 x, ]) S3 r3 j$ O首先,谢谢你的回复!
% J: d2 O& B$ l* J3 Z) i4 o
: v; H( ]9 Y( ?4 q你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;% p  `; i3 q5 t
第二句直接对地址写数据,有什么不对吗?# q; i- k- w( u2 b
) J" i# ]" |! G. ?
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?2 i  h9 T9 _4 t8 ^+ B
" e: W& {* \2 [) N
因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验
4 V% T. Y3 O4 C9 [  s实验一:
7 Z9 P* a$ p' i0 `在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句
9 U1 t" q$ C5 Z2 [9 y) |) L& U7 H+ g: c) ]; V* @! N
                HWREG(0x01E26010)=0xFFFFFFD8;
- d! t, `) ?8 P! M( \3 D& i( ]. R; T' J                HWREG(0x01E26010)=0xFFFFFFFF;
9 n) c) b6 X- ^$ O) U4 x' c单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)% J; C* h* f3 ?6 c$ t5 P) O. g+ @
若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。
2 O7 ?0 m  W% F3 }6 L& Z* b) C* b0 q+ E5 f3 Y
实验二:3 l' }5 r" T( z# E
若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
8 e: |9 C6 |" R
! L- ^1 h/ T! [+ Y                 value1=HWREG(0x01C14124);$ F* k' w6 v# \2 F
/ e" i; \# n3 W5 ^6 o
通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-31 06:42 , Processed in 0.050467 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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