TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28035PNT的GPIO输出错误求助

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 liang:

回复 Eric Ma:

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

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

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

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

祝 祺!

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重新初始化,也不行。

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

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

xiansheng xie1:

回复 Eric Ma:

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

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28035PNT的GPIO输出错误求助
分享到: 更多 (0)