Date post: | 24-Jan-2016 |
Category: |
Documents |
Upload: | jose-antonio-san-martin-rubio |
View: | 225 times |
Download: | 1 times |
Sistemas Digitales IISesión 08: Interrupciones - IRQ
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Agenda para la claseAgenda para la clase
11Interrupciones Caso especial de las excepciones, relacionadas con HW
22Procesamiento Interrupciones Cómo son tratadas por parte de la CPU
33Excepciones e Interrupciones en los PICs Cómo trata la CPU estos eventos
44Programación de la IRQ Ejemplo de cómo emplear la interrupción más simple
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
A continuación…A continuación…
Interrupcion Externa (IRQ)
Interrupciones en C
Registro Control de Interrupciones
Interrupciones en una CPUInterrupciones en una CPU
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
InterrupcionesInterrupciones
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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
InterrupcionesInterrupciones
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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas 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…
CPUCPUPeriféricoPeriféricoLínea IRQ
Línea ACK
InterrupcionesInterrupciones
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
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
InterrupcionesInterrupciones
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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
InterrupcionesInterrupciones
Vector de interrupciones PIC16F887
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
InterrupcionesInterrupciones
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)
CPUCPU
IRQIRQ TIMERTIMER CCP1CCP1 SCISCI SPISPIADCADC
MASKADC
MASKIRQ
MASKTIMER
MASKCCP1
MASKSCI
MASKSPI
MASKGLOBAL
MASKCCP1
I = ‘1’I = ‘1’
MASKGLOBAL
I = ‘0’I = ‘0’
La petición no desaparece hasta
hacer ACK
La petición no desaparece hasta
hacer ACK
I = ‘1’I = ‘1’
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
A continuación…A continuación…
Interrupcion Externa (IRQ)
Interrupciones en C
Registros Control de Interrupciones
Interrupciones en una CPU
Registros Control de Interrupciones
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Registros Control de InterrupcionesRegistros 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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
RegistrosRegistros
Organización de la memoria de datosRAM
Banco 0Banco 0 Banco 1Banco 1 Banco 2Banco 2 Banco 3Banco 3
8-bits8-bits8-bits8-bits
8-bits
0123
31
8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits8-bits8-bits
8-bits
SFR
GPR
8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits
8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits
8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits
8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits
32333435
127
3637
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
RegistrosRegistros
Organización de la memoria de datosRAM
Banco 0Banco 0 Banco 1Banco 1 Banco 2Banco 2 Banco 3Banco 3Registros que almacenan el estado de los
puertos
Registros que almacenan el estado de los
puertos
Registros que almacenan la
dirección de los puertos
Registros que almacenan la
dirección de los puertos
Registros Para la
Gestión de Puertos
0x07F
0x0010x002
0x0040x005
0x0070x008
0x00A0x00B
0x000
0x003
0x006
0x009
0x00C0x00D
8-bits8-bits8-bits8-bits8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits8-bits8-bits8-bits8-bits
0x0800x0810x082
0x0FF
0x0840x085
0x0870x088
0x08A0x08B
0x083
0x086
0x089
0x08C0x08D
8-bits8-bits8-bits8-bits8-bits8-bits8-bits8-bits
8-bits
8-bits8-bits8-bits8-bits8-bits8-bits
TRISATRISBTRISCTRISDTRISE
PORTAPORTBPORTCPORTDPORTE
INTCONPIR1PIR2
INTCONPIE1PIE2
Registros Para la Gestión de
Interrupciones
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
INTCON (Interrupt control register)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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
INTCON (Interrupt control register)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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
PIRx PIExPIRx PIEx
Los registros adicionales contienen los flags de las distintas interrupciones. PIEx: Peripheral Interrupt Enable Register.
PIRx: Peripheral Interrupt Request Register
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
PIRx PIExPIRx PIEx
El compilador C se encarga de generar el código necesario para leer y borrar dichos registros.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
A continuación…A continuación…
Interrupcion Externa (IRQ)
Interrupciones en C
Registros Control de Interrupciones
Interrupciones en una CPU
Interrupciones en C
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones 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 …
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones 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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones 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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones 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.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones en C
Niveles:NIVEL
REGISTROS
ITCON PIE1 PIE2
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
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones en C
La función contraria a la anterior
disable_interrupts (nivel);
Inhabilita las mascaras de la interrupción correspondiente.
CPUCPU
IRQIRQ TIMERTIMER CCP1CCP1 SCISCI SPISPIADCADC
MASKADC
MASKIRQ
MASKTIMER
MASKCCP1
MASKSCI
MASKSPI
MASKGLOBAL
MASKCCP1
enable_interrups(GLOABL);
enable_interrups(GLOABL);
MASKGLOBAL
desable_interrups(GLOBAL);
desable_interrups(GLOBAL);
enable_interrups(INT_CPP1);
enable_interrups(INT_CPP1);
enable_interrups(GLOBAL);
enable_interrups(GLOBAL);
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
A continuación…A continuación…
Interrupcion Externa (IRQ)
Excepciones e Interrupciones
Procesamiento de Interrupciones
Interrupciones en una CPU
Interrupcion Externa (IRQ)
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
IRQ (Interrupt Request)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
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones 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
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones 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,
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones RBInterrupciones 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
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás
Interrupciones en CInterrupciones 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
Sistemas Digitales IIFin de la Sesión 08