MANEJO DE INTERRUPCIONES EN C

Una de las características más importantes de los microcontroladores, es la posibilidad de generar interrupciones. Una interrupción es un evento que hace que el microcontrolador detenga el proceso que se encuentra ejecutando, para atender dicho evento, una vez realizado el respectivo procedimiento, el microcontolador regresa a  seguir haciendo la tarea interrumpida.
El microcontrolador trabaja dos tipos de interrupciones, las interrupciones por periféricos y las externas.
INTERRUPCIONES EXTERNAS:
Son aquellas en las cuales una señal externa actúa sobre una entrada del microcontrolador ocasionando la respectiva interrupción.
Las fuentes de interrupción externas del  18F4550 son:

  • Interrupción externa 0: RB0
  • Interrupción externa 1: RB1
  • Interrupción externa 2: RB2
  • Interrupción por cambio en el PORTB (RB4, RB5, RB6, RB7)
  • Interrupción del Temporizador 0: TMRO
 INTERRUPCIONES POR PERIFÉRICOS:
Para este tipo de interrupción no se requiere de una señal externa para generarlas, estas interrupciones se generan por acciones de los módulos internos del microcontrolador, las fuentes de interrupción internas del  18F4550 son:

  •  Interrupción del SPP
  •  Interrupción del A/D
  •  Interrupción de Rx EUSART
  •  Interrupción de Tx EUSART
  •  Interrupción del MSSP
  •  Interrupción del CCP1
  •  Interrupción del CCP2
  •  Interrupción del Temporizador 1
  •  Interrupción del Temporizador 2
  •  Interrupción del Temporizador 3
  •  Interrupción de fallo del oscilador
  •  Interrupción del comparador
  •  Interrupción del USB
  •  Interrupción de escritura EEPROM
  •  Interrupción colisión del Bus MSSP
  •  Interrupción de detección de anomalías en VDD

El manejo de las interrupciones en c es bastante sencillo, simplemente se debe establecer una función para cada interrupción, estas funciones van precedidas de una directiva que le indica al compilador, que la función que se encuentra inmediatamente después de la directiva, es la que se ejecuta al momento de generarse la interrupción. Las directivas utilizadas para las interrupciones del 18F4550 se muestran en la tabla 4.

Tabla 4: Directivas para el manejo de interrupciones.

DIRECTIVA
DESCRIPCIÓN
INT_EXT
Interrupción externa por RB0
INT_EXT1
Interrupción externa por RB1
INT_EXT2
Interrupción externa por RB2
INT_RB
Interrupción externa por el cambio de estado de los bit RB4 - RB7 del puerto B
INT_RTCC
Interrupción por desbordamiento del TIMER0
INT_PSP
Interrupción del canal de transmisión de datos paralelo
INT_AD
Interrupción por fin de conversión del modulo A/D
INT_RDA
Interrupción por recepción EUSART
INT_TBE
Interrupción por trasmisión EUSART
INT_SSP
Interrupción por actividad en el modulo SPI o I2C
INT_CCP1
Interrupción por modulo 1 de captura, comparación y PWM
INT_CCP2
Interrupción por modulo 2 de captura, comparación y PWM
INT_TIMER1
Interrupción por el temporizador 1
INT_TIMER2
Interrupción por el temporizador 2
INT_TIMER3
Interrupción por el temporizador 3
INT_OSCF
Interrupción por fallo en el oscilador
INT_COMP
Interrupción por el comparador
INT_USB
Interrupción por actividad en el puerto USB
INT_EEPROM
Interrupción por fin de escritura en la EEPROM
INT_BUSCOL
Interrupción por colisión en el bus SPI
INT_LVD
Interrupción por bajo voltaje


  
Estas directivas también son utilizadas para utilizar las funciones de habilitación o deshabilitación.

ENABLE_INTERRUPTS( Directiva );

DISABLE_INTERRUPTS( Directiva );


PRIORIDAD EN LAS INTERRUPCIONES:

El sistema de interrupciones de los micros de gama alta posee dos niveles de prioridad, alta y baja. La diferencia entre una prioridad y otra, es que las interrupciones de alta prioridad pueden interrumpir una de baja prioridad.

Todas las interrupciones pueden ser programadas en cualquiera de las dos prioridades, excepto la interrupción externa por RB0, esta siempre tendrá alta prioridad.

En el compilador CCS se modifican las directivas, de tal forma que se pueda incluir la palabra HIGH, para indicar cuáles son las interrupciones que tendrán alta prioridad, aquellas directivas las cuales no tengan definida la prioridad se comportan como baja prioridad, también se deben activar el sistema de prioridad.

#DEVICE HIGH_INTS=TRUE

#INT_XXXXX HIGH    
  


No hay comentarios:

Publicar un comentario