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.

[参考译文] TMS320F2.8388万D:GPIO输出问题

Guru**** 2526700 points
Other Parts Discussed in Thread: TMDSHSECDOCK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1098116/tms320f28388d-gpio-output-problems

部件号:TMS320F2.8388万D
主题中讨论的其他部件:TMDSCNCD2.8388万DTMDSHSECDOCK

我正在180引脚TMDSHSECDOCK坞站中使用的TMDSCNCD2.8388万D控制卡(评估板)上使用TMS320F2.8388万D。

在我尝试其中一个GPIO上的输出之前,此电路板的一切工作都很正常。 它输出正确,但似乎损坏了2个其他GPIO输出。

具体来说,我要分别从GPIO 31和34输出LOW来打开板上的LED1和LED2,因为它们通过有线方式以GPIO低输出打开。
这样做很好:
GpioDataRegs.GPADAT.bit.GPIO31 = 0;//打开LED1。
GpioDataRegs.GPBDAT.bit.GPIO34 = 0;//打开LED2。

接下来,我尝试通过分别将0和1写入GPIO 31和34来打开LED1和关闭LED2,如下所示:
GpioDataRegs.GPADAT.bit.GPIO31 = 0;//打开LED1。
GpioDataRegs.GPBDAT.bit.GPIO34 = 1;//关闭LED2。

这很好。

但是,如果我通过执行此操作从GPIO45输出高电压(它没有连接到任何LED,只是一个示波器探头)。

GpioDataRegs.GPBDAT.bit.GPIO45 = 1;

这将从GPIO45正确输出高电压

但是

两个LED指示灯都立即亮起,表示GPIO31和GPIO34都已返回到0的输出。

如果在GPIO31和GPIO34之前反转GPIO45的顺序设置,一切都正常:LED1打开,LED2关闭,GPIO45输出高。

有什么想法,为什么颠倒这一顺序可以消除这种类似浮华的行为?

谢谢。

这种情况会发生的任何想法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议您使用GPxSET,GPxCLEAR和GPxTOGGLE寄存器来修改GPIO引脚状态。 使用GPxDAT寄存器,您可以同时读取和写入总共32个GPIO,这可能会导致问题(请参阅TRM一节"数字通用I/O控制"下的"GPyDAT寄存器")。 使用其他寄存器时,您保证一次只修改一个GPIO。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好了,谢谢。 回顾一下,我做这项工作的时间

    GpioDataRegs.GPADAT.bit.GPIO31 = 0;//打开LED1。
    GpioDataRegs.GPBDAT.bit.GPIO34 = 1;//关闭LED2。
    GpioDataRegs.GPBDAT.bit.GPIO45 = 1;//输出A高

    最后一个指令(适用于GPIO45)损坏了GPIO31和GPIO34 ,因此两者都设置为低,但当我根据您的建议将GPIO45指令更改为此值时

    GpioDataRegs.GPBSET.bit.GPIO45 = 1;//输出A高

    这解决了问题。

    请确保(根据您在《技术参考手册》中引用的章节),我还更改了前2个说明,因此可以使用此说明,这一点很好:

    GpioDataRegs.GPACLEAR.bit.GPIO31 = 1;//打开LED1
    GpioDataRegs.GPBSET.bit.GPIO34 = 1;//关闭LED2
    GpioDataRegs.GPBSET.bit.GPIO45 = 1;//输出A高