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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑
6 s: N& N( B' u7 m, ~0 b  L  l; B9 I$ ]* b9 T1 y# m" A" g
我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器- W% H6 X% _  |3 T

+ v3 I! t3 J/ w  B. ~( S( k+ N7 Z& R% h% _( `
我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:5 j, E& r# {/ v6 _

1 P* }, T" b& t
& k! ]* ~+ W, t0 o' U' Qint main(void) {
  P# G# ?' S( r% b( m7 O        
/ S- h$ E, J1 N, s4 p- a8 }7 M  Q        //使能GPIO
% E4 f! o" ]* Z& `, C! O- D% j        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
6 w! T- Q& {3 @! {                            PSC_MDCTL_NEXT_ENABLE);
7 W: w" O! v+ y+ n5 D( s# A# Q8 l1 h( y/ u3 l
        HWREG(0x01C14124)=0x88800800;
  w- e# w) M! r$ E}
& W6 M) j  n' i3 P; t+ a' {) B
2 f& u! A1 F7 U# C$ b: Z单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)& u: T& G# Q) B2 s+ E5 j- {: K
运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)8 W* a( x& C0 y: u  @

5 @0 }7 F/ d) Y  a7 h% W, H我想问一下,为什么我管脚设置不成功???: }1 q3 w4 H/ W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:50* x$ ]6 _! A+ h) M4 ?3 z) }0 y3 R
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句
- a& t: y# W1 L1 w6 @; k7 c/* 重新配置程序入口点 */, o6 `3 G9 R8 T$ L
-e Entry这是一 ...
  F* b7 M' G6 b7 n( d
