CX3 Vsync PulseNOW function failing

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

cross mob
ZaTu_4258396
Level 2
Level 2
10 replies posted 10 sign-ins 5 replies posted

Hello all I have been working on an issue with our production board and are now changing the LED pulse configuration. Our goal is to run the LED over ~1.8 frames and then turn off. Then on the 2 frame the other LED will turn on. We are using the Vsync pulse as our  interrupt for the LED toggling.

We are  running at 15 fps and that gives us a Vsync of ~66ms. When I have  the  pulseTime set to anything less than 66 ms it functions correctly and each LED will begin its pulse every 4th frame as  it should. However, as soon as I increase it to say 70, both LEDs stay on and do not toggle. I would have expected this if I had the time to be 66*4 = 264 ms. Any help would be appreciated.

Our current setup is the following:

   /* Create the thread for the application */

    retThrdCreate = CyU3PThreadCreate(

&gpioThread, /* GPIO Example App Thread structure */

"21:GPIO_simple_output", /* Thread ID and Thread name */

GpioThread_Entry_Simple, /* GPIO Example App Thread Entry function */

0, /* No input parameter to thread */

ptr, /* Pointer to the allocated thread stack */

CY_FX_GPIOAPP_THREAD_STACK, /* Thread stack size */

CY_FX_GPIOAPP_THREAD_PRIORITY, /* Thread priority */

CY_FX_GPIOAPP_THREAD_PRIORITY, /* Preemption threshold for the thread. */

CYU3P_NO_TIME_SLICE, /* No time slice for the application thread */

CYU3P_DONT_START /* Start the Thread immediately */

);

Create the thread

Enter thread

while(1){

uint32_t eventFlag;

// Wait for a VSYNC High Signal before starting the LED Fire process

CyU3PReturnStatus_t apiRetStatus = CyU3PEventGet( &glFxGpioAppEvent,

CY_FX_GPIOAPP_GPIO_HIGH_EVENT, CYU3P_EVENT_OR_CLEAR,

&eventFlag, CYU3P_WAIT_FOREVER);

if (apiRetStatus != CY_U3P_SUCCESS)

continue;

if (IR_flag == CyTrue)

{

//  We are wanting to make sure that we hold the LED flash over the course of  123 msec so

//  we need to pulse the IR_led over 2 pulses

if (frameCounterL != 1){

PulseIRLED( 123, CX3_IR_LED_RIGHT);

frameCounterL++;

}

else{

frameCounterL = 0;

IR_flag = CyFalse;

}

}

else

{

if (frameCounterR != 1){

PulseIRLED( 123, CX3_IR_LED_LEFT);

frameCounterR++;

}

else{

frameCounterR = 0;

IR_flag = CyTrue;

}

}

}

// Pulse IRLED

// ========================================================================================================

void PulseIRLED( const uint16_t wPulseWidth, const uint8_t IRLED)

{

gpioIRComplexConfig.outValue = IR_LED_ENABLE;

gpioIRComplexConfig.pinMode = CY_U3P_GPIO_MODE_PULSENOW;

#ifdef TIME_IN_US

gpioIRComplexConfig.threshold = CY_FX_PWM_PERIOD_MS / 1000 * wPulseWidth;

#else

gpioIRComplexConfig.threshold = CY_FX_PWM_PERIOD_MS * wPulseWidth;

#endif // TIME_IN_US

CyU3PGpioSetComplexConfig( IRLED, &gpioIRComplexConfig);

CyU3PGpioComplexPulseNow( IRLED, gpioIRComplexConfig.threshold);

} // PulseIRLED

0 Likes
1 Solution
KandlaguntaR_36
Moderator
Moderator
Moderator
25 solutions authored 10 solutions authored 5 solutions authored

Please share the snippet of Complex GPIO configuration. Please mention the macro values, if you use any.

You may refer this KBA for Pulse on FX3 Complex GPIO – KBA228439

You have mentioned #ifdef TIME_IN_US in PulseIRLED. Please let me know whether you are testing this with #def or without #def.

View solution in original post

1 Reply
KandlaguntaR_36
Moderator
Moderator
Moderator
25 solutions authored 10 solutions authored 5 solutions authored

Please share the snippet of Complex GPIO configuration. Please mention the macro values, if you use any.

You may refer this KBA for Pulse on FX3 Complex GPIO – KBA228439

You have mentioned #ifdef TIME_IN_US in PulseIRLED. Please let me know whether you are testing this with #def or without #def.