MOS 6526

El adaptador de interfaz complejo (CIA) MOS 6526 es un circuito integrado fabricado por MOS Technology . Se utilizó como controlador de entrada/salida para la familia de microprocesadores 65xx , que proporcionaba la capacidad de acceder a los puertos de comunicación en modo paralelo y serie ; también se puede utilizar como temporizador programable y como reloj . También se produjo una versión en tecnología HMOS-III denominada MOS 8520 que, en comparación con el 6526, tenía un menor consumo de energía y tenía un reloj interno ligeramente modificado.

El dispositivo se utilizó principalmente en las computadoras domésticas Commodore 64 , Commodore 128 (D) y Amiga , cada una de las cuales usaba 2 chips. También se usó en las unidades de disco Commodore 1570 , Commodore 1571 y Commodore 1581 (1 chip por periférico).

E/S paralelas

El CIA tiene 2 puertos de E/S paralelos bidireccionales, cada uno de los cuales tiene su propio registro de dirección de datos que le permite configurar cada línea individual como entrada o salida. Una lectura de puerto siempre devuelve el estado de las líneas individuales, independientemente de la dirección de transmisión establecida.

E/S serie

Un registro de desplazamiento de 8 bits permite a la CIA administrar la transmisión de datos en serie. El chip puede aceptar una fuente de señal de reloj externa y puede generar datos en modo serie al sincronizarlos con uno de los temporizadores programables integrados. Se genera una interrupción cada vez que se completa una transmisión en serie de 8 bits . Al conectar el reloj CIA y las salidas del registro de desplazamiento de diferentes computadoras, se puede implementar una red simple .

La velocidad de transmisión máxima es de 500 kbit /s para la versión de 2 MHz .

Sincronización

El chip tiene 2 líneas de control (/ FLAG y / PC) que le permiten sincronizar múltiples CIA: estas líneas, junto con 8 de las 16 líneas paralelas, le permiten usar el CIA como un simple amplificador de señal compatible con Centronics .

Temporizadores

El CIA ofrece 2 temporizadores programables, cada uno con un nivel de precisión de microsegundos . Cada temporizador consiste en un contador de solo lectura de 16 bits y un flip - flop correspondiente de solo escritura de 16 bits . Cuando se inicia un temporizador, su flip-flop se copia automáticamente en su contador, que se decrementa en cada ciclo de reloj hasta que llega a cero. En este punto se genera una interrupción.

El temporizador puede funcionar tanto en modo "simple", es decir, deteniéndose después de la primera interrupción, como "continuo", recargando el valor seleccionado después de cada ciclo y reiniciando en la cuenta. Además de generar interrupciones, la salida del temporizador se puede enrutar al segundo puerto de E/S.

Se pueden generar intervalos relativamente largos programando el temporizador B para contar los reinicios del temporizador A: si ambos alcanzan el valor máximo posible, 65.536, entonces se ha obtenido un tiempo de 1 hora, 11 minutos y 34 segundos.

En el Commodore 64 y el Commodore 128, los temporizadores CIA estaban controlados por el reloj del sistema Φ2 ( fase 2 ), que generalmente estaba a 1 MHz: esto significaba que se decrementaban aproximadamente cada microsegundo. Sin embargo, la duración exacta del período estaba determinada por el estándar de video utilizado en el sistema, ya sea NTSC o PAL , que influía en la frecuencia a la que operaba la computadora. Para superar este problema en el C128 se utilizó una técnica llamada clock stretching , la cual permitía variar el reloj para que los cronómetros no se vieran afectados por la alteración del reloj del sistema cuando la computadora cambiaba de modo "LENTO" a "RÁPIDO".

Función de reloj

Se incorpora un reloj al CIA que proporciona la hora en formato de 12 horas AM/PM. Está compuesto por 4 registros que registran las horas (el bit 7 de este registro funciona como signo AM o PM), minutos, segundos y décimas de segundo respectivamente. Todos estos registros almacenan datos en formato BCD , simplificando las operaciones de codificación/descodificación del tiempo.

La lectura de los registros siempre devuelve la hora diaria. Para evitar errores de descanso durante la recuperación de la hora, cada operación de lectura detiene inmediatamente la actualización de los registros sin comprometer la precisión del reloj porque internamente el CIA continúa actualizando la hora. Cada registro, a excepción de las horas, se puede leer "sobre la marcha", sin bloquear su actualización. En cambio, la lectura de las horas debe ser seguida por la lectura de las décimas de segundo, operación que reinicia la actualización de los registros.

Para configurar el tiempo es necesario escribir los valores correctos en formato BCD en los registros. Un acceso de escritura al registro de horas bloquea el reloj: se reinicia solo después de escribir en el registro de décimas de segundo. Después de encender la computadora, los registros del reloj se establecen en 1: 00: 00.0: con una simple operación de escritura en el registro de décimas de segundo, comienza el conteo de tiempo.

Además de dar la hora, el reloj se puede configurar como alarma, para generar una solicitud de interrupción en un momento determinado. Debido a un error presente en muchos 6526, la interrupción relacionada con la alarma no se genera cuando los segundos del tiempo de alarma son exactamente iguales a 0: para evitar este problema, simplemente configure el registro de décimas de segundo en 1.

El reloj interno fue diseñado para ser gobernado por una señal de entrada tomada directamente de la fuente de alimentación de CA , tanto a 50 como a 60 Hz, para permitir la mayor precisión posible y la mayor duración en el tiempo. Esta posibilidad de operar tanto con una frecuencia de voltaje de 50 Hz como de 60 Hz permitía utilizar el 6526 indistintamente tanto en computadoras con señales de video en formato NTSC como PAL. En el Commodore de 8 bits era el software el que debía informar a la CIA sobre las frecuencias regionales que utilizaba el sistema, ya que el sistema operativo no realizaba esta tarea: no realizar esta operación implicaba una imprecisión en la gestión del tiempo proporcionado por el reloj.

Versiones

El CIA se produjo con un paquete DIP40 en diferentes versiones:

Error

Además del error mencionado anteriormente que afectaba a la interrupción vinculada a la alarma del reloj, muchos CIA tenían un defecto que impedía que se generara la interrupción vinculada al temporizador B si el registro de control de interrupción se leía 1 o 2 ciclos de reloj antes de que ocurriera la interrupción. Este error a menudo causaba errores RS-232 en C64 y C128 cuando accedían al puerto serie a alta velocidad.

Bibliografía

Otros proyectos

Enlaces externos