你贴的代码太复杂了,我得慢慢看,慢慢吸收~( ~0 h5 k5 X" y$ I9 S
# L3 t) t0 P2 y/ a
不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:34. u7 h' g3 J3 X
,高手~~~& F  U+ ?5 V4 i4 e  e
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...

+ `# i# E+ P) N* G  A5 ]在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句# W* a3 a8 D3 [
/* 重新配置程序入口点 */
0 t% `! U0 `! y) s8 [( y4 P) S+ q-e Entry
  1. /****************************************************************************/
    : u/ l- z2 D2 ]0 l* I& r% `
  2. /*                                                                          */
    1 L. G. {2 z2 \6 B) T
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */" j- C* y, j1 ?9 Q: u
  4. /*                                                                          */
    " k5 t3 B9 Y  y2 y
  5. /*              2015年04月20日                                              */8 g/ X; C) K& q1 j
  6. /*                                                                          */
    : Y% S. }* B6 p. {
  7. /****************************************************************************/
    : X6 I! l4 T- m% j/ k
  8. /* 堆栈 */' g' B' v" ?1 F$ p
  9. -stack  0x8000+ q( R1 A6 F+ r3 Y
  10. -heap   0x2000( T( t3 T% |! a. M5 @% u2 k
  11. $ c8 _8 P" m! y6 J
  12. /* 重新配置程序入口点 */) w! W. }) \; o, @) v' G# G3 I
  13. -e Entry; c6 C$ O8 b# _
  14. - j+ v. ~4 _3 b; ?  G  O' y
  15. MEMORY
    0 r+ [! O7 U( W9 m, m+ ~3 G
  16. {: C- \) z6 i9 K2 w
  17. #ifdef DSP_CORE
    6 {% d. G& u; }& D4 {0 X
  18. /****************************************************************************/0 @: t  x# W* }" h  w) [# r6 q
  19. /*                                                                          */% b) [: W- m. M- W" \, Q
  20. /*              DSP 专有内存区域                                            */
    " {- u7 c; T9 Q& ~. ^4 o  s
  21. /*                                                                          */* ?% {3 m. P) x, R$ `
  22. /****************************************************************************/. R  k$ G) y- F+ c9 W% H5 a
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */
    : X( n6 y# c0 ~8 ]
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */
    ) o' x5 k' u( b9 D
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */1 {3 C2 e2 ^8 J- x, n4 T6 K
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */
    ) ?) U! X! f, k9 a! D
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式
$ J4 e0 j/ H- _3 w, o8 a* v) ?
7 S7 q" v' J1 t1 }: w- ]OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm
# }# G$ @, y0 o: B. _$ R1 n, @5 x  |; F
  1. ;******************************************************************************9 v* u1 k- R9 t. N  ?9 u4 y
  2. ;5 ]. y& |* n# ~+ k
  3. ; init.asm - Init code routines
    $ e  S3 c: T% e( ^. x  W
  4. ;  D3 V& C+ f7 Q; {- C, R* ^
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
    & q' x* e6 g7 t' `0 u. ^
  6. ; All rights reserved.% w& j4 [2 ?* D" y/ ~% o
  7. ;/ O% f1 k2 C- \4 v. p1 M" M
  8. ;******************************************************************************
    * C! _& Y, ^1 }8 ^& S
  9. ;****************************** Global Symbols*******************************) Z0 i& q# ~2 T4 a% M
  10.         .global Entry# Y% \5 r( n0 p" z' L9 d
  11.         .global start_boot
    2 z5 ^% a  L9 Y0 \( d+ m
  12.         .global __TI_auto_init$ H) S7 [% |. A  {) e$ c+ D/ W

  13. ; R  ]" o- a, ?2 M4 h
  14.         .ref __stack
    9 O, [4 ?  y7 h- m" w9 m2 I* k1 B4 f6 a
  15.         .ref __STACK_END
    + m% q' @! _# V5 W8 s7 i% `
  16.         .ref bss_start) e  R2 @" ~$ B
  17.         .ref bss_end
    4 h2 m% V) S' n$ n# \
  18.         .ref start_boot
    # n- V- g* a4 C4 q1 Z
  19. & C% N/ b. ^! f5 U) B# y
  20. ;************************ Internal Definitions ******************************
    - q1 D1 i) u) @
  21. ;: n( `. [' C$ Z+ t2 \( L* ]! R* c
  22. ; Define the stack sizes for different modes. The user/system mode will use
    ! u" v" }$ G* }) S2 f# S
  23. ; the rest of the total stack size% E% @2 k) A2 D& G! B
  24. ;
    - _7 S6 {; C" D$ y

  25. $ C' x/ @- b# l- S6 N4 ?7 t7 P
  26. UND_STACK_SIZE .set 0x8
    8 h  [: p2 r) n; T9 A% N
  27. ABT_STACK_SIZE .set 0x8$ q6 a: t& X1 N, ]
  28. FIQ_STACK_SIZE .set 0x81 Y5 e& \  D/ Q
  29. IRQ_STACK_SIZE .set 0x5003 @# `' h& ~. S% w' H+ O
  30. SVC_STACK_SIZE .set 0x8
    ) ], w$ k- g4 @0 s2 r. j# _% ]. w

  31. & c5 F1 S$ R6 M% x
  32. ;
    & \9 J1 q$ K, M+ H8 a+ P) l* ]
  33. ; to set the mode bits in CPSR for different modes
    1 ]( y* M/ p& b; H* t! h
  34. ;6 T0 L# i0 X3 B" l, u! Y( I6 v9 c( h
  35. 0 i) O) E& s; E' q" ]- d2 v1 R
  36. MODE_USR .set 0x10
    % c2 W  u1 h, W7 Y& r+ d
  37. MODE_FIQ .set 0x11
    ( w8 f6 Q6 s  z, E8 T9 C+ \6 U
  38. MODE_IRQ .set 0x120 m  j8 X- z8 t% T& X4 y3 h3 Q
  39. MODE_SVC .set 0x13
    9 p, E7 z* I2 w
  40. MODE_ABT .set 0x17
    0 J) I! `3 ^, A9 d8 c
  41. MODE_UND .set 0x1B. l5 t# C. \1 T" v
  42. MODE_SYS .set 0x1F
    ( b6 |5 y  ]4 Y# g# [

  43. ' h5 p6 b  c! L' z: i1 }2 C
  44. I_F_BIT .set 0xC0
    3 T) [( e* o8 O' p2 x! ~4 r1 F0 F
  45. 2 Y7 L* I1 u0 ^
  46. ;**************************** Code Seection ***********************************
    * x1 m( B" [  X. k" z
  47.         .text
    2 {8 N5 l7 _3 ~) P" O

  48. 6 q* i+ T5 k& X2 g1 N1 {
  49. ;' @: @7 j  t# O! H
  50. ; This code is assembled for ARM instructions6 H: {! @3 z7 M# b9 S( H
  51. ;: c$ ^- u* c' f+ z) b6 E
  52.         .state32
    * u5 h7 Z8 `3 S* ~2 \! ?
  53. 7 Z6 |8 d/ ~  Y+ H+ [
  54. ;******************************************************************************
    1 ~, [6 D; R3 K  W% w0 e2 B
  55. ;' v6 R0 o9 w) c1 R
  56. ;******************************************************************************& t# M- @4 `; [; t& h
  57. ;  a" l, ?  L& g1 [- b
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and: Y' N7 |5 Z. T; c( E/ C/ n4 G0 l" C
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
    1 A! j; G/ r: ^8 D; m
  60. ;  main() function.
    $ _- z: [* [7 [: R0 X
  61. ;
    : o! I- O7 }" d
  62. Entry:6 K+ I# c% J: T. r/ O/ H
  63. ;
    ! U+ l7 A" m0 n+ D# }0 G
  64. ; Set up the Stack for Undefined mode
    % s2 [  ]( h7 [- ^6 U6 K* G0 O
  65. ;' X% {; B4 V$ ~2 I3 }7 a& T
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer5 R8 P. N/ Z/ c+ Y0 P7 h2 F
  67.          SUB   r0, r0, #8. a/ I( ^) C, S! d
  68.          BIC   r0, r0, #7) a+ y/ t9 r9 R4 n5 L2 \! z
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode3 e) U% P3 V' X) ~* t; j/ v
  70.          MOV   sp,r0                           ; write the stack pointer6 ^& q- V* e( W( d
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space3 g  Q4 R, t! L* e5 E
  72. ;
    8 a5 U2 e. o% K
  73. ; Set up the Stack for abort mode# E  X2 @, [& ~5 {' l7 z8 e
  74. ;
    : F6 E; I  G. o, \
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode6 l" F8 ^5 [+ _% r+ K; L2 a5 ~
  76.          MOV   sp, r0                          ; write the stack pointer% H, I2 |# c" F3 D8 L
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space
    * a, P+ c9 r5 N+ ^3 ~! L( U, Q
  78. ;  ~8 p( \0 ~) n' w1 k
  79. ; Set up the Stack for FIQ mode
    2 G* G; q4 p  q3 s
  80. ;
    + e$ a1 \- c  l; P8 Y0 V/ }8 I% H
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode
    % Z) @: e0 o- C  ]  g, g
  82.          MOV   sp,r0                           ; write the stack pointer
    6 N' W6 p! o+ n! y% F
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space+ l0 e, G0 [. a0 p; I" h
  84. ;
    6 H+ p) j+ j1 O1 i  d; u7 N1 N
  85. ; Set up the Stack for IRQ mode; z: |* s1 g# `9 ~  ~4 w. z
  86. ;
    8 E8 Z  O3 d! k0 c7 N
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode
    . s2 ~! F$ W/ A! u, E
  88.          MOV   sp,r0                           ; write the stack pointer
    ! W3 j$ H% ]. @! v" q1 m
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space
    ! z' u$ _/ `2 A* b7 i5 M  R
  90. ;
    % `0 k3 i/ {& J( P2 O
  91. ; Set up the Stack for SVC mode
    * G7 `2 l# l$ T8 ]" [
  92. ;5 f# O/ j/ K# e, \' ?
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode; Q/ t; ]% s, S+ K
  94.          MOV   sp,r0                           ; write the stack pointer, O' A' C6 O# N% w9 M) f
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space
    & I) h; @% b7 h) v* O
  96. ;# B+ v3 d( o8 A1 ~" @3 B/ {
  97. ; Set up the Stack for USer/System mode2 e, T7 d8 A$ M8 a: U
  98. ;
    ; U. R2 h& l2 ^* ]
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode8 j/ y2 _% @/ v+ [3 |
  100.          MOV   sp,r0                           ; write the stack pointer
    ' Z0 g9 f8 Y1 k
  101. 8 e! s5 o6 f6 [  y  _) r/ e- ~
  102. ;9 x+ c* ?9 s4 W" I! F% e
  103. ; Clear the BSS section here4 Y% Y# l1 }" H$ q
  104. ;
    . e6 O! N1 T% k, J4 B# ?
  105. Clear_Bss_Section:
    + v  B( c. Y5 R" s% j

  106. : [' O* r- R1 ^7 [
  107.          LDR   r0, _bss_start                 ; Start address of BSS# W  |6 i& t9 s4 {" |
  108.          LDR   r1, _bss_end                   ; End address of BSS1 J  K/ R) z- B
  109.          SUB   r1,r1,#4
    . z8 f3 H, ^* E0 z) \
  110.          MOV   r2, #0; i8 H. t/ J8 W) [4 n2 G
  111. Loop:
    ; b4 w5 G# y+ ~& }8 P; c. E
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS( D6 ~! \( Q6 c& y, E- L
  113.          CMP   r0, r1  z7 e' A4 H) y* ]! b
  114.          BLE   Loop                            ; Clear till BSS end0 r4 Q) g; x: h1 w" j3 H# t& b
  115. 5 i: O/ Y! H! {# v
  116.          BL    __TI_auto_init                  ; Call TI auto init, c' A6 H( `# ?+ S2 o# Z

  117. 9 [8 v4 f7 }" d( K( ?4 a
  118. ;
    ! [' q6 j& Y# {* e( U, B1 @- g
  119. ; Enter the start_boot function. The execution still happens in system mode
    7 Y2 j& h1 T/ M7 O. v8 w
  120. ;; k! r. |8 u. l4 E5 K+ O% Z
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot
    4 }( B$ Q7 D( I
  122.          MOV   lr,pc                           ; Dummy return
    : }2 R1 z$ W4 |' |
  123.          BX    r10                             ; Branch to start_boot( h  a" _7 [- v5 t% ]  X6 C: `
  124.          SUB   pc, pc, #0x08                   ; looping
    . N/ q  M7 \, l* ^7 c
  125. : G8 t6 P' }6 u. l& e0 S( D5 i( W
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    . q9 t  y% [. |
  127. ;         BX   lr
    , \' _6 B* m! o* x9 J  P. e
  128. ;
    : I: K  P, Q+ P1 [# q
  129. ; End of the file
    9 M5 }2 W. Y  Z7 f- W( b$ D$ i7 X
  130. ;8 E' E: e' I# U6 [' C8 M4 P
  131. 9 `. d4 p2 |+ U
  132. _stackptr:
    - `" x# X3 V$ A' n2 u8 x$ I
  133.     .word __STACK_END
    , ^3 Q/ ?: ]8 n9 A' [, z
  134. _bss_start:4 |, e, j% h/ w5 k1 Y6 H7 I
  135.     .word bss_start
    / _* Q6 L& Y4 y: }
  136. _bss_end:9 n5 E( G# w+ ~( I0 q$ E
  137.     .word bss_end
    5 h1 Z( ^- k# _
  138. _start_boot:
    , e1 J# e* A7 r, K8 X4 C9 j
  139.     .word start_boot# W1 o% U* w1 b6 i
  140. _data_auto_init:
    # S; H6 y) s1 X! b' O' v6 b* |
  141.     .word __TI_auto_init4 U3 ^2 ^1 W0 H' n7 k
  142.          .end
    $ m1 y# B' a1 a/ w+ d6 r
  143.    
    4 T. x4 O4 W7 Y, y

  144. 0 r2 U' }) @0 E# o) p& `# \

  145. 5 i+ |! n0 J: M/ S/ Z# H
复制代码
1 }4 T# `/ {) K2 f: b. F( y
* e; C7 z- z7 Q# a9 Y

. ]: k8 L( L9 Z* ?
1 T% t- \0 O6 y" G5 D; z: ^
: f! X" I) A, a! I! |5 Q3 z
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:59  \* \) T; f. U0 j/ J" B
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式: j6 h; c+ o7 z
DSP CPU 不存在这个问题/ D8 p. I8 ^0 G
...
8 O! x) f0 p8 q/ S0 V: O1 p& `
,高手~~~
" y; \( q, T8 b/ y0 _$ G% x, t& r正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))! X& r/ r' T1 L+ C4 O- y- L7 _6 S) D

  2.   k, W1 H- V& I# X  F, v5 G
  3. int main(void) {5 U/ f: S1 V' t
  4.         HWREG(0x01C14124)=0x88800800;
    : C/ O+ }( {3 F- q: p
  5.         return 0;/ T4 _. U, d. X* f
  6. }
    ' V8 R( N, {- D5 |* ~4 `! X
复制代码

# ^5 Z  S$ f  H3 Z, B这个单步调试的时候就没问题,能够改变内存值。% L, z& c$ X$ i1 F
再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!
# H$ c, W2 }, O$ S
6 d; I* }/ c/ I! [那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?
8 ~+ E' h4 z$ s; {  N6 I/ O还是我应该找你们GPIO_LED那个程序调用函数的源代码?
; G. h2 g, d: y& C7 g; T

点评

在 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
/ G7 a  ~3 e3 T& X* C会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...
" D$ B) k9 @( f4 a/ s. @- S
* {, i6 B2 t) f* [+ u
$ }2 [' ~( o* Y4 ~1 B/ i* L
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
4 `3 H. w& {7 S* r* E" t" a* z5 mDSP CPU 不存在这个问题
- V% V+ j& B; |2 Y( H% T" z. A

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09
3 S: c! r3 j0 d; a$ o可以读写的,应该是你的代码问题
/ U2 p: o$ w2 B$ K2 h- D* w7 `$ R可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
8 j; t7 t$ r; B" _8 I1 \% }
会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[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
# L; K) Y+ T+ q# j可以读写的,应该是你的代码问题
9 y2 d# u( A5 @: T9 a- m0 C+ t可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
+ S& W0 L- k" ^- B$ i, v5 ^/ E9 m
你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库/ {! p) O' @( p' c$ V' I/ z% h
函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    8 y+ M! j$ E  A" W% O) U. }

  2. : v0 Z/ k! p0 n  Y# q2 W
  3. int main(void) {
    6 c5 i7 t, J& E! Q4 ]
  4.         HWREG(0x01C14124)=0x88800800;, @' r" j$ V6 u' x  h
  5.         return 0;6 U- |" U( H0 s4 @
  6. }, `2 k2 {/ p+ w4 |% n1 @, t
复制代码

% `: X6 k3 G  v7 ^$ V) J* n& e
; l5 i3 K, g& x, \  g主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变
1 P- x0 j9 n( A+ q* ^1 I& r
7 \6 m* _+ }8 J5 @0 a6 T% b! H4 n
% S6 a4 X, H! U; c# {然后我把程序变成如下形式:
+ K2 O( R$ Q5 E" o9 D8 i& n& m- S
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))3 }  n5 O( ^3 U

  2. 0 M1 Y% N5 C2 m" D$ E
  3. int main(void) {# q2 |& P+ L  z8 D% V$ U9 e% C! F9 l
  4.         unsigned int temp;- V9 w1 {5 |- T2 ]1 U! Y
  5.         HWREG(0x01C14124)=0x88800800;/ a& M4 |) M* n* O
  6.         temp=HWREG(0x01C14124);, a4 O- l$ `) S2 H# F, c
  7.         return 0;
    : p, ~8 }2 U* p' P
  8. }
    2 X% N1 U+ A& F; a2 J9 `
复制代码
* J, J* _( Y/ v

; R. R2 G$ ^' s. h3 G运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变& t! b* A0 p( G! Q! a/ r: ]# A; J  P
通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000( Y& M0 M4 C2 r& O
然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题
  A4 G% I/ G5 D% @* R
' S, I: p9 {- w. `5 B: E8 B
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:091 L9 l  r& o  y: z- J% ~/ @
可以读写的,应该是你的代码问题
( u+ z8 s+ Y! f% w+ f! d$ W可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

5 F4 K7 g+ k6 C首先,谢谢你的回复!
. ?: s0 L, p# n0 m4 V4 n0 Z
! z: _8 u4 D( |8 D你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
  }1 o, d1 w* j- r7 u( r' Q第二句直接对地址写数据,有什么不对吗?
' @, r: p2 Y1 C% T+ ?, N4 t' n5 r  Z9 g1 a
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?
0 t' {, F, f/ }8 E1 {# R7 d6 J0 ^) Q( l% F# }
因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
板凳
发表于 2017-4-21 09:09:04 | 只看该作者
可以读写的,应该是你的代码问题
1 Q+ t" o/ u) J" h可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验
7 L9 F. |' c% S4 y- _5 f实验一:
+ H) I" p, d5 e在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句; q, S8 C! Z" R, \5 i
0 j$ \/ W  D- S
                HWREG(0x01E26010)=0xFFFFFFD8;
1 K7 [$ _, k  b! |& [- j$ p  K                HWREG(0x01E26010)=0xFFFFFFFF;
+ W- ^! ~0 J% Y" R- \" @; `单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)( D* _" G" L! [( F
若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。/ |8 R: E) U! y# F+ B% j+ Y/ U2 I
- I, l. J: Y) e
实验二:
5 d! C6 D; O) n, M* B若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
) \2 k7 X( ^" A5 x. m( ]' a) b' P0 s2 b8 H! x
                value1=HWREG(0x01C14124);% q, L; w1 [+ W- B
, e) {! R4 B0 C% S. A$ t2 |
通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 04:25 , Processed in 0.052314 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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