CyU3PGpifSMSwitch()

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

cross mob
Anonymous
Not applicable

Hello

   

 

   

In my application I want to use CyU3PGpifSMSwitch():

   

 

   

CyU3PGpifSMSwitch (
        uint16_t fromState,             /* The state from which to do the switch to the desired state. */
        uint16_t toState,               /* The state to which to transition from fromState. */
        uint16_t endState,              /* The end state for this execution path. */
        uint8_t  initialAlpha,          /* Initial Alpha values to use when switching states. */
        uint32_t switchTimeout          /* Timeout setting for the switch operation in GPIF clock cycles. */
        );

   

 

   

According to the API documentation state switching is only carried out if the state machine is in "fromState" or "fromState" is not a valid state (>255). In my application I would like to define "fromState" larger than 255 to force state switching all the time. However, there is different behaviour between using the values 257, 0xFFF and 10 (which is the actual state derived from CyU3PGpifGetSMState()). When using 257, the state machine crashes after stepping trough this instruction around 1-10 times. If 0xFFFF is used, then I can reset the state machine up to 32'0000 times. When using 10, which is the actual state, commiting DMA buffer fails afterwards with error message 71 (CY_U3P_ERROR_INVALID_SEQUENCE).

   

 

   

Has anyone a good explanation for this behaviour? Thanks for help.

   

 

   

-Silvio

0 Likes
4 Replies
Anonymous
Not applicable

Hi,

   

Are you seeing the same behavior with the latest SDK 1.1.1.

   

Thanks,

   

sai krishna.

0 Likes
Anonymous
Not applicable
0 Likes
Anonymous
Not applicable

But sometimes I still see by calling CyU3PGpifGetSMState() that the state machine ends up in a state "129" that does not even exist in my design. What does this mean?

0 Likes
Anonymous
Not applicable

Hi,

   

Going to try and resurrect this thread since I am currently having the same issue as Sil was 4 years ago.

   

I'm developing firmware for the FX3 explorer kit. I start the state machine successfully, then call CyU3PGpifGetSMState() to check which state it has started in. For some reason this always returns 36, even though this state does not exist in my state machine header file. I have been ignoring this up till now since I can apparently still use the state machine as designed without any issue, and later calls to GetSMState() return the expected values.

   

Does anyone know what could cause this function to return a seemingly random value?

   

Thanks

0 Likes