Vista previa del material en texto
MICROCONTROLADOR ATMega328P Interrupciones ATMega328P – Interrupciones ➢ Permiten al programa responder a eventos cuando ellos ocurren ➢ Permiten al programa ignorar eventos hasta que ellos ocurran ➢ Ejemplos eventos externos: ▪ UART lista con/para próximo carácter ▪ Cambio de la señal en el pin ✓ La acción depende del contexto ▪ Número de flancos que llegan al pin ➢ Ejemplos eventos internos: ▪ Falla de potencia ▪ Excepción aritmética ▪ Evento del Temporizador ATMega328P – Reset y Vectores de Interrupción ATMega328P – Reset y Vectores de Interrupción ATMega328P – Modelo de interrupción ➢ Cuando un evento de interrupción ocurre: ▪ El procesador hace un llamado (CALL) automático a procedimiento ▪ CALL automáticamente ejecuta las acciones necesarias para cargar el registro PC con la dirección donde está el procedimiento de interrupción: ✓ Guarda el registro PC en la pila (Push), y salta a la dirección de interrupción (PC = dirección de rutina de interrupción) ➢ Cada evento tiene su propia dirección de interrupción ➢ El bit de habilitación de interrupción global (I en SREG) es puesto en ‘0’ automáticamente. ▪ i.e. interrupciones anidadas son deshabilitadas ▪ El bit I en SREG puede ser puesto en uno para habilitar interrupciones anidadas ATMega328P – Modelo de interrupción ➢ Procedimiento de interrupción “interrupt handler” ▪ Lleva a cabo las instrucciones de la interrupción, y retorna al programa con la instrucción RETI ▪ El bit de interrupción global es automáticamente puesto en uno con RETI ▪ Una instrucción del programa es siempre ejecutada después de RETI ATMega328P – Modelo de interrupción Un aspecto importante es que los eventos pueden ocurrir en cualquier momento, es decir, en forma asíncrona. ISR: Interrupt Service Routine ATMega328P – Manejo de Interrupciones ATMega328P – Interrupciones Externas ➢ Las interrupciones externas sirven para detectar un estado lógico o un cambio de estado en alguna de las terminales de entrada de un microcontrolador. ➢ Evitan el sondeo continuo en la terminal de interés. ➢ Útiles para monitorear interruptores, botones o sensores con salida a relevador. Interrupciones externas ATmega328P ATMega328P – Interrupciones Externas ➢ Las interrupciones externas pueden configurarse para detectar un nivel bajo de voltaje o una transición (flanco de subida o de bajada). ➢ Las interrupciones pueden generarse aun cuando sus respectivas terminales sean configuradas como salidas. ➢ Las transiciones requieren de la señal de reloj de los módulos de los recursos (clkI/O) para producir una interrupción. ➢ Un nivel bajo en INT0/INT1 no requieren de señal de reloj para generar una interrupción. ATMega328P – Interrupciones Externas Configuración de las interrupciones externas External Interrupt Control Register A – EICRA Registro de I/O extendido. No puede ser leído y escrito con instrucciones IN y OUT. Es leído y escrito con instrucciones LD y ST. ATMega328P – Interrupciones Externas Habilitación y estado de interrupciones externas EIMSK – External Interrupt Mask Register Interrupción externa 0 es habilitada: INT0 (EIMSK) = ‘1’ y I (SREG) =‘1’ Interrupción externa 1 es habilitada: INT1 (EIMSK) = ‘1’ y I (SREG) =‘1’ ATMega328P – Interrupciones Externas Ejemplo Realice un programa que conmute la salida menos significativa del puerto B (PB0) de un ATmega328P cada vez que es presionado un botón conectado en INT0, como se muestra en la figura. ATMega328P – Interrupciones Externas Ejemplo En el puerto D se habilita al resistor Pull-Up para contar con ‘1’ mientras no se presione el botón. El otro extremo del botón se conecta a tierra para insertar un ‘0’ al presionarlo. La interrupción se configura por flanco de bajada. La conmutación de la salida se realiza en la rutina de interrupción. ATMega328P – Interrupciones Externas Ejemplo Programa en ensamblador .include <m328pdef.inc> ; Biblioteca con definiciones .ORG 0x000 ; Vector de reset JMP Inicio .ORG 0x002 ; Interrupción externa 0 SBI PINB, 0 ; Conmuta PB0 sin modificar otros bits RETI ATMega328P – Interrupciones Externas Inicio: ; Inicializaciones LDI R16, 0x00 OUT DDRD, R16 ; Puerto D como entrada LDI R16, 0xFF OUT PORTD, R16 ; Resistores de pull-up en el Puerto D OUT DDRB, R16 ; Puerto B como salida LDI R16 , 0x02 ; INT0 por flanco de bajada STS EICRA, R16 LDI R16 , 0x01 ; Habilita la INT0 OUT EIMSK, R16 ATMega328P – Interrupciones Externas CLR R16 ; Estado inicial de la salida OUT PORTB, R16 SEI ; Habilitador global de interrupciones Lazo : NOP RJMP Lazo ; Lazo infinito, permanece ocioso ATMega328P – Interrupciones Externas Ejemplo Realice un contador de eventos ascendente/descendente con salida en binario. Considere las terminales INT0 e INT1 para el ingreso de eventos y muestre la salida en el puerto B, el hardware sugerido se muestra en la figura. ATmega328P – Interrupciones Externas ATmega328P ATmega328P – Interrupciones Externas Ejemplo Programa en ensamblador .ORG 0x0000 ; Vector de reset RJMP Inicio ; Vectores de interrupciones .ORG 0x0002 ; Vector de la interrupción externa 0 RJMP ISR_INT0 .ORG 0x0004 ; Vector de la interrupción externa 1 RJMP ISR_INT1 Inicio: ; Inicializaciones LDI R16, 0x00 OUT DDRD, R16 ; Puerto D como entrada LDI R16, 0xFF OUT PORTD, R16 ; Resistor de Pull-Up en el puerto D ATmega328P – Interrupciones Externas Ejemplo Programa en ensamblador OUT DDRB, R16 ; Puerto B como salida LDI R16, 0x08 ; Inicializa al apuntador de pila OUT SPH, R16 LDI R16, 0xFF OUT SPL, R16 LDI R16, 0B00001010 ; INT1/INT0 flanco de bajada ;OUT EICRA, R16 LDI XH, 0X00 LDI XL, 0X69 ST X, R16 ; Carga en registro EICRA Conf. INT1/INT0 LDI R16, 0B00000011 ; Habilita INT1/INT0 OUT EIMSK, R16 ATmega328P – Interrupciones Externas Ejemplo Programa en ensamblador CLR R17 ; El contador inicia en 0 OUT PORTB, R17 ; Valor inicial de la salida SEI ; Habilitador global de interrupciones Lazo: RJMP Lazo ; Lazo infinito, permanece ocioso ATmega328P – Interrupciones Externas Ejemplo Programa en ensamblador ISR_INT0: ; Rutina de atención a la INT0 INC R17 ; Incrementa al contador OUT PORTB, R17 ; Actualiza la salida RETI ISR_INT1: ; Rutina de atención a la INT1 DEC R17 ; Reduce al contador OUT PORTB, R17 ; Actualiza la salida RETI BIBLIOGRAFÍA ATmega328P 8-bit AVR Microcontroller with 32K Bytes In- System Programmable Flash, DATASHEET. Lecture 6 – ATmega328 Timers and Interrupts https://courses.cs.washington.edu/courses/csep567/10wi/lectures/ Lecture7.pdf 4. Interrupciones Externas, Temporizadores y PWM https://www.controlesdigitales.com/Libro_Felipe_Santiago/04_C ap_4_5_6_7.pdf Capítulo 2 (sección 2.6) y Capítulo 4. El microcontrolador ATMega328P. Felipe Santiago Espinosa. Diapositiva 1 Diapositiva 2: ATMega328P – Interrupciones Diapositiva 3: ATMega328P – Reset y Vectores de Interrupción Diapositiva 4: ATMega328P – Reset y Vectores de Interrupción Diapositiva 5: ATMega328P – Modelo de interrupción Diapositiva 6: ATMega328P – Modelo de interrupción Diapositiva 7: ATMega328P – Modelo de interrupción Diapositiva 8: ATMega328P – Manejo de Interrupciones Diapositiva 9: ATMega328P – Interrupciones Externas Diapositiva 10: ATMega328P – Interrupciones Externas Diapositiva 11: ATMega328P – Interrupciones Externas Diapositiva 12: ATMega328P – Interrupciones Externas Diapositiva 13: ATMega328P – Interrupciones Externas Diapositiva 14: ATMega328P – Interrupciones Externas Diapositiva 15: ATMega328P – Interrupciones Externas Diapositiva 16: ATMega328P – Interrupciones Externas Diapositiva 17: ATMega328P – Interrupciones Externas Diapositiva 18: ATMega328P – Interrupciones Externas Diapositiva 19: ATmega328P – Interrupciones Externas Diapositiva 20: ATmega328P – Interrupciones Externas Diapositiva 21: ATmega328P – Interrupciones Externas Diapositiva 22: ATmega328P – Interrupciones ExternasDiapositiva 23: ATmega328P – Interrupciones Externas Diapositiva 24: BIBLIOGRAFÍA