5 votos

Disparo por niveles o por bordes, utilidad del disparo por niveles

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

  • Nivel alto
  • Borde ascendente
  • CAMBIO DE NIVEL (borde descendente o ascendente)
  • Borde de caída
  • Nivel bajo

Ahora bien, una de las dos cosas debe ser cierta:

  1. CAÍDA y BAJA (/ SUBIDA y ALTA) son prácticamente lo mismo
  2. Cuando se aplica un nivel BAJO (/ALTO) durante un tiempo no trivial, el controlador se queda atascado repitiendo la rutina de servicio de interrupción una y otra vez

Ambas cosas no tienen sentido para mí:

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

Entonces, si la segunda es cierta: ¿cómo podría ser útil? ¿Qué aplicación hay que no sea mejor con una combinación de SUBIR y BAJAR en lugar de ALTO?

La investigación hasta ahora:

5voto

Bash Puntos 1680

Como complemento a las otras respuestas, otra mirada desde una perspectiva práctica:

La interrupción por nivel es una indicación de que un dispositivo necesita atención. Mientras necesite atención, la línea se afirma. Un dispositivo puede querer que el maestro registre los datos del búfer del dispositivo. Puede necesitar atención inmediata para evitar el desbordamiento del búfer (por lo que el uso de la interrupción es una buena opción frente al sondeo), pero no sería práctico si el dispositivo tiene que seguir conmutando bordes mientras el búfer todavía contiene datos. El maestro hace su procesamiento lo más rápido posible, borra la bandera de interrupción cuando está listo y reconoce inmediatamente que hay más que hacer.

La interrupción activada por flanco es una notificación de eventos. Cuando ocurre algo en particular, el dispositivo genera un pulso en la línea de interrupción y ya está hecho (dispara y olvida). El maestro se da por enterado y sigue adelante.

Lo que quiero decir es que hay un uso práctico para ambos.

4voto

J L Puntos 31

La interrupción sensible al flanco sólo se dispara cuando detecta el flanco apropiado. Esto significa que sólo se producirá una interrupción. Si la interrupción se activa DESPUÉS de la transición, no reaccionará y se perderá el mensaje. Se puede utilizar cuando se debe capturar un evento determinado.

La interrupción sensible al nivel se producirá siempre que esté habilitada y haya un nivel adecuado. Por lo tanto, la solicitud será atendida incluso si la interrupción se activa algún tiempo después. Además, se pueden conectar varios dispositivos a una sola línea de interrupción. Se puede utilizar cuando el estado o la condición es importante.

Su afirmación número 2 es correcta. O bien la interrupción debe ser desactivada o bien la causa del nivel debe ser atendida.

En otras palabras, utilizas la sensibilidad de borde cuando estás esperando algo y la sensibilidad de nivel cuando algo puede estar ya esperándote.

3voto

AaronD Puntos 3222

El nivel de disparo (alto o bajo) puede permitir a la fuente decir "no importa" o mantener el disparo activo hasta que el ISR lo haga. La latencia de las interrupciones no está garantizada en un solo núcleo con múltiples disparos, aunque suele ser bastante rápida. Generalmente, la señal para una interrupción disparada por nivel es a su vez disparada por flancos y tienes que despejarla en el ISR o de lo contrario volverás a entrar en ella.

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

La activación de bordes es buena para cosas que ocurren una vez en algún evento. Si el evento sucede de nuevo, entonces su respuesta sucederá de nuevo, por lo que tendrá que tener cuidado con los eventos repetidos como el rebote del interruptor.

2voto

chrisbunney Puntos 228

El disparo de nivel es útil cuando una acción continua requiere disparar eventos repetidos, por ejemplo, hacer sonar una campana mientras una alarma está activa. En este caso, el ISR se encargaría de energizar y desenergizar un solenoide sólo una vez; el hecho de que el disparador de interrupción siga presente se encargaría de extender la duración del timbre.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X