您好!
使用28377S 时发现以下问题。 当我通过 GPACLEAR 将 GPIO2设置为0时、GPIO2偶尔会更改为0、然后立即更改为1。 代码中确认没有其他地方可以操作 GPIO2。 这种无法复位为0的情况很难重现、每数十万次出现一次。
清除 GPIO2的代码如下:
if(xTxEnable_2)
{
SciaRegs.SCICTL1.bit.TXENA = 1;
SciaRegs.SCICTL2.bit.TXINTENA = 1;
GpioDataRegs.GPASET.bit.GPIO2 = 1;
}
else
{
SciaRegs.SCICTL1.bit.TXENA = 0;
SciaRegs.SCICTL2.bit.TXINTENA = 0;
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;
}
GPIO2正常运行时的波形如下:

GPIO2运行失败时的波形如下:

和,I 在项目的其他位置使用 GPADAT 直接修改 I2C 中的 GPIO0和 GPIO1。 这可能是由这个引起的吗? 代码如下所示:
#define hoSdaDirection GpioCtrlRegs.GPADIR.bit.GPIO0
#define hioSDA GpioDataRegs.GPADAT.bit.GPIO0
#define hoSCL GpioDataRegs.GPADAT.bit.GPIO1
#define hoWC GpioDataRegs.GPDDAT.bit.GPIO127
/*functions*/
void sI2CStart(void)
{
EALLOW;
hoSdaDirection = cOutputPin;
EDIS;
hioSDA=1;
sDelay2us();
hoSCL=1; /* clock */
sDelay2us();
hioSDA=0;
sDelay2us();
hoSCL=0; /* clock */
sDelay2us();
EALLOW;
hoSdaDirection=cInputPin;
EDIS;
//hioSDA=1;
}
INT16U sBitIn(void)
{
INT16U bInBitData;
// DINT;
hoSCL=1; /* clock */
sDelay2us();
EALLOW;
hoSdaDirection=cInputPin;
EDIS;
bInBitData=hioSDA;
sDelay2us();
hoSCL=0; /* clock */
// EINT;
sDelay2us();
return(bInBitData);
}