This article needs additional citations for verification. (February 2024) |
El adaptador de interfaz versátil (VIA) MOS Technology 6522 es un circuito integrado diseñado y fabricado por MOS Technology como controlador de puerto de E/S para la familia de microprocesadores 6502. Proporciona dos puertos de E/S paralelos bidireccionales de 8 bits, dos temporizadores de 16 bits (uno de los cuales también puede funcionar como contador de eventos) y un registro de desplazamiento de 8 bits para comunicaciones en serie o conversión de datos entre formatos en serie y paralelo. La dirección de cada bit de los dos puertos de E/S se puede programar individualmente. Además de ser fabricado por MOS Technology, el 6522 fue adquirido en segundo lugar por otras empresas, entre ellas Rockwell y Synertek .
El 6522 fue ampliamente utilizado en computadoras de la década de 1980, particularmente en las máquinas Commodore , [1] y también fue una parte central de los diseños de Apple III , Oric-1 y Oric Atmos , BBC Micro , Victor 9000/Sirius 1 y Apple Macintosh . Las plataformas de videojuegos como Vectrex también usaron el 6522, al igual que el grupo de tablero digital Corvette de 1984 a 1989. Una versión CMOS de alta velocidad , la W65C22 , es producida por el Western Design Center (WDC).
El VIA contiene 20 líneas de E/S, que están organizadas en dos puertos bidireccionales de 8 bits (o 16 líneas de E/S de propósito general) y cuatro líneas de control (para el establecimiento de protocolo de enlace y la generación de interrupciones ). Las direcciones de las 16 líneas generales (PA0-7, PB0-7) se pueden programar de forma independiente. Las líneas de control se pueden programar para generar una interrupción cuando se activan (las cuatro), bloquear el puerto de E/S correspondiente (CA1 y CB1), generar automáticamente señales de establecimiento de protocolo de enlace para dispositivos en los puertos de E/S o funcionar como salidas simples controladas por programa (CA2 y CB2). CB1 y CB2 también se utilizan como entrada de reloj y línea de datos para el registro de desplazamiento, lo que impide su uso para otras funciones mientras el registro de desplazamiento está habilitado.
El VIA proporciona dos temporizadores/contadores de 16 bits. Cada uno puede utilizarse en modo de "temporizador de intervalo" de un solo disparo ( monoestable ); el temporizador 1 también puede utilizarse en modo de "funcionamiento libre" (divisor/ onda cuadrada ), en el que el temporizador se recarga automáticamente con el conteo inicial cuando llega a cero, y el temporizador 2 también puede utilizarse en modo de "conteo de pulsos", en el que el temporizador contará las transiciones de estado alto a bajo del pin PB6 (el séptimo bit del puerto de E/S paralelo B). En el modo de un solo disparo, cada temporizador continúa funcionando libremente de modo que se puede determinar el tiempo desde que se llegó a cero, pero no se emite ninguna otra interrupción hasta que se reinicia el temporizador. Cada temporizador puede generar una interrupción cuando llega a cero, y el temporizador 1 también puede emitir pulsos (en el modo de temporizador de intervalo) u ondas cuadradas (en el modo de funcionamiento libre) en el pin PB7 (el octavo bit del puerto B). El temporizador 2 se puede utilizar para proporcionar la frecuencia de reloj para el registro de desplazamiento. Una característica útil del modo de funcionamiento libre es que el latch del contador de 16 bits se puede cargar con un nuevo conteo sin recargar el contador, de modo que cargará el nuevo conteo solo después de que el conteo actual llegue a cero, cambiando sin problemas la frecuencia de salida. Esta característica del temporizador 1, combinada con su capacidad de salida al pin PB7, se puede utilizar para generar formas de onda complejas, por ejemplo, señales de modulación de ancho de pulso , barridos de frecuencia o flujos de bits seriales bifásicos o codificados en FM . [2]
El registro de desplazamiento del VIA es bidireccional, tiene 8 bits de ancho y puede funcionar desde un reloj generado por temporizador (del temporizador 2), el reloj de la CPU o una fuente externa en la línea CB1. La entrada/salida en serie está en la línea CB2 y CB1 también se puede programar para generar un reloj de bits para dispositivos en serie con reloj externo.
El NMOS 6522 tiene una salida IRQ de drenaje abierto que se puede utilizar en circuitos de interrupción OR cableados . El WDC W65C22S, por el contrario, tiene una salida IRQ de tótem que debe aislarse de un circuito OR cableado mediante un diodo Schottky , debido al hecho de que la salida de tótem activa activamente el pin IRQ alto cuando el W65C22S no está interrumpiendo. Este problema específico se resuelve en el WDC W65C22N que está equipado con una salida IRQ de drenaje abierto. [3]
Debido a un defecto de diseño, si el borde en CB1 cae dentro de unos pocos nanosegundos del borde descendente del reloj ϕ2 (fase 2), el borde CB1 será ignorado, causando la pérdida de un bit y errores de trama en los datos subsiguientes.
Una solución alternativa es colocar la señal del reloj externo en la entrada D de un flip-flop 74ACT74 , ejecutar la salida Q del flip-flop al pin CB1 del 6522 y sincronizar el flip-flop con ϕ0 o ϕ2. [4]
El error del registro de desplazamiento en serie se corrigió en el California Micro Devices CMD G65SC22 [ cita requerida ] y en el MOS 6526 , este último dispositivo que Commodore utilizó en lugar del 6522 desde el Commodore 64 en adelante.
Aparte del error del registro de desplazamiento mencionado anteriormente, existía un problema potencial de corrupción de registros que generalmente solo ocurría en sistemas que usaban el 6522 con un microprocesador que tenía una arquitectura de bus distinta a la del 6502 , como un Motorola 68000. Si las líneas de dirección cambiaban mientras la selección de chip estaba baja (inactiva) pero la entrada de reloj ϕ2 estaba alta (activa), el contenido de los registros podía cambiar a pesar del hecho de que el chip no estaba seleccionado. Esto se solucionó en algunas, pero no en todas, las versiones de CMOS.