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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑 3 c  B' O; B# Y6 A
6 z( e. l, j. s) x- w
我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器5 g% A$ k2 |" @* z% D2 i) e) A
7 b# u  M6 n' b, ~* M) e) p( p

  p* a. `6 V' @( T6 S% e我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:
$ j2 B5 Z/ D  B9 \* s0 e
+ |- N- |, `/ R# K5 o" K3 ]8 P" T& X" ^8 a: i+ J9 n- r9 j. m
int main(void) {
7 u& @$ D' O& j/ ]( _7 h        " s) |' `. Q1 ~4 m' I& {' m
        //使能GPIO
8 A, e; E) l/ _' a5 }        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,- E: |3 o' ^$ H( B
                            PSC_MDCTL_NEXT_ENABLE);
+ R) M2 E9 ~% q% N. G. f6 K' o2 O0 q" d
        HWREG(0x01C14124)=0x88800800;5 t# G0 i* B$ y  t4 m- F/ s
}/ E- L8 v( \6 }9 `7 A) `5 R

, D! |& z8 m$ M! |& l  y; Y; [单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)7 |4 a# f: V' g/ T5 }1 o) s" Z
运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)( p* ?" Z  j# E' Y- ^

8 ~  Q& a7 w- t0 o5 ]+ b我想问一下,为什么我管脚设置不成功???
$ k, B2 {0 \* d6 N0 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 显示全部楼层
在上述不好使的情况下,我又做了两个实验
, P# a! V9 h- r1 q. f" Z实验一:
3 O4 m0 q" [- I4 R2 v* X在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句  C' S( M+ z1 H) I) [, l

  \2 U1 d" a- S! J' R                HWREG(0x01E26010)=0xFFFFFFD8;
4 _) o8 I& ?  y8 t& K) C3 G                HWREG(0x01E26010)=0xFFFFFFFF;' K" O- _  G! O0 K- _
单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)
. X7 W3 b8 S) B, t. \4 M: c) H( L7 N若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。( K! v! x1 r$ |3 n/ A

8 i1 o8 v* ]: \- V3 ?9 v实验二:
( E# Z4 Q- T" \( }! z# ^若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句
+ k8 \3 d  O  v, k$ a) i
7 }% h: d( W2 v2 r1 u                 value1=HWREG(0x01C14124);
7 Y% W; B0 s4 _5 Z' S4 n7 ~7 C4 {! Q
通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
板凳
 楼主| 发表于 2017-4-21 10:01:07 | 显示全部楼层
human 发表于 2017-4-21 09:09
; @% U7 ~7 V, b  l  K- L. `* H. |: a可以读写的,应该是你的代码问题
4 ~. g$ k. f3 p7 \可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
. y- @5 W5 l: B. i! n) r
首先,谢谢你的回复!
( \7 y# e2 e" U9 {$ h7 s9 B
  g, R: `! I7 J; h( N$ X5 M8 J. t你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
4 e1 [- L/ }# v/ Y6 B第二句直接对地址写数据,有什么不对吗?% ^( v, c& }1 ~3 i( p3 b
% i, ~3 y" K: X/ m- R9 r9 ?9 U
而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?
" G# U+ }/ C0 i/ N( m- u6 O6 E( {4 s+ E& C. k; u( L
因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 11:39:04 | 显示全部楼层
human 发表于 2017-4-21 09:09
7 H% P9 m. L1 ]可以读写的,应该是你的代码问题
) _0 e- @3 X# b  ^0 X$ U可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
4 J" }. s$ @8 _& x
你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库+ l2 {; q0 x& F% F- |5 b. [" i
函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    : @3 H. S& u6 s
  2. ; K. h3 R; G" v7 \
  3. int main(void) {1 i5 x5 {9 I+ S: F8 [' {6 B
  4.         HWREG(0x01C14124)=0x88800800;
    ! O* Z, v- G+ ?; L6 F+ h
  5.         return 0;0 v  N& N: U4 p( a5 s
  6. }
    , K+ M) r& U  K& Y; `7 @
复制代码

+ a. k. D' N( \1 b
5 X: @5 E- G; a# U主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变
0 d# {7 O* x6 C6 a& B. e1 l4 i0 n4 x* h4 ^

1 H4 A! i6 \. l然后我把程序变成如下形式:
& _, g/ `6 k" D0 X# }5 j9 f
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))1 H' \; A/ `3 `! \; j
  2. 2 L0 J" ^4 F& F9 p
  3. int main(void) {
    ! n  ^3 \  J5 d( |9 [
  4.         unsigned int temp;8 r& F! v& O- F  x
  5.         HWREG(0x01C14124)=0x88800800;4 ^% K! O$ @8 N& l
  6.         temp=HWREG(0x01C14124);. _" ^3 W2 ~9 W$ Z) K. u
  7.         return 0;
      c' _8 F& _. J7 ^: ^: E  W+ E7 T
  8. }
    3 I2 Y! D4 L% q! W) b" O
复制代码

5 A! \" h" S3 ^: L' K2 E. g; j* V: G2 l4 B7 l) _$ C9 P
运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变
( k5 f/ d5 K7 n7 `  |通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000
2 \( A# s, o8 o$ x然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题& \) f9 ]/ y7 w
$ d( _; n4 v/ d) F
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
5#
 楼主| 发表于 2017-4-21 11:40:50 | 显示全部楼层
human 发表于 2017-4-21 09:093 W0 h! Z) }+ j8 H% N1 n' S8 c
可以读写的,应该是你的代码问题# D# a( `5 O8 y- X
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

9 V1 F+ d- T$ a3 C( W$ m会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[attachimg]2209[/attachimg] ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式 DSP CPU 不存在这个问题  详情 回复 发表于 2017-4-21 13:59
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
6#
 楼主| 发表于 2017-4-21 14:34:08 | 显示全部楼层
希望缄默 发表于 2017-4-21 13:59
; [. s  U, k+ C7 {ARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式3 |( W4 ^% [8 |
DSP CPU 不存在这个问题
% ?8 X1 t1 A/ {, t5 ?% \% P+ L ...
; D" ?* T8 `5 e
,高手~~~
+ m( g' q% ?: `) q, M正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    % N2 ~& o1 d9 l& Q2 Z* H9 X1 |

  2. + b! ^& ~0 m& }4 ^
  3. int main(void) {
    ' b+ X% O( p2 ^* j% p4 {8 \2 \9 B9 c
  4.         HWREG(0x01C14124)=0x88800800;
    : b( m; z4 n: G, Y& ~6 c
  5.         return 0;
    7 x! ~& M( t# F9 K% K
  6. }
    : Q$ C+ y4 N2 c8 P
复制代码
6 \5 c4 k8 [# v# F% j; A7 [% ~
这个单步调试的时候就没问题,能够改变内存值。
0 c) s; z/ Y$ q+ _6 h再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!
9 `, J+ c* }6 t4 K: E$ K" H1 l) Z9 |3 L6 I# w8 D
那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?4 s  o7 \5 Q7 e$ Q3 i: S/ C
还是我应该找你们GPIO_LED那个程序调用函数的源代码?6 |8 P6 c( {/ X  }2 A& f, I

点评

在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句 这是一段汇编代码用于切换到特权模式 OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm  详情 回复 发表于 2017-4-21 14:50
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
7#
 楼主| 发表于 2017-4-21 15:01:04 | 显示全部楼层
希望缄默 发表于 2017-4-21 14:50" H1 h- O+ J; s+ @' T$ d: d
在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句+ {, C- U8 w& t& F$ ]- ~; H& A
/* 重新配置程序入口点 */
9 y0 ^& Y" x) a, Q9 ~: R-e Entry这是一 ...

5 J# O( b# ^, n: Y2 {8 X你贴的代码太复杂了,我得慢慢看,慢慢吸收~
' T$ Z; o0 y8 y5 O7 y- W, y5 o9 Z1 r( y
不过非常感谢,
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 03:46 , Processed in 0.044176 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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