About FX3 GPIO speed problem

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
Not applicable

Hello, everyone

How do I set the FX3 frequency to 400Mhz correctly?

Because I now test GPIO for pure output of 0 and 1, I see 459.39Khz on my oscilloscope.

Here is my FX3 firmware:

BulkLpAppThread_Entry():

void BulkLpAppThread_Entry ( uint32_t input)

{

    CyU3PGpioClock_t gpioClock;

    gpioClock.fastClkDiv = 2;

    gpioClock.slowClkDiv = 0;

    gpioClock.simpleDiv  = CY_U3P_GPIO_SIMPLE_DIV_BY_2;

    gpioClock.clkSrc     = CY_U3P_SYS_CLK;

    gpioClock.halfDiv    = 0;

    CyU3PGpioInit(&gpioClock, NULL);

    CyU3PGpioSimpleConfig_t gpioConfig;

    gpioConfig.outValue    = CyTrue;

    gpioConfig.inputEn     = CyFalse;

    gpioConfig.driveLowEn  = CyTrue;

    gpioConfig.driveHighEn = CyTrue;

    gpioConfig.intrMode    = CY_U3P_GPIO_NO_INTR;

    CyU3PGpioSetSimpleConfig(45, &gpioConfig);

   for (;;){

       CyU3PGpioSetValue (45,CyFalse);

       CyU3PGpioSetValue (45,CyTrue);

    }

}

CyFxApplicationDefine ();

void CyFxApplicationDefine (void)

{

    void *ptr = NULL;

    uint32_t retThrdCreate = CY_U3P_SUCCESS;

    ptr = CyU3PMemAlloc (CY_FX_BULKLP_THREAD_STACK);

    retThrdCreate = CyU3PThreadCreate (&BulkLpAppThread,         

                         "21:Bulk_loop_AUTO",                    

                          BulkLpAppThread_Entry,                 

                          0,                                     

                          ptr,                                   

                          CY_FX_BULKLP_THREAD_STACK,              

                          CY_FX_BULKLP_THREAD_PRIORITY,          

                          CY_FX_BULKLP_THREAD_PRIORITY,          

                          CYU3P_NO_TIME_SLICE,                  

                          CYU3P_AUTO_START                       

                          );

    if (retThrdCreate != 0)

    {

        while(1);

    }

}

main():

int main (void){ //1

    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

    CyU3PSysClockConfig_t CONFIG_CLOCK;

    CONFIG_CLOCK.setSysClk400 = CyTrue;

    CONFIG_CLOCK.cpuClkDiv = 2;

    CONFIG_CLOCK.dmaClkDiv = 2;

    CONFIG_CLOCK.mmioClkDiv = 2;

    CONFIG_CLOCK.useStandbyClk = CyFalse;

    CONFIG_CLOCK.clkSrc = CY_U3P_SYS_CLK;

    status = CyU3PDeviceInit (&CONFIG_CLOCK);

    if (status != CY_U3P_SUCCESS)

    {

        goto handle_fatal_error;

    }

    status = CyU3PDeviceCacheControl (CyTrue, CyTrue, CyFalse);

    if (status != CY_U3P_SUCCESS)

    {

        goto handle_fatal_error;

    }

    CyU3PIoMatrixConfig_t io_cfg;

    CyU3PMemSet ((uint8_t *)&io_cfg, 0, sizeof(io_cfg));

       io_cfg.isDQ32Bit = CyFalse;

       io_cfg.s0Mode = CY_U3P_SPORT_INACTIVE;

       io_cfg.s1Mode = CY_U3P_SPORT_INACTIVE;

       io_cfg.useUart   = CyFalse;

       io_cfg.useI2C    = CyFalse;

       io_cfg.useI2S    = CyFalse;

       io_cfg.useSpi    = CyFalse;

       io_cfg.lppMode   = CY_U3P_IO_MATRIX_LPP_DEFAULT;

       io_cfg.gpioSimpleEn[0]  = 0x00000000; //0~31

       io_cfg.gpioSimpleEn[1]  = 0x00002000; //45 on

       io_cfg.gpioComplexEn[0] = 0;

       io_cfg.gpioComplexEn[1] = 0;

    status = CyU3PDeviceConfigureIOMatrix (&io_cfg);

    if (status != CY_U3P_SUCCESS)

    {

        goto handle_fatal_error;

    }

    CyU3PKernelEntry ();

    return 0;

handle_fatal_error:

    while (1);

}

Am I missing something set?

0 Likes
1 Solution
ManaskantD_51
Employee
Employee
Welcome! 25 solutions authored 10 solutions authored

Use CyU3PGpioSimpleSetValue (); instead of CyU3PGpioSetValue ();. This will give you around 1 MHz clock. This is the max you can achieve through software in FX3.

View solution in original post

2 Replies
ManaskantD_51
Employee
Employee
Welcome! 25 solutions authored 10 solutions authored

Use CyU3PGpioSimpleSetValue (); instead of CyU3PGpioSetValue ();. This will give you around 1 MHz clock. This is the max you can achieve through software in FX3.

Anonymous
Not applicable

Thank you very much for your answer.

0 Likes