Intel 8253 - Intel 8253

Intel C8253
Temporizador de intervalo programable Intel 8253. Intel 8254 tiene el mismo pinout.

Los Intel 8253 y 8254 son temporizadores de intervalo programables (PIT), que realizan funciones de temporización y conteo utilizando tres contadores de 16 bits.

La familia 825x fue diseñado principalmente para los Intel 8080 / 8085 -processors, pero más tarde fueron utilizados en x 86 sistemas compatibles. Los chips 825x, o un circuito equivalente integrado en un chip más grande, se encuentran en todos los PC compatibles con IBM y en computadoras soviéticas como el Vector-06C .

En PC compatibles, el canal de temporizador 0 se asigna a IRQ -0 (la interrupción de hardware de mayor prioridad). El canal de temporizador 1 se asigna a la actualización de DRAM (al menos en los primeros modelos anteriores al 80386). El canal 2 del temporizador está asignado al altavoz de la PC .

La variante Intel 82c54 (c para lógica CMOS ) maneja señales de reloj de hasta 10 MHz.

Historia

El 8253 se describe en la publicación Intel "Component Data Catalog" de 1980. El 8254, descrito como un superconjunto del 8253 con índices de velocidad de reloj más altos, tiene una hoja de datos "preliminar" en el "Catálogo de datos de componentes" de Intel de 1982.

El 8254 está implementado en HMOS y tiene un comando "Read Back" no disponible en el 8253, y permite intercalar la lectura y escritura del mismo contador.

Los compatibles con PC modernos, ya sea cuando se usan CPU SoC o southbridge, generalmente implementan la compatibilidad completa con 8254 para compatibilidad e interoperabilidad con versiones anteriores. El comando Read Back es una característica de E / S vital para la interoperabilidad con CPU y GPU multinúcleo.

Variantes

Hay una versión militar de Intel M8253 con un rango de temperatura de -55 ° C a + 125 ° C, que también tiene una tolerancia de potencia de ± 10% 5V. La versión CMOS 82C53 disponible fue subcontratada a Oki Electronic Industry Co., Ltd .

Características

Diagrama de bloques de Intel 8253

El temporizador tiene tres contadores, numerados del 0 al 2. Cada canal se puede programar para operar en uno de los seis modos. Una vez programados, los canales funcionan de forma independiente.

Cada contador tiene dos pines de entrada - "CLK" ( entrada de reloj ) y "GATE" - y un pin, "OUT", para la salida de datos. Los tres contadores son contadores regresivos de 16 bits independientes entre sí, y la CPU puede leerlos fácilmente .

  • El búfer del bus de datos contiene la lógica para almacenar el bus de datos entre el microprocesador y los registros internos. Tiene 8 pines de entrada, generalmente etiquetados como D7..D0, donde D7 es el MSB .
  • La lógica de lectura / escritura tiene 5 pines, que se enumeran a continuación. La " X " indica que X es una señal baja activa.
    • RD : leer la señal
    • WR : señal de escritura
    • CS : señal de selección de chip
    • A0, A1: líneas de dirección

El modo de funcionamiento del PIT se cambia configurando las señales de hardware anteriores. Por ejemplo, para escribir en el registro de palabras de control, es necesario configurar CS = 0, RD = 1, WR = 0, A1 = A0 = 1.

  • El registro de la palabra de control contiene la información programada que será enviada (por el microprocesador ) al dispositivo. Define cómo funciona lógicamente cada canal del PIT. Cada acceso a estos puertos tarda aproximadamente 1 µs.

Para inicializar los contadores, el microprocesador debe escribir una palabra de control (CW) en este registro. Esto se puede hacer estableciendo los valores adecuados para los pines del bloque de lógica de lectura / escritura y luego enviando la palabra de control al bloque de búfer de datos / bus.

El registro de la palabra de control contiene 8 bits, etiquetados como D7..D0 (D7 es el MSB ). La decodificación es algo compleja. La mayoría de los valores establecen los parámetros para uno de los tres contadores:

  • Los dos bits más significativos (si no son 11) seleccionan el registro de contador al que se aplica el comando.
  • Los dos bits siguientes (si no es 00) seleccionan el formato que se utilizará para el acceso posterior de lectura / escritura al registro del contador. Esto se establece comúnmente en un modo en el que los accesos alternan entre los bytes menos significativos y los más significativos. Una diferencia entre el 8253 y el 8254 es que el primero tenía un bit interno que afectaba tanto a las lecturas como a las escrituras, por lo que si el formato se configuraba en 2 bytes, una lectura del lsbyte haría que la siguiente escritura se dirigiera al msbyte. El 8254 utilizó bits separados para lecturas y escrituras.
  • Los siguientes tres bits seleccionan el modo en el que operará el contador.
  • El bit menos significativo selecciona si el contador funcionará en binario o BCD . (El recuento de BCD casi nunca se usa y es posible que no se implemente correctamente en emuladores o southbridge).

