Activación de nivel frente a borde, utilidad de la activación de nivel

4

Muchos procesadores / µC / plataformas de desarrollo (BeagleBoard, Arduino, ...) utilizan interrupciones.
Estos pueden ser activados por la detección de:

  • nivel alto
  • borde en aumento
  • nivel de CAMBIO (borde FALLING o RISING)
  • borde de caída
  • nivel bajo

Ahora, cualquiera de las dos cosas debe ser cierta:

  1. FALLING y LOW (/ RISING and HIGH) son prácticamente lo mismo
  2. Cuando se aplica un nivel BAJO (/ ALTO) durante un tiempo no trivial, el controlador se atasca repitiendo la rutina del servicio de interrupción una y otra vez

Ambos de estos no tienen sentido para mí:

Lo primero no puede ser cierto, ya que sería totalmente inútil hacer la diferencia en primer lugar entonces.

Entonces, si el segundo es verdadero: ¿cómo podría ser útil? ¿Qué aplicación hay que no está mejor con una combinación de LEVANTAMIENTO y CAÍDA en lugar de ALTO?

Investigue hasta ahora:

pregunta Mark

4 respuestas

3

El nivel disparado (alto o bajo) puede permitir que la fuente diga "no importa" o que mantenga el disparador activo hasta que el ISR llegue a ese punto. La latencia de interrupción no está garantizada en un solo núcleo con múltiples disparadores, aunque generalmente es bastante rápido. En general, la señal para una interrupción activada por nivel es en sí misma activada por el borde y usted tiene que borrarla en el ISR o, de lo contrario, volverá a entrar en ella nuevamente.

Como dijo Ignacio, el nivel activado también puede hacer algo continuamente mientras está activo, aunque debes escribir tu software para no quedar atrapado en un "bucle de interrupción". No llegar a tu código principal puede ser algo difícil de depurar.

El borde activado es bueno para las cosas que suceden una vez en algún evento. Si el evento vuelve a suceder, tu respuesta volverá a suceder, por lo que deberás tener cuidado con los eventos repetidos, como el cambio del interruptor.

    
respondido por el AaronD
5

Además de las otras respuestas, otro aspecto desde una perspectiva práctica:

El nivel de interrupción activada es una indicación de que un dispositivo necesita atención. Mientras se necesite atención, la línea es afirmada. Un dispositivo puede querer que el maestro registre los datos fuera del búfer de dispositivos. Es posible que necesite atención inmediata para evitar el desbordamiento del búfer (por lo tanto, usar interrupción es una buena opción en comparación con el sondeo), pero no sería práctico si el dispositivo tuviera que cambiar de bordes mientras el búfer aún contiene datos. El maestro realiza su procesamiento lo más rápido posible, borra el indicador de interrupción cuando está listo y reconoce de inmediato que hay más por hacer.

La interrupción activada por Edge es una notificación de evento. Cuando sucede algo en particular, el dispositivo genera un pulso en la línea de interrupción y se hace (dispara y olvida). El maestro simplemente se da cuenta y continúa.

Mi punto es que hay un uso práctico para ambos.

    
respondido por el Rev1.0
3

La interrupción sensible al borde solo se dispara cuando detecta el borde apropiado. Eso significa que solo ocurrirá una sola interrupción. Si la interrupción está habilitada DESPUÉS de la transición, no reaccionará y el mensaje se perderá. Utilizable cuando se debe capturar cierto evento.

La interrupción sensible al nivel ocurrirá siempre que se habilite y se presente el nivel apropiado. Por lo tanto, la solicitud se atenderá incluso si la interrupción se habilita algún tiempo después. Además, se pueden conectar múltiples dispositivos a una sola línea de interrupción. Utilizable cuando el estado o condición es importante.

Tu nr. 2 declaración es correcta. Cualquiera de las interrupciones debe estar deshabilitada o el nivel debe ser reparado.

En otras palabras, usa la sensibilidad al borde cuando está esperando algo y la sensibilidad al nivel cuando algo ya lo está esperando.

    
respondido por el Jurkstas
2

La activación de nivel es útil cuando una acción continua requiere disparar eventos repetidos, por ejemplo. Sonar una campana mientras una alarma está activa. En este caso, el ISR sería responsable de energizar y desenergizar un solenoide solo una vez; el hecho de que el disparador de interrupción aún esté presente sería responsable de extender la duración del timbre.

    
respondido por el Ignacio Vazquez-Abrams

Lea otras preguntas en las etiquetas