Mask Set Errata for Mask 1N03P

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Mask Set Errata for Mask 1N03P

640 Views
EugeneHiihtaja
Senior Contributor I

Hello !

Do I undestand right and "Mask Set Errata for Mask 1N03P Rev. 09 Sept 2015" is the latest one what available for K82 MCU ?

On my K82 I can see 1N03P  sign.

As result all interrupt handlers should have this code at the end of routine:

/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
exception return operation might vector to incorrect interrupt */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
__DSB();
#endif

Or may be even:

__DSB();

__ISB();

Regards,

Eugene

0 Kudos
Reply
2 Replies

535 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi Eugene,

     Yes, The IN03P errata from this link:

https://www.nxp.com/docs/en/errata/KINETIS_K_1N03P.pdf 

   is the latest document.

   The relate item is e9005, actually, it is the ARM errata 838869, you also can check the ARM core website.

   About the workaround code, you totally can refer to the SDK K82 code, that code driver already add the DSB, take an example:

void LPUART0_LPUART1_TX_DriverIRQHandler(void)
{
    if (CLOCK_isEnabledClock(s_lpuartClock[0]))
    {
        if ((LPUART_STAT_OR_MASK & LPUART0->STAT) ||
            ((LPUART0->STAT & LPUART_STAT_TDRE_MASK) && (LPUART0->CTRL & LPUART_CTRL_TIE_MASK)))
        {
            s_lpuartIsr(LPUART0, s_lpuartHandle[0]);
        }
    }
    if (CLOCK_isEnabledClock(s_lpuartClock[1]))
    {
        if ((LPUART_STAT_OR_MASK & LPUART1->STAT) ||
            ((LPUART1->STAT & LPUART_STAT_TDRE_MASK) && (LPUART1->CTRL & LPUART_CTRL_TIE_MASK)))
        {
            s_lpuartIsr(LPUART1, s_lpuartHandle[1]);
        }
    }
/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
  exception return operation might vector to incorrect interrupt */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
    __DSB();
#endif
}

Wish it helps you!


Have a great day,
Kerry

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos
Reply

535 Views
EugeneHiihtaja
Senior Contributor I

Hi Kerry !

Yes, _DSB() entry is visible in almost all interrupt handlers.

But not in TickTimerHandler in FreeRTOS port.c:

void xPortSysTickHandler(void)
{
   uint32_t ulDummy;

   ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();
   {
   /* Increment the RTOS tick. */
      if (xTaskIncrementTick() != pdFALSE)
      {
         /* Pend a context switch. */
         portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
      }
   }
   portCLEAR_INTERRUPT_MASK_FROM_ISR(ulDummy);

// ???

}

Even if I unroll all macros, _DSB is not visible.

Or errata is not effect special handlers ?

By the way, do you have idea when new SDK will be released  with new FreeRTOS 10.1.0 for K82 ?

Regards,

Eugene

0 Kudos
Reply