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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑 : q2 y2 `% ^* W) X- Y, `" f. V
* W  x4 F9 }- S7 {  }
我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器
, a2 S' \+ D% j6 ~8 x8 L; b
6 g! I% C3 Y$ h& H; g
+ N9 `2 I( u, U/ f' r& `+ t* L, k我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:
" ^3 y% J+ b$ E& O; |4 L6 X+ J1 }4 F5 W4 J5 p( V
! J$ q( ^% e$ C7 J' X$ x
int main(void) {. i  F0 s" a4 Q% d" K* I
        
9 Z9 m9 \% l. P8 x2 N        //使能GPIO# j; U$ F7 ~4 ~/ m/ T' I* ?+ G
        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
  q: l; G0 ^  s8 A1 \& Y$ ~                            PSC_MDCTL_NEXT_ENABLE);
, q  v6 W5 E7 n7 @' t4 x
# t: o) g6 _+ C% B: [6 x        HWREG(0x01C14124)=0x88800800;
2 H5 j( k! T- N! [# `5 r2 B}0 u# B' }- l: X" l+ n

0 B, z: L4 q1 c& D' v单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3), J* d/ I+ W# i4 T5 e
运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)
7 d3 ~" R4 a0 c- B2 N1 x6 H  Z3 d7 y
我想问一下,为什么我管脚设置不成功???0 J9 Y3 _1 T, T" d% P: L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
10#
 楼主| 发表于 2017-4-21 15:01:04 | 只看该作者
希望缄默 发表于 2017-4-21 14:502 c8 d' m/ o" y+ t9 X
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句; l% F$ w, r0 }) L3 |
/* 重新配置程序入口点 */
% J' k2 \! Y1 g5 Y1 s-e Entry这是一 ...
( ~6 I1 i1 k( ], G) {& u( J6 m
你贴的代码太复杂了,我得慢慢看,慢慢吸收~" ?9 X9 C* b9 h- I" O: D+ p
3 a( Y8 N6 t3 Q4 l  T! z
不过非常感谢,
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2017-4-21 14:50:51 | 只看该作者
unicorn06 发表于 2017-4-21 14:34
  Q" `8 F. `% x,高手~~~
  [4 D$ t! n9 k& h1 w) `( d! @6 o正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心 ...
( }; p  U* L/ x4 a& R# i6 j
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句/ c" c, r% j+ Y/ T
/* 重新配置程序入口点 *// ^5 W- k7 }5 n# L, c( F. f. i
-e Entry
  1. /****************************************************************************/9 S# v% X. v  g, A
  2. /*                                                                          */7 K& p; g. l0 m" @6 ^0 U+ ?5 e% r* N
  3. /*              OMAPL138 及 DSP C6748 内存空间分配定义                      */
    $ d+ l: J' W7 R: G
  4. /*                                                                          */
    & }, T( N4 Q" e& t- B: O
  5. /*              2015年04月20日                                              */
    ' x0 \" v* K6 x
  6. /*                                                                          */1 \: M% I) {7 G3 x
  7. /****************************************************************************/
    : Y, U5 j  ]! a" {: ~8 h- h2 Y
  8. /* 堆栈 */* r* a3 s3 S  t
  9. -stack  0x8000" X( W3 ^+ r( r+ R5 N  G& E
  10. -heap   0x20000 m! U0 ~) ]/ I1 S, W) S

  11. ! N) _7 |) k  Z, P2 J
  12. /* 重新配置程序入口点 */* T; d5 @. |# A0 n- i
  13. -e Entry
    % ~- ?) q* r% X! e* x
  14. ( a: P. r7 b- l' B1 J
  15. MEMORY" h4 c8 G5 U% B% v" Z7 q* M
  16. {
    , S1 J' V. w1 Y
  17. #ifdef DSP_CORE/ y0 ]5 X: q3 T
  18. /****************************************************************************/' W& H  N' P) t+ c
  19. /*                                                                          */$ ~8 k, x" ?' `* o' G
  20. /*              DSP 专有内存区域                                            */
    " x( z. o' C' e5 U( B* _
  21. /*                                                                          */3 R2 t3 F; M' v% k
  22. /****************************************************************************/" N6 Q* P. b$ g4 l1 Y: H6 D
  23.     DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */
    : ?" d. |. |( \# _
  24.     DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */4 w+ R: X/ S! p
  25.     DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */
    * Z) C+ `' N, j9 B6 _# }0 D
  26.     DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */6 W2 _0 C" ^) X; I. |2 W
  27. #endif
复制代码
这是一段汇编代码用于切换到特权模式9 j% n5 l9 M3 z0 i
) C, J' S" x5 h. k- C- j- J% I
OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm% Z& h* X' T' Q7 n0 s: J
  1. ;******************************************************************************0 F, ~3 m% k% L; }
  2. ;
    . R! Z; b: i$ ?0 \2 Q+ }
  3. ; init.asm - Init code routines$ G% }( H! P( G: [3 \4 X$ r
  4. ;
    : Q. R, q- G# B7 `% }1 C
  5. ; Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/( I4 B1 o* y( s3 G8 ]
  6. ; All rights reserved.& Q" j" L2 C9 t9 c* x
  7. ;
    ; R* C7 s+ s, A: `- x
  8. ;******************************************************************************
    ) R3 A. z* z# b$ v; \- B
  9. ;****************************** Global Symbols*******************************
    $ o- F( g7 v% t# w$ K) E6 Q
  10.         .global Entry
    0 w5 i& E0 X# y2 P0 y
  11.         .global start_boot
    7 r- N+ ?" q7 P
  12.         .global __TI_auto_init
    / T, }, c5 m$ F* G0 y3 v

  13. # j) f. W0 Y( ~) W. S
  14.         .ref __stack
    ! E: I, ]' t( N) K6 J* u
  15.         .ref __STACK_END
    2 U7 [) z* |% Q+ O
  16.         .ref bss_start
    7 ]7 a( y# q& q& l) ?( `% y
  17.         .ref bss_end
    ! @  }5 p* R" r5 q0 |9 X% b
  18.         .ref start_boot/ |; D# k6 ~% Q4 h2 [
  19. - V* G$ U: w! W
  20. ;************************ Internal Definitions ******************************
    : O6 m5 L+ A' `: {8 v; n
  21. ;
    & M8 g. t, S7 \/ J$ O: y
  22. ; Define the stack sizes for different modes. The user/system mode will use3 a/ D/ j/ I  n8 j5 h0 s& @
  23. ; the rest of the total stack size/ w( e; k- E& k8 ?! ~
  24. ;+ {6 r8 S5 A" L/ o( ?
  25. 9 ]- X  e' e" _1 }$ c, I" @
  26. UND_STACK_SIZE .set 0x8
    ; _- u+ `7 |+ G* {, {5 t$ L& D5 N
  27. ABT_STACK_SIZE .set 0x82 j# p% H/ `+ J; E& l0 s6 l
  28. FIQ_STACK_SIZE .set 0x8
    ; T( {' Y  p- O8 d0 N- U$ P
  29. IRQ_STACK_SIZE .set 0x500
    * s( L& H( o) h# K3 @: a8 Z1 j
  30. SVC_STACK_SIZE .set 0x8
    7 ?* i$ {  I; k" _  K1 \- ]

  31. 4 S( c# e# b) r. X
  32. ;
    . U# \/ f0 e3 \' E2 I; y9 a- I
  33. ; to set the mode bits in CPSR for different modes% W; O; i0 M# C$ z
  34. ;- L. C0 i. f$ ?- B
  35. , A4 M! V4 Y; d# b
  36. MODE_USR .set 0x10+ v' y4 P3 l1 _" A, y
  37. MODE_FIQ .set 0x11
    3 \# C/ E- f. H$ r& Z$ H- z7 A
  38. MODE_IRQ .set 0x12
    / K( R) m' W8 p7 S4 h, a9 t# n" F& ~
  39. MODE_SVC .set 0x13( Z* p" [3 Y' k- `
  40. MODE_ABT .set 0x17) C& p! J/ Q* D1 t. ]' L" a
  41. MODE_UND .set 0x1B; U& D8 v: Z* g' R& n: t
  42. MODE_SYS .set 0x1F
    ) b( t; A$ t- x; ^
  43. ' Q3 O3 U$ C2 ?* Q8 t7 [
  44. I_F_BIT .set 0xC08 j+ r1 A- u8 X. ?  H0 w

  45. 7 i9 |. d' }# q. e7 y1 c
  46. ;**************************** Code Seection ***********************************
    ' ]$ y8 e! X% B1 Z' {# e3 b+ m: U2 M
  47.         .text3 s+ l: P/ g% E, J
  48. # a% C6 p: @; J9 g7 k
  49. ;- \1 @, N. m+ I5 z; I7 ]* Q9 p
  50. ; This code is assembled for ARM instructions5 {+ G1 l9 \- B8 ?
  51. ;! f1 ]  y$ E  M4 @: [
  52.         .state32
    2 J: c6 x! e+ V7 P3 N5 k, H, B
  53. " e" E: ^6 {0 Z9 a
  54. ;******************************************************************************1 v* S) V" n, u/ v( u
  55. ;  G4 H5 s, j: K$ B! w. S. U
  56. ;******************************************************************************
    ! r, P: p; ^; J4 t8 ~- W
  57. ;
    ( t0 \( ~* N0 k+ O, q
  58. ; The reset handler sets up the stack pointers for all the modes. The FIQ and9 J* _1 _; X; Y3 m
  59. ; IRQ shall be disabled during this. Then, clearthe BSS sections, switch to the0 H) S( \6 y2 s6 z+ F) _
  60. ;  main() function.4 X; ]9 U5 E" m+ i+ Z
  61. ;
    : I7 r% o% ?5 t& X% T
  62. Entry:
    7 w/ r5 F7 \& e' {8 b. [
  63. ;
    ' U9 o. Q( Y5 P: H- V
  64. ; Set up the Stack for Undefined mode$ p# o8 I4 V0 k, i; i" y0 C7 o: s! C
  65. ;! y# M8 H6 H# z  i4 p
  66.          LDR   r0, _stackptr                   ; Read and align the stack pointer
    3 _) `2 }2 F& r: z/ P% z
  67.          SUB   r0, r0, #8
    - q; V, J4 g! B; P7 S  U* k. m
  68.          BIC   r0, r0, #7
    ! s  W  e5 X. H% m- D. t
  69.          MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode5 D7 }, R- C: B7 t" I' F
  70.          MOV   sp,r0                           ; write the stack pointer
      `% d. y; n& f0 W8 H. I7 `. Z
  71.          SUB   r0, r0, #UND_STACK_SIZE         ; give stack space: K. Y8 P( b% P" G4 B( q# ]# a# T
  72. ;, F7 D  ~; b9 U5 X
  73. ; Set up the Stack for abort mode
    0 h8 v( U; `) t2 ?' R
  74. ;
    ! }+ x; D4 z" E3 |* U" h( z
  75.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       ; Change to abort mode
    2 C5 J6 F% g7 e8 l
  76.          MOV   sp, r0                          ; write the stack pointer
    * D6 e+ m/ O& {
  77.          SUB   r0,r0, #ABT_STACK_SIZE          ; give stack space, ]; o! A  s. Y
  78. ;" I8 C7 p6 y" C2 @2 Y1 B1 f- Q7 ~
  79. ; Set up the Stack for FIQ mode
    - b# Y2 k. _1 v- x" P  ?
  80. ;
    - ^$ C% @: T9 |9 O: ?
  81.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       ; change to FIQ mode
    $ Z% ]4 A2 W  l6 {- F( D
  82.          MOV   sp,r0                           ; write the stack pointer
    , w( R1 u& X* R, q% }- Z
  83.          SUB   r0,r0, #FIQ_STACK_SIZE          ; give stack space
    ' x* V2 {. s" n/ X; b# n; }2 D
  84. ;. z6 s5 x) j$ W5 `0 t7 [' L* E
  85. ; Set up the Stack for IRQ mode
    0 y& R4 Z5 x) P" v# \0 m
  86. ;
    ' w* [9 e0 W. s8 I; x' ]1 d6 \
  87.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       ; change to IRQ mode
    ' `/ p' k7 ^5 _6 @
  88.          MOV   sp,r0                           ; write the stack pointer$ ]9 p& y  w7 J. s5 m2 E0 h
  89.          SUB   r0,r0, #IRQ_STACK_SIZE          ; give stack space
    1 u: R3 `4 R' E- G3 W* E
  90. ;- g' H- y* B  H
  91. ; Set up the Stack for SVC mode
    4 S+ [/ e% F/ p# M
  92. ;8 u6 B0 ~. o1 T# L$ d; H
  93.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode, a) q0 ^" H+ d/ ~
  94.          MOV   sp,r0                           ; write the stack pointer
    + ~1 a3 f5 U7 c0 s) \
  95.          SUB   r0,r0, #SVC_STACK_SIZE          ; give stack space
    $ D7 A# D9 a% U' `
  96. ;
    5 v3 g- t. I; b, Q' U
  97. ; Set up the Stack for USer/System mode
    1 Y# E4 M- f5 v+ l& ~
  98. ;
    # r+ h% ^& m- _2 G3 U
  99.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       ; change to system mode( a& G# V  \+ r  h1 R( A0 D
  100.          MOV   sp,r0                           ; write the stack pointer
    ' Y9 ]( j; V. g; f8 t# Y+ J& y
  101. 2 f  ^# m; J* v. ?4 v' ^
  102. ;
    # N/ [$ e5 Y' Y0 h& v- K( V
  103. ; Clear the BSS section here9 `6 z8 g, Z/ v9 x" v" c2 E
  104. ;
    ) S  D) d; d$ \
  105. Clear_Bss_Section:
    * G' T, `0 J1 A8 u2 ^3 z. M& O( A

  106. : Z( r6 Y- U* j
  107.          LDR   r0, _bss_start                 ; Start address of BSS
      o. l# c; t! l/ E$ A
  108.          LDR   r1, _bss_end                   ; End address of BSS
    8 U$ z8 x( C- S$ D5 N  [
  109.          SUB   r1,r1,#4
    ( U( [; j* P- F: B* _3 u& K+ v
  110.          MOV   r2, #0
    ' f( l; p7 @- A
  111. Loop:
    2 X( U, X( R& S* U8 g
  112.          STR   r2, [r0], #4                    ; Clear one word in BSS8 d- _4 _9 y0 f# {7 H, g
  113.          CMP   r0, r1+ w$ h+ A) ]$ g
  114.          BLE   Loop                            ; Clear till BSS end0 u  O  S8 O3 Y' Z( r' N6 S
  115. 7 f; ^+ X& H% ~: @9 f" [! D
  116.          BL    __TI_auto_init                  ; Call TI auto init
    % W4 [0 g( [9 E7 K, i
  117. 7 X# g5 V3 C: ^& W  t
  118. ;. C. e7 g5 d8 S
  119. ; Enter the start_boot function. The execution still happens in system mode
    , m8 P# S* \! r+ v1 ]2 [
  120. ;$ m  z; D$ [4 r3 E
  121.          LDR   r10, _start_boot                 ; Get the address of start_boot: g# i6 N$ Y: ]( z: }: h$ L5 Q
  122.          MOV   lr,pc                           ; Dummy return
    . s' {1 W. a" g, m9 V4 s
  123.          BX    r10                             ; Branch to start_boot
    $ `: j* J0 L% U/ H$ ~$ [
  124.          SUB   pc, pc, #0x08                   ; looping
    ( X% ~% A& g- y

  125. 1 y7 M# S! g/ K3 Z7 N% K5 X; h
  126. ;         MSR   cpsr_c, #MODE_SVC|I_F_BIT       ; change to SVC mode
    2 d+ i8 U3 y2 m* k$ F  w2 P
  127. ;         BX   lr
    * ]! p7 {* Q* \7 j6 O; K
  128. ;% ]$ k) n. _# G- d" c1 y1 O# q& ?% s
  129. ; End of the file
    8 q/ P  y+ Z! W
  130. ;2 e& `8 m/ K" A6 j, M. N
  131. . c+ L( s9 q# i. ^2 w
  132. _stackptr:
    1 o* D4 M& W8 ~% k: F
  133.     .word __STACK_END% @0 p0 P( J' V' f3 l
  134. _bss_start:
    / U. |! y1 \% m2 M9 D; l
  135.     .word bss_start/ K- e5 \# o; e' V( p
  136. _bss_end:. ]7 N1 ]/ G* U1 [' H
  137.     .word bss_end0 Z6 f9 O! s9 ^1 J6 @
  138. _start_boot:
    7 A; W% Z) `5 S9 F6 p
  139.     .word start_boot
    % d) C- o- Z; l  Z* H/ N
  140. _data_auto_init:/ s) o1 X8 o7 E6 _' Y
  141.     .word __TI_auto_init9 O' j. h7 B; K% z! L6 N
  142.          .end* \& a5 M/ u6 m5 K
  143.     4 k( I6 d# u8 K; X; a) a( e# x
  144. 0 V$ h) o1 z0 |) R+ S. L' V9 N( h5 y

  145. ( u7 C& S" r. o
复制代码
$ G* e/ g7 ^" |- `
$ D; T& R( v  Z$ j9 W

8 G+ V  W; l) k6 f& Y
+ a  l$ y! f$ l* w7 |' P% i+ U' b) t4 r$ _+ x7 Q0 S! O/ ]: V6 d
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
8#
 楼主| 发表于 2017-4-21 14:34:08 | 只看该作者
希望缄默 发表于 2017-4-21 13:590 o3 R: \0 i% x- ~6 t) d9 {
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式; ^3 Z/ F1 x, n
DSP CPU 不存在这个问题
; F% R5 n1 ~8 v' K ...
! Q( ~0 @/ U& C+ L# y
,高手~~~6 F# ?9 R( n, q3 M: x
正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    . q6 ?2 d$ C, b2 h% w/ L) `

  2.   {: w+ I+ A, n$ X
  3. int main(void) {
    . C- U( n2 g# y1 Q- C7 T
  4.         HWREG(0x01C14124)=0x88800800;
      W. f1 T) V8 }# y$ ?/ O) I5 r
  5.         return 0;* l4 f% P$ |) B' x9 u
  6. }/ U2 W( X5 V! I, ~
复制代码

/ m& ]! c1 V( T这个单步调试的时候就没问题,能够改变内存值。
; F; |. w2 }8 _5 c; b再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!0 |7 E9 L( v4 G7 N1 C9 X% y  x7 i

+ v$ `* k, Y, \- _1 g6 I5 L# @那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?
/ @2 x6 p! \$ ~6 s+ K" }- _还是我应该找你们GPIO_LED那个程序调用函数的源代码?6 M( L5 c! \% ?9 h4 ~/ ~% X( H

点评

在 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
1 E2 |! @8 [" t( b0 s5 }会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。 ...

) x' S/ k  W. u/ j" A. \
  e' d9 w+ W% Q& Z3 P0 ~  V, K" F  k" r5 d
ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式3 @+ n4 w5 T( b  @  B
DSP CPU 不存在这个问题  l: T, Y, K- m3 O. \

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 11:40:50 | 只看该作者
human 发表于 2017-4-21 09:09
$ m/ e. R8 B7 U1 y3 c可以读写的,应该是你的代码问题- Z( E* ?: X$ W
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

( N0 j7 c5 Y* P" c; K, f' d会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[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:098 e/ I' m, \3 x. @# B
可以读写的,应该是你的代码问题# M; z; y/ [8 ~0 i. f: D
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
. W+ }0 J  Y( ^1 C5 k
你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库
; c1 v+ L& _. F函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    # [  K1 _5 H+ n# B  g# {4 ^
  2. ' l$ D! k: L7 l( o8 |
  3. int main(void) {  E: f3 d& `% K
  4.         HWREG(0x01C14124)=0x88800800;
    # C* ?& g' G/ W8 X
  5.         return 0;) X1 f! G6 [0 e1 b
  6. }
    7 a2 v& r3 ]- w$ Y: r
复制代码
  @  Z6 f' W1 n7 f

& q& p( @! U/ F% f9 D主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变# T+ F% |& T4 P2 }* Z
. S9 g( n0 O, f( V* R  Q
$ k9 K! ?8 Z( G) K7 o  L
然后我把程序变成如下形式:8 f! I# |- l0 Z- O( E/ ]" [* a0 K
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))+ ^9 y; G" _8 M2 |3 d
  2. ! y2 Y( g. a! z) W, n
  3. int main(void) {
    / z0 [" b: _6 \! q: F
  4.         unsigned int temp;
    ' k* j# f! ~( k9 g8 X
  5.         HWREG(0x01C14124)=0x88800800;" Y" z$ y) A6 c6 b
  6.         temp=HWREG(0x01C14124);
    # a" h( ?/ K# l9 D9 \  e
  7.         return 0;- ]% b; g" w/ ~3 w4 L& L4 K
  8. }1 D8 `0 E3 J! f" M. ^
复制代码
( W! b% }4 u1 R" D& U3 A* i; P
/ @! a# p0 a3 w/ j% M
运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变$ [7 n( w5 f# @# h' X1 w
通过手动改变内存地址“0x01C14124”位置的数据,该为0x800000005 d; y: q+ n& G+ j- L  V% _. ?3 m
然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题
" p$ Y4 B, \  |8 y- H8 j7 K/ ~7 m/ y/ `5 ]5 M
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 10:01:07 | 只看该作者
human 发表于 2017-4-21 09:09) q+ l7 z& A8 k4 L
可以读写的,应该是你的代码问题( T4 r# M. `- ^' N; I
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
# O6 b% @& i. Q& N8 t8 P7 J. z
首先,谢谢你的回复!
1 y8 p& m& z9 o! \7 T9 ]
- S) |  s9 ^2 P* z/ h你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
+ z  }! \$ g" a, a4 \第二句直接对地址写数据,有什么不对吗?
. A% d% F* c% {+ V/ G" `, |" [! n2 F, r4 m& s
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?
% _+ q' t4 V0 \1 U& H% a
, E% H8 v/ \* }9 J8 z0 D7 K* k: l因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
板凳
发表于 2017-4-21 09:09:04 | 只看该作者
可以读写的,应该是你的代码问题, z+ x9 a" E* Q7 g% J& e6 j, _* l
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 只看该作者
在上述不好使的情况下,我又做了两个实验
3 A! F3 R9 _' N3 z4 ~+ D0 S8 D* }6 W实验一:
6 `2 c" N. n; ^, D/ f4 x2 h在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句
, @) ]1 I  r+ _1 k0 I6 t. h# O7 }
& s3 x# j2 {- a. _& j' f                HWREG(0x01E26010)=0xFFFFFFD8;
3 f6 d3 x) E8 {9 H4 J& m                HWREG(0x01E26010)=0xFFFFFFFF;( |( y; z/ t1 I# w& Q
单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)+ i$ O5 F/ Z4 `
若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。6 T' x, x2 Q9 D8 c; t: ]

3 A: i7 h+ `- T7 r- j/ Q5 Q实验二:
( g$ U* A* ]% x3 p# Q) `3 L  W若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
# @, Y6 E1 H, ^, X( k  c# K# b/ Y
                value1=HWREG(0x01C14124);
6 r% I. }- |) n# }3 y
7 L, N9 R: g/ u& U通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 06:08 , Processed in 0.050537 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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