Decodificação de I/O e Memória Cap.6: /0 CAPÍTULO VI DECODIFICAÇÃO DE I/O E MEMÓRIA afirmava-se que memória era todo dispositivo acessado através dos sinais *(S)MEMR ou *(S)MEMW e que I/O era todo dispositivo acessado através dos sinais *IOR ou *IOW (ativados pelas instruções "in" e "out") I/O é o nome dado a dispositivos que realizam diversas funções específicas, tais como enviar dados, receber dados, configurar a porta serial, controlar o acionador de disco ou ainda gerenciar a temporização. De forma mais simples, diz-se que os dispositivos de I/O trabalham com comandos e dados. Os comandos (operações de escrita) indicam como o dispositivo deverá operar, por exemplo, mudando a resolução da placa VA, enquanto que os dados (leitura ou escrita) são manuseados pelo I/O com objetivos diversos, como, por exemplo, para serem comunicados via modem ou placa de rede. instruções in, out, ins e outs 64K x K endereços Bits do Endereço 9876 54320 9 87654320 Espaço de I/O com 52 endereços Indica se o endereço era para a placa do sistema ou para os slots de expansão (=0) - placa do sistema (=) - slots de expansão erado pelas instruções IN e OUT, mas ignorado no caso de alguns PCs antigos Não são usados pelas instruções IN e OUT Figura 6.. Interpretação dos bits de endereçamento de I/O, nas arquiteturas de PCs antigos. - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 2/0 FFFFh 0400h 03FFh 0200h 0FFh 0000h 64.52 52 52 Não usado no projeto inicial do PC Espaço para os slots de expansão Espaço para a placa do sistema Figura 6.2. Utilização do espaço de endereçamento de I/O nos primeiros PCs. dispositivos "on-board" Endereços Dispositivo 000h-00Fh primeiro controlador de DMA (8237) 020h-02h primeiro controlador de interrupções (8259) 040h-043h temporizador programável (8253) 060h-063h interface paralela 8255 (T) 060h-064h controlador 8742 (AT) 070h-07h RAM CMOS e registrador de máscara NMI (AT) 080h-08Fh registradores de paginação para DMA 0h-0h segundo controlador de interrupções (AT) 0C0h-0DFh segundo controlador de DMA (AT) 0F0h-0FFh coprocessador aritmético (AT) F0h-FFh disco rígido (AT) 200h-20Fh porta de jogos 238h-23Bh mouse de barramento 278h-27Fh LPT2: 2B0h-2BFh vídeo (EA-VA) 2C0h-2CFh vídeo (EA-VA) 2h-2DFh vídeo (EA-VA) 2E8h-2EFh COM4: 2F8h-2FFh COM2: 320h-32Fh disco rígido (T) 378h-37Fh LPT: 300h-3Fh reservado para protótipos 3C0h-3CFh vídeo (EA-VA) 3h-3DFh vídeo (CA) 3E8h-3EFh COM3: 3F0h-3F7h disco flexível 3F8h-3FFh COM: 400h => projetos PCI Figura 6.3. Uso do espaço de endereçamento de I/O no PC. - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 3/0 Decodificação com endereço fixo *CS0, *CS,...,*CS7 com habilitação em nível baixo OR dos *CS com *IOR e *IOW (7) (8) AEN () (2) (3) (4) (5) (6) *IOR () *IOW () Endereço Base = 3E0H * * *AEN 0 () (0) (9) 74LS30 74LS08 0 A B C 2A 2B 74LS38 *ADROK *IORW 8 Endereços Decodificados 0 2 3 4 5 6 7 *IOR () *IOW () *CS0 (3E0H) *CS (3EH) *CS2 (3E2H) *CS3 (3E3H) *CS4 (3E4H) *CS5 (3E5H) *CS6 (3E6H) *CS7 (3E7H) Barramento de Dados do PC 74LS32 *IOR () () () () () () () () () 74LS32 B Figura 6.4. Decodificação de I/O com endereço fixo. Q 2 3 4 2 22 23 24 2 Saída com 8 Bits 2 2 2 2 Barramento Interno Entrada com 8 Bits outportb(0x3e0, variável); variável = inportb(0x3e0); uso do 74LS374 ao invés do AEN = 0 é um nível lógico necessário para que os decodificadores de I/O operem sem conflitar com os ciclos de DMA. Decodificação programável por chave uso de "dip switch" outportb(endereço, variável); variável = inportb(endereço); - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 4/0 6x (8K2) SW SW DIP-6 Programado pela Chave (2) AEN () (3) (4) (5) (6) (7) (8) *IOR () *IOW () P0 P P2 P3 P4 P5 P6 P7 Q () (0) (9) P=Q 74LS688 74LS08 8 Endereços Decodificados A B C 2A 2B *ADROK *IORW 74LS38 *IOR () 0 2 3 4 5 6 7 Barramento de Dados do PC 74LS32 *IOW () *CS0 (base) *CS (base+) *CS2 (base+2) *CS3 (base+3) *CS4 (base+4) *CS5 (base+5) *CS6 (base+6) *CS7 (base+7) *IOR () () () () () () () () () B 74LS32 Figura 6.5. Decodificação programável por chave, usando o 74LS688. Q 2 3 4 2 22 23 24 2 Saída com 8 Bits 2 2 2 2 Barramento Interno Entrada com 8 Bits Programado pela Chave 4 (8K2) SW SW DIP-4 AEN () (2) (3) (4) (5) (6) Coletor Aberto 74LS266 74LS266 74LS266 74LS266 74LS09 4K7 ADROK Wired AND (9) (8) (7) A B NOR 0 0 0 0 0 0 A B C 2A 2B 74LS38 0 2 3 4 5 6 7 A=B A=B 0 *CS0 (base+0) *CS (base+4) *CS2 (base+8) *CS3 (base+2) *CS4 (base+6) *CS5 (base+20) *CS6 (base+24) *CS7 (base+28) - - 8 Linhas Decodificadas. Cada linha seleciona um bloco de 4 endereços consecutivos. Figura 6.6. Decodificação programável por chave usando o 74LS266. - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 5/0 decodificação selecionável por PROM 528 PROM () 8 (0) 7 (9) 6 (8) 5 (7) 4 (6) 3 (5) 2 (4) (3) 23 AEN ()2 2 (2) 9 23 N82S4 (60 η *CE s) *CE2 CE3 CE4 9 0 3 4 5 6 7 *CS0 *CS *CS2 *CS3 *CS4 *CS5 *CS6 *CS7 EEMPLO: Habilitar *CS0 para o endereço 382h Endereço Dado Programado 0 0 0 0 0 0 Figura 6.7. Decodificação de I/O usando uma PROM. Expandindo o espaço de endereçamento utilização dos bits de ordem superior não funciona desde o surgimento do PCI endereçamento indireto RAM CMOS e vídeo VA Dado Interpretado como Endereço - *IOW Latch I-7 Endereço Indireto Decodificador 8 / 256 *IOR *IOW *SEL I/O Endereçado Indiretamente *CS - - AEN DECOD. NORMAL *CS *CS0 Transceiver Barramento de Dados do PC - Barramento de Dados Interno Figura 6.9. Esquema simplificado para o endereçamento indireto para I/O. - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 6/0 () *IOW () Barramento Dados PC 6x (8K2) SW SW DIP-6 () 74LS27 (2) AEN () (3) (4) (5) (6) (7) (8) Dado usado como Endereço Q P0 P P2 P3 P4 P5 P6 P7 Q P=Q 74LS688 74LS32 I I I I I I I I Barramento de Dados do PC *IOR () 8 Endereços Decodificados A B C 2A 2B 74LS38 *IOW () *IOR () () () () () () () () () 0 2 3 4 5 6 7 *ICS0 *ICS *ICS2 *ICS3 *ICS4 *ICS5 *ICS6 *ICS7 B 74LS27 Saída Digital Endereçada Indiretamente Q Figura 6.0. Uso de endereçamento indireto para expandir o espaço de I/O. "outportb(base,índice);" seguido de "outportb(base+,dado);" 2 3 4 2 22 23 24 2 2 2 2 2 Entrada Digital Endereçada Indiretamente Barramento de Dados Interno I/O mapeado em memória 9 8 7 0 6 5 4 3 2 0 0 0 0 Q DO0 DO DO2 DO3 DO4 DO5 DO6 DO7 *MEMW 9 (2) 8 (3) 6 (5) 5 (6) 4 (7) 3 (8) 2 (9) (0) 0 () (2) (3) (4) (5) (6) (7) (8) 7 (4) (9) (0) () 74LS30 74LS30 74S260 Decodificação dos 20 bits do Endereço DFFF8H 74LS0 *MEMR () () () () () () () () *MEMR B Saídas usando o endereço de memória DFFF8H Entradas usando o endereço de memória DFFF8H Figura 6.. Registradores de I/O (entrada e saída) mapeados no primeiro megabyte de memória. 2 3 4 2 22 23 24 2 2 2 2 2 DI0 DI DI2 DI3 DI4 DI5 DI6 DI7 - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 7/0 nunca entra em conflito com os endereços de I/O já utilizados aumenta o espaço de I/O oferece a possibilidade de usar todas as instruções da família 80x86 I/O a 6 bits S S S S S S S S *IOR B Q DO0 DO DO2 DO3 DO4 DO5 DO6 DO7 endereço par... AEN decod. I/O *IOW *I/S6 SD8 SD9 S0 S S2 S3 S4 S5 *IOR B 74LS05 D8 D9 0 2 3 4 5 Q DO8 DO9 DO0 DO DO2 DO3 DO4 DO5 endereço ímpar *IOW *SBHE Figura 6.2. Esquema para I/O a 6 bits. parte alta e parte baixa (*SBHE e ) acesso a endereço par mov dx,300h in ax,dx "outport(0x300);" em linguagem C endereços acessados: 300h e 30h único ciclo de barramento acesso a endereço ímpar mov dx,30h in ax,dx "outport(0x30);" em linguagem C endereços acessados: 30h e 302h 2 ciclos de barramento - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 8/0 acesso de 6 bits em barramento PCI acesso de 32 bits em barramento PCI Decodificação de memória *(S)MEMR e *(S)MEMW 0 () (2) (3) (4) (5) (6) (7) (8) (9) (0) () *MEMR () *MEMW (B) 2 2 2 2 2 2 2 2 2 2 2 3 4 2 22 23 24 2 3 4 2 22 23 24 (0) A 0 2 (9) B *SEL RUPO 2 3 74LS39 B0 B B B B B B B B B B *BMEMR *BMEMW *CS0 *CS *CS2 *CS3 B B B B B B B B B B B0 *CS0 *BMEMR *BMEMW B B B B B B B B B B B0 *CS2 *BMEMR *BMEMW 0 CE OE WE 66 0 CE OE WE 66 B B B B B B B B B B B B B B B B B B B B B B B B B B B0 *CS *BMEMR *BMEMW B B B B B B B B B B B0 *CS3 *BMEMR *BMEMW 0 CE OE WE 66 0 CE OE WE 66 B B B B B B B B B B B B B B B B SW DIP-7 8K2 9 (2) 8 A(3) 7 (4) 6 (5) 5 (6) 4 (7) 3 (8) P0 P P2 P3 P4 P5 P6 P7 Q P=Q 74LS688 *SEL RUPO () () () () () () () () *MEMR () B B B B B B B B B Figura 6.3. Decodificação de 8 KB de memória em blocos de 2 KB. SW DIP-4 8K2 9 (2) 8 (3) 7 (4) 6 (5) B0 B A<B A=B A>B 74LS85 A<B A=B A>B Decodificação de um bloco de 64KB Figura 6.4. Decodificação de 64 KB com endereço selecionável por chave. - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 9/0 Mapa de memória 00000h E0000h C0000h 000h 9FFFFh 00500h 00400h 00000h PC AT Memória Estendida Reservado para a PARA ROM BIOS Reservado para ROMs Buffers de Vídeo Porção transiente do DOS Área de Programas (programas de usuários e dados) Porção residente do DOS Área de dados para ROM BIOS e BASIC Área de dados para a ROM BIOS Tabela de Vetores de Interrupção Figura 6.5. Mapa de memória de um típico PC AT. Área destinada ao DOS Exercícios 6-7) Projete um circuito que multiplexe o acesso a 2 registradores num mesmo endereço, da seguinte forma: o primeiro acesso é realizado em um dos registradores, o acesso seguinte é feito ao outro e assim sucessivamente. 6-2) O seguinte conjunto de instruções é utilizado para realizar uma leitura de 6 bits: mov dx,300h in ax,dx. Existe alguma diferença de desempenho entre executar estas instruções com a linha *I/O CS 6 ativada ou não? 6-3) Repita o problema anterior, substituindo apenas 300h por 30h. 6-4) Nos casos dos problemas 6-2 e 6-3, quais as diferenças de implementações em hardware ao ativar-se ou não a linha *I/O CS 6? 6-5) O que acontecerá se, por engano, um projetista utilizar em seu projeto os endereços de I/O de 3F0h a 3F7h? - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça
Decodificação de I/O e Memória Cap.6: 0/0 6-7) (Concurso para o Quadro de Engenheiros Militares do Exército - especialidade eletrônica - 998) Para permitir que um microprocessador acesse 3 dispositivos, foi preparada a decodificação a seguir, onde se utilizaram apenas as 0 linhas de endereços menos significativas:,,...,. As demais linhas de endereços foram ignoradas. Considerando que os dispositivos são selecionados em nível baixo (quando *CS=0), determine em hexadecimal todos os endereços possíveis, para cada dispositivo. 74LS38 *CS DISP A B C 2A 2B 0 2 3 4 5 6 7 *CS *CS DISP2 DISP3 - http://www.mzeditora.com.br - PC: um uia Prático de Hardware e Interfaceamento - Ricardo Zelenovsky & Alexandre Mendonça