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.

[参考译文] TMS320F280049C:GPIO 脉冲意外短路

Guru**** 2465890 points
Other Parts Discussed in Thread: TMS320F280049C, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1490976/tms320f280049c-unexpectedly-short-gpio-pulse

器件型号:TMS320F280049C
主题中讨论的其他器件: SysConfig

工具与软件:

您好!

我正在使用进行一个项目 TMS320F280049C MCU 和我遇到一个 GPIO 引脚出现异常行为。 在我的应用中、我是在控制 GPIO22 GPIO15 GPIO14 使用GPADAT具有2D 数组和索引的寄存器、如下所示:

GpioDataRegs.GPADAT.bit.GPIO22 = muxstates[currentMuxIndex][0];
GpioDataRegs.GPADAT.bit.GPIO15 = muxstates[currentMuxIndex][1];
GpioDataRegs.GPADAT.bit.GPIO14 = muxstates[currentMuxIndex][2];

对于此代码、GPIO14或 GPIO15 (我不记得确切地说是哪一个)的行为有误。 引脚按预期变为高电平、但保持高电平的时间仅为~20ns、而不是预期的10 µs。 有趣的是、GPIO22的行为正常、该引脚上不会出现此类问题。

这样更改 GPIO 分配顺序后、问题似乎消失:

GpioDataRegs.GPADAT.bit.GPIO15 = muxstates[currentMuxIndex][1];
GpioDataRegs.GPADAT.bit.GPIO22 = muxstates[currentMuxIndex][0];
GpioDataRegs.GPADAT.bit.GPIO14 = muxstates[currentMuxIndex][2];

我想设置相邻 GPIO 会导致一些数字信号冲突、但这是一个很粗略的猜测。

我使用允许设置从 SysConfig 配置了所有 GPIO 引脚:




非常感谢任何解释。

谢谢!

Gökhan μ A

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

    您好、Gokhan

    感谢您的咨询。 我以前没有见过这个问题。 使用 DriverLib 版本设置 GPIO 输出时、是否会看到相同的短 GPIO 脉冲行为、如下所示:

    GPIO_writePin(22, muxStates[currentMuxIndex][0]);
    GPIO_writePin(15, muxStates[currentMuxIndex][1]);
    GPIO_writePin(14, muxStates[currentMuxIndex][2]);

    此外,请确保在初始化期间只调用 Board_init ()函数一次,而不是在整个程序中重复调用。  

    此致、

    Peter

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

    尊敬的 Peter:

    感谢您的咨询。

    我将尝试 driverlib 函数、不过理想情况下它不是我需要的解决方案、因为这里的执行时间至关重要。

    除此之外,我确信 board_init ()被调用一次。

    İ 仍猜测是否成功设置相邻 GPIO。  

    当我成功设置 GPIO22和23时、在22或23处仍然存在相同的问题。

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

    您好!

    我尝试了 driverlib 函数、它工作正常。  
    但我仍想知道为什么使用 GPADAT 寄存器会发生这种情况

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

    尊敬的 Gokhan:

    看到这种行为很有趣。 如果删除调试预定义符号、GPIO_writePin 函数将删除代码中任何不必要的检查、这应该与直接写入 GPADAT 寄存器的时序相同。 让我谘询一些同事、看看是否有这方面的情况

    此致、

    Peter

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

    尊敬的 Gokhan:

    勘误表 开漏配置可能驱动短高电平脉冲中有一条 GPIO 通知。  

    您可以验证 GPIO Pad Config 寄存器、以检查在 SysConfig 板初始化之后您的 GPIO 是否可能更改为 Open Drain Config?

    此致、

    Peter

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

    尊敬的 Peter:
    我 在调试中检查了 GPAODR 寄存器、而设置代码如下所示(错误的顺序):

    GpioDataRegs.GPADAT.bit.GPIO22 = muxstates[currentMuxIndex][0];
    GpioDataRegs.GPADAT.bit.GPIO15 = muxstates[currentMuxIndex][1];
    GpioDataRegs.GPADAT.bit.GPIO14 = muxstates[currentMuxIndex][2];

    所有 GPIO 引脚的 GPAODR 值为0、这意味着它们处于推挽输出模式、如在 syscfg 中设置的那样。

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

    尊敬的 Gokhan:

    感谢您的确认。 我目前正在我的终端测试此功能以了解发生此行为的原因、将与我们的设计团队核实以更好地理解

    此致、

    Peter