Todos los microprocesadores prevén algún mecanismo para sincronizar sucesos externos, tales como los fallos de alimentación, peticiones de servicio de señales exteriores, etc. Un método sencillo es el llamado “pollin” que consiste en asociar cada posible suceso asíncrono a un indicador que permite reconocer si el suceso correspondiente necesita ser atendido o no. El microprocesador comprueba todas los indicadores siguiendo una secuencia determinada, y da servicio a aquel que lo precisa. Este método es poco eficiente ya que el microprocesador ha de dedicarse exclusivamente a verificar el estado de los indicadores y, si el número de posibles sucesos externos es grande, el tiempo que pasa hasta que los atiende puede ser excesivamente largo.

El método de interrupciones es mucho más eficaz a la hora de atender peticiones aleatorias. El principio de funcionamiento es el siguiente: un suceso asíncrono que necesita servicio genera una petición de interrupción; cuando el microprocesador la recibe suspende momentáneamente el trabajo que está ejecutando y pasa a realizar la rutina de atención a la interrupción. Una vez finalizada continúa realizando el programa por donde lo dejó. Con este método el microprocesador sólo se ocupa de los sucesos externos cuando se recibe una petición de interrupción, pudiéndose dedicar el resto del tiempo a realizar otras tareas.

El 65C02 dispone de distintos tipos de interrupciones que se resumen en el siguiente cuadro:

BRK : Se trata de una interrupción Software. Normalmente esta instrucción se inserta en un programa durante el periodo de depuración para analizar el contenido de registros y posiciones de memoria durante la ejecución de un programa.

La ejecución de esta instrucción da lugar a una secuencia de interrupción en la que se efectúan las siguientes operaciones.

- Se pone a “1″ el flag I del registro de status prohibiendo interrupciones enmascarables igual que una interrupción IRQ, la única diferencia es que el flag B se pone a “1″ indicando que se ha producido una interrupción software.

- Se guarda en la Pila el contenido del registro de status y el valor del PC .

- Se carga en el PC el valor del vector contenido en las posiciones de memoria 0FFFEH (byte bajo) y 0FFFFH (byte alto) y se ejecuta la subrutina de atención a la interrupción.

- Se vuelve al programa principal con una instrucción RTS

IRQ IRQ : Interrupción enmascarable hardware. Un nivel bajo en esta línea da lugar a una secuencia de interrupción en la que se efectúan las siguientes operaciones. : Interrupción enmascarable hardware. Un nivel bajo en esta línea da lugar a una secuencia de interrupción en la que se efectúan las siguientes operaciones.

- Se termina de ejecutar la instrucción que se estaba ejecutando en el momento de la petición de interrupción.

- La CPU analiza el contenido del bit I del registro de status. Si el valor de este b t es “1″, se ignora la interrupción y continúa ejecutándose el programa principal. Si por el contrario su valor es “0″. La interrupción es aceptada y continúa el proceso.

- Guarda el contenido del contador de programa y el registro de status en la pila e impide otra interrupción poniendo el flag I a “1″ .

- Recoge el vector de 0FFFEH y 0FFFFH y comienza la ejecución del programa situado en la dirección de memoria indicada por este.

- La ejecución finaliza cuando se encuentra una instrucción RTI, tras la cual recoge los datos antes guardados en la pila y continúa la ejecución del programa principal donde se detuvo.

NMI NMI : Interrupción no enmascarable hardware. Un flanco de bajada en esta línea da lugar a una secuencia de interrupción en la que se efectúan las siguientes operaciones. : Interrupción no enmascarable hardware. Un flanco de bajada en esta línea da lugar a una secuencia de interrupción en la que se efectúan las siguientes operaciones.

- Se termina de ejecutar la instrucción que se estaba ejecutando en el momento de la petición de interrupción.

-La CPU no analiza el contenido del bit I del registro de status e independientemente del valor que tenga este bit prosigue la secuencia de atención a la interrupción

- Guarda el contenido del contador de programa y el registro de status en la pila e impide otra interrupción enmascarable poniendo el flag I a “1″ .

- Recoge el vector de 0FFFAH y FFFBH y comienza la ejecución del programa situado en la dirección de memoria indicada por éste.

- La ejecución finaliza cuando se encuentra una instrucción RTI, tras la cual recoge los datos antes guardados en la pila y continúa la ejecución del programa principal donde se detuvo.

RES : : Reinicialización del sistema. Se emplea principalmente para reinicializar el sistema o para detectar falta de alimentación. Un nivel bajo en esta línea da lugar a una secuencia de reinicialización en la que se efectúan las siguientes operaciones.

- Durante el tiempo que está a nivel bajo se inhibe la escritura o lectura de la CPU.

- Se inicializa el sistema después de haber pasado seis ciclos de reloj.

- Se guarda el contador de programa y el registro de status en la pila y se impide otra interrupción enmascarable poniendo el flag I a “1″ .

- Se recoge el vector de 0FFFCH y 0FFFDH y se comienza la ejecución de la dirección de memoria indicada por éste que contendrá el programa de reinicialización.

Como se ha dicho anteriormente al accionarse una interrupción se salvaguardan automáticamente el contador de programa (PC) y el registro de Status (PS) en la pila, puesto que su contenido se altera al ejecutarse cualquier instrucción posterior. Si el programa de atención a la interrupción modifica los registros internos del microprocesador, éstos deben guardarse en la pila antes de ejecutarlo y ser devueltos justo antes del volver al programa principal.

En el caso de que dos o mas interrupciones se activen al mismo tiempo el 65C02 asigna el sistema de prioridades de la tabla siguiente, donde puede verse que la petición de interrupción de mayor prioridad es la RES (reinicialización) y la de menor prioridad es IRQ (interrupción enmascarable).

Prioridad Fuente de Interrupción Vector de Interrupción Más alta

Mas baja

RES

NMI

BRK

IRQ

FFFDH - FFFCH

FFFBH - FFFAH

FFFFH - FFFEH

FFFFH - FFFEH

Prioridad de las interrupciones del 65C02 y sus vectores de interrupción.

Puede ocurrir que dos o más dispositivos estuvieran conectados a una misma línea de interrupción por ejemplo IRQ en este caso cada vez que se produce una interrupción, el microprocesador carga en el contador de programa el contenido del vector 0FFFEH y 0FFFFH (si la interrupción es NMI el vector que se carga es 0FFAH y 0FFFBH).


Google