Controladores do IBM-PC Gustavo G. Parma
IBM-PC baseado em ISA
Sistema de interrupção do x86 Duas entradas de solicitação de interrupção NMI: Non-maskable interruption Erro de paridade da RAM Channel Check (CHCHK#) Watchdog Timer Timeout INTR (maskable interruption) Controlador de Interrupção
Controlador de Interrupção Baseado no Barramento EISA Dois controladores em Cascata: Mestre e Escravo. Sistema de atendimento à interrupção do x86 Uma única linha de solicitação de interrupção na CPU Utiliza o 8259 Programmable Interrupt Controller (PIC).
Vetor de Interrupção o x86 utiliza um byte para identificar a interrupção. No modo Real, os primeiros 1024 bytes da memória são reservados para armazenar os vetores de interrupção. Cada vetor de interrupção utiliza 4 bytes dois bytes para IP (endereços mais baixos) dois bytes para CS (endereços mais altos) Cada vetor de interrupção representa uma ISR (interrupt service routine) que deve ser executada, associada com a interrupção.
Vetor de Interrupção
Sistema de Interrupção
Interrupção de Hardware Baseado no 8259
8259 Expande a porta de entrada de interrupções mascaráveis do processador para 8 entradas priorizadas (considerando um controlador). Requisições de interrupção capturadas em oito latches, chamado registrador de requisição de interrupção (IRR). IRR pode ser programado para ser sensível a: Transição Nível O registrador IMR (interrupt mask register) pode ser programado para habilitar ou desabilitar qualquer requisição de interrupção.
8259 - continuação A saída do IRR alimenta um bloco de definição de prioridade. O resultado da lógica de prioridade alimenta outro registrador de 8 bits, chamado ISR (InService register). Reflete a interrupção que está sendo atualmente atendida pelo x86 O 8259 permite, ainda: a configuração do tipo de lógica utilizada na definição de prioridade mascaramento e limpeza de solicitações de interrupção leitura do estado de vários registradores internos
Geração e atendimento de Interrupção Modo Real, interrupção no controlador Mestre 1.A interface ativa uma linha de requisição de interrupção 2.O controlador de interrupção recebe a solicitação e a prioriza com as outras requisições recebidas ou pendentes 3.Se a requisição for a única ou for a de mais alta ordem, o controlador envia uma solicitação de interrupção ao processador (INTR)
Geração e atendimento de Interrupção - continuação 4.A CPU detecta a interrupção (pino INTR) 5.CPU gera dois ciclos de Interrupção aceita (INTA) para solicitar o número da interrupção solicitada 5.1.O primeiro pára a lógica de prioridade e ativa o nível de mais alta prioridade no registrador ISR. 5.2.O segundo solicita um valor de 8 bits que identifica a interrupção 6.CPU lê o número na parte baixa do barramento de dados => vetor de interrupção
Atendimento à Interrupção 7.CPU indexa o vetor de interrupção, lendo o novo valor de CS:IP 8.Flags, CS e IP antigos salvos na pilha. 9.Carrega o novo valor de CS e IP 10.CPU desabilita o reconhecimento à interrupção 11.Executa a rotina de interrupção (ISR) 11.1.Executa o algoritmo 11.2.Escreve o comando EOI para o controlador de interrupção mestre, desligando a requisição 11.3.Executa o comando IRET 12.CPU retira o valor original de IP, CS e Flags da pilha 13.Continua a executar o programa interrompido
Geração e atendimento de Interrupção Modo Real, interrupção no controlador escravo O controlador escravo possui um registrador chamado de slave ID register. Este registrador é programado com o valor 02 e corresponde a entrada no controlador mestre no qual o escravo está conectado. E entrada IRQ2 do mestre é utilizada para fazer a cascata. A linha IRQ9 substitui a IRQ2, sendo que a IRQ9 está conectada na entrada IR1 do controlador escravo (enquanto que a IRQ2 estaria conectada na IR2 do controlador mestre).
Geração e atendimento de Interrupção - continuação 1.A interface ativa uma linha de requisição de interrupção ligada ao controlador escravo 2.O controlador escravo recebe a solicitação e envia uma solicitação ao controlador mestre. 3.Caso nenhuma interrupção de mais alta ordem esteja sendo atendida pelo mestre, o controlador mestre envia uma solicitação de interrupção ao processador (INTR). Caso haja alguma prioridade de mais alta ordem, o controlador mestre aguarda o término da interrupção.
Geração e atendimento de Interrupção - continuação 4.A CPU detecta a interrupção (pino INTR) 5.CPU gera dois ciclos de Interrupção aceita (INTA) para solicitar o número da interrupção solicitada 6.O controlador mestre detecta o ciclo de INTA e, caso a interrupção de mais alta ordem seja a IR2, o controlador mestre comanda o escravo para fornecer o tipo de interrupção ao processador (utilizando o número 02 no barramento de conexão em cascata).
Geração e atendimento de Interrupção - continuação 7.O controlador escravo percebe o número 02 no barramento de conexão em cascata e compara este valor com o slave ID register, disponibilizando o número que identifica a interrupção. 8.CPU lê o número na parte baixa do barramento de dados => vetor de interrupção 9.CPU indexa o vetor de interrupção, lendo o novo valor de CS:IP
Geração e atendimento de Interrupção - continuação 10.Flags, CS e IP antigos salvos na pilha. 11.Carrega o novo valor de CS e IP 12.CPU desabilita o reconhecimento à interrupção 13.Executa a rotina de interrupção (ISR) 13.1.Executa o algoritmo 13.2.Escreve o comando EOI para o controlador de interrupção mestre, desligando a requisição 13.3.Escreve o comando EOI para o controlador de interrupção escravo, desligando a requisição 13.4.Executa o comando IRET 14.CPU retira o valor original de IP, CS e Flags da pilha 15.Continua a executar o programa interrompido
Sequência de Interrupções
Programação do 8259 Cada 8259 pode ser programado acessando dois endereços de I/O Cada 8259 aceita dois tipos de comandos 0x20h e 0x21h para o controlador mestre 0xA0h e 0xA1h para o controlador escravo palavra de comando de inicialização (ICW) palavra de comando de operação (OCW) Antes da utilização do 8259, ele deve ser inicializado para um estado conhecido. escrita de uma séria de bytes de ICW e OCW
Programação do 8259 Grande parte da programação é feita durante a seqüencia de boot, não sendo necessária a ação do programador ICW1: valor 0x15h enviado para 0x20h, informa a existência do controlador escravo, configura para aceitar interrupções no modo de transição positiva. ICW2: valor 0x08h enviado para 0x21h. Os cinco bits superiores são os cinco bits da identificação da interrupção. Os três bits inferiores da identificação da interrução são o nível da interrupção atualmente atendida. Ou seja, associa aos vetores de interrupção de 08h a 0fh.
Configuração do 8259 ICW3: valor 0x04h enviado para 0x21h, indica qual entrada do mestre está conectada ao escravo. ICW4: valor 0x01h enviado para 0x21h. Informa que o sistema é baseado no x86 e que o programador deve enviar um sinal não específico de End-Of-Interrupt (EOI) para limpar o bit de mais alta ordem ativado no registrador ISR, ao final da rotina de interrupção. Após o envio de ICW4, qualquer escrita no endereço 0x21h acessa OCW1, o registrador de máscara de interrupção (IMR) do controlador mestre
Configuração do 8259 Para o controlador escravo: ICW1: valor 0x15h enviado para 0xA0h. Configura para aceitar interrupções no modo de transição positiva. ICW2: valor 0x70h enviado para 0xA1h. Semelhante a ICW2 do mestre, associando as interrupções com os vetores de interrupção de 70h a 77h ICW3: valor 02h enviado para 0xA1h. Escreve o ID do escravo, conectado a IRQ2 do mestre.
Programação do 8259 ICW4: valor 01 enviado para 0xA1h. Informa que o sistema é baseado no x86 e que o programador deve enviar um sinal não específico de End-Of-Interrupt (EOI) para limpar o bit de mais alta ordem ativado no registrador ISR, ao final da rotina de interrupção. Após o envio de ICW4, qualquer escrita no endereço 0xA1h acessa OCW1, o registrador de máscara de interrupção (IMR) do controlador escravo.
Programação do 8259 Após o envio de ICW1, ICW2, ICW3 e ICW4, o controlador de interrupção passa a operar no modo de controle de operação e a escrita nos endereços dos controladores passam a acessar os registradores de palavra de comando de operação (OCW): OCW1: endereço 0x21h ou 0xA1h OCW2: endereço 0x20h ou 0xA0h OCW3: endereço 0x20h ou 0xA0h
Programação do 8259 OCW1: acessa o IMR, habilitando ou desabilitando as solicitações de interrupção: bit 0 (IRQ0 ou IRQ8) bit 1 (IRQ1 ou IRQ9) bit 2 (Escravo ou IRQ10) bit 3 (IRQ3 ou IRQ11) bit 4 (IRQ4 ou IRQ12) bit 5 (IRQ5 ou IRQ13) bit 6 (IRQ6 ou IRQ14) bit 7 (IRQ7 ou IRQ15) Escrevendo '1' em qualquer dos bits, desabilita a interrupção.
Configuração do 8259 OCW2: Acessado quando b3=b4=0 Utilizado para rotacionar ou alterar a prioridade de requisição de interrupção e selecionar o modo de fim de interrupção. bit 0 a bit 2: Indica para o controlador o nível da interrupção (IR) específica que será utilizado pelos outros comandos especificados no OCW2 bit 3 e bit 4: Iguais a zero para acessar OCW2
Programação do 8259 bit 5 a bit 7: representam oito possíveis comandos. D5 é o bit EOI e indica que o comando é um comando de fim de interrupção D6 é o bit SL e indica que o comando utiliza os bits de especificação de nível (bit 0 a bit 2). D7 é o bit R e indica que a função de rotação no nível de prioridade será ativada.
Programação do 8259 Bit 7 R Bits 5 a 7 de OCW2 Bit 6 SL Bit 5 EOI 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 0 Descrição Define um comando de fim de interrupção não específico (EOI), resetando o bit de mais alta ordem em IS. define um comando de fim de interrupção específico. Neste caso, o nível especificado pelos bits b0 a b2 será resetado no registrador ISR. Causa um EOI não especificado, resetando a requisição de mais alta ordem em ISR para a mais baixa prioridade e movendo todos os outros níveis uma posição acima. Ativa uo modo re rotação automática de prioridade, tal que a cada comando de EOI, as prioridades serão rotacionadas. Geralmente o PC é inicializado em modo EOI não-automático e este comando não é utilizado. Limpa a rotação automática de prioridade no modo de EOI automático. Causa uma rotação na prioridade e um comando EOI específico, onde o nível especificado pelos bits b0 a b2 será resetado no registrador ISR. causa um comando de prioridade. O nível especificado pelos bits b0 a b2 terá a prioridade de mais baixa ordem, fixando todas as outras prioridades.
OCW3: Acessado quando b4 = 0 e b3 = 1 bit 0 (RIS) e bit 1 (RR): utilizados para selecionar um modo de leitura de estado Bit 1 RR 0 0 Bis 0 RIS 0 1 1 0 1 1 Descrição Sem ação Sem ação Permite uma leitura do valor do registrador IRR no próximo comando de leitura enviado ao controlador. O comando pode ser enviado para qualquer endereço. Permite uma leitura no conteúdo do registrador ISR no próximo comando de leitura enviado ao controlador.
Programação do 8259 bit 2 (P): dispara um comando especial similar em função ao primeiro pulso de INTA (ativando o bit de mais alta prioridade em ISR). No próximo comando de leitura no controlador, o dado lido possui o valor codificado em D0-D2 da requisição de interrupção. Este modo não é utilizado pela BIOS do PC. bit 3: não utilizado, devendo ser mantido em '1' bit 4: não utilizado, devendo ser mantido em '0'
Prgramação do 8259 bit 5 (SMM) e bit 6 (ESMM): Permitem que o registrador de máscara seja utilizado de forma especial. Quando a interrupção estiver ativada em ISR e não for desativada por um comando EOI, todos os níveis de mais alta e baixa prioridades que não estiverem mascarados podem ainda ser atendidos enquanto a interrupção do nível original estará inibido. Este modo é selecionado com D5=D6='1' e desativado com D5='0' e D6='1'. Este modo não é utilizado pela BIOS do PC.
Vetor de Interrupção para IRQs Vetor Endereço Hardware Descrição 20-23 IRQ0 Relógio do PC (XT) e serviços de hardware (Contador 0 do 8255) 9 24-27 IRQ1 Teclado A 28-2B IRQ2 Cascata com o controlador escravo B 2C-2F IRQ3 Com 2 - Serial C 30-33 IRQ4 Com 1 - Serial D 34-37 IRQ5 LPT2 ou Hard Disk no XT E 38-3B IRQ6 Adaptador do Floppy F 3C-3F IRQ7 LPT1 70 1C0-1C3 IRQ8 Clock do relógio de tempo real no barramento ISA 71 1C4-1C7 IRQ9 Substitui a IRQ2 72 1C8-1CB IRQ10 Disponível 73 1CC-1CF IRQ11 Disponível 74 1D0-1D3 IRQ12 Disponível 75 1D4-1D7 IRQ13 Coprocessador matemático 76 1D8-1DB IRQ14 Controlador do HD do barramento ISA 77 1DC-1DF IRQ15 Disponível 8
IRQs no PCI Situação ideal No PCI: Interrupção ativa em nível baixo Interrupções compartilhadas
Interrupções no PCI
Interrupções no PCI