

El Intel 8237 es un controlador de acceso directo a memoria (DMA), perteneciente a la familia de microprocesadores MCS 85. Permite la transferencia de datos entre la memoria y las E/S con una carga reducida para el procesador principal del sistema, al proporcionar a la memoria señales de control e información de direcciones de memoria durante la transferencia DMA.
El 8237 es un dispositivo de cuatro canales que puede ampliarse para incluir cualquier número de entradas de canal DMA. El 8237 es capaz de realizar transferencias DMA a velocidades de hasta 1,6 megabytes por segundo. Cada canal puede direccionar una sección completa de memoria de 64 kbytes y transferir hasta 64 kbytes con una sola programación. [ 1 ]
En los IBM PC y IBM XT originales se utilizaba un único 8237 como controlador DMA . El IBM PC AT añadió otro 8237 en configuración maestro-esclavo, aumentando el número de canales DMA de cuatro a siete. [ 2 ] Los ordenadores personales compatibles con IBM posteriores pueden tener conjuntos de chips que emulan las funciones del 8237 para garantizar la retrocompatibilidad . El Intel 8237 fue diseñado por AMD (denominado Am9517 [ 3 ] ). Formaba parte de un acuerdo de licencia cruzada que permitía a AMD fabricar procesadores Intel, lo que también ponía el diseño a disposición de Intel. Por eso, el paquete de Intel lleva impreso "(C) AMD 1980". El 8237, que funciona a 3 MHz y 5 MHz, fue fabricado por Intel en sus variantes , mientras que NEC desarrolló el μPD71037, una versión que funciona a 10 MHz. [ 4 ]
Modos
El 8237 funciona en cuatro modos diferentes, dependiendo del número de bytes transferidos por ciclo y del número de circuitos integrados utilizados:
- Individual: un ciclo DMA, un ciclo de CPU intercalado hasta que el contador de direcciones llegue a cero. [ 5 ]
- Bloqueo: la transferencia avanza hasta que el recuento de palabras llega a cero o la señal EOP se activa. [ 5 ]
- Demanda: Las transferencias continúan hasta que TC o EOP se activan o DRQ se desactiva. La CPU puede usar el bus cuando no se solicita ninguna transferencia. [ 5 ]
- Cascada: Se utiliza para conectar en cascada controladores DMA adicionales. DREQ y DACK se emparejan con HRQ y HLDA del siguiente chip para establecer una cadena de prioridad. Las señales de bus reales son ejecutadas por el chip en cascada. [ 5 ]
Es posible realizar transferencias de memoria a memoria. Esto significa que los datos se pueden transferir de un dispositivo de memoria a otro. El registro de dirección actual del canal 0 es la fuente de la transferencia de datos, y el registro de conteo de palabras actual del canal 1 finaliza cuando el valor de este registro llega a 0.
En el modo de inicialización automática, los valores de dirección y contador se restablecen al recibir una señal de fin de proceso (EOP). Esto ocurre sin ninguna intervención de la CPU. Se utiliza para repetir la última transferencia. [ 5 ]
El contador de terminal (TC) indica el final de la transferencia a las tarjetas ISA. Al finalizar la transferencia, se realizará una inicialización automática configurada para ello.
Modo único
En modo único, solo se transfiere un byte por solicitud. En cada transferencia, el registro de conteo se decrementa y la dirección se incrementa o decrementa según la programación. Cuando el registro de conteo llega a cero, se envía la señal de conteo terminal TC a la tarjeta. [ 6 ] [ 7 ]
La solicitud DMA DREQ debe ser generada por la tarjeta y mantenerse activa hasta que sea confirmada por el acuse de recibo DMA DACK . [ 6 ]
Modo de transferencia de bloques
La transferencia se activa mediante DREQ , que puede desactivarse una vez confirmada por DACK . La transferencia continúa hasta que se activa el final del proceso EOP (interno o externo), lo que activará el conteo del terminal TC en la tarjeta. En este modo, se puede programar la autoinicialización. [ 6 ]
Modo de transferencia de demanda
La transferencia es activada por DREQ y confirmada por DACK , y continúa hasta que TC , EOP externo o DREQ se desactiven. Solo TC o EOP externo pueden activar la autoinicialización si está programada. [ 6 ]
Registros internos
Los registros internos utilizados en el 8237 para la transferencia de datos son los siguientes:
- Registro de dirección base : Para almacenar la dirección inicial desde donde se realizará la transferencia de datos.
- Registro de recuento de palabras base: Para almacenar el número de transferencias que se van a realizar.
- Registro de dirección actual: Para almacenar la dirección actual desde donde se transfieren los datos.
- Registro de recuento de palabras actual: Para almacenar el número de transferencias que quedan por realizar.
- Registro de direcciones temporales: Para almacenar la dirección de los datos durante la transferencia de memoria a memoria.
- Registro temporal de recuento de palabras: Para almacenar el número de transferencias que se realizarán en la transferencia de memoria a memoria.
- Registro de modo: registro de 8 bits que almacena el canal a utilizar, el modo de funcionamiento (es decir, el modo de transferencia) y otros parámetros de transferencia.
- Registro de comandos: registro de 8 bits que inicializa el canal que se utilizará para la transferencia de datos.
- Registro de solicitud: registro de 8 bits utilizado para indicar qué canal está solicitando la transferencia de datos.
- Registro de máscara: registro de 8 bits utilizado para enmascarar un canal en particular e impedir que solicite el servicio DMA.
- Registro de estado : registro de 8 bits utilizado para indicar qué canal está actualmente bajo servicio DMA y otros parámetros.
Uso de PC IBM
Como miembro de la familia de dispositivos Intel MCS-85, el 8237 es un dispositivo de 8 bits con direccionamiento de 16 bits. Sin embargo, es compatible con los microprocesadores 8086/88 . Los modelos IBM PC y PC XT (tipos de máquina 5150 y 5160) cuentan con una CPU 8088 y una arquitectura de bus de sistema de 8 bits; esta última se conecta directamente al 8237, pero el 8088 tiene un bus de direcciones de 20 bits, por lo que se añaden cuatro latches de dirección adicionales de 4 bits (que en realidad forman parte de un único dispositivo 74LS670), uno para cada canal DMA, junto al 8237 para aumentar los contadores de direcciones. Sin embargo, debido a que estos latches externos están separados de los contadores de direcciones del 8237, nunca se incrementan ni se decrementan automáticamente durante las operaciones DMA, lo que imposibilita realizar una operación DMA a través de un límite de dirección de 64 KiB. Los intentos de cruzar un límite de 64 KiB en una transferencia DMA se repetirán dentro de un bloque de memoria de 64 KiB. (Por ejemplo, si un canal DMA y el registro de direcciones asociado se programaran para transferir 256 bytes a direcciones ascendentes a partir de la dirección 0x3FF8C, en lugar de transferir a las direcciones 0x3FF8C a 0x4008B, los datos se transferirían a las direcciones 0x3FF8C a 0x3FFFF y luego a 0x30000 a 0x3008B).
El IBM PC también utilizaba un canal de su 8237 para actualizar su memoria dinámica , conectando la entrada de un canal DMA a la salida del contador del temporizador de la placa base. Esta configuración generaba ciclos de lectura periódicos en los chips de memoria, lo que actualizaba la memoria. [ 8 ]
El IBM PC AT (tipo de máquina 5170) y sus compatibles al 100% utilizan una CPU 80286 y una arquitectura de bus de sistema de 16 bits. Además del 8237 de los modelos PC y XT, se añade un segundo 8237 en cascada para transferencias DMA de 16 bits. Esto es posible, a pesar de que el 8237 es un dispositivo de 8 bits, porque realiza transferencias entre un puerto de E/S y la memoria como transferencias "de paso", en las que los datos se colocan en el bus mediante la memoria o el puerto de E/S de origen y se leen directamente al mismo tiempo mediante el puerto de E/S o la memoria de destino, sin que el 8237 los procese. Para este modo de transferencia, el ancho del bus de datos es prácticamente irrelevante para el 8237 (siempre que esté conectado a un bus de datos de al menos 8 bits de ancho para la programación de sus registros). El segundo 8237 en un PC de clase AT proporciona tres canales DMA de 16 bits (sus canales 1 a 3, denominados canales 5 a 7 en el PC AT); su canal 0 (denominado canal 4 en el PC AT) se utiliza en modo cascada para conectar el 8237 para DMA de 8 bits como "esclavo" en la configuración en cascada; el 8237 que proporciona los canales de 16 bits es el "maestro". Para que pueda direccionar palabras de 16 bits, se conecta al bus de direcciones de tal manera que cuenta direcciones pares (0, 2, 4, ...) en lugar de direcciones individuales. Al igual que el primer 8237, está aumentado con cuatro registros de extensión de dirección. En un PC de clase AT, los ocho registros de aumento de dirección tienen un ancho de 8 bits, de modo que se pueden especificar direcciones completas de 24 bits , el tamaño del bus de direcciones del 80286. Las transferencias DMA en cualquier canal aún no pueden cruzar un límite de 64 KiB. (El DMA de 16 bits está limitado a 32 768 palabras de 16 bits, aunque un canal DMA puede contar hasta 65 536 direcciones; el bit más significativo del contador de direcciones de un canal DMA de 16 bits se ignora). Debido a que el modo DMA de memoria a memoria del 8237 funciona transfiriendo un byte desde la ubicación de memoria de origen a un registro temporal interno de 8 bits en el 8237 y luego desde el registro temporal a la ubicación de memoria de destino, este modo no podría usarse para DMA de memoria a memoria de 16 bits, ya que el registro temporal no es lo suficientemente grande. Además, el DMA de memoria a memoria de 16 bits requeriría el uso del canal 4, lo que entra en conflicto con su uso para conectar en cascada el 8237 que maneja los canales DMA de 8 bits. Sin embargo, en el AT, el canal DMA de 8 bits 0 ya no se utiliza para la actualización de la DRAM, ya que ha sido reemplazado por una lógica de actualización especializada, por lo que debería ser posible realizar una transferencia DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpir la actualización de la DRAM.
El diseño del DMA basado en 8237 en PC compatibles con AT no se actualizó con el cambio a las CPU de 32 bits y las arquitecturas de bus de sistema de 32 bits. En consecuencia, una limitación en estas máquinas es que los controladores DMA 8237 con sus registros de extensión de "página" de direcciones asociados solo pueden direccionar 16 MiB de memoria, según el diseño original orientado en torno a la CPU 80286, que a su vez tiene esta misma limitación de direccionamiento. [ 9 ] Esto significa que para otras áreas de memoria, los datos deben transferirse primero por DMA desde el dispositivo de E/S a un búfer intermedio en los primeros 16 MiB del espacio de direcciones físicas , y luego mover a la memoria final por la CPU; o, en la otra dirección, deben transferirse desde la memoria inicial al búfer intermedio por la CPU antes de ser transferidos por DMA desde ese búfer al dispositivo de E/S. Esta técnica se llama "búfer de rebote" . En general, se pierde cualquier ventaja de velocidad global asociada con DMA, pero puede ser necesario si un periférico requiere ser accedido mediante DMA debido a exigentes requisitos de temporización o a la inflexibilidad de la interfaz de hardware.
En la serie de ordenadores PS/2 , IBM actualizó el hardware DMA para admitir datos y direcciones de 32 bits en algunos sistemas con procesadores 80386, pero lo hizo reemplazando el 8237 por un nuevo diseño de controlador DMA. El nuevo diseño incluye un modo de compatibilidad con el 8237 para garantizar la compatibilidad con versiones anteriores del PC AT.
Integración en conjuntos de chips
Aunque este dispositivo no aparezca como un componente independiente en los sistemas informáticos personales modernos, sí se encuentra dentro de los conjuntos de chips del controlador del sistema. Por ejemplo, el PIIX integró dos controladores 8237 para DMA del bus ISA . [ 10 ] [ 11 ]
Variantes
Véase también
- Generador de reloj Intel 8284
- Controlador de bus Intel 8288
- 8250 UART - Controlador serie asíncrono (EIA-232)
- Intel 8253 - Temporizador de intervalo programable (PIT)
- Intel 8255 - Interfaz periférica programable (PPI)
- Intel 8259 - Controlador de interrupciones programable (PIC)
- ATA paralelo (P-ATA)
- Arquitectura estándar de la industria (ISA)
Referencias
- ↑ Microprocesadores Intel por Barry B Brey
- ↑ N. MATHIVANAN (2007). INSTRUMENTACIÓN BASADA EN PC: CONCEPTOS Y PRÁCTICA . PHI Learning Pvt. Ltd. pp. 227–229 . ISBN 978-81-203-3076-4.
- ↑ "Controlador DMA multimodo Am9517A" (PDF) . Consultado el 4 de enero de 2024 .
- ↑ "Controlador de acceso directo a memoria (DMA) pPD71037" (PDF) . Consultado el 4 de enero de 2024 .
- 1 2 3 4 5 aluzina.org - Intel 8237/8237-2 Controlador DMA programable de alto rendimiento (.pdf) hoja de datos
- 1 2 3 4 books.google.com - Microprocesadores y periféricos avanzados , 2006 p312/313
- ↑ pinouts.ru - Diagrama de pines y cableado del bus ISA , 2008-10-20
- ↑ Referencia técnica (PDF) . International Business Machines Corporation. Agosto de 1981. págs. 2-4 . Consultado el 24 de junio de 2025 .
- ↑ brokenthorn.com - Serie de desarrollo de sistemas operativos
- ↑ "Controlador DMA programable de alto rendimiento 8237A" (PDF) . PDOS . Consultado el 7 de mayo de 2024 .
- ↑ "82371FB (PIIX) y 82371SB (PIIX3)" (PDF) . Catálogo de hojas de datos . Consultado el 7 de mayo de 2024 .
- ↑ Ashborn, Jim; "Empaquetado avanzado: Un poco rinde mucho", Intel Corporation, Solutions, enero/febrero de 1986, página 2
- ↑ Intel Corporation, "Componentes de microcomputadoras: el nuevo controlador DMA Intel 8237 proporciona una respuesta DMA de 5 MHz para sistemas basados en 8088 y 8085A-2", Intel Preview, mayo/junio de 1979, pág. 9.
Enlaces externos
- DMA: Qué es y cómo funciona. Manual para desarrolladores de FreeBSD. 1997 (archivo de Internet).
- chipsets de Intel
- IBM PC compatibles
- circuitos integrados de entrada/salida