Introducción a los Sistemas de Entrada/Salida

Anuncio
Boletín de la práctica 5: “Introducción a los Sistemas de Entrada/Salida”
Arquitectura de Computadores
2º Curso de Ingeniería Informática
Curso 2005/2006
OBJETIVOS




Consolidar los conocimientos adquiridos sobre los mecanismos de Entrada/Salida
Aprender a programar dispositivos de E/S a bajo nivel
Conocer la gestión de E/S en Linux
Adquirir soltura a la hora de manejar datasheets
DESCRIPCIÓN
El alumno debe realizar un programa que simule el comportamiento de un reloj despertador. Se debe
mostrar en todo momento la fecha y hora actual y, en caso de activarse la alarma programada, hacer sonar
alguna “melodía” por el altavoz. Para conocer la fecha-hora del sistema se utilizará el Reloj de Tiempo
Real (RTC) y para generar sonidos el timer conectado al altavoz del sistema.
Reloj de Tiempo Real
El Reloj de Tiempo Real (RTC) disponible en los PCs es el MC146818 (Motorola) o compatible
(DS12887 de Dallas Semiconductor, etc.). Incluye un completo reloj con alarma, calendario, interrupción
periódica, generador de onda cuadrada, etc.
El RTC está diseñado para ser usado en un bus multiplexado: necesita dos accesos para realizar una
lectura o escritura. En el primer acceso se coloca la dirección del registro a acceder y en el segundo se lee
o escribe el dato. Para el primer acceso se utiliza el puerto 70h y para el segundo el puerto 71h. A
continuación se muestra el mapa de registros del dispositivo (sólo las posiciones que nos interesan):
Dirección
(Hex)
00
02
04
06
07
08
09
0A
32
Contenido
Segundos
Minutos
Horas
Día de la semana
Día del mes
Mes
Año (dos últimas cifras)
Estado
Año (dos primeras cifras)
Mientras el RTC actualiza la fecha y hora del sistema (un breve lapso de tiempo cada segundo) los
registros asociados (todos los que se muestran en la tabla menos el de estado) no se encuentran
disponibles. Por ello, el registro de estado incluye un bit (7) que indica, cuando se pone a uno, que se está
actualizando el reloj del sistema.
La información correspondiente a la fecha y hora está codificada en BCD empaquetado (dos dígitos BCD
en cada byte). El campo día de la semana está codificado de la siguiente manera: 1 para el lunes, 2 para el
martes,… y 6 para el sábado. El domingo se representa con un 7 si el reloj está configurado como que la
semana comienza en lunes ó 0 si comienza en domingo.
1
Altavoz del sistema
El altavoz del sistema está conectado a un timer 8254 o compatible (8253, etc.) para poder generar
diferentes sonidos (señales con diferente frecuencia). Este dispositivo dispone de 3 contadores que
pueden ser configurados de 6 maneras diferentes (generador de frecuencias, generador de onda cuadrada,
interrupción al final de cuenta, etc.). Cada contador dispone de una señal de reloj Clk, de una entrada
Gate y de una señal de salida Out (ver Figura 1). En función del modo elegido para el contador el
significado de las líneas será uno u otro.
8
A la
CPU
___
WR
RD
Características
CONTROL


Clk
Gate
Out
Contador 0

Contador 1

A1
A0

