Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJosé Antonio San Martín Rubio Modificado hace 10 años
1
Sesión 08: Interrupciones - IRQ
2
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Agenda para la clase 11 Interrupciones Caso especial de las excepciones, relacionadas con HW 22 Procesamiento Interrupciones Cómo son tratadas por parte de la CPU 33 Excepciones e Interrupciones en los PICs Cómo trata la CPU estos eventos 44 Programación de la IRQ Ejemplo de cómo emplear la interrupción más simple
3
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás A continuación… Interrupcion Externa (IRQ) Interrupciones en C Registro Control de Interrupciones Interrupciones en una CPU
4
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones Las interrupciones permiten: A cualquier suceso interior o exterior Interrumpir la ejecución del programa principal en cualquier momento. En el momento de producirse la interrupción: El CPU ejecuta un salto a la rutina de atención a la interrupción La interrupción debe ser previamente definida por el programador Allí se atenderá la interrupción.
5
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones Cuando se termina de ejecutar dicha rutina: Se retorna a la ejecución del programa principal en la misma posición de la memoria de programa donde se produjo la interrupción.
6
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Tenga en cuenta La CPU ejecuta normalmente su programa… Cuando hay transición de la línea IRQ, se pasa a ejecutar una subrutina especial… La subrutina le debe decir en algún momento al periférico que retire la petición en IRQ… Finalmente la subrutina especial finaliza y el programa continúa su ejecución normal… CPU Periférico Línea IRQ Línea ACK Interrupciones Instrucción 1 Instrucción 2 Instrucción 3 Instrucción 4 Instrucción 5 … Instrucción n Volver a 3 Programa principal Instrucción 3 Instrucción 1 Instrucción 2 Instrucción 3 Instrucción 4 Rec. ACK 5 Instrucción 6 Retorno Código Especial
7
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones El manejo de interrupciones permite: Realizar programas que no tienen que estar continuamente consultando sucesos internos o externos mediante técnicas de consulta o polling Estás consultas provocan retardos o paradas en la ejecución del programa principal.
8
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones Vector de interrupciones PIC16F887
9
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones La CPU posee unos registros de control donde mediante la utilización de banderas: Se puede determinar qué es lo que ha producido la interrupción Se pueden habilitar o no las distintas fuentes de interrupción (máscaras de interrupción) CPU IRQ TIMER CCP1 SCI SPI ADC MASK ADC MASK IRQ MASK TIMER MASK CCP1 MASK SCI MASK SPI MASK GLOBAL MASK CCP1 I = ‘1’ MASK GLOBAL I = ‘0’ La petición no desaparece hasta hacer ACK I = ‘1’
10
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás A continuación… Interrupcion Externa (IRQ) Interrupciones en C Registros Control de Interrupciones Interrupciones en una CPU Registros Control de Interrupciones
11
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Registros Control de Interrupciones La familia PIC16F88X posee: 14 fuentes de interrupción. 1 registro de control, INTCON que permite la habilitación de interrupciones y el manejo de las flags. 4 registros adicionales para la gestión de las interrupciones: PIR1, PlR2, PIE1y PIE2.
12
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Registros Organización de la memoria de datos RAM Banco 0 Banco 1 Banco 2 Banco 3 8-bits 0 1 2 3 31 8-bits SFR GPR 8-bits 32 33 34 35 127 36 37
13
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Registros Organización de la memoria de datos RAM Banco 0 Banco 1 Banco 2 Banco 3 Registros que almacenan el estado de los puertos Registros que almacenan la dirección de los puertos Registros Para la Gestión de Puertos 0x07F 0x001 0x002 0x004 0x005 0x007 0x008 0x00A 0x00B 0x000 0x003 0x006 0x009 0x00C 0x00D 8-bits 0x080 0x081 0x082 0x0FF 0x084 0x085 0x087 0x088 0x08A 0x08B 0x083 0x086 0x089 0x08C 0x08D 8-bits TRISA TRISB TRISC TRISD TRISE PORTA PORTB PORTC PORTD PORTE INTCON PIR1 PIR2 INTCON PIE1 PIE2 Registros Para la Gestión de Interrupciones
14
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás INTCON ( Interrupt control register ) Cuando se responde a una interrupción: GIE es inhabilitado para evitar interrupciones sucesivas Atención por parte de la CPU. Detener la ejecución actual. Almacenamiento de contexto Dirección de la instrucción del programa principal en la pila. Vector de Interrupción El PC (contador de programa) se carga con la dirección 0004h. Ejecutar subrutina de atención a interrupción. Determinar la fuente de la interrupción Reconocimiento por parte del software. Retorno a la ejecución normal.
15
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás INTCON ( Interrupt control register ) GlE: Bit de habilitación global de las interrupciones. PElE: Bit de habilitación de las interrupciones de periféricos. T0IE: Bit de habilitación de la interrupción por desbordamiento TMR0. lNTE: Bit de habilitación de la interrupción externa RB0/lNT. RBlE: Bit de habilitación de la interrupción por cambio en el PORTB. T0lF: Bit de flag de la interrupción del TMR0. INTF: Bit de flag de la interrupción del RB0/INT. RBlF: Bit de flag de la interrupción por cambio en PORTB.
16
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás PIRx PIEx Los registros adicionales contienen los flags de las distintas interrupciones. PIEx: Peripheral Interrupt Enable Register. PIRx: Peripheral Interrupt Request Register
17
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás PIRx PIEx El compilador C se encarga de generar el código necesario para leer y borrar dichos registros.
18
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás A continuación… Interrupcion Externa (IRQ) Interrupciones en C Registros Control de Interrupciones Interrupciones en una CPU Interrupciones en C
19
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C La directiva habitual en el manejo de las interrupciones: #INT_xxxx. Especifica que la función que le sigue es una función de interrupción #INT_AD #INT_EEPROM #INT_EXT #INT_TIMER1 #INT_TIMER2 ……
20
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C La directiva, #INT_GLOBAL implica: La función sustituye todas las acciones que inserta el compilador al aceptarse una interrupción. Se ejecuta solamente lo escrito en dicha función. No se suele utilizar y si se hace debe hacerse con mucho cuidado.
21
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C Si se utilizan las directivas de interrupción el compilador: Genera el código necesario para ejecutar la función que sigue a la directiva. Genera el código necesario para guardar al principio y restituir al final el contexto. Borra el flag activo por la interrupción.
22
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C El compilador C incluye funciones para el mejor manejo de las directivas de interrupción: enable_interrupts (nivel); “nivel” es una constante definida en un fichero de cabecera (16F88X.h) Se genera el código necesario para activar las máscaras correspondientes: Afecta los registros: ITCON, PIE1 y PIE2.
23
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C Niveles: NIVEL REGISTROS ITCONPIE1PIE2 GLOBAL Genérica INT_RTC / INT_TIMER0 Reloj / Timer0 INT_EXT Externa RB0 INT_RB Cambio PORTB INT_AD Conversión ADC INT_RDA Recepción USART INT_TBE Transmisión USART INT_SSP Puerto Serie Síncrono INT_CCP1 Comparador 1 INT_TIMER2 Timer 2 INT_TIMER1 Timer 1 INT_EEPROM Memoria EEPROM INT_BUSCOL Bus Datos INT_CCP2 Comparador 2
24
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C La función contraria a la anterior disable_interrupts (nivel); Inhabilita las mascaras de la interrupción correspondiente. CPU IRQ TIMER CCP1 SCI SPI ADC MASK ADC MASK IRQ MASK TIMER MASK CCP1 MASK SCI MASK SPI MASK GLOBAL MASK CCP1 enable_interrups (GLOABL); MASK GLOBAL desable_interrups (GLOBAL); enable_interrups (INT_CPP1); enable_interrups( GLOBAL);
25
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás A continuación… Interrupcion Externa (IRQ) Excepciones e Interrupciones Procesamiento de Interrupciones Interrupciones en una CPU Interrupcion Externa (IRQ)
26
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás IRQ (Interrupt Request) Es una interrupción básica Común a la mayoría de los MCU. Permite generar una interrupción tras el cambio de nivel de alto a bajo o de bajo a alto en pin externo. PIC16F88x: cambio de nivel en la entrada RB0
27
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C La directiva utilizada es: #INT_EXT se debe acompañar de siguientes funciones: ext_int_edge (H_TO_L); La interrupción es por flanco de bajada ext_int_edge (L_TO_H); La interrupción es por flanco de subida
28
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C La directiva utilizada es #INT_EXT afectan al bit 6 del registro OPTION_REG. INTEDG: Bit de selección del flanco de interrupción de RB0. 1 = La interrupción es por flanco de subida del pin RB0/INT. 0 = La interrupción es por flanco de bajada del pin RB0/lNT,
29
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones RB Son interrupciones básicas Común a la mayoría de los MCU. Permite generar interrupciones tras el cambio de nivel de alto a bajo y de bajo a alto en pin externo. PIC16F88x: cambio de nivel en la entrada RBx
30
2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales II Universidad Santo Tomás Interrupciones en C La directiva utilizada es: #INT_RB se debe acompañar de siguientes funciones: enable_interrupts (INT_RBx); La interrupción es habilitada La interrupción es por flanco de subida y de bajada
31
Fin de la Sesión 08
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.