Sin embargo, hay otras dos formas:

  • Latch la cuenta para un temporizador determinado. La siguiente lectura, en lugar de devolver el valor del contador en el momento de la lectura, devolverá el valor del contador en el momento del comando de cierre. Una vez completada la lectura, las lecturas posteriores devolverán el contador actual. Cuando se utiliza el comando de enclavamiento, el modo y el estado de BCD no se cambian.
  • (Solo 8254) Bloquear el estado y / o contar para varios temporizadores. Esto permite múltiples comandos de pestillo simultáneos usando un mapa de bits. Además, la configuración del canal actual se puede leer además del recuento.
8253/8254 palabra de control
Bit # / Nombre Breve descripción
D7
SC1
D6
SC2
D5
RW1
D4
RW0
D3
M2
D2
M1
D1
M0
D0
BCD
0 0 formato modo BCD Modo de ajuste del contador 0
0 1 formato modo BCD Modo de ajuste del contador 1
1 0 formato modo BCD Modo de ajuste del contador 2 (en el puerto 42h)
1 1 contar estado C2 C1 C0 X Comando de lectura (solo 8254)
encimera 0 0 - X - Valor del contador de pestillos. La próxima lectura del contador leerá una instantánea del valor.
encimera 0 1 modo BCD Leer / escribir solo el byte bajo del valor del contador
encimera 1 0 modo BCD Lectura / escritura del byte alto del valor del contador solamente
encimera 1 1 modo BCD 2 × lectura / 2xWrite byte bajo y luego byte alto del valor del contador
encimera formato 0 0 0 BCD Modo 0: interrupción en la cuenta de terminales
encimera formato 0 0 1 BCD Modo 1: One-Shot reactivable por hardware
encimera formato X 1 0 BCD Modo 2: generador de tarifas
encimera formato X 1 1 BCD Modo 3: onda cuadrada
encimera formato 1 0 0 BCD Modo 4: luz estroboscópica activada por software
encimera formato 1 0 1 BCD Modo 5: luz estroboscópica activada por hardware (reactivable)
encimera formato modo 0 El contador es un contador binario de 16 bits (0–65535)
encimera formato modo 1 El contador es un contador decimal codificado en binario de 4 dígitos (0-9999)
1 1 contar estado C2 C1 C0 X Comando de lectura (solo 8254)
1 1 0 0 C2 C1 C0 X La siguiente lectura de los contadores seleccionados leerá el estado bloqueado y luego contará
1 1 0 1 C2 C1 C0 X La siguiente lectura de los contadores seleccionados leerá el recuento retenido
1 1 1 0 C2 C1 C0 X La siguiente lectura de los contadores seleccionados leerá el estado de enclavamiento posterior
1 1 1 1 C2 C1 C0 X No hacer nada (no poner nada en ninguno o en todos los mostradores)
1 1 contar estado 0 0 0 X No hacer nada (recuento de pestillos y / o estado sin contadores)
1 1 contar estado 1 C1 C0 X El comando de lectura se aplica al contador 2
1 1 contar estado C2 1 C0 X El comando de lectura se aplica al contador 1
1 1 contar estado C2 C1 1 X El comando de lectura se aplica al contador 0

Al configurar el PIT, el microprocesador envía primero un mensaje de control, luego un mensaje de conteo al PIT. El proceso de conteo comenzará después de que el PIT haya recibido estos mensajes y, en algunos casos, si detecta el flanco ascendente de la señal de entrada GATE. Formato de bytes de estado. El bit 7 permite al software monitorear el estado actual del pin OUT. El bit 6 indica cuándo se puede leer el recuento; cuando este bit es 1, el elemento de conteo aún no se ha cargado y el procesador no puede leerlo. Los bits del 5 al 0 son los mismos que los últimos bits escritos en el registro de control.

8254 palabra de estado
Bit # / Nombre Breve descripción
Estado de
salida D7
Recuento
nulo D6
D5
RW1
D4
RW0
D3
M2
D2
M1
D1
M0
D0
BCD
0 El pin es 0
1 El pin es 1
0 El contador se puede leer
1 El contador se está configurando
formato modo BCD Bits de modo de contador, como se define para el registro de la palabra de control

Modos de operación

Los bits D3, D2 y D1 de la palabra de control establecen el modo de funcionamiento del temporizador. Hay 6 modos en total; para los modos 2 y 3, el bit D3 se ignora, por lo que los modos 6 y 7 que faltan son alias para los modos 2 y 3.

