AnsweredAssumed Answered

  flash_partitioning _s32k144 example project

Question asked by Koorosh Hajiani on Dec 20, 2017

Hi ,

This is regarding a comment in the main.c of flash_partitioning _s32k144 example project:

 

/* Set callback function before a long time consuming flash operation

* (ex: erasing) to let the application code do other tasks while flash

* in operation. In this case we use it to enable interrupt for

* Flash Command Complete event */

 

Then following that, 

FLASH_DRV_EraseSector(&flashSSDConfig, address, size);     is called which in turn calls

FLASH_DRV_EraseSector where eventually we see the call to the callback:

 

while (0U == (FTFx_FSTAT & FTFx_FSTAT_CCIF_MASK))

{

/* Wait till CCIF bit is set

* Serve callback function as often as possible

*/

if (NULL_CALLBACK != pSSDConfig->CallBack)

{

/* Temporarily disable compiler's check for ROM access call from within a ram function.

* The use of a function pointer type makes this check irrelevant.

* Nevertheless, it is imperative that the user-provided callback be defined in RAMSECTION */

DISABLE_CHECK_RAMSECTION_FUNCTION_CALL

(pSSDConfig->CallBack)();

ENABLE_CHECK_RAMSECTION_FUNCTION_CALL

}

}

Now I see a while loop that waits until CCIF is set and while it is waiting it enables the CCIF INTERRUPT via callback and the CCIF interrupt disables itself , how is this not blocking , we have to wait until CCIF is set .

HOW IS THIS CALLBACK MAKING THIS NON BLOCKING ? CONTRARY TO WHAT THE COMMENT SAYS.

TO ME THIS WAITS A CERTAIN AMOUNT OF TIME UNTILL CCIF IS SET, INTERRUPT OR NOT.

CCIF GETS SET AND WHILE LOOP IS EXITED BEFORE THE CALLBACK GETS A CHANCE TO ENABLE THE INTERRUPT.

That comment is really confusing. 

 

PLEASE ENLIGHTEN ME.

 

Thanks,

 

Outcomes