Contador 2
Bus de datos de 8 bits
Mapa de registro de cuatro posiciones: Un
registro
de
control
y
tres
contadores
independientes entre sí. Se elige la posición
mediante las señales de dirección A1 y A0
Los contadores son de 16 bits y la cuenta
siempre es descendente
Dispone de 6 modos distintos de funcionamiento
Cada contador lleva tres señales:
Clk (entrada): Señal de reloj externa
o
(no tiene por qué ser el de la CPU)
Gate(entrada): (depende del modo)
o
Out (salida): (depende del modo)
o
Figura 1
El modo 3 permite generar una onda cuadrada cuyo periodo es el valor cargado en el contador. La señal
Gate inicia la cuenta y la señal Out contiene la onda cuadrada.
Para la configuración de los diferentes contadores el 8254 dispone de un registro de control. Se encuentra
en la dirección 43h y su significado es el siguiente:
Bit
7, 6
5, 4
3, 2, 1
0
Función
Contador
Acceso al contador
00: Latch
01: sólo el LSB
10: sólo el MSB
11: 1º el LSB y 2º el
MSB, en dos accesos
consecutivos
Modo
0  binario
1  BCD
Los contadores son de 16 bits, sin embargo, el bus de datos es de sólo 8 bits. Por ello, se requieren dos
accesos consecutivos para actualizar su valor. Los contadores 0, 1 y 2 ocupan las posiciones 40h, 41h y
42h, respectivamente.
El contador asociado al altavoz es el 2 (ver Figura 2). El bit 0 del puerto 61h es la entrada Gate y el bit 1
permite conectar la salida Out del contador al altavoz. Para generar un determinado sonido en el altavoz,
debe configurar el contador 2 en modo 3, escribir en el contador el valor del periodo de la señal a generar
(nota musical) y activar los bits 0 y 1 del puerto 61h.
La frecuencia del reloj es 193180Hz, por lo que para obtener una señal cuadrada de frecuencia f, hay que
cargar en el contador el valor 193180/f. A continuación se muestra una tabla con las frecuencias asociadas
a una octava:
NOTA
Hz
DO
262
RE
294
MI
330
2
FA
349
SOL
392
LA
440
SI
494
Figura 2
DESARROLLO DE LA PRÁCTICA
Para la realización de esta práctica debe utilizarse el sistema operativo Linux y el lenguaje de
programación C. Para poder acceder a los puertos a nivel de aplicación (no mediante un módulo) debe
utilizarse la función iopl (utilice el comando man para obtener más información). La aplicación debe
ejecutarse con permisos de root. Para acceder a los puertos el alumno dispone de las funciones inb y outb.
Los prototipos de estas funciones se muestran a continuación:
unsigned char inb(unsigned short puerto); /* Lee un valor de 8 bits por el puerto
especificado y lo devuelve */
void outb (unsigned char valor, unsigned short Puerto); /* Escribe un valor de 8 bits en
el puerto especificado */
El alumno debe programar una aplicación que muestre permanentemente la fecha y hora del sistema con
el siguiente formato “Dia_semana, DD/MM/AAAA – HH:MM:SS”. Debe utilizarse el retorno de carro
(\r) para conseguir que la fecha-hora se actualice en la misma línea.
Además, cuando se inicie la aplicación debe permitirse la introducción de la hora a la que queremos que
se active la alarma (HH:MM:SS). Cuando esto ocurra, debe sonar alguna melodía (si el alumno es
incapaz de componer alguna melodía, basta con que haga sonar las notas de una octava) durante 20
segundos.
Una vez realizada la aplicación y verificada, el alumno debe contestar el cuestionario que se adjunta.
3
Cuestionario de la práctica 5: “Introducción a los Sistemas de Entrada/Salida”
Arquitectura de Computadores
2º Curso de Ingeniería Informática
Curso 2005/2006
Nombre y apellidos:
1.- Para imprimir la fecha y hora del sistema, ¿es necesario convertir los valores de BCD empaquetado a
binario? Justifique su respuesta.
2.- Suponga que deseamos hacer un programa que al iniciarse muestre la hora del sistema e
inmediatamente después finalice. Si verificamos el estado antes leer la hora del sistema, podría ocurrir
que el RTC no se esté actualizando en ese momento pero sí un instante después (en la lectura de la hora,
los minutos o los segundos), por lo que la lectura sería errónea. Proponga alguna solución a este
problema.
3.- ¿Qué diferencias existen entre la función iopl y ioperm? ¿Podía haberse utilizado ésta última?
4.- Si quisiéramos que diferentes aplicaciones de usuario dispusieran de la funcionalidad descrita en esta
práctica, ¿qué deberíamos hacer?
5.- ¿Cómo puede hacerse más eficiente desde el punto de vista del uso de CPU la actualización del reloj?
¿Y la alarma? Explicar detalladamente el procedimiento haciendo uso de los datasheets que se
proporcionan.
4
Descargar