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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑
% x/ r3 t0 k  j6 c# u) [' z$ V& i
) h+ d4 u( f% ]$ \我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器
/ x* T9 h7 G  e, G0 E/ k' f4 Z' j- [9 v6 b/ G
5 y# L' _2 ?) C7 g! D2 u
我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:' a$ D9 f* B1 c
: |  g1 V8 H; l: d
/ c3 G2 U- O* V  y8 L" M0 r# l
int main(void) {
* S; G9 [6 @$ f% H        
0 g+ `5 ]/ r  u! i' v5 V' |. |        //使能GPIO) V" D8 t, C; u" d1 I. m% i6 c
        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,+ J2 @# k2 f5 @7 u; D% J& }
                            PSC_MDCTL_NEXT_ENABLE);
: k4 J, b0 t2 {% `
0 z* U6 s8 s* O4 L; ?9 ]* V        HWREG(0x01C14124)=0x88800800;& M& m6 \9 S2 k" s8 F) o
}
6 f4 S4 E- @) P, Z  F# Z0 \" S2 f; b. n  W
单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)
6 L& B/ g* u4 H( E8 a运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)
; x, O2 c  I, E$ d! o2 Y  U4 H# [  \$ T0 h& U; y
我想问一下,为什么我管脚设置不成功???8 j6 r1 J9 N& v: f5 N8 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:50) ^1 Q: |1 Q9 ^+ `1 w$ F+ I
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句1 D1 l; f& H0 k% _# G; }0 {
/* 重新配置程序入口点 */$ }' I0 ~7 n; `9 {
-e Entry这是一 ...

, ~3 W/ E3 w0 I+ |7 N  l+ R/ c- v1 e你贴的代码太复杂了,我得慢慢看,慢慢吸收~7 K5 T, W. S9 ~, b$ F7 n$ z

& a  P2 H+ o3 K. Q9 Z! r不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:34$ o& s4 ~& S6 M, [% J( L9 x
,高手~~~+ A! G  N, g3 w: _
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...

+ h. |9 _) x9 I: _; M4 W- ~在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句4 n* L. r* @' P- u* E1 `, Q
/* 重新配置程序入口点 */
1 v3 R& m' N; ?2 m: `5 `9 j-e Entry
  1. /****************************************************************************/' P# @/ E0 n) a6 l7 p$ y- Z* b/ v: h! Y
  2. /*                                                                          */+ P; u1 r; F+ {5 S; T! M2 L5 K9 M
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */
    ' u8 Y8 P1 P, r- P
  4. /*                                                                          */: F+ c8 t1 d: F9 c& a% F1 L
  5. /*              2015年04月20日                                              */
    8 j( ~2 O$ U; o. e; I  k9 q* K
  6. /*                                                                          */2 |' c& y. J/ l, t1 P9 e( ]# T8 O1 b7 g
  7. /****************************************************************************/4 z. n! a$ @9 r4 N) j. D% r
  8. /* 堆栈 */
    # c5 Z) t5 ^5 I- A& H
  9. -stack  0x8000
    # F! S, c' |, B) B3 y3 T
  10. -heap   0x2000
    + y8 i( b; p) U; u/ n

  11. + m- r" T. L3 j; i9 y: v
  12. /* 重新配置程序入口点 */
    5 h9 N7 W- u7 b8 ^& D% H4 [- L' x
  13. -e Entry
    ; l5 S8 Y+ m! _

  14. 8 N* L. F% ]  V& A) _" b% |( O
  15. MEMORY2 v1 F2 z( N9 O8 c) J8 n) o2 R% }
  16. {
    1 z5 f4 u2 b1 k3 s/ M% j& J
  17. #ifdef DSP_CORE, k# `) j$ X& V
  18. /****************************************************************************/# z3 Y% J2 U; ~( ~
  19. /*                                                                          */# [, ~3 k- c. W* w; t
  20. /*              DSP 专有内存区域                                            */* u! _- O- B5 l7 Z, x
  21. /*                                                                          */
    ) |( ^2 I" @9 C" Y
  22. /****************************************************************************/
    4 g9 L6 B; c/ W" n$ x9 M/ Q
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */  b& x$ c  I6 H: @) v
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */
    7 m% ~2 ~2 V, N' i
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */
    " s3 s* k( Y# d' Q3 `4 d
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */! r' k% h; Z  k5 u. j/ }& v' o$ o
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式# A( u* I/ D* R% ?( t  d

