P. 1
Programación de la tarjeta CT6811 en lenguaje C

Programación de la tarjeta CT6811 en lenguaje C

|Views: 3.126|Likes:
Publicado porJuan Gonzalez Gomez
Manual práctico de programación de la tarjeta CT6811 en lenguaje C, usando el compilador cruzado de Imagecraft V0.47.
Mayo 1997
Manual práctico de programación de la tarjeta CT6811 en lenguaje C, usando el compilador cruzado de Imagecraft V0.47.
Mayo 1997

More info:

Published by: Juan Gonzalez Gomez on Apr 28, 2009
Copyright:Attribution Share Alike

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/08/2013

pdf

text

original

Las rutinas de atención a las interrupciones deben terminar con la instrucción RTI, en lugar de
la instrucción RTS que es la utilizada para retornar de una subrutina. En el estándar ANSI C no se

main()
{

static char c;

c=leer_car();
asm (“ LDAA %c”);
.
.

}

Figura 7: Ejemplo de carga de la
variable c en el acumulador A

/* Vector de interrupción */
#define vint (*(unsigned int *)0xFFD6)

/* Rutina de servicio de interrupción */
void rsi()
{

.
.
.
asm (“ RTI”);

}

main()
{

/* Cambiar vector de interrupción */
vint = (unsigned int)rsi;

/* Activar las interrupciones */
asm (“ CLI”);
.
.
.

}

Figura 8: Programa modelo de una rutina de servicio de
interrupción

Programación de la tarjeta CT6811 en lenguaje C

14

contempla ninguna palabra reservada para indicar al compilador que una función en C es
una rutina de servicio de interrupción y que por tanto debe finalizar con la instrucción RTI en lugar de
RTS. Por ello es necesario introducir directamente la instrucción RTI al final de la rutina de servicio de
interrupción por medio de la instrucción asm (“ RTI”). Pero esto tiene problemas. El compilar puede
haber generado un código que utilice la pila. Antes de salir de la rutina de interrupción habrá que vaciar
por completo la pila o de lo contrario llegará un momento que se desbordará.

Para solucionar esto se utiliza el truco de la subrutina de servicio de interrupción. Para cada
interrupción que tomemos se definen dos funciones. Una función será la rutina de servicio de
interrupción
y la otra será la subrutina de servicio de interrupción. El nuevo vector de interrupción se
modificará para que apunte a la rutina de servicio de interrupción, la cual debe acabar con la instrucción
asm (“ RTI”). En la subrutina de servicio de interrupción se introduce el código necesario para atender
a la interrupción. A continuación se muestra un esquema de funcionamiento:

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->