sesión 08: interrupciones - irq. 2009/1 circuitos digitales iii 2010/1 circuitos digitales iii...

31
Sistemas Digitales Sesión 08: Interrupciones - IRQ

Upload: jose-antonio-san-martin-rubio

Post on 24-Jan-2016

230 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

Sistemas Digitales IISesión 08: Interrupciones - IRQ

Page 2: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 3: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 4: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 5: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 6: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 7: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 8: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 9: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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’

Page 10: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 11: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 12: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 13: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 14: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 15: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 16: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 17: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 18: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 19: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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 …

Page 20: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 21: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 22: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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.

Page 23: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 24: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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);

Page 25: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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)

Page 26: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 27: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 28: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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,

Page 29: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 30: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

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

Page 31: Sesión 08: Interrupciones - IRQ. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales

Sistemas Digitales IIFin de la Sesión 08