* L( m5 A' \/ Y" L0 YOMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm, |- p" r; |4 S+ T& n) H
  1. ;******************************************************************************
    ' m! b+ Q- L* ]# J; ~1 _0 b: ?1 P
  2. ;
    % x8 n+ K( w0 g0 n
  3. ; init.asm - Init code routines: `) r4 E1 w* }% A* j: M1 Z
  4. ;* m" B( O- }* S  Q8 s2 Z1 P/ f
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/- G) f! q) y2 ?' U) T& Q: u
  6. ; All rights reserved.+ Q) |( Q# Y: ?
  7. ;
    0 I9 B# V' c7 `2 ?) y
  8. ;******************************************************************************/ X5 O8 z& p; i' b, [/ U; o0 U  X
  9. ;****************************** Global Symbols*******************************8 i( Z1 t% O! n; O
  10.         .global Entry$ j/ [1 Y$ t& r/ ?# ^; M* W! u
  11.         .global start_boot
    / k: D: c/ }1 [. v8 u
  12.         .global __TI_auto_init
    ) R4 y9 K% ~! b. G& i

  13. " r& R* I& s0 Z/ e
  14.         .ref __stack' k' O$ ]8 E( @4 p% R
  15.         .ref __STACK_END
    - @5 ^& R6 U" G9 l' Z/ I
  16.         .ref bss_start
    - }4 J5 d  M# j5 u
  17.         .ref bss_end% B: K. K! k+ x
  18.         .ref start_boot
    5 u' r" c: u5 d, o6 P

  19. 5 {/ @& ^  r  E, S( W
  20. ;************************ Internal Definitions ******************************
    5 O& r% j' b/ h1 w+ U- t
  21. ;, S* p8 I9 e# }0 ]5 U
  22. ; Define the stack sizes for different modes. The user/system mode will use6 e' S4 B3 b: T7 C9 k& v5 i
  23. ; the rest of the total stack size
    / X! K* B0 u) e9 ~% p
  24. ;3 y9 u: r  n& r! O( G- m( i1 D  B1 x- ]
  25.   }! G0 |9 U* g- L
  26. UND_STACK_SIZE .set 0x8
    # H! d* o, N9 E+ V
  27. ABT_STACK_SIZE .set 0x8" v2 R" a, R; h- P  f
  28. FIQ_STACK_SIZE .set 0x8# J- d. A6 r' S
  29. IRQ_STACK_SIZE .set 0x500$ E5 o% }, o6 X" }0 X# T
  30. SVC_STACK_SIZE .set 0x8
    ' |& q( t' ^3 y# e" b
  31. 5 ~( {5 o/ B  N/ p- A
  32. ;
    6 r- ?- I1 _/ ~  D/ K
  33. ; to set the mode bits in CPSR for different modes3 y$ T) i* C# ^/ c' b
  34. ;! ~1 f6 H4 j4 O5 h: v
  35. 4 B- _+ n* s( o9 b
  36. MODE_USR .set 0x10
    1 E; d9 q' `7 g
  37. MODE_FIQ .set 0x11
    . ?+ r: G" d1 T% f
  38. MODE_IRQ .set 0x12+ @9 ^# a( K9 d+ Z/ ]4 J6 w8 ~
  39. MODE_SVC .set 0x130 P  n( q! Q' e& k* L5 Q5 P  a4 D
  40. MODE_ABT .set 0x17( h- B+ ]) c6 t1 u9 n2 m6 r9 z; e% D3 x
  41. MODE_UND .set 0x1B6 Q/ g- P( C0 D( h2 {) G
  42. MODE_SYS .set 0x1F
    % G  q' j- |7 N8 I
  43. / F2 }3 v  E0 Z2 r7 W- ]) m% ^
  44. I_F_BIT .set 0xC0
    3 f1 p7 z# j( _$ L" {/ f2 N* g

  45. 8 G' m" c6 @' M# L3 V$ V
  46. ;**************************** Code Seection ***********************************4 Z" ?* [4 a7 b/ Z- m
  47.         .text, y1 N, L8 Y2 B- Z. }' c( a  I
  48. ; a/ Q, Y8 ]( C
  49. ;2 Y/ O" n' U$ E2 S8 {
  50. ; This code is assembled for ARM instructions
    ( d) ]) s( d8 l7 d0 `+ m: }. P
  51. ;, @" U" C6 \2 q; a9 n4 ~; f) M0 b
  52.         .state32
    8 e2 X- n* l; F2 j; W. ^

  53. 8 B! z  ?: B+ `# m& O
  54. ;******************************************************************************3 ]1 q# @: U2 Q9 V) n- e# O# L
  55. ;4 V' @  e9 @' N; C5 [
  56. ;******************************************************************************; O% n* D) }7 c6 x' M. N' T0 q$ s1 z1 _
  57. ;9 `' U1 ]8 ^3 w& J' b* i2 g
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and
    6 T7 Z! v  S" a& c$ I
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the
    2 s( v8 j+ d) c) H
  60. ;  main() function.1 x2 x$ d& z& y  m/ t8 e
  61. ;
    + ?; W5 v2 M6 \
  62. Entry:$ [# L" q/ @0 l  t2 e% e. q* ^
  63. ;
    " N% l! N5 j" G3 {' h) L
  64. ; Set up the Stack for Undefined mode; T& H; f4 O3 w
  65. ;5 Q# z" Q  p) ]7 F
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer
    , A0 G. k* B, }
  67.          SUB   r0, r0, #8
    ! H# q6 m8 k+ ^3 _3 J5 N
  68.          BIC   r0, r0, #7
    % E. P( M8 E" c
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode5 F" w  B' F" ~6 ~( n, ]4 Y( o
  70.          MOV   sp,r0                           ; write the stack pointer. b' q1 o9 Z$ Q* G! d& v
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space
    - N( R7 I& `$ O: t; M  F, N$ G
  72. ;& z  J; h9 m8 V, r
  73. ; Set up the Stack for abort mode6 U  u1 ^  e$ I" i6 n* o
  74. ;
    7 M0 _7 U$ M; D# T* O
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode- d# Z( ]6 q# D+ T* i+ O0 }' A
  76.          MOV   sp, r0                          ; write the stack pointer
    $ v! x5 o3 S  p1 U2 c& C% M! {/ Z% e, g
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space9 U$ B$ w9 b- R" d+ {5 E
  78. ;
    4 [% [- ]+ t0 I( E) S8 N
  79. ; Set up the Stack for FIQ mode
    9 t5 G2 I; b6 f* ^
  80. ;
    , s) R4 ], }0 v0 m+ H
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode
    4 b( ~0 i- v/ J! B" P8 @
  82.          MOV   sp,r0                           ; write the stack pointer
    3 ^# s$ b$ H7 W2 {+ i5 k6 A" j
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space
    # O/ k* [4 ~. V0 D; h" M
  84. ;
    , \" v9 U& G% \7 K5 V1 z  {0 A
  85. ; Set up the Stack for IRQ mode
    . C: {' `! M$ Q6 K( V/ W# x
  86. ;9 B) P% F" |6 l- m4 n1 s1 P
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode
    % D" a6 g& W: ?  V
  88.          MOV   sp,r0                           ; write the stack pointer
    6 b* K7 q& C. z" n' P/ w0 ?4 P! j
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space) f+ O5 @# k. X4 X/ x7 d* G( u/ `
  90. ;
      D& b$ N! A5 j. k
  91. ; Set up the Stack for SVC mode; H4 i5 O) m/ U0 C
  92. ;
    * g0 _# s2 i$ p9 R  ?+ R7 j9 X
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    / E7 n5 E+ T$ k/ N1 s2 R
  94.          MOV   sp,r0                           ; write the stack pointer; v9 F$ H4 [7 p7 [5 P# q" ~! v: Y; |
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space7 Q3 m: i; i' B4 x) v
  96. ;- }/ N: W/ R2 z. E6 q
  97. ; Set up the Stack for USer/System mode
      |  Q+ P6 b4 j: n
  98. ;
    5 F3 w4 H/ S5 R
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode3 {, b* I4 c* ?) C
  100.          MOV   sp,r0                           ; write the stack pointer1 T- H1 F1 m0 W3 s# k0 p

  101. $ P" R* m3 W9 y5 S, |# }
  102. ;# R  W' ^/ t! W2 J
  103. ; Clear the BSS section here. b, Z# P+ B+ P, ]3 I
  104. ;
    * g) _/ Q' Q$ m% ?
  105. Clear_Bss_Section:
    / a/ i- |- c3 s6 s( `5 d; ~
  106. 2 P7 `: S$ X8 `1 s
  107.          LDR   r0, _bss_start                 ; Start address of BSS
    0 n" h4 p" V" I; p
  108.          LDR   r1, _bss_end                   ; End address of BSS0 Z( J& O1 V& O, }  k3 l
  109.          SUB   r1,r1,#4( U/ d: q8 L% S  |
  110.          MOV   r2, #07 _0 d" k- h! ~/ b
  111. Loop:: }9 A4 l: D" K% a$ t
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS# p. U5 Q8 G1 X/ m2 e8 {9 H
  113.          CMP   r0, r1
    - Y) ]2 u: O! e* O; y
  114.          BLE   Loop                            ; Clear till BSS end
    ! n4 }+ h4 d& W5 Z1 o  D, Z0 p
  115. & @) v2 k0 W  T6 ~  O& u6 U
  116.          BL    __TI_auto_init                  ; Call TI auto init
    # W, |" S& U7 H% Q. T5 K5 l' F9 I2 D

  117. 4 o0 J# f. l2 P# L* f5 g- H
  118. ;/ }: L9 o3 R4 ~- q# R% O
  119. ; Enter the start_boot function. The execution still happens in system mode+ p0 N+ @0 ?! {$ H; Y/ C6 l9 k
  120. ;/ B7 R0 y' i: Y4 l0 e$ f
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot1 b) [. ^& |6 D( u3 w5 {  J
  122.          MOV   lr,pc                           ; Dummy return
    & T; z: p1 u  a
  123.          BX    r10                             ; Branch to start_boot+ M2 I7 `1 g# C; i. O
  124.          SUB   pc, pc, #0x08                   ; looping0 x" `6 Y% Z9 _7 C( G# V% j

  125. 8 D4 h3 ^/ Z) X6 m2 @
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode$ Y, h/ S$ o7 q! K3 C0 u' _& P, {
  127. ;         BX   lr- q; h/ P) C0 t- ~. y0 t
  128. ;
    ' r. V7 j" h* m$ i  x
  129. ; End of the file
    , l, H( W) a" A1 L
  130. ;1 A  n; ^8 x6 @; C

  131. : [8 `0 t; _, ]1 H+ h- s" p' g
  132. _stackptr:6 H# v. q' `( b
  133.     .word __STACK_END( d$ p! Q. ?) x* G2 F
  134. _bss_start:0 }# O+ }* S3 u$ p" a. n* s
  135.     .word bss_start% Y( l6 u3 X6 u1 ~/ @7 K2 y! G
  136. _bss_end:
    8 m. S& W! s3 Y% g
  137.     .word bss_end: j2 G' r7 K- w* z
  138. _start_boot:, O8 |- h6 I" ]) D' A6 s
  139.     .word start_boot
    ! S3 g0 F( X' e4 t5 P8 \0 F5 Z  d; c
  140. _data_auto_init:
    9 w# E: u4 _. w
  141.     .word __TI_auto_init8 O( W4 C& O2 U, g7 r& @- \: d( k
  142.          .end
    # E3 `  i# U: T6 C9 c, L8 [
  143.    
      E' m% z& |8 |9 m# r+ Y

  144.   }, [. ^7 Q; ]; f* w, w
  145. % F) O# C1 W# C' r) b- \( R
复制代码

. `7 k; `' p2 d5 h8 T" m4 ^4 W) i$ M9 X$ K

3 ]5 H$ c3 E, a+ |7 W$ z: H
/ i5 H7 u6 T" w3 A+ V% V" i' D/ v/ q$ A
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:59  s. Y) }* W" @( Z1 `) `( c$ h
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
% ?- S; W7 b, O9 u# m8 zDSP CPU 不存在这个问题
) T9 d! p* w5 ~; _ ...

