

O Intel 8237 é um controlador de acesso direto à memória (DMA), parte da família de microprocessadores MCS 85. Ele permite a transferência de dados entre a memória e a E/S (I/O) com carga reduzida no processador principal do sistema, fornecendo à memória sinais de controle e informações de endereço de memória durante a transferência de DMA.
O 8237 é um dispositivo de quatro canais que pode ser expandido para incluir qualquer número de entradas de canal DMA. O 8237 é capaz de fazer transferências DMA a taxas de até 1,6 megabyte por segundo. Cada canal é capaz de endereçar uma seção inteira de 64k bytes de memória e pode transferir até 64k bytes com uma única programação.
Um único 8237 foi usado como controlador DMA no IBM PC e no IBM XT originais. O IBM PC AT adicionou outro 8237 em configuração mestre-escravo, aumentando o número de canais DMA de quatro para sete. Computadores pessoais posteriores compatíveis com o padrão IBM podem ter chipsets que emulam as funções do 8237 para compatibilidade retroativa. O Intel 8237 foi, na verdade, projetado pela AMD (chamado Am9517). Ele fazia parte de um acordo de licenciamento cruzado, que permitia à AMD fabricar processadores Intel, e que tornou o design disponível para a Intel também. É por isso que o encapsulamento da Intel tem impresso "(C) AMD 1980". O 8237, que opera a 3 MHz e 5 MHz, foi fabricado pela Intel conforme descrito em variantes, ao passo que a NEC desenvolveu o μPD71037, uma versão que opera a 10 MHz.
O 8237 opera em quatro modos diferentes, dependendo do número de bytes transferidos por ciclo e do número de CIs usados:
A transferência de memória para memória pode ser realizada. Isso significa que os dados podem ser transferidos de um dispositivo de memória para outro dispositivo de memória. O registrador "Endereço Atual" do canal 0 é a fonte da transferência de dados e do canal 1; a transferência termina quando o registrador "Contagem de Palavras Atual" chega a 0.
No modo de autoinicialização (auto initialize), os valores de endereço e contagem são restaurados após a recepção de um sinal de fim de processo (EOP). Isso acontece sem qualquer intervenção da CPU. É usado para repetir a última transferência.
O sinal de contagem final (TC) indica o fim da transferência para as placas ISA. Ao final da transferência, ocorrerá uma inicialização automática, se configurado para isso.
No modo único, apenas um byte é transferido por requisição. A cada transferência, o registrador de contagem é decrementado e o endereço é incrementado ou decrementado dependendo da programação. Quando o registrador de contagem chega a zero, o sinal TC de contagem final é enviado para a placa.
A requisição DMA DREQ deve ser gerada pela placa e mantida ativa até ser reconhecida pelo sinal de confirmação DMA DACK.
A transferência é ativada pelo DREQ, que pode ser desativado assim que for reconhecido por DACK. A transferência continua até que o fim do processo EOP (interno ou externo) seja ativado, o que acionará o envio da contagem final TC para a placa. A autoinicialização pode ser programada neste modo.
A transferência é ativada pelo DREQ, reconhecida por DACK e continua até que TC, o EOP externo ou o DREQ fiquem inativos. Apenas TC ou o EOP externo podem ativar a autoinicialização, caso esta esteja programada.
Os registradores internos usados no 8237 para transferência de dados são os seguintes:
Como membro da família de dispositivos Intel MCS-85, o 8237 é um dispositivo de 8 bits com endereçamento de 16 bits. No entanto, ele é compatível com os microprocessadores 8086/88. Os modelos IBM PC e PC XT (tipos de máquina 5150 e 5160) possuem uma CPU 8088 e uma arquitetura de barramento de sistema de 8 bits; este último faz interface direta com o 8237, mas o 8088 possui um barramento de endereço de 20 bits, de modo que quatro latches de endereço de 4 bits adicionais (todos na verdade parte de um único dispositivo 74LS670), um para cada canal DMA, são adicionados ao lado do 8237 para expandir os contadores de endereço. No entanto, como esses latches externos são separados dos contadores de endereço do 8237, eles nunca são automaticamente incrementados ou decrementados durante as operações DMA, tornando impossível realizar uma operação DMA cruzando uma fronteira de endereço de 64 KiB. As tentativas de cruzar um limite de 64 KiB numa transferência DMA resultarão em uma quebra cíclica (wrap around) dentro de um mesmo bloco de 64 KiB de memória. (Por exemplo, se um canal DMA e o latch de endereço associado fossem programados para transferir 256 bytes para endereços ascendentes começando no endereço 0x3FF8C, em vez de transferir para os endereços 0x3FF8C a 0x4008B, os dados seriam transferidos para os endereços 0x3FF8C a 0x3FFFF e depois para 0x30000 a 0x3008B.)
O IBM PC também usava um canal de seu 8237 para atualizar (refresh) sua memória dinâmica ao ligar a entrada de um canal DMA à saída do contador do temporizador da placa de sistema. Esse arranjo causava ciclos de leitura periódicos nos chips de memória, o que atualizava a memória.
O IBM PC AT (tipo de máquina 5170) e os 100% compatíveis usam uma CPU 80286 e uma arquitetura de barramento de sistema de 16 bits. Além do 8237 dos modelos PC e XT, um segundo 8237 em cascata é adicionado, para transferências DMA de 16 bits. Isso é possível, apesar do 8237 ser um dispositivo de 8 bits, porque o 8237 realiza transferências entre uma porta de E/S e a memória como transferências do tipo fly-by (em trânsito), nas quais os dados são colocados no barramento pela memória de origem ou porta de E/S e lidos diretamente ao mesmo tempo pela porta de E/S ou memória de destino, sem serem processados pelo 8237 em si. Para este modo de transferência, a largura do barramento de dados é essencialmente irrelevante para o 8237 (desde que ele esteja conectado a um barramento de dados com pelo menos 8 bits de largura, para permitir a programação dos registradores do 8237). O segundo 8237 em um PC classe AT fornece três canais de DMA de 16 bits (seus canais 1 a 3, nomeados canais 5 a 7 no PC AT); seu canal 0 (nomeado canal 4 no PC AT) é usado no modo cascata para conectar o 8237 do DMA de 8 bits como o "escravo" no arranjo em cascata; o 8237 que fornece os canais de 16 bits atua como o "mestre". Para que possa endereçar palavras de 16 bits, ele é conectado ao barramento de endereços de forma a contar endereços pares (0, 2, 4, ...) em vez de endereços únicos. Assim como o primeiro 8237, ele é suplementado com quatro registradores de extensão de endereço. Num PC da classe AT, todos os oito registradores de expansão de endereço têm 8 bits de largura, para que endereços completos de 24 bits — o tamanho do barramento de endereços do 80286 — possam ser especificados. Transferências DMA em qualquer canal ainda não podem cruzar um limite de 64 KiB. (O DMA de 16 bits é limitado a 32.768 palavras de 16 bits, embora um canal DMA possa contar até 65.536 endereços; o bit mais significativo do contador de endereço de um canal DMA de 16 bits é ignorado). Como o modo DMA de memória para memória do 8237 opera transferindo um byte do local da memória de origem para um registrador temporário interno de 8 bits no 8237 e, em seguida, do registrador temporário para o local da memória de destino, esse modo não pôde ser usado para DMA de memória para memória de 16 bits, pois o registrador temporário não é grande o suficiente. Além disso, o DMA de memória para memória de 16 bits exigiria o uso do canal 4, entrando em conflito com seu uso para colocar em cascata o 8237 que lida com os canais DMA de 8 bits. No entanto, no AT, o canal DMA 0 de 8 bits não é mais usado para a atualização da DRAM, tendo sido substituído por uma lógica de atualização especializada, portanto, deve ser possível executar DMA de memória para memória de 8 bits usando os canais 0 e 1 sem interromper a atualização da DRAM.
O design do DMA baseado no 8237 nos compatíveis com PC AT não foi atualizado com a mudança para as CPUs de 32 bits e as arquiteturas de barramento de sistema de 32 bits. Consequentemente, uma limitação nessas máquinas é que os controladores DMA 8237, junto aos seus registradores de extensão de "página" de endereço, só podem endereçar 16 MiB de memória, de acordo com o design original orientado em torno da CPU 80286, que ela mesma possui essa limitação de endereçamento. Isso significa que para outras áreas de memória, os dados devem primeiro ser transferidos por DMA do dispositivo de E/S para um buffer intermediário nos primeiros 16 MiB do espaço de endereço físico e, em seguida, movidos para a memória final pela CPU; ou, na direção inversa, devem ser transferidos da memória inicial para o buffer intermediário pela CPU antes de serem transferidos por DMA desse buffer para o dispositivo de E/S. Essa técnica é chamada de "bounce buffer". Em geral, isso perde qualquer benefício de velocidade global associado ao DMA, mas pode ser necessário se um periférico exigir o acesso por DMA devido a exigências rigorosas de temporização ou inflexibilidade da interface de hardware.
Na série de computadores PS/2, a IBM atualizou o hardware de DMA para suportar dados e endereços de 32 bits em alguns sistemas com CPUs 80386, mas eles fizeram isso substituindo o 8237 por um novo design de controlador DMA. O novo design inclui um modo de compatibilidade 8237 para retrocompatibilidade com o PC AT.
Embora este dispositivo possa não aparecer como um componente discreto nos modernos sistemas de computadores pessoais, ele aparece dentro dos conjuntos de chips (chipsets) de controladores do sistema. Por exemplo, o PIIX integrava dois controladores 8237 para o DMA do barramento ISA.== Variantes ==
| Número do Modelo | Velocidade do Clock | Taxa de Transferência | Encapsulamento | Preço (USD) |
|---|---|---|---|---|
| 8900 | 3 MHz | |||
| 8237 | 3 MHz | PLCC de 44 Pinos | ||
| 8237-2 | 5 MHz | 1.6 mps | $20.00 |