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.
您好!
我有以下非常简单的代码
GpioDataRegs.GPADAT.bit.GPIO21 = 1; GpioDataRegs.GPADAT.bit.GPIO20 = 1; GpioDataRegs.GPADAT.bit.GPIO19 = 1;
GPIO19和 GPIO21被设定为高电平。 但是出于某种原因、GPIO20未设置为高电平。 (当我使用示波器查看 GPIO20以及在 Code Composer Studio 调试器的"Registers"选项卡中查看 GpioDataRegs 时、我都会看到这一点。)
让这种情况变得更加陌生的是、如果我将代码更改为:
GpioDataRegs.GPADAT.bit.GPIO21 = 1; GpioDataRegs.GPADAT.bit.GPIO19 = 1; GpioDataRegs.GPADAT.bit.GPIO20 = 1;
然后 GPIO21和 GPIO20被设定为高电平、但不是 GPIO19。 因此、我中间的任何一个似乎都没有设置。
但是、如果从 Code Composer Studio 的"Registers"选项卡中、我手动将全部三个设置为高电平、则全部三个设置为高电平并保持高电平(在调试器和示波器中)。
我很难解释这种奇怪的行为。 我是否缺少一些简单的东西或者 TMS320F28379D 芯片是否可能损坏?
我 正在将 GpioCtrlRegs 设置为在代码中输出。
EALLOW; GpioCtrlRegs.GPADIR.bit.GPIO21 = 1; GpioCtrlRegs.GPADIR.bit.GPIO20 = 1; GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; EDIS;
我已经尝试回收微控制器的电源、重新启动 Code Composer Studio 并重新启动计算机。 同样的行为仍然存在。
谢谢、
Kevin
Vivek、
感谢您的回答。 我现在通过阅读链接了解了这个问题。
我想强制低/高一组 GPIO、具体取决于每个 GPIO 的用户输入。 是否有比使用 if/else 语句更巧妙的方法来使用 Set/Clear?
使用 GPADAT 时、我可以为每个 GPIO 执行一个简单的代码行
GpioCtrlRegs.GPADIR.bit.GPIO21 = UserGPIO21Control; //force GPIO21 high or low depending on UserGPIO21Control
现在、当使用 Set/Clear 时、我需要为每个 GPIO 使用一个额外的 if 语句
if (UserGPIO21Control == 0) { GpioDataRegs.GPACLEAR.bit.GPIO21 = 1; //force GPIO21 low } else { GpioDataRegs.GPACLEAR.bit.GPIO21 = 1; //force GPIO21 high }
这不是一个 GPIO 的大问题、但我有一组 GPIO、我需要根据用户输入强制拉低/拉高、因此我想知道是否有比使用一组 if/else 语句更好的方法。
谢谢、
Kevin
大家好、Kevin。
我认为您需要这样写才能实现基于用户输入的引脚切换。
此致、
Vivek Singh