1 Q- }! b) a% ~4 Y8 K& D,高手~~~
# T& f4 S1 r: z& M正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))# S4 j1 M1 @4 O8 V

  2. / p' V. |1 `( }/ N$ [/ O
  3. int main(void) {
    2 t3 Q; _4 ?1 O- q+ B* _  a
  4.         HWREG(0x01C14124)=0x88800800;
    2 w( s6 i2 Z4 H! _9 I4 E
  5.         return 0;- Q) ^! [$ w" C3 a1 i) {
  6. }
    * X5 n" `1 E& t8 n7 Q
复制代码

: K1 u. A( ]/ ?, C( g0 P& p' @这个单步调试的时候就没问题,能够改变内存值。4 [# `& U" \2 ]$ Z2 H; P
再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!* i/ t( [7 R* V$ i

7 F* i" b, o1 h/ X* r3 g3 g7 |那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?
& G1 ~' R$ T% ~! B" M还是我应该找你们GPIO_LED那个程序调用函数的源代码?
2 M$ K8 j$ T9 s

点评

在 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 @& b- x3 [- Z+ _8 `$ C) k# @5 `会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...
, f# V! G9 X6 t8 }" E
# I2 f4 H- ]% t4 v. {& w
. d$ S, L4 s$ j
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
  H7 z0 p# x) g+ {% UDSP CPU 不存在这个问题
0 U" f1 t) \* a. C) O  M

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09
# m3 t* v5 I# y. ]* n* y- i可以读写的,应该是你的代码问题
1 R$ T9 B' ~  N$ Y  K! J4 a可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

2 g/ C2 V5 ?- ]0 ^# 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
6 `0 Q% J$ x6 V( F可以读写的,应该是你的代码问题
) b# @) x5 C, L+ _9 L3 y5 Q5 ~1 j, s0 j可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

$ X0 _4 ^0 E- B6 \; W0 A8 O9 t; g你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库  [- U4 i. z7 f. {/ \+ _4 g4 }$ M, N
函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))1 w2 |. E) B' D6 e5 V. i8 i" x
  2. ! A# Q: Y4 ^1 x4 ]  m6 e. R$ S
  3. int main(void) {3 m$ t, g. h$ Q% W$ ?
  4.         HWREG(0x01C14124)=0x88800800;, t" Q2 R. s8 s, s
  5.         return 0;- n# s. _. _" `2 N4 s% Q" Y
  6. }
    + [3 S2 X2 i3 s
复制代码

- {6 M: O% ?, }
1 p$ g2 S/ K4 ]- m0 n- d. H主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变) {3 \% M: C0 ^8 ?* L8 m4 |

# q- K7 i: i; E2 {* H" e: i% |" h7 _8 h! Z
然后我把程序变成如下形式:# C) I9 `6 j( ?% L3 p& B
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))! s( W+ G! U4 d# w0 x& o* N, W

  2. ' V/ Q0 a" w$ C& D% S
  3. int main(void) {) }. P% w4 F* t3 n
  4.         unsigned int temp;
    / u0 T6 u" w* z$ f
  5.         HWREG(0x01C14124)=0x88800800;7 P$ |) n4 f2 U
  6.         temp=HWREG(0x01C14124);' M/ A1 X. r3 [, s+ b
  7.         return 0;. w5 d5 z! k9 x# u' y1 L- f/ `
  8. }! Y0 M' z8 S  t9 [
