打印

28335不靠谱?! 28335的GPIO的怪问题!

[复制链接]
1981|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AD797|  楼主 | 2014-10-29 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        5月份发现如下程序
        ---------------------------------------
        #define ad9_rest            GpioDataRegs.GPCDAT.bit.GPIO78
        ad9_rest=0;
        asm(" RPT #5 ||NOP");
        ad9_rest=1;
        asm(" RPT #5 ||NOP");
        ad9_rest=0;
        --------------------------------------

        ad9_rest=0; 对应的引脚连续运行却为高电平,但单步调试是对的!

        如果程序最后一句写两遍 即
        #define ad9_rest            GpioDataRegs.GPCDAT.bit.GPIO78
        ad9_rest=0;
        asm(" RPT #5 ||NOP");
        ad9_rest=1;
        asm(" RPT #5 ||NOP");
        ad9_rest=0;
        ad9_rest=0;
        也可以,ad9_rest对应的引脚被置低了,可以了。当时就这么做了。

       
        10月份又发现如下问题
        多处对a_2Y(GPIO2)置高的语句没反应!换成其他引脚也没反应! 单步调试有时是对的!
        其中一段程序如下:
        -----------------------------------------------
        #define a_1X          GpioDataRegs.GPADAT.bit.GPIO5
        #define a_2Y          GpioDataRegs.GPADAT.bit.GPIO2

        a_2Y = ads1255_OFF;
        a_1X = ads1255_OFF;
        -----------------------------------------------
        但这段程序5月份的时候没发现问题!

        将程序修改为如下后,a_2Y(GPIO2)有反应了!
        #define a_1X          GpioDataRegs.GPADAT.bit.GPIO5
        #define a_2Y          GpioDataRegs.GPADAT.bit.GPIO2

        a_2Y = ads1255_OFF;
        asm(" RPT #251 ||NOP");
        a_1X = ads1255_OFF;

        28335跑在60MHz,5月的时候开发环境是ccs5,当时发现ccs5的其他问题,改ccs6,10月份是ccs6。

相关帖子

沙发
小木欧尼| | 2014-10-29 15:53 | 只看该作者
感谢楼主的跟踪回复

使用特权

评论回复
板凳
iwqt1983| | 2014-10-29 17:13 | 只看该作者
你用法的不对吧,估计很少这样用F28335的IO的,一般置位或是清零或是反转,还处在传统51的思想里面,快跳出来吧!!

使用特权

评论回复
地板
AD797|  楼主 | 2014-10-29 17:36 | 只看该作者
iwqt1983 发表于 2014-10-29 17:13
你用法的不对吧,估计很少这样用F28335的IO的,一般置位或是清零或是反转,还处在传统51的思想里面 ...

虽然TI文档建议使用GPxSET, GPxCLEAR, and GPxTOGGLE来设置IO输出,但上面的程序中也不会出现TI文档中说的使用GPxDAT的问题吧。
为什么那个赋值语句重复一遍就可以呢? 为什么插入一个延时就可以呢? 为什么不是全不可以?只是有一些有时候呢?
ad9_rest=0; 的汇编代码是 AND  @0x0, #0xf7ff  难道有问题?

TI的文档中的建议如下,但我上面的应用不会出现其所说的情况。

When using the GPxDAT register to change the level of an output pin, you should be cautious not to accidentally change the level of another pin. For example, if you mean to change the output latch level of GPIOA0 by writing to the GPADAT register bit 0, using a read-modify-write instruction. The problem can occur if another I/O port A signal changes level between the read and the write stage of the instruction. You can also change the state of that output latch. You can avoid this scenario by using the GPxSET, GPxCLEAR, and GPxTOGGLE registers to load the output latch instead.

使用特权

评论回复
5
lijiabaobei| | 2014-10-29 17:43 | 只看该作者
看了下 不太懂 帮楼主顶一下昂

使用特权

评论回复
6
iwqt1983| | 2014-10-30 08:23 | 只看该作者
只要能实现功能,怎样可以怎样来,那是芯片设计规划的事情,不是我们能左右的.不要想太多了.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

1003

帖子

19

粉丝