Todos los modos son sensibles a la entrada GATE, con GATE alto provocando un funcionamiento normal, pero los efectos de GATE bajo dependen del modo:

  • Modos 0 y 4: el conteo se suspende mientras GATE está bajo y se reanuda mientras GATE está alto.
  • Modos 1 y 5: El flanco ascendente de GATE comienza a contar. GATE puede bajar sin afectar el conteo, pero otro flanco ascendente reiniciará el conteo desde el principio.
  • Modos 2 y 3: GATE low fuerza OUT high inmediatamente (sin esperar un pulso de reloj) y reinicia el contador (en el siguiente flanco descendente del reloj). Cuando GATE vuelve a subir, el conteo se reinicia desde el principio.

Modo 0 (000): interrupción en el recuento de terminales

El modo 0 se utiliza para generar un retardo de tiempo preciso bajo el control del software. En este modo, el contador comenzará a contar desde el valor COUNT inicial cargado en él, hasta 0. La tasa de contaje es igual a la frecuencia del reloj de entrada.

El pin OUT se establece bajo después de que se escribe la palabra de control, y el conteo comienza un ciclo de reloj después de que se programa el COUNT. OUT permanece bajo hasta que el contador llega a 0, momento en el cual OUT se establecerá en alto hasta que se recargue el contador o se escriba la palabra de control. El contador se envuelve 0xFFFFinternamente y continúa contando, pero el pin de SALIDA nunca vuelve a cambiar. La señal de la puerta debe permanecer activa en alto para el conteo normal. Si Gate baja, el conteo se suspende y se reanuda cuando vuelve a subir.

El primer byte del nuevo recuento cuando se carga en el registro de recuento detiene el recuento anterior.

Modo 1 (001): un disparo programable

En este modo, el 8253 se puede utilizar como multivibrador monoestable . La entrada GATE se utiliza como entrada de disparo.

OUT será inicialmente alto. OUT pasará a un nivel bajo en el pulso del reloj después de un disparo para comenzar el pulso de una sola acción, y permanecerá bajo hasta que el contador llegue a cero. OUT luego subirá y permanecerá alto hasta el pulso CLK después del siguiente disparo.

Después de escribir la palabra de control y el conteo inicial, el contador está armado. Un disparo da como resultado la carga del contador y la configuración de OUT bajo en el siguiente pulso CLK, iniciando así el pulso de un solo impulso. Un recuento inicial de N dará como resultado un pulso único de N ciclos CLK de duración.

El disparo único se puede volver a disparar, por lo que OUT permanecerá bajo para pulsos N CLK después de cualquier disparo. El pulso de un disparo se puede repetir sin volver a escribir el mismo recuento en el contador. GATE no tiene ningún efecto en OUT. Si se escribe un nuevo recuento en el contador durante un pulso one-shot, el one-shot actual no se ve afectado a menos que se vuelva a disparar el contador. En ese caso, el contador se carga con el nuevo recuento y el pulso onehot continúa hasta que expira el nuevo recuento.

Modo 2 (X10): generador de tasas

En este modo, el dispositivo actúa como un contador de división por n, que se usa comúnmente para generar una interrupción del reloj en tiempo real.

Al igual que otros modos, el proceso de conteo comenzará el siguiente ciclo de reloj después de que se envíe COUNT. OUT permanecerá alto hasta que el contador llegue a 1, y bajará durante un pulso de reloj. En el siguiente ciclo, el recuento se vuelve a cargar, OUT vuelve a subir y todo el proceso se repite.

El tiempo entre los pulsos altos depende del recuento preestablecido en el registro del contador y se calcula utilizando la siguiente fórmula:

Valor a cargar en el contador =

Tenga en cuenta que los valores en el registro COUNT van de a 1; el registro nunca llega a cero.

Modo 3 (X11): generador de ondas cuadradas

Este modo es similar al modo 2. Sin embargo, la duración de los pulsos de reloj alto y bajo de la salida será diferente del modo 2.

Supongamos que el número está cargado en el contador (el mensaje COUNT), la salida será alta para los recuentos y baja para los recuentos. Por lo tanto, el período se contará y, si es impar, el medio ciclo adicional se gastará con OUT alto.

Modo 4 (100): luz estroboscópica activada por software

Después de cargar la palabra de control y el CONTAR, la salida permanecerá alta hasta que el contador llegue a cero. El contador generará un pulso bajo durante 1 ciclo de reloj (una luz estroboscópica); después de eso, la salida volverá a ser alta.

GATE low suspende el conteo, que se reanuda cuando GATE vuelve a subir.

Modo 5 (101): luz estroboscópica activada por hardware

Este modo es similar al modo 4. Sin embargo, el proceso de conteo es activado por la entrada GATE.

Después de recibir la palabra de control y COUNT, la salida se establecerá alta. Una vez que el dispositivo detecta un flanco ascendente en la entrada GATE, comenzará a contar. Cuando el contador llega a 0, la salida se reducirá durante un ciclo de reloj; luego, volverá a ser alta, para repetir el ciclo en el siguiente flanco ascendente de GATE.

Consejos y sugerencias de programación de IBM PC

El 8253 se utilizó en IBM PC compatibles desde su introducción en 1981. En los tiempos modernos, este PIT no se incluye como un chip separado en una PC x86. Más bien, su funcionalidad se incluye como parte de del chipset de la placa puente sur . En un chipset moderno, este cambio puede aparecer en forma de un acceso notablemente más rápido a los registros del PIT en el espacio de direcciones de E / S x86 .

Todos los PC compatibles operan el PIT a una frecuencia de reloj de 105/88 = 1.193 18  MHz, 13 de la frecuencia de explosión de color NTSC . Esta frecuencia, dividida por 2 16 (el divisor más grande del que es capaz el 8253) produce la interrupción del temporizador de ≈18,2 Hz que se usa en MS-DOS y sistemas operativos relacionados.

En los IBM PC originales, el Contador 0 se utiliza para generar una interrupción de cronometraje . El contador 1 (A1 = 0, A0 = 1) se utiliza para activar la actualización de la memoria DRAM . El último contador (A1 = 1, A0 = 0) se utiliza para generar tonos a través del altavoz de la PC .

Las placas base más nuevas incluyen contadores adicionales a través de la Interfaz de energía y configuración avanzada (ACPI), un contador en el controlador de interrupción programable avanzado local ( APIC local ) y un temporizador de eventos de alta precisión . La propia CPU también proporciona la función de contador de marca de tiempo (TSC).

En las PC, la dirección del timer0 (chip) está en el puerto 40h..43h y el segundo timer1 (chip) está en 50h..53h.

En PC x86, muchos BIOS de tarjetas de video y BIOS del sistema reprogramarán el segundo contador para su propio uso. La reprogramación generalmente ocurre durante los cambios de modo de video, cuando se puede ejecutar el BIOS de video, y durante el modo de administración del sistema y los cambios de estado de ahorro de energía, cuando se puede ejecutar el BIOS del sistema. Esto evita cualquier uso alternativo serio del segundo contador del temporizador en muchos sistemas x86.

El temporizador que utiliza el sistema en las PC x86 es el canal 0, y su reloj marca un valor teórico de 1193181.8181 ... Hz , es decir, un tercio de la frecuencia de la subportadora de color NTSC , que proviene de dividir el reloj del sistema (14.31818 MHz ) por 12. Este es un vestigio de las primeras PC CGA : derivaron todas las frecuencias necesarias de un solo cristal de cuarzo y, para hacer posible la salida de TV, este oscilador tenía que funcionar a un múltiplo de la frecuencia de la subportadora de color NTSC.

Como se indicó anteriormente, el canal 0 se implementa como un contador. Por lo general, el valor inicial del contador se establece enviando bytes al control, luego los registros del puerto de E / S de datos (el valor 36h enviado al puerto 43h, luego el byte bajo al puerto 40h, y el puerto 40h nuevamente para el byte alto) . El contador cuenta hacia atrás hasta cero, luego envía una interrupción de hardware (IRQ 0, INT 8) a la CPU . Luego, el contador se restablece a su valor inicial y comienza la cuenta regresiva nuevamente. La frecuencia de interrupción más rápida posible es un poco más de medio megahercio. La frecuencia más lenta posible, que también es la que normalmente utilizan las computadoras que ejecutan MS-DOS o sistemas operativos compatibles, es de aproximadamente 18,2 Hz. En estos sistemas operativos de modo real , el BIOS acumula la cantidad de llamadas INT 8 que recibe en la dirección de modo real 0040: 006c, que puede ser leída por un programa.

A medida que un temporizador realiza una cuenta regresiva, su valor también se puede leer directamente leyendo su puerto de E / S dos veces , primero para el byte bajo y luego para el byte alto. Sin embargo, en aplicaciones de contador de ejecución libre, como en la PC x86, es necesario escribir primero un comando de bloqueo para el canal deseado en el registro de control, de modo que ambos bytes leídos pertenezcan al mismo valor.

Según un documento de Microsoft de 2002, "debido a que las lecturas y escrituras en este hardware [8254] requieren comunicación a través de un puerto IO, la programación toma varios ciclos, lo cual es prohibitivamente costoso para el SO. Debido a esto, la funcionalidad aperiódica no se utiliza en la práctica."

Ver también

  • LAPIC proporciona un temporizador programable
  • HPET

Referencias

Otras lecturas

enlaces externos