PDF de programación - Práctica 4 - Interrupciones

Imágen de pdf Práctica 4 - Interrupciones

Práctica 4 - Interrupcionesgráfica de visualizaciones

Publicado el 16 de Diciembre del 2018
938 visualizaciones desde el 16 de Diciembre del 2018
258,6 KB
13 paginas
Creado hace 10a (17/02/2014)
. . . . . .. . . .

Práctica 4



Página Web: https://web08.uah.es/
e-mail: [email protected]

Despacho: N-245

Departamento de Automática

Interrupciones

.

.

.

.

.

.

.

.



Laboratorio de Informática Industrial



.
.



Interrupciones



Introducción

Este documento presenta un resumen del sistema de gestión de interrupciones del Cortex M3 y de
la configuración y manejo de las Interrupciones Externas en el LPC1768 que puede servir de base para la
programación de interrupciones del LPC1768. También se presenta la biblioteca de funciones CMSIS
definidas para homogeneizar el acceso a algunos recursos de procesadores basados en la arquitectura Cortex
y utilizado en la gestión de interrupciones.


Se incluyen en él la tabla de vectores del LPC1768 y los nombres de las funciones de interrupción

utilizados por Keil en la versión V. 4. 21 del uVision 4.


La información está obtenida fundamentalmente del LPC17xx User Manual proporcionado por

NXP y de la documentación incluida en la ayuda de Keil uVision 4.



Modelo de excepciones del Cortex M3

Al enfrentarse por primera vez a un microcontrolador es importante analizar cómo funciona su
sistema de gestión de excepciones e interrupciones, conocer cómo se tratan sus prioridades y cómo y dónde
se configuran, saber dónde está la tabla de vectores y saber realizar funciones de atención a las diferentes
excepciones. También es importante saber las interrupciones externas de las que dispone y cómo se
configuran.

Una excepción es un evento que se puede producir por diferentes causas y que, cuando se
produce, si está habilitado, provoca la ejecución inmediata de una rutina de atención a la excepción
interrumpiendo el programa que se estuviera ejecutando en ese momento. En la mayor parte de las
excepciones, al finalizar la rutina de excepción, se produce un retorno al programa que se estaba ejecutando.


La dirección de salto asociada a cada una de las excepciones se encuentra en la llamada “Tabla de
Vectores” donde el primer elemento es el “Vector de Reset”. Tras el Reset, la tabla de vectores está situada
en la posición de memoria 0x00000000 aunque se podría trasladar a otro lugar si fuera necesario. En la tabla
de vectores hay una entrada por cada una de las posibles excepciones (112 en el LPC1768). (6.4 y 34.4.3.5 del
LPC17xx User Manual).


Las interrupciones son un caso particular de excepciones donde el evento es producido por un
periférico de la CPU (situados dentro del microcontrolador) o por interrupciones externas. El Cortex M3
distingue entre la atención a interrupciones (ISR) y la atención al resto de excepciones (Reset, Fault handlers
y System handlers). A continuación se desarrolla más en profundidad la gestión de interrupciones dejando de
lado la gestión del resto de excepciones.


Todas las excepciones tienen asociado un número de excepción, un número de interrupción y una

prioridad (34.3.3 del LPC17xx User Manual):



 El número de excepción va de 1 a 15 para las excepciones que no son interrupciones y del 16 en adelante

para las interrupciones.

Práctica 4

2

Interrupciones



 El número de interrupción (IRQ Number) toma valores de -11 a -1 para las excepciones que no son

interrupciones y del 0 en adelante para las interrupciones.



. . . . . . . . .

La prioridad es configurable salvo en el Reset y en la NMI (las dos primeras) que tienen las prioridades más
altas posibles (-3 y -2 respectivamente). Se puede asignar a cada excepción un nivel de prioridad del 0 al 31,
siendo el 0 el más prioritario. Tras el Reset, todas las excepciones de prioridad configurable tienen como
nivel de prioridad el 0. La prioridad de las excepciones (salvo las interrupciones) se configura con los
registros SHPR1 – SHPR3 (34.4.3.9 del LPC17xx User Manual) y las de las interrupciones en los registros
IPR0 – IPR27 (en otro sitio pone hasta IPR59) (34.4.2.7 y 6.5.11-19 del LPC17xx User Manual).



Las interrupciones pueden estar en tres estados: inactiva, pendiente y ejecutándose (inactive,

pending, run) (34.4.2.9.1 del LPC17xx User Manual):





Inactive: no se tiene registro de que se haya producido el evento asociado a la excepción.

 Pending: se ha detectado el evento asociado a una excepción y se ha registrado pero todavía no se está
ejecutando la rutina de atención correspondiente. Se puede saber si una interrupción está pendiente o no con
la lectura de los registros ISPRn o ICPRn.

 Run: se está ejecutando la rutina de atención correspondiente. Se puede saber si una interrupción está activa

con la lectura del registro IABRn.


Se puede forzar el paso de una interrupción a pendiente mediante la escritura de un 1 en el lugar
correspondiente del registro ISPRn y se puede formar el paso de pendiente a inactiva mediante la escritura de
un 1 en el lugar correspondiente del registro ICPRn.


Existen tres registros relacionados con el enmascaramiento de interrupciones para evitar que sean

atendidas cuando están pendientes (34.3.1.3.6 del LPC17xx User Manual):



 Escribir un 1 en el registro PRIMASK enmascara la activación de todas las interrupciones de prioridad

configurable, es decir todas excepto la NMI y el HardFault.

 Escribir un 1 en el registro FAULTMASK enmascara la activación de todas las interrupciones excepto la
NMI. El procesador borra el FAULTMASK al finalizar la atención de cualquier excepción, salvo de la NMI.

 Mediante la escritura del registro BASEPRI se define el nivel de prioridad máxima que es atendido. Las
interrupciones de nivel de prioridad igual o inferior al de BASEPRI no se atienden. Si BASEPRI vale cero no
tiene ningún efecto.


Tras la ejecución de cada instrucción de ensamblador, se evalúan las interrupciones que están en
estado PENDING y que no están enmascaradas. Si hay alguna en esta situación, se produce un salto a su
rutina de interrupción asociada tras obtener la dirección de salto de la “Tabla de Vectores”.


Si en un determinado momento, hay más de una interrupción en estado PENDING, se ejecutará
la rutina de interrupción asociada a la interrupción más prioritaria (con menor número de prioridad). En caso
de estar pendientes varias interrupciones del mismo nivel de prioridad, se atenderá a la que tenga menor
número de excepción.


Si cuando está ejecutándose una rutina de atención a una interrupción, pasa a estado PENDING
una interrupción de mayor nivel de prioridad no enmascarada, interrumpirá a la interrupción más prioritaria
anidando interrupciones. En cambio, si la interrupción es del mismo nivel de prioridad que la que se está
ejecutando, no será interrumpida, esperando a que finalice la rutina de interrupción en ejecución para ser
atendida.

Existe la posibilidad de dividir el nivel de prioridad en dos campos (grupo y subgrupo) que se
puede configurar con el campo PRIGROUP del registro AIRCR (34.4.3.6 y 34.3.3.6 del LPC17xx User

3



Manual). En este caso, el anidamiento de interrupciones sólo se produce cuando está pendiente una
interrupción de un grupo superior y está en ejecución una de un grupo inferior.


La NMI (Non Maskable Interrupt – Interrupción no enmascarable) es una excepción asociada a
un pin del microcontrolador que siempre que se active, produce una interrupción. En el LPC1768 la NMI
está en el pin 53 y comparte funcionalidad con el P2.10 y EINT0. NMI es la tercera función del pin y por
tanto, para que esté activa, es necesario configurar un 10 en los bits 21:20 del registro PINSEL4 (Pin
Function Select Register 4). El bit NMIPENDSET del registro ICSR indica si la NMI está pendiente o no.
La escritura de un 1 fuerza el paso de la NMI a estado pendiente lo que provoca la entrada inmediata de su
función de atención asociada ya que es la interrupción más prioritaria y no enmascarable. Al entrar en la
rutina se borra el estado de pendiente.



Interrupciones externas del LPC1768

Las interrupciones externas permiten que un cambio del nivel de un pin de entrada del
microcontrolador, provoque la ejecución de una rutina de atención a esa interrupción. Las interrupciones
externas suelen utilizarse para que el procesador responda a eventos de elementos de hardware externos.


Las interrupciones externas se pueden configurar activas por nivel (alto o bajo) o activas por
flanco (bajada o subida). Una interrupción activa por nivel implica que permanecerán activas mientras el
nivel asociado se mantenga. Normalmente las interrupciones activas por nivel se utilizan para atender un
evento de un dispositivo externo que desactiva la interrupción cuando es atendido.


El LPC1768 dispone de 4 entradas de interrupción externas específicas (/EINT0 .. /EINT3)
situadas en los pines P2.10 … P2.13 como primera función alternativa por lo que para seleccionarlas es
necesario escribir un 01 en los bits adecuados del registro PINSEL4. Además de estas cuatro líneas, se
pueden configurar como interrupciones externas cualquiera de los pines de los puertos P0 y P2.

Interrupciones externas dedicadas


Las interrupciones externas /EINT0 - /EINT3 tienen asociados los números de interrupción
IRQ18 – IRQ21 (Tabla 50 del LPC17xx User Manual) y, como el resto de las interrupciones, se configuran
con el acceso a los registros generales del NVIC (6.5 del LPC17xx User Manual), habilitándolas y
deshabilitándolas me
  • Links de descarga
http://lwp-l.com/pdf14559

Comentarios de: Práctica 4 - Interrupciones (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad