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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
跳转到指定楼层
楼主
发表于 2017-4-20 20:19:42 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 unicorn06 于 2017-4-20 20:29 编辑 ) q2 F2 U7 a& w1 {' p4 I

* E" w- D& i+ e我用的是创龙的TL138F-EVM开发板,创龙的560V2仿真器8 q6 _( _! n" s3 K& R4 D
8 T4 Q: f5 v8 J0 c9 \; K

, L; E  H4 X3 l3 s( Y4 Q# x& L我自己新建的工程,没有加载gel文件,新建工程的目的是把GP0[0]这个管脚设置成IO口,程序如下:
9 k2 ]* P( _% K* ?" g& K, T% Y! S3 L6 k: R7 }

0 K: M& }9 i* w6 @; h+ hint main(void) {6 V8 ^4 E/ k; [6 ]) c/ D
        / F: Y  |' {8 }8 \/ G9 M
        //使能GPIO
# l0 y, k4 g/ @        PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,. n4 U( S4 W1 Z$ {: x
                            PSC_MDCTL_NEXT_ENABLE);
  i- s& |0 l6 v( E3 {$ J" g( Q. N& [8 x
        HWREG(0x01C14124)=0x88800800;
' ?1 v, E0 c; `$ C0 f' c8 p}6 C8 ^1 z5 A; ]0 O( q
4 @5 D& D+ b; ]( L) s( A. E
单步调试程序,运行完第一句PSCModuleControl后,内存地址“0x01E2780C”位置的值变为“0x00001E03”(应该是说MDSTAT3寄存器state位为3)" G8 i# L- ~" x- M  [0 T7 ^) q
运行完第二句HWREG(0x01C14124)=0x88800800;后,内存地址“0x01C14124”位置的值为“0x00000000”,(寄存器PINMUX1的地址为0x01C14124,也就是说,管脚复用没有设置成功)
1 N2 r9 @$ A9 \" C2 w; `1 [# X
  W4 O  I7 ]4 C7 z我想问一下,为什么我管脚设置不成功???& l' Y/ X& Q7 J* x( I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
沙发
 楼主| 发表于 2017-4-20 20:28:00 | 显示全部楼层
在上述不好使的情况下,我又做了两个实验" {, S% d  U8 i5 ~6 j1 ~6 ~% x5 t# ~/ N
实验一:" x8 c2 R8 o- \
在HWREG(0x01C14124)=0x88800800语句后加入如下两条语句# |' E* P( u- D+ |' g4 s  s
+ k& ~" W6 t* |# E
                HWREG(0x01E26010)=0xFFFFFFD8;
) K7 q# V. k% A                HWREG(0x01E26010)=0xFFFFFFFF;
6 y) j- C' o; D/ x单步调试,可以看到内存地址“0x01E26010”位置的值随着语句运行而改变(寄存器DIR01的地址为0x01E26010)
7 N& [: j6 S/ Y0 X: a, J& i若我再CCS环境中手动更改PINMUX1的值为0x88800800,我再执行上述两条语句,可以看到开发板的LED会亮灭变化。* H0 z6 h2 F) C, Y( }
/ {7 Z/ ?. J) p4 k+ y
实验二:
8 V* l7 Y" F! `! _5 v; J. b若我再CCS环境中手动更改PINMUX1的值为0x88800800后,执行如下语句; [% K+ P# t5 r% k4 f% N- R
# l# N% s- n( o' V6 E
                value1=HWREG(0x01C14124);- ~, {. y" j' Q: G

  b( ~$ k6 O' d* y9 b通过CCS观察“value1”这个变量值变为0x88800800,这说明寄存器PINMUX1只能读,不能写。
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
板凳
 楼主| 发表于 2017-4-21 10:01:07 | 显示全部楼层
human 发表于 2017-4-21 09:09/ d% S3 C4 D% ^8 Z$ [$ S- W! o
可以读写的,应该是你的代码问题" K$ x* u3 e& R6 B* ]
可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
' i: c! s9 y# C0 ?+ D7 [
首先,谢谢你的回复!
! T$ t. F7 B: I& z+ G. Q% x5 ~3 f
6 `: T6 G1 c8 C* N$ F7 S1 x你说是代码问题,我就两句代码,第一句代码通过寄存器状态查看,貌似没有问题;
2 b7 m: u) V% U/ ]+ ^第二句直接对地址写数据,有什么不对吗?. j0 I+ S$ ?* n: v; ?* n

5 F; ^2 W0 b8 o! |而且我认为即使没有第一句使能GPIO,PINMUX应该也能设置,但是我的就是不好使。会不会是我ccs设置有问题?3 j& k7 `/ I. Y6 o1 K. e

( u7 y4 n/ K! _2 c因为我用你们的omapl138中led的例子,设置管脚复用,也是有时候好使,有时候不好使
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
地板
 楼主| 发表于 2017-4-21 11:39:04 | 显示全部楼层
human 发表于 2017-4-21 09:09; a- q7 l+ M; G( u2 n1 t
可以读写的,应该是你的代码问题
4 j- }' a) ~# O. B* @& Y4 b3 a0 K可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...

+ \, m/ u5 {: H3 R# a0 w你认为是我代码问题,那我把代码简化了一下。新建了一个程序,没有加载gel,没有任何头文件和库
" t8 ]; l/ Z& e函数编写如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))! m" p$ A, [* r+ k

  2. 8 e' a3 M  b! h! g: q8 G
  3. int main(void) {
    & k" a' s' n( j6 A% {: X
  4.         HWREG(0x01C14124)=0x88800800;8 I* E; m6 `2 Q* g/ A  i6 K
  5.         return 0;
    " c% a/ i6 [) g$ W
  6. }
    . D" @5 X/ ]9 Y" [9 e
复制代码
$ x2 {: ?3 V/ i# e+ w8 V7 y

$ P  s) m, c1 R' n! K5 v& a主函数就一条语句,单步运行,内存地址“0x01C14124”位置的数值并不改变
" `  y& a0 Z9 i% F$ n0 q2 b( n  U, e9 ~; y
4 d9 J! f. m. {" r! l7 I4 O0 M
然后我把程序变成如下形式:9 e. d1 X* S& h9 L! u% a
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    ) a6 L, N6 M8 p6 R( B2 g4 H

  2. 1 O( M5 Q( w3 f  l( E- q  i$ R1 ?/ u9 L
  3. int main(void) {$ P( s: z7 @4 O0 I
  4.         unsigned int temp;2 e8 C5 O% M: L4 ^: t
  5.         HWREG(0x01C14124)=0x88800800;
    4 Y0 ?3 _0 Z, X' r! `
  6.         temp=HWREG(0x01C14124);' n1 y0 h5 c) l* Q
  7.         return 0;
    . K) Q% w$ |6 L, F/ E/ P
  8. }. x* ^1 X8 n( E" [; P/ S
复制代码
& z0 C8 M8 L. w, k7 l
! H' O' q; E4 p0 t; J
运行第一句HWREG(0x01C14124)=0x88800800后,内存地址“0x01C14124”位置的数值并不改变
' Q4 `' W. e' M8 W. h; l. V: R* F通过手动改变内存地址“0x01C14124”位置的数据,该为0x80000000
! W4 Q4 m! M. l/ z9 a* i# Q然后运行第二句temp=HWREG(0x01C14124),可以看到temp已经变为0x80000000,说明该位置是可以读取的,这也说明仿真器和目标板连接没问题
  D! w* O+ \; S0 H( B  C* K5 h! y9 k1 K! v) T- w
回复 支持 反对

使用道具 举报

3

主题

15

帖子

79

积分

注册会员

Rank: 2

积分
79
5#
 楼主| 发表于 2017-4-21 11:40:50 | 显示全部楼层
human 发表于 2017-4-21 09:09# N) r0 o3 }+ N5 l* z
可以读写的,应该是你的代码问题
4 z# M5 |9 B) e) O7 f+ ?( Q可以参考-基于StarterWare的TMS320C6748裸机程序开发入门详解教程 ...
+ b# ]$ |8 b* k2 K  \" X* C
会不会你们的开发板和仿真器哪里不兼容?因为我感觉已经编写最简单的语句也不好使。

点评

[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
+ A8 @# s& k( R$ p5 j  GARM CPU 默认工作在用户权限无法改写 SYSCFG 寄存器的 需要切换到特权模式
& c' B+ w7 B0 n/ m: l, s3 z4 SDSP CPU 不存在这个问题3 Y0 |3 E* l1 S7 {0 ^
...
3 A. a2 E; C0 T3 u
,高手~~~
$ H! h0 r5 t9 h: e2 Y正想和你们说这个事呢,我还买了一块c6748的核心板,实在没办法了,我就把c6748核心板安装到底板上了。然后重新配置ccs,编译运行文件,代码如下:
  1. #define HWREG(x)     (*((volatile unsigned int *)(x)))
    0 p! [( L; X8 U1 R! M2 ]
  2. + E5 ?: l  L, A  b
  3. int main(void) {
    ) Y8 M: E6 \' T. S/ t  L+ y- \- ]
  4.         HWREG(0x01C14124)=0x88800800;7 `& R) v& e. M
  5.         return 0;" U( I* Z4 P4 s; I+ a1 z4 S6 r
  6. }* b3 }5 A% R6 ^! ^
复制代码

5 T" m9 H- v0 e7 l* R这个单步调试的时候就没问题,能够改变内存值。
+ ?+ G( ~& c; \4 V) O6 C5 Z, I再换回omapl138核心板,还是不行,我还以为我买的这个核心板有问题呢。现在明白了,非常感谢,这点破事弄了一个星期了!) B: K) r# Q; t7 y& |" ?3 i4 F+ n. M
+ }5 m0 \7 q( t* d( {7 i8 a
那既然是这样,还有点问题,我买你们的TL138F-EVM开发板,你们给的光盘中,有说明arm用户权限的编程资料吗?
& u: B6 Y- V5 {3 B还是我应该找你们GPIO_LED那个程序调用函数的源代码?
8 s) n/ ?  F5 V8 A  w7 Z

点评

在 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
+ ^% o. @/ O8 h0 d  h  [3 Y/ x+ m在 ARM 端 StarterWare 例程中 CMD 文件比 DSP 端多了这样一句4 q& H* L2 l6 I# P" V# q, T: l
/* 重新配置程序入口点 */
$ m% L" _# e. p3 `6 h) T! N4 b# }2 N-e Entry这是一 ...
" s( y; H# T( @, `1 _% g
你贴的代码太复杂了,我得慢慢看,慢慢吸收~
: D" o5 j7 w- Z4 m+ y, P' ]* p1 Q- e- b
不过非常感谢,
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 05:54 , Processed in 0.041906 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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