I am working on data serialization with S32K142/144 micro controller . I am using this controller for CAN specific applications. And in which i realized "data serialization " should restrictively followed .
So,i have gone thorough alot-off posts and documentations.
after all i have still one doubt , as for any peripheral resister access , we should follow "read after write".
As in below example, during accessing of LPTMR0_CSR.
// Declare dummy variable to store the read of the LPTMR0_CSR register
volatile int dummy_var
/**** STEP #1 ****/
// Clear the flag; enable interrupts; enable the timer
LPTMR0_CSR = ( LPTMR_CSR_TEN_MASK | LPTMR_CSR_TIE_MASK | LPTMR_CSR_TCF_MASK );
/**** STEP #2 ****/
// Store CSR register in dummy_var to serialize the clearing of the TCF flag
dummy_var = LPTMR0_CSR;
1. can we use just memory barrier instruction __asm("dsb"); in place of "dummy_var = LPTMR0_CSR;" instruction ?
2. Is could you please give few example of real time use of __asm("dmb"); __asm("dsb"); __asm("isb"); .
Please help me on this.
I had to modify this comment.
DSB instruction serialize all explicit memory accesses.
But it doesn’t serialize peripheral writes, in this case, we need to do Read-After-Write sequence to be sure the writes are complete before we can proceed with execution of subsequent instructions. We can use ISB instruction to flush the pipeline if needed.