TI中文支持网
TI专业的中文技术问题咨询交流网站

280049芯片GPIO口上电后第一次动作时间过久

280049芯片调试,在初始化时先用调用函数InitGpio()集中配置了GPIO的特性,如配置为普通IO模式、输出引脚、不同步,然后继续配置完其他几个模块后,调用函数Init_Specific_Gpio()将GPIO先拉低,延时10us后再拉高。但通过示波器实测该引脚拉低后1.5ms才拉高,具体代码如下:

void Hw_Init(void)
{
    InitSysCtrl();
   //CMPSS module initialization must earlier than EPWM module
   //
    InitCMPSS();
    InitXBAR();
    InitEPwm();
    InitGpio();
    Init_Can_Data();
    InitEcan();
    InitEcap();
    InitEQep();
    InitAdc();
    InitSpi();
    Init_Specific_Gpio();
    // this delay for PGA411 power on
    DEVICE_DELAY_US(12000);
    //Init_Resolver();
   Init_Eqep_Initial_Val();
   Init_Data_Log();
}
void InitGpio(void)
{
    GPIO_setPadConfig(28,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_28_GPIO28);
    GPIO_setDirectionMode(28,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(34,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_34_GPIO34);
    GPIO_setDirectionMode(34,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(25,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_25_GPIO25);
    GPIO_setDirectionMode(25,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(25,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(33,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_33_GPIO33);
    GPIO_setDirectionMode(33,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(33,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(22,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_22_GPIO22);
    GPIO_setDirectionMode(22,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(22,GPIO_QUAL_SYNC);
    //PIN22脚默认是analog模式,此处是将其配置为普通IO模式
    //仅22和23脚有此特性
    GPIO_setAnalogMode(22,GPIO_ANALOG_DISABLED);
}
void Init_Specific_Gpio(void)
{
    u16 i=0;
    //SPI for PGA411 related
    GPIO_writePin(15, 1);
    //SPI for EEPROM related
    GPIO_writePin(11, 1);
    //PGA411 reset related
    for(i=0;i<10;i++)
    {
        GPIO_writePin(34, 0);
        DEVICE_DELAY_US(10);
        GPIO_writePin(34, 1);
    }
}

但该引脚一旦动作后,后续再操作该引脚就正常了(如连续10次拉低-拉高GPIO34,除去第一次,后续9次均正常)。

若配置完IO口特性后立即操作IO口,则正常动作。不清楚是什么原因,希望有高手不吝赐教。

Green Deng:请问你测试的是从上电到第一次动作的时间还是怎么测试的?

280049芯片调试,在初始化时先用调用函数InitGpio()集中配置了GPIO的特性,如配置为普通IO模式、输出引脚、不同步,然后继续配置完其他几个模块后,调用函数Init_Specific_Gpio()将GPIO先拉低,延时10us后再拉高。但通过示波器实测该引脚拉低后1.5ms才拉高,具体代码如下:

void Hw_Init(void)
{
    InitSysCtrl();
   //CMPSS module initialization must earlier than EPWM module
   //
    InitCMPSS();
    InitXBAR();
    InitEPwm();
    InitGpio();
    Init_Can_Data();
    InitEcan();
    InitEcap();
    InitEQep();
    InitAdc();
    InitSpi();
    Init_Specific_Gpio();
    // this delay for PGA411 power on
    DEVICE_DELAY_US(12000);
    //Init_Resolver();
   Init_Eqep_Initial_Val();
   Init_Data_Log();
}
void InitGpio(void)
{
    GPIO_setPadConfig(28,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_28_GPIO28);
    GPIO_setDirectionMode(28,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(34,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_34_GPIO34);
    GPIO_setDirectionMode(34,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(25,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_25_GPIO25);
    GPIO_setDirectionMode(25,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(25,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(33,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_33_GPIO33);
    GPIO_setDirectionMode(33,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(33,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(22,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_22_GPIO22);
    GPIO_setDirectionMode(22,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(22,GPIO_QUAL_SYNC);
    //PIN22脚默认是analog模式,此处是将其配置为普通IO模式
    //仅22和23脚有此特性
    GPIO_setAnalogMode(22,GPIO_ANALOG_DISABLED);
}
void Init_Specific_Gpio(void)
{
    u16 i=0;
    //SPI for PGA411 related
    GPIO_writePin(15, 1);
    //SPI for EEPROM related
    GPIO_writePin(11, 1);
    //PGA411 reset related
    for(i=0;i<10;i++)
    {
        GPIO_writePin(34, 0);
        DEVICE_DELAY_US(10);
        GPIO_writePin(34, 1);
    }
}

但该引脚一旦动作后,后续再操作该引脚就正常了(如连续10次拉低-拉高GPIO34,除去第一次,后续9次均正常)。

若配置完IO口特性后立即操作IO口,则正常动作。不清楚是什么原因,希望有高手不吝赐教。

mangui zhang:

你这个for循环里面有问题啊,GPIO写1后马上调到写0,所以给1没有预留时间延时

    for(i=0;i<10;i++)    {        GPIO_writePin(34, 0);        DEVICE_DELAY_US(10);        GPIO_writePin(34, 1);    }

280049芯片调试,在初始化时先用调用函数InitGpio()集中配置了GPIO的特性,如配置为普通IO模式、输出引脚、不同步,然后继续配置完其他几个模块后,调用函数Init_Specific_Gpio()将GPIO先拉低,延时10us后再拉高。但通过示波器实测该引脚拉低后1.5ms才拉高,具体代码如下:

void Hw_Init(void)
{
    InitSysCtrl();
   //CMPSS module initialization must earlier than EPWM module
   //
    InitCMPSS();
    InitXBAR();
    InitEPwm();
    InitGpio();
    Init_Can_Data();
    InitEcan();
    InitEcap();
    InitEQep();
    InitAdc();
    InitSpi();
    Init_Specific_Gpio();
    // this delay for PGA411 power on
    DEVICE_DELAY_US(12000);
    //Init_Resolver();
   Init_Eqep_Initial_Val();
   Init_Data_Log();
}
void InitGpio(void)
{
    GPIO_setPadConfig(28,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_28_GPIO28);
    GPIO_setDirectionMode(28,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(34,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_34_GPIO34);
    GPIO_setDirectionMode(34,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(25,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_25_GPIO25);
    GPIO_setDirectionMode(25,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(25,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(33,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_33_GPIO33);
    GPIO_setDirectionMode(33,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(33,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(22,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_22_GPIO22);
    GPIO_setDirectionMode(22,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(22,GPIO_QUAL_SYNC);
    //PIN22脚默认是analog模式,此处是将其配置为普通IO模式
    //仅22和23脚有此特性
    GPIO_setAnalogMode(22,GPIO_ANALOG_DISABLED);
}
void Init_Specific_Gpio(void)
{
    u16 i=0;
    //SPI for PGA411 related
    GPIO_writePin(15, 1);
    //SPI for EEPROM related
    GPIO_writePin(11, 1);
    //PGA411 reset related
    for(i=0;i<10;i++)
    {
        GPIO_writePin(34, 0);
        DEVICE_DELAY_US(10);
        GPIO_writePin(34, 1);
    }
}

但该引脚一旦动作后,后续再操作该引脚就正常了(如连续10次拉低-拉高GPIO34,除去第一次,后续9次均正常)。

若配置完IO口特性后立即操作IO口,则正常动作。不清楚是什么原因,希望有高手不吝赐教。

user6285712:

回复 Green Deng:

是上电后第一次IO口拉低到拉高之间的间隔时间是否符合设定值。

280049芯片调试,在初始化时先用调用函数InitGpio()集中配置了GPIO的特性,如配置为普通IO模式、输出引脚、不同步,然后继续配置完其他几个模块后,调用函数Init_Specific_Gpio()将GPIO先拉低,延时10us后再拉高。但通过示波器实测该引脚拉低后1.5ms才拉高,具体代码如下:

void Hw_Init(void)
{
    InitSysCtrl();
   //CMPSS module initialization must earlier than EPWM module
   //
    InitCMPSS();
    InitXBAR();
    InitEPwm();
    InitGpio();
    Init_Can_Data();
    InitEcan();
    InitEcap();
    InitEQep();
    InitAdc();
    InitSpi();
    Init_Specific_Gpio();
    // this delay for PGA411 power on
    DEVICE_DELAY_US(12000);
    //Init_Resolver();
   Init_Eqep_Initial_Val();
   Init_Data_Log();
}
void InitGpio(void)
{
    GPIO_setPadConfig(28,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_28_GPIO28);
    GPIO_setDirectionMode(28,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(34,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_34_GPIO34);
    GPIO_setDirectionMode(34,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(25,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_25_GPIO25);
    GPIO_setDirectionMode(25,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(25,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(33,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_33_GPIO33);
    GPIO_setDirectionMode(33,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(33,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(22,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_22_GPIO22);
    GPIO_setDirectionMode(22,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(22,GPIO_QUAL_SYNC);
    //PIN22脚默认是analog模式,此处是将其配置为普通IO模式
    //仅22和23脚有此特性
    GPIO_setAnalogMode(22,GPIO_ANALOG_DISABLED);
}
void Init_Specific_Gpio(void)
{
    u16 i=0;
    //SPI for PGA411 related
    GPIO_writePin(15, 1);
    //SPI for EEPROM related
    GPIO_writePin(11, 1);
    //PGA411 reset related
    for(i=0;i<10;i++)
    {
        GPIO_writePin(34, 0);
        DEVICE_DELAY_US(10);
        GPIO_writePin(34, 1);
    }
}

但该引脚一旦动作后,后续再操作该引脚就正常了(如连续10次拉低-拉高GPIO34,除去第一次,后续9次均正常)。

若配置完IO口特性后立即操作IO口,则正常动作。不清楚是什么原因,希望有高手不吝赐教。

user6285712:

回复 mangui zhang:

测试结果是: 第一次IO口写0到IO口写1之间间隔1.5ms(不符合设定值),后续9次之间的间隔就是10us了。
您说的没有延时时间也是对的,写1后是该加个延时,但目前测试结果写1后不加延时IO口也可正常动作。

280049芯片调试,在初始化时先用调用函数InitGpio()集中配置了GPIO的特性,如配置为普通IO模式、输出引脚、不同步,然后继续配置完其他几个模块后,调用函数Init_Specific_Gpio()将GPIO先拉低,延时10us后再拉高。但通过示波器实测该引脚拉低后1.5ms才拉高,具体代码如下:

void Hw_Init(void)
{
    InitSysCtrl();
   //CMPSS module initialization must earlier than EPWM module
   //
    InitCMPSS();
    InitXBAR();
    InitEPwm();
    InitGpio();
    Init_Can_Data();
    InitEcan();
    InitEcap();
    InitEQep();
    InitAdc();
    InitSpi();
    Init_Specific_Gpio();
    // this delay for PGA411 power on
    DEVICE_DELAY_US(12000);
    //Init_Resolver();
   Init_Eqep_Initial_Val();
   Init_Data_Log();
}
void InitGpio(void)
{
    GPIO_setPadConfig(28,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_28_GPIO28);
    GPIO_setDirectionMode(28,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(34,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_34_GPIO34);
    GPIO_setDirectionMode(34,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(25,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_25_GPIO25);
    GPIO_setDirectionMode(25,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(25,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(33,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_33_GPIO33);
    GPIO_setDirectionMode(33,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(33,GPIO_QUAL_SYNC);
    GPIO_setPadConfig(22,GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_22_GPIO22);
    GPIO_setDirectionMode(22,GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode(22,GPIO_QUAL_SYNC);
    //PIN22脚默认是analog模式,此处是将其配置为普通IO模式
    //仅22和23脚有此特性
    GPIO_setAnalogMode(22,GPIO_ANALOG_DISABLED);
}
void Init_Specific_Gpio(void)
{
    u16 i=0;
    //SPI for PGA411 related
    GPIO_writePin(15, 1);
    //SPI for EEPROM related
    GPIO_writePin(11, 1);
    //PGA411 reset related
    for(i=0;i<10;i++)
    {
        GPIO_writePin(34, 0);
        DEVICE_DELAY_US(10);
        GPIO_writePin(34, 1);
    }
}

但该引脚一旦动作后,后续再操作该引脚就正常了(如连续10次拉低-拉高GPIO34,除去第一次,后续9次均正常)。

若配置完IO口特性后立即操作IO口,则正常动作。不清楚是什么原因,希望有高手不吝赐教。

mangui zhang:

回复 user6285712:

不加任何延时时,IO口可能响应不过来翻转,你可以算一下机器周期和IO口的最快翻转率

赞(0)
未经允许不得转载:TI中文支持网 » 280049芯片GPIO口上电后第一次动作时间过久
分享到: 更多 (0)