复制代码
6 X& H1 }% r. H9 g

+ G% s( N; w/ _, n8 m. k8 e运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变
$ Z% c  \) Y: z% k通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000( o- {& ~3 B  [4 Z9 f& G4 o6 j
然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题/ j: q# t  x# W- F& x& U' x
6 Y' |( \  q% O/ T/ u" u! @. k; v
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:09) Q3 C/ m$ K( G
可以读写的,应该是你的代码问题
* b* X0 l* `# }* n6 M5 q可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

0 W0 M7 u* u7 \+ S$ E9 e0 N: \首先,谢谢你的回复!! w+ h/ w9 k  T& g

, c: F& m! f/ ?8 D* k3 e( |8 q你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
* Y& E- K0 b! w: }3 C( M第二句直接对地址写数据,有什么不对吗?
5 m# h1 m; v& }- k- s# ]. n* T) x- H1 r- q" h  b. H4 R0 D
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?
6 \$ W# Q6 ]: v. ?$ i3 }3 R6 M' E& T! g+ w0 G0 K& d
因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
板凳
发表于 2017-4-21 09:09:04 | 只看该作者
可以读写的,应该是你的代码问题
- [' F3 {: t8 }  a! ~' l* |可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验+ T6 Q: ?+ E8 E1 Y' z
实验一:6 C3 t7 _6 F8 [" [! N) U* J; E0 C
在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句; b  E3 \6 R+ a7 M/ _3 p' y

  T/ [- K8 k' B6 h                HWREG(0x01E26010)=0xFFFFFFD8;1 y" L1 I5 C8 C/ d6 t
                HWREG(0x01E26010)=0xFFFFFFFF;: a( [# t. `. X: |  C7 x
单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010); A- M: N, E  C% k$ Z
若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。1 H) x7 D0 @9 h* ]- P  K5 T/ O% Y$ J5 m

8 w  `- @& {* `; I) y) s实验二:9 T# v5 x7 \$ L
若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
3 [2 G6 a" X0 z1 B- Y1 b5 E, L0 Q$ t% l# j: x! E" v. q
                value1=HWREG(0x01C14124);! h( p) Q" o% h* a( ?

% [7 Q6 _+ k8 e通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 04:54 , Processed in 0.053349 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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