Part Number: TMS320F28069 Tool/software: TI C/C++ Compiler Hello, We are using nested interrupt mechanism on different C2000 microcontrollers to implement interrupt prioritization. Scheme look like this LowPriority interrupt (every 10 ms based on timer 0) { /* Acknowledge interrupt group to receive more interrupts for this group */ s_DrvIT_CorePieCtrlRegs.PIEACK.all = DRV_IT_CORE_PIEACK_GROUP1 ; /* Enable MedPriority and HighPriority interrupts */ IER = DRV_IT_M_INT3 | DRV_IT_M_INT13 EINT; /* perform low priority operations */ . /* and nothing more */ } MedPriority interrupt (every ms based on timer 1) { /* Enable MedPriority and HighPriority interrupts */ IER = DRV_IT_M_INT3 EINT; /* perform Medium priority operations */ . /* and nothing more */ } HighPriority interrupt (XINT based) { /* Acknowledge interrupt group to receive more interrupts for this group */ s_DrvIT_CorePieCtrlRegs.PIEACK.all = DRV_IT_CORE_PIEACK_GROUP1 ; /* high priority operations */ . . /* and nothing more */ } This scheme is used in 2812, 28335 and 28069 without issue, until the errata SPRZ342N (for x28069) mentioning: " If the user is enabling interrupts using the EINT instruction inside an interrupt service routine (ISR) in order to use the nesting feature, then the user must disable the interrupts before exiting the ISR. Failing to do so may cause undefined behavior of CPU execution. " So in our code, it means adding DINT at the end of Medium and low Priority interrupts ? Is it normal in an architectural point of view or rather a workaround ? What's an "undefined behavior" of CPU execution ? Have you an idea of the occurrence frequency ? Thanks and regards, David
↧