El Intel 8253 y el 8254 son temporizadores de intervalos programables (PIT), que realizan funciones de temporización y conteo. Fueron primariamente diseñadas para el Intel 8080/8085, pero usadas más tarde en el IBM PC y en los sistemas x86. Se encuentran en todos los sistemas compatibles de IBM.
El timer 8253 tiene 3 contadores independientes, llamados canales. Cada contador puede ser programado para operar en uno de seis modos. Una vez programados, los contadores pueden realizar la tarea asignada según el modo. Adicionalmente hay un registro de control (Control Word Register) que permite programar cada uno de los tres contadores independientemente. Por medio de este registro de control puede programarse un contador en uno de seis modos de operación.
Físicamente, el 8253 es accedido por cuatro puertos de entrada/salida a partir de una dirección base, que es definida mediante circuitos externos. En la dirección base + 0, base + 1, y base + 2 se encuentran los tres contadores, y en la dirección base + 3 se encuentra el registro de control. El valor de los contadores puede leerse y escribirse, y el registro de control es de solo escritura.
En el IBM PC, el timer 8253 se encuentra localizado en la dirección base de entrada/salida 40h. Por lo tanto, los tres contadores están en los puertos de entrada/salida 40h, 41h y 42h, y el registro de control se encuentra en el puerto 43h.
Los contadores son etiquetados como Contador 0, Contador 1 y Contador 2.[1] Son contadores de 16 bits que pueden programarse para trabajar en modo binario o en modo BCD. Los contadores cuentan desde el número que se les asigne hasta cero regresivamente, son independientes uno del otro, y pueden ser leídos fácilmente por el CPU.
En el chip, cada contador tiene tres pines asociados a él:
El PIT 8253 tiene un Control Word (palabra de control) de 8 bits usado para programar los contadores. El registro Control Word define cómo trabajará el PIT. Para programar los contadores, el microprocesador debe escribir una palabra de control (CW) a este registro y luego enviar un byte o dos bytes como valor inicial de conteo al contador. Esto debe hacerse cada vez que se quiera programar uno de los 3 contadores.
Los 8 bits del Control Word deben ajustarse de la manera siguiente para programar cada contador:
7 6 5 4 3 2 1 0 <-- Número de bit de la palabra de control | | | | | | | | | | | | | | | +-- Modo BCD: | | | | | | | 0 - El contador trabajará en formato binario de 16 bits | | | | | | | 1 - El contador trabajará en formato BCD con cuatro dígitos decimales | | | | | | | | | | | +-+-+---- Modo de operación para el contador: | | | | 000 - Modo 0. Interrupt on Terminal Count (Interrumpe al terminar el conteo) | | | | 001 - Modo 1. Hardware Retriggerable One-Shot (Disparo programable) | | | | X10 - Modo 2. Rate Generator (Generador de impulsos). El valor del bit más significativo no importa | | | | X11 - Modo 3. Square Wave(Generador de onda cuadrada). El valor del bit más significativo no importa | | | | 100 - Modo 4. Software Triggered Strobe (Strobe disparado por software) | | | | 101 - Modo 5. Hardware Triggered Strobe (Retriggerable) (Strobe disparado por hardware) | | | | | | +-+---------- Modo de acceso (lectura/escritura) para el valor del contador: | | 00 - Counter Latch. El valor puede ser leído de la manera en que fue ajustado previamente. | | El valor es mantenido hasta que es leído o sobreescrito. | | 01 - Lee (o escribe) solo el byte menos significativo del contador (bits 0-7) | | 10 - Lee (o escribe) solo el byte más significativo del contador (bits 8-15) | | 11 - Primero se lee (o escribe) el byte menos significativo del contador, y luego el byte más significativo | | +-+-------------- Selección del contador: 00 - Se selecciona el contador 0 01 - Se selecciona el contador 1 10 - Se selecciona el contador 2 11 - No usado. (solo hay 3 contadores) (Los demás bits de la palabra de control indican cómo será programado el contador seleccionado)
Los bits 7 y 6 de la palabra de control definen cuál contador se está programando. Para seleccionar un contador se coloca en estos bits el número del contador que se desea programar, 00, 01, 10 (en binario), para los contadores 0, 1 y 2 respectivamente. El valor 11 (en binario) es inválido, ya que no existe el contador 3.
Los bits 3, 2, y 1, de la palabra de control, indican el modo de operación del contador. Cada contador puede programarse en uno de seis modos de operación. Para programarlo, se envía al registro Control Word del chip la información de cómo se quiere que trabaje el contador y luego se envía al contador el valor inicial de conteo. Entonces el contador comenzará a funcionar de acuerdo a lo previsto en el modo de operación.
Al programar los modos 2 y 3, el bits más significativo del modo de operación, bit 3 de la palabra de control, es ignorado, y no importa su valor.
Los modos de operación son los siguientes:
Ajustando el bit 0 de la palabra de control se puede programar al contador para trabajar en modo binario usando 16 bits para el contador, o modo BCD, usando 4 dígitos decimales BCD.
Los bits 5 y 4 de la palabra de control indican el modo de acceso para leer o escribir el valor del contador. Esto es necesario porque cada contador es de 16 bits, pero el chip solo tiene una entrada/salida de solo 8 bits de datos. Con el modo de acceso se puede leer y escribir al contador en uno de los siguientes modos:
El timer 8253 fue usado como temporizador en el computador IBM PC desde su introducción en 1981, y a partir de entonces, en los compatibles.[2] Su funcionalidad es heredada hasta los computadores clones compatibles de hoy en día (de la arquitectura x86).
Estaba localizado en los puertos de entrada/salida 40h a 43h hexadecimal. Los tres contadores del timer recibían una señal de reloj de 1,1931817 MHz, que era la mitad de la frecuencia PCLK de 2,3863633 que generaba el controlador de reloj Intel 8284 de la tarjeta madre del PC. Los 3 contadores estaban programados de la manera siguiente:
El IBM AT usaba el Intel 8254 como timer programable. Luego el timer desapareció como un circuito integrado individual y pasó a formar parte de chipset de la tarjeta madre. Hoy en día los computadores compatibles tienen esta funcionalidad en el chip southbridge. En algunos chipsets modernos, este cambio puede aparecer como diferencias de tiempo medibles en acceder un PIT usando el espacio de direcciones de entrada/salida x86. Lecturas y escrituras a tales registros del PIT en el espacio de dirección de entrada/salida pueden completarse mucho más rápidamente.
Las tarjetas madre más nuevas también incluyen un contador a través del Advanced Configuration and Power Interface (ACPI), un contador en el Local Advanced Programmable Interrupt Controller (Local APIC), y un High Precision Event Timer. El CPU en sí mismo también proporciona la facilidad del Time Stamp Counter (TSC).