工具与软件:
嗨、
我注意到对于被配置为输出的特定 GPIO 有一些奇怪的事情。 下面的代码是如何配置 GPIO30和 GPIO25。 当我的项目正在运行时、在具有大量开关噪声的情况下、这些 GPIO 往往会在我不写入任何命令的情况下自行"切换"。
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 0; // GPIO30 = GPIO30
GpioCtrlRegs.GPADIR.bit.GPIO30 = 1; // GPIO30 =输出
GpioCtrlRegs.GPAPUD.bit.GPIO30 = 0; // Disable pullup on GPIO30 (禁用 GPIO30上的上拉)
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; // GPIO25 = GPIO25
GpioCtrlRegs.GPADIR.bit.GPIO25 = 1; // GPIO25 =输出
GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Disable pullup on GPIO25 (禁用 GPIO25上的上拉)
这些 GPIO 输出很少有在某些高电压开关下布线、它在某些情况下会拾取大量噪声。 当项目处于低噪声情况下时、GPIO 运行良好、仅执行其编程设定的操作。 但当它处于高噪声环境中时、有时这个 GPIO 会自行切换。 在调试期间监控 GpioDataRegs.GPADAT.bit.GPIO30位时、它将自行从0->1或1->0变化。 我已经删除了所有 set/clear/dat 命令、以便完全独立地观察行为。 下面是 GPIO30和 GPIO25这种行为的屏幕截图(它们都在 HV 开关噪声源附近布线)。
那么、我的问题是为什么会发生这种情况? 如果我的 GPIO 设置为输出、那么在没有我的代码告诉它的情况下、它不应该切换/锁存/更改状态。 高噪声是否有变化会影响该 GPIO 来改变状态?
我们现在要做的工作是、假设微控制器不断读取该 GPIO、就像它是输入一样、并且在读取噪声和进行自切换时可能会自我欺骗。 因此、下面的代码是额外的鉴定窗口 GPIO 设置、假设它是输入。 下面的代码是采用这种额外设置时 GPIO30和 GPIO25的屏幕截图。
GpioCtrlRegs.GPACTRL.bit.QUALPRD3 = 0x4B; //(75x2)/(90Mhz)=周期
GpioCtrlRegs.GPAQSEL2.bit.GPIO30 = 2; //6采样窗口
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 2; //6采样窗口
感谢您的任何帮助或见解、非常感谢