Estoy tratando de usar el NMI en un SAM4S (Cortex M4), pero me cuesta trabajo hacerlo funcionar. El objetivo principal es saltar al controlador de NMI cuando el poder está a punto de disminuir, para que pueda realizar un apagado limpio, guardando datos que podrían perderse de otra manera.
En este momento, estoy usando un controlador PIO para saltar a una interrupción cuando se detecta un fallo de alimentación. El código es algo como esto:
gpio_configure_pin( POWERFAIL_PORT_IDX,POWERFAIL_PORT_FLAGS);
pio_set_input(PIOA, POWERFAIL_PORT,(PIO_PULLUP|PIO_DEBOUNCE));
pio_set_debounce_filter(PIOA,POWERFAIL_PORT, 100);
pio_handler_set(PIOA, ID_PIOA,POWERFAIL_PORT , PIO_IT_FALL_EDGE, Powerfail_Interrupt_Handle);
pio_enable_interrupt(PIOA, POWERFAIL_PORT);
NVIC_EnableIRQ(PIOA_IRQn);
Me gustaría establecer esta interrupción con la máxima prioridad utilizando el NMI. De esa manera, esta interrupción estará activa todo el tiempo, incluso después de llamar a __disable_irq () en algunas partes del código. Hasta ahora, busqué en la hoja de datos de SAM4S y en las fuentes / ejemplos de ASF, pero no pude encontrar ninguna forma obvia de hacerlo, o simplemente me di cuenta de que es posible.