6.7 Ejemplos de programacion entre puertos y dispositivos
El objetivo básico de una interrupción es ejecutar una función que responda a la petición de un dispositivo de hardware. Un vectorinterrupción contiene la dirección de esta función. En un sistema basado en el 8086 el primer Kbyte de memoria (desde 00000H a 003FFH) es utilizado como una tabla de vectores de interrupción. Para apuntar aqualquier direccion del mapa de memoria son necesarios cuatro bytes. 16 bits para el desplazamiento y 16 bits para el el segmento. Luego, un Kbyte de memoria permite almacenar 256 vectores deinterrupción. Algunos de los 256 vectores de interrupción son utilizados por el sistema, otros estan libres para ser usados por los programas de usuario. Para instalar una rutina de interrupción de usuario esposible utilizar un programa como el del ejemplo.
El programa instala una rutina de interrupción en el canal de interrupción IRQ1, que es el reloj de sistema. Este timer genera una interrupcion 18.2veces por segundo. En la rutina de servicio de la interrupción, se incrementa una variable global. Cuando esta variable es igual a 18 se presenta en la pantalla. Luego obtendremos un contador desegundos (aprox.).
Ejemplo:
1. include <stdio.h>
2. include <sys/io.h>
3. define K 0×378
int main()
{
unsigned char p=0×01 int sentit=1,i;if(ioperm(K,3,1))
{
perror(“ioperm”)
exit(1);
}
while(1)
{
for(i=0;i<=7;i++) {outb(p,K);
if(sentit) {
if(p<128)
p <<= 1; // Desplazamos bits hacia la izquierda
} else {
if(p>1)
p>>= 1; // Desplazamos bits hacia la derecha
}
usleep(950);
}
if(sentit) {
sentit=0;
}...
Regístrate para leer el documento completo.