¿Cómo usar la interrupción no enmascarable en SAM4S?

1

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.

    
pregunta TheOneWhoKnocks

1 respuesta

1

Las MPUs de Atmel SAM4S cuentan con un controlador de interrupción NVIC que admite solo interrupciones externas para vincularse con NMI. También puede activarlo manualmente, pero esto no será de mucha utilidad para usted.

La solución es tener circuitos externos que activarán la NMI utilizando interrupciones externas en fallas de energía.

Nota: si comprendo su solución actual, usted trata de detectar fallas en la línea eléctrica. No estoy seguro de que esto sea confiable, ni siquiera lo suficientemente rápido (ya que tiene un filtro de rebote en la entrada).

    
respondido por el student

Lea otras preguntas en las etiquetas