This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
as we have setting the reset pin to NMI for prevent PMM26
int _system_pre_init(void) { /* Insert your low-level initializations here */ __disable_interrupt(); WDTCTL = WDTPW+WDTHOLD; // Clear RTCHOLD Bit after reset RTCCTL0_H = RTCKEY_H; // unlock RTCCTL1 &= ~RTCHOLD; // release RTC RTCCTL0_H = 0x00; // lock SFRRPCR = SYSNMI | SYSNMIIES | SYSRSTRE; /* Return value: * 1 - Perform data segment initialization. * 0 - Skip data segment initialization. */ return 1; }
What is proper process to do System Non-maskable Interrupt Service Routine?
Can it be blank as below?
//------------------------------------------------------------------------------ // Interrupt Service Routine //------------------------------------------------------------------------------ #pragma vector=SYSNMI_VECTOR /* 0xFFFC System Non-maskable */ __interrupt void int_SYSNMI(void) { }
Hi TinK,
You will also want to set NMIIE in the SFRIE1 register.
I also believe the external NMIIFG is a User NMI, so your vector should be UNMI_VECTOR. At a minimum I would read the SYSUNIV register to clear the NMIIFG in each ISR.
Best Regards,
Brandon Fisher
Hi Brandon Fisher,
Thank you for information.
If the NMIIE is clear (disable).
SFRIE1 &= ~(NMIIE); // SFRIE1 �? NMI Interrupt Disable(b4)
What processes are required in User NMI interrupt service routine in case NMIIE is clear?
Hi TinK,
Your USER_NMI could look something like this:
// UNMI Interrupt Service Routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=UNMI_VECTOR __interrupt void UNMI_ISR(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(UNMI_VECTOR))) UNMI_ISR (void) #else #error Compiler not supported! #endif { switch(__even_in_range(SYSUNIV, SYSUNIV_AUXSWGIFG)) { case SYSUNIV_NONE: break; // No interrupt Pending case SYSUNIV_NMIIFG: //Trigger POR PMMCTL0 = PMMPW | PMMSWPOR; break; // NMIIFG case SYSUNIV_OFIFG: break; // OFIFG case SYSUNIV_ACCVIFG: break; // ACCVIFG case SYSUNIV_AUXSWGIFG: // BUSIFG break; default: break; } }
On NMIIFG it should trigger a POR.
Best Regards,
Brandon Fisher
Hi Brandon Fisher,
Are there any problems if no process in USER_NMI in my present source that the NMIIE is disable?
SFRIE1 &= ~(NMIIE); // SFRIE1
IF NMIEE is disabled I expect you will never trigger the UNMI ISR. In that case it wont matter what you have inside the handler.
Best regards,
Brandon Fisher
**Attention** This is a public forum