05.Manejo de interrupciones

5,338
-1

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,338
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
166
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

05.Manejo de interrupciones

  1. 1. Sistemas Basados en Microprocesadores Manejo de Interrupciones
  2. 2. Interrupciones Una interrupción es un evento que es identificado por el µcontrolador, y que interrumpe el proceso normal de un programa.  Cuando finaliza la atención de la interrupción se continua en el punto donde se había interrumpido el programa. Los eventos o fuentes de interrupción son muchos y muy variados:  Interrupción externa por flanco, por cambio de estado, por fin de temporización… http://paginaspersonales.deusto.es/jonathan.garibay/
  3. 3. Interrupciones (continuación…) Los µcontroladores PIC incluyen un sistema de interrupciones basado en dos niveles de prioridad.  Una interrupción de alta prioridad puede interrumpir el tratamiento de una de baja prioridad pero no a la inversa. Porcompatibilidad, el sistema de interrupciones con prioridades está desactivado por defecto de forma que se trabaja sin prioridades.  El bit IPEN del registro RCON habilita (1) o no (0) el sistema de prioridades de los PIC18. http://paginaspersonales.deusto.es/jonathan.garibay/
  4. 4. Interrupciones (continuación…) Cuando se produce una interrupción, se realiza una llamada automática a la rutina de interrupción.  Las rutinas de interrupción tienen una posición específica dentro de la memoria de programa.  0x0008 para la rutina de interrupción de alta prioridad.  0x0018 para la rutina de interrupción de baja prioridad.  Si no se usan prioridades, sólo existe un único vector y está situado en la posición 0x0008. http://paginaspersonales.deusto.es/jonathan.garibay/
  5. 5. Interrupciones (continuación…) Cada fuente de interrupción se controla por medio de 3 bits:  Bit de prioridad: permite asignar a cada fuente de interrupción una prioridad alta (1) o baja (0).  Siempre se llama xxIP (donde “xx” es el nombre de la fuente de interrupción).  Bit de habilitación: permite habilitar (1) o no (0) cada fuente de interrupción.  Siempre se llama xxIE  Bit de señalización o “Flag”: informa que se ha detectado (1) o no (0) una interrupción.  Siempre se llama xxIF http://paginaspersonales.deusto.es/jonathan.garibay/
  6. 6. Interrupciones (continuación…) Las interrupciones tienen un habilitador global además del habilitador individual de cada fuente de interrupción:  El bit GIE/GIEH del registro INTCON:  Si se usan prioridades (bit GIEH). habilita las interrupciones configuradas como de alta prioridad.  Si no se usan prioridades (bit GIE), habilita todas las interrupciones que tenga su habilitador individual activado.  El bit PEIE/GIEL del registro INTCON:  Si se usan prioridades (bit GIEL), habilita las interrupciones configuradas como de baja prioridad.  Si no se usan prioridades (bit PEIE), habilita las interrupciones relacionadas con periféricos del µcontrolador. http://paginaspersonales.deusto.es/jonathan.garibay/
  7. 7. Interrupciones (continuación…) Loshabilitadores globales se ponen a 0 cuando se produce una interrupción. Se pone a 1 con la  Si no hay prioridades sólo el bit GIE. instrucción retfie  Si hay prioridades, el bit GIEH o el GIEL, dependiendo de la prioridad de la interrupción generada. Losflags individuales se ponen a 1 cuando se produce su interrupción correspondiente.  Es necesario ponerlos a 0 manualmente para que no salte de nuevo la interrupción (sin haberse producido).  Aunque la interrupción no esté habilitada, el flag se pone a 1 cuando sucede el evento, pero no salta la interrupción. http://paginaspersonales.deusto.es/jonathan.garibay/
  8. 8. Interrupciones (continuación…) Instrucciones de control  retfie: regreso de interrupción con habilitación (pone a 1 los bits GIE, GIEH o GIEL según corresponda) Tipo de evento Bits afectados No hay prioridades GIE Hay prioridades y se ha generado una GIEH interrupción de alta prioridad Hay prioridades y se ha generado una GIEL interrupción de baja prioridad http://paginaspersonales.deusto.es/jonathan.garibay/
  9. 9. Interrupciones de E/S Hay dos tipos de interrupciones de E/S diferentes en los PIC18:  3 interrupciones externas independientes (INT0 con la línea RB0, INT1/RB1 e INT2/RB2).  Se produce al detectar un flanco, ascendente o descendente, configurable por medio del bit INTEDGx.  Se puede utilizar para el control de interruptores, pulsadores o cualquier dispositivo que genere un señal digital.  La interrupción INT0 no dispone del bit de prioridad, y se considera siempre como de prioridad alta.  Interrupción por cambio de estado en <RB4:RB7>.  Se produce cuando cambia el estado (pasar de „0‟ a „1‟ o de „1‟ a „0‟) de cualquiera de las 4 líneas.  Se utiliza principalmente para el control de teclados matriciales. http://paginaspersonales.deusto.es/jonathan.garibay/
  10. 10. Interrupciones de E/S (continuación…) Trabajo personal:  Diferenciar entre la E/S programada y la E/S por interrupción. http://paginaspersonales.deusto.es/jonathan.garibay/
  11. 11. Registros de Manejo de Interrupciones Habilitadores Flags individualesHabilitadores globales Depende del valor del bit IPENhttp://paginaspersonales.deusto.es/jonathan.garibay/
  12. 12. Registros de Manejo de Interrupciones(Continuación…) Prioridades Bits de configuración específicos de una interrupción http://paginaspersonales.deusto.es/jonathan.garibay/
  13. 13. Registros de Manejo de Interrupciones(Continuación…) … … http://paginaspersonales.deusto.es/jonathan.garibay/
  14. 14. Ejemplo de funcionamiento org 0x00 0x0000 inicio goto inicio Pila … PC 31 0x0008 btfss INTCON,RB0IF 30 0x000A retfie 0x000C bcf INTCON,RB0IF 29 0x000E incf PORTA, F … 0x0010 retfie 0 … 0x003A inicio clrf TRISA INTCON 0x003C movlw 0xF0 0x003E movwf TRISB 0x0040 clrf PORTA PORTA PORTB 0x0042 bsf INTCON,RBIE 0x0044 bcf INTCON,RBIF 0x0046 bsf INTCON,GIE 0x0048 bucle goto bucle …http://paginaspersonales.deusto.es/jonathan.garibay/
  15. 15. Resumen Cuando se produce una interrupción:  Se pone a „1‟ el bit de flag de la interrupción causante.  Se pone a „0‟ el bit global de habilitación.  Si no hay prioridades, se pone a „0‟ el bit GIE.  Si hay prioridades, se pone a „0‟ el bit GIEH o GIEL, según corresponda.  Se carga en el PC la dirección del vector de interrupción.  Si no hay prioridades, se carga la dirección 0x0008.  Si hay prioridades, se carga la dirección 0x0008 o 0x0018, según corresponda. http://paginaspersonales.deusto.es/jonathan.garibay/
  16. 16. Resumen (Continuación…) Para atender una interrupción:  Se busca la interrupción causante mirando el bit de flag.  Se va a la rutina de interrupción específica:  Se pone a „0‟ el bit de flag de la interrupción.  Se atiende la interrupción.  Se finaliza la rutina con la instrucción retfie.  Si no se encuentra la interrupción se finaliza la rutina con la instrucción retfie. Si se da este caso, esto nos indica que hay un error en la programación. http://paginaspersonales.deusto.es/jonathan.garibay/

×