¿Cuál es la diferencia real entre las interrupciones sensibles al borde y las sensibles al nivel

7

Actualmente estoy trabajando en una MCU C8051F120 donde las interrupciones externas se pueden definir de dos formas:

  1. Sensible al borde (caída)
  2. Nivel sensible (nivel bajo)

En interrupciones sensibles al nivel, tan pronto como la MCU detecta un nivel bajo en el pin externo, ejecutará el ISR que es lo mismo que detectar un flanco descendente.

Sé que estoy equivocado ya que ambos no pueden ser iguales. Por lo tanto, estoy haciendo esta pregunta: ¿cuál es la diferencia real entre los dos, en su procedimiento de detección o en la ejecución del ISR?

    
pregunta nkg2743

3 respuestas

9

Es exactamente lo que se dice.

Si se establece la interrupción del borde, el ISR solo se activará en el flanco ascendente / ascendente de un pulso. Mientras que si se establece la interrupción sensible al nivel (como usted dice), el ISR se activará cada vez que haya una señal de nivel bajo / alto en el pin correspondiente.

En resumen, la interrupción de borde se dispara solo al cambiar de borde, mientras que las interrupciones de nivel se activan siempre que el pulso sea bajo o alto.

Entonces, si tiene un conjunto de interrupciones de bajo nivel, MCU continuará ejecutando el ISR mientras el pin esté bajo.

    
respondido por el Golaž
4

Una interrupción sensible al nivel y una interrupción sensible al borde son en realidad dos cosas muy diferentes. Intentaré dar algunas ideas generales que podrían ayudarlo a comprender cómo funcionan otras interrupciones.

Supongamos que su CPU puede ejecutar código en dos modos: modo normal y modo interrumpido. Para pasar del modo normal al modo de interrupción, debe ocurrir una interrupción, sea lo que sea, mientras que para volver, se debe ejecutar la instrucción IRET . Supongamos también que si se produce una interrupción mientras se está en modo de interrupción, se guarda de alguna manera pero no se repara de inmediato, es decir, cuando se está en modo de interrupción, la CPU no puede ser interrumpida.

Entonces, ¿qué es una interrupción? Yo diría que es un evento : algo que sucede, un temporizador se desborda, un pin se apaga, lo que sea. La CPU hace algo para responder al evento y luego reanuda la ejecución normal. ¿Qué sucede si ocurre un evento mientras se atiende a otro? Generalmente se establece un bit en algún registro y, justo después de la instrucción IRET , la CPU se vuelve a interrumpir, comprueba qué bit se establece y ejecuta la rutina de servicio de interrupción correcta.

Ahora puede ver por qué el nivel activado y el borde activado son dos cosas diferentes: son dos eventos diferentes. Cuando se ejecuta su ISR en el nivel de interrupción activada, probablemente borre el bit de interrupción como primera cosa: si el nivel se mantiene bajo, el hardware activa de inmediato otra interrupción que recibirá servicio justo cuando haya terminado con esto. En una interrupción activada por flanco, necesita que el pasador suba y vuelva a bajar para activar la interrupción una vez más.

No puedo pensar en un ejemplo significativo de cuándo necesitarías una interrupción activada por nivel, la activación por flanco parece mucho más útil y lo que normalmente necesitarías de todos modos.

    
respondido por el Vladimir Cravero
1

En muchos sistemas, las interrupciones pueden dividirse en tres categorías, no solo dos; muchos sistemas solo admiten dos de los tres, pero puede haber alguna diferencia en cuanto a cuáles dos son compatibles.

Una interrupción provocada por el borde hará que la CPU cambie al modo de interrupción cada vez que se habilitan las interrupciones, la línea de interrupción ha estado en el estado inactivo algún tiempo después de la última reinicialización de la interrupción, y tiene estado en el estado activo algún tiempo después de eso.

Una interrupción "pura" activada por nivel hará que la CPU cambie al modo de interrupción siempre que las interrupciones estén habilitadas y la señal de interrupción esté activa actualmente .

Una interrupción "pura" activada por nivel hará que la CPU cambie al modo de interrupción siempre que las interrupciones estén habilitadas y la señal de interrupción haya estado en su estado activo desde la última vez que se restableció (si estaba en su estado activo cuando se restableció , puede que simplemente se haya quedado en ese estado).

Una de las principales ventajas de las interrupciones activadas por nivel es que si mientras un dispositivo recibe servicio por un motivo, surge otro motivo que podría requerir que se le preste atención (u otro dispositivo que utilice la misma línea requiere atención), la CPU mantendrá Revisar el dispositivo hasta que esté completamente satisfecho y no tenga motivos para mantener la línea de restablecimiento.

Las principales desventajas de las interrupciones activadas por nivel son que a menudo requieren que la CPU realice una acción explícita para restablecerlas (las interrupciones activadas por flanco a menudo son restablecidas implícitamente por el controlador de interrupción cuando se envía la interrupción), y que es una interrupción que se habilita cuando la CPU no tiene idea de cómo realizar el servicio, puede bloquear el sistema, ya que la CPU no hará nada excepto invocar repetidamente el controlador de interrupciones porque el dispositivo necesitará (pero nunca recibirá) atención de manera continua.

    
respondido por el supercat

Lea otras preguntas en las etiquetas