How to generate clock pulse on fx3

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

cross mob
xihoc_3044746
Level 1
Level 1

I'm using CYUSB3KIT-003 test uvc with a camera sensor. But compared with CYUSB3ACC-004 Aptina Image Sensor, there is no crystal on my camera. So, I need to generate 24Mhz clock (xclk) for it.

Code is based on an75779 (FX3 uvc demo). The following is my modifiations:

uvc.c:CyFxUVCApplnInit()

/* Init the GPIO module */

gpioClock.fastClkDiv = 2;

gpioClock.slowClkDiv = 2;

gpioClock.simpleDiv  = CY_U3P_GPIO_SIMPLE_DIV_BY_2;

gpioClock.clkSrc     = CY_U3P_SYS_CLK;

gpioClock.halfDiv    = 0;

............

apiRetStatus = CyU3PGpioSetSimpleConfig (SENSOR_RESET_GPIO, &gpioConfig);

// I add the for 24Mhz output

/* SENSOR_RESET_GPIO is the Sensor reset pin */

CyU3PGpioComplexConfig_t gpioXclkConfig;

gpioXclkConfig.outValue = CyTrue;

gpioXclkConfig.driveLowEn = CyFalse;

gpioXclkConfig.driveHighEn = CyFalse;

gpioXclkConfig.inputEn = CyFalse;

gpioXclkConfig.pinMode = CY_U3P_GPIO_MODE_PULSE_NOW;

gpioXclkConfig.intrMode = CY_U3P_GPIO_NO_INTR;

gpioXclkConfig.timerMode = CY_U3P_GPIO_TIMER_HIGH_FREQ;

gpioXclkConfig.timer = 0; // Timer initial value.

// Load the period to the maximum value so that the count is not reset.

gpioXclkConfig.period = 0xFFFFFFFF; // Timer period.

gpioXclkConfig.threshold = 0; // Timer threshold value.

apiRetStatus           = CyU3PGpioSetComplexConfig (SENSOR_XCLK_GPIO, &gpioXclkConfig);

if (apiRetStatus != CY_U3P_SUCCESS)

{

    CyU3PDebugPrint (4, "GPIO Set Config Error, SENSOR_XCLK_GPIO, Error Code = %d\n", apiRetStatus);

    CyFxAppErrorHandler (apiRetStatus);

}

apiRetStatus           = CyU3PGpioComplexPulseNow (SENSOR_XCLK_GPIO, 0xFFFFFFFF);

if (apiRetStatus != CY_U3P_SUCCESS)

{

    CyU3PDebugPrint (4, "GPIO CyU3PGpioComplexPulseNow Error, SENSOR_XCLK_GPIO, Error Code = %d\n", apiRetStatus);

    CyFxAppErrorHandler (apiRetStatus);

}

#define SENSOR_XCLK_GPIO     24

Leaving all other code unchanged.

My debug uart get there outputs:

GPIO CyU3PGpioComplexPulseNow Error, SENSOR_XCLK_GPIO, Error Code = 70

I don't know for Error Code = 70 (CY_U3P_ERROR_NOT_SUPPORTED). and I can't found any examples for calling CyU3PGpioComplexPulseNow in google ( The funcation may not be for what I need).

I read cyu3gpiocomplex.c:CyU3PGpioComplexPulseNow and there are 2 lines return CY_U3P_ERROR_NOT_SUPPORTED.

Please help me how to output a 24Mhz clock.

thanks~

0 Likes
1 Solution
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hi,

Pin 24 cannot be configured as complex GPIOs. You can find relating information in  section 3.6.5 of programmer's manual.

If you want to generate a 24MHz clock, the recommend setting for the GPIO is:

    gpioConfig.outValue = CyFalse;

    gpioConfig.inputEn = CyFalse;

    gpioConfig.driveLowEn = CyTrue;

    gpioConfig.driveHighEn = CyTrue;

    gpioConfig.pinMode = CY_U3P_GPIO_MODE_PWM;

    gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;

    gpioConfig.timerMode = CY_U3P_GPIO_TIMER_HIGH_FREQ;

    gpioConfig.timer = 0;

    gpioConfig.period = 7;

    gpioConfig.threshold = 4;

If you want to know how to calculate the period, you can refer to this page:

generating pwm on fx3

Regards,

Eddie

View solution in original post

0 Likes
2 Replies
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hi,

Pin 24 cannot be configured as complex GPIOs. You can find relating information in  section 3.6.5 of programmer's manual.

If you want to generate a 24MHz clock, the recommend setting for the GPIO is:

    gpioConfig.outValue = CyFalse;

    gpioConfig.inputEn = CyFalse;

    gpioConfig.driveLowEn = CyTrue;

    gpioConfig.driveHighEn = CyTrue;

    gpioConfig.pinMode = CY_U3P_GPIO_MODE_PWM;

    gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;

    gpioConfig.timerMode = CY_U3P_GPIO_TIMER_HIGH_FREQ;

    gpioConfig.timer = 0;

    gpioConfig.period = 7;

    gpioConfig.threshold = 4;

If you want to know how to calculate the period, you can refer to this page:

generating pwm on fx3

Regards,

Eddie

0 Likes

thanks for your reply. I'll try today.

0 Likes