This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28035PNT的GPIO输出错误求助

Other Parts Discussed in Thread: CONTROLSUITE

ccs5.3下,TMS320F28035PNT的GPIOA16--GPIO23用作输出,默认为高,低有效。

控制按顺序将GPIOA16--GPIO23中的每一位先输出低1.2秒后该位恢复为高,重复两次。即

    GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO16  = 1;  延时5秒

   GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO16  = 1;

延时5

    GpioDataRegs.GPACLEAR.bit.GPIO17 = 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO17  = 1;  延时5秒

   GpioDataRegs.GPACLEAR.bit.GPIO17 = 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO17  = 1;

延时5秒

     ……

延时5

    GpioDataRegs.GPACLEAR.bit.GPIO23 = 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO23  = 1;  延时5秒

   GpioDataRegs.GPACLEAR.bit.GPIO23= 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO23  = 1;

 延时5秒

    GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO16  = 1;  延时5秒

   GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;      延时1.2秒   GpioDataRegs.GPASET.bit.GPIO16  = 1;

……

在控制过程中发现:有时xx位由低变高后应该下一位(XX+1位)为低,结果却是xx位输出为低。

例如本应:GPIOA16为低  --》延时1.2秒--》GPIOA16为高  --》延时5秒 --》GPIOA16为低  --》延时1.2秒--》GPIOA16为高     ------>

                    GPIOA17为低  --》延时1.2秒--》GPIOA17为高  --》延时5秒 --》GPIOA17为低  --》延时1.2秒--》GPIOA17为高

  实际为:GPIOA16为低  --》延时1.2秒--》GPIOA16为高  --》延时5秒 --》GPIOA16为低  --》延时1.2秒--》GPIOA16为高     ------>  

                   GPIOA16为低  --》延时1.2秒--》GPIOA17为高  --》延时5秒 --》GPIOA17为低  --》延时1.2秒--》GPIOA17为高

                 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑-此处是GPIOA16为低,而不是GPIOA17为低----------|

这种现象随机出现,比较频繁,且不仅仅限于GPIOA16,GPIOA17。GPIOA16~GPIOA23均会出现。

但有个特点是,位号由GPIOAxx变换时总为GPIOA(xx+1)时,是本应GPIOA(xx+1)位为低,实际是GPIOAxx位再次为低。

且位号GPIOAxx,GPIOAxx+1……GPIOAxx+7顺序、逆序、乱序运行时,总是本该下一个位变低,实际却是上一位再次为低(仅一次,且偶尔随机出现)。

好像是GPIOxDAT的读-改-写,在下位变化时,仍将上一位值写入GPIO xDAT寄存器一样。可是我每一位改变后都有延时的呀?

且将GPxDAT、GPxSet、GPxClear、GPxToggle的bit设置方式,all设置方式都用了,每次写GPIO寄存器都加了1ms延时,还是不行。

在每一位改变时将GPIOxx连续几遍设为低或在每一位改变时将GPIOA重新初始化,也不行。

实在是没招了,请求哪位高手路过,指点一二。万分感谢!

板子也投了不少,咋办呀??!!!!!

  • junlong,

    这种现象很奇怪。希望你能够提供更多的信息帮助我们判断。

    1.你的代码是否有引用controlSUITE中的源文件?

    2. 希望你能够提供GPIO的初始化代码,如果方便的话,可以提供这部分测试代码。

    3. 你可以把其他引脚的代码去除掉,只留下GPIO16和GPIO17的代码,这样方便判断,不知道你有没有F28035简单的开发板,例如最小系统的controlCARD之类的,将代码load到开发板,再测试一下,排除外部电路的影响。

    我认为GPIOCLEAR和GPIOSET不应该存在这个读修改写的问题。

    Eric

  • 首先,感谢您快速专业的解答。

    确实像您认为的那样GPIOCLEAR和GPIOSET不应该存在这个读修改写的问题。

    今天仔细分析程序,发现有一个控制标志复位的时机不恰当。导致了上述问题。现已解决。

    再次感谢您的热心解答,对耽误您的宝贵时间感到十分抱歉。

    祝 祺!

  • 您好  能介绍几位熟悉设计编程TMS320F28035PNT芯片工程师我认识吗