Interface: IntController_i386 Arquivos: intcontroller_i386.h Última atualização: 23/07/2002 Autor: Luiz Henrique Shigunov |
Descrição Para saber mais |
Funções para o sistema | |
0x00 - EndIRQ - Envia o comando de término de interrupção 0x01 - MaskIRQ - Desabilita uma interrupção |
0x02 - RedirectIRQ - Redireciona as interrupções 0x03 - UnmaskIRQ - Habilita uma interrupção |
Esta página descreve a interface IntController_i386 que trata do acesso ao controlador de interrupções usado num computador da arquitetura IA32 da Intel.
O controlador de interrupções controla como as interrupções de hardware são feitas. Bem como se elas serão ou não aceitas. Nos computadores PC/AT, as interrupções de hardware são sinalizadas através de linhas especiais, as requisições de interrupção (IRQ). Cada IRQ é ligada numa interrupção do processador.
O PIC (Programmable Interrupt Controller) é o componente que administra as interrupções físicas (hardware), bem como as IRQs. Os computadores compatíveis com o PC/AT têm dois PICs em endereços diferentes (20h e A0h). O primeiro administra as IRQs de 0 a 7 e o segundo IRQs de 8 a 15. Dando um total de 15 IRQs, pois a IRQ 2 é usada para conectar o primeiro no segundo PIC.
Quando uma IRQ é sinalizada, o PIC correspondente, gera uma interrupção. O número dessa interrupção depende da configuração do PIC.
Os PCs mais modernos utilizam outra estrutura onde existem os PICs locais (APIC) e o PIC do sistema (I/O APIC). Essa estrutura é usada nos 586 em diante para permitir vários processadores na mesma placa mãe. Mas são compatíveis com os do PC/AT.
No início todas as IRQs estão mascaradas, cada módulo que for usar uma IRQ deve desmascará-la.
Para saber mais sobre o PIC visite:
void EndIRQ(unsigned int irq);
Esta função envia o comando de término de IRQ para o PIC apropriado.
Se a IRQ irq pertencer ao primeiro PIC, o comando só será enviado ao primeiro PIC. Mas, se pertencer ao segundo PIC, o comando será enviado para o primeiro e para o segundo PIC.
int MaskIRQ(unsigned int irq);
Esta função desabilita a IRQ irq. Quando uma IRQ está desabilitada, qualquer sinal na IRQ será ignorado, ou seja, não vai gerar uma interrupção no processador.
int RedirectIRQ(unsigned int interrupt);
Esta função redireciona as IRQs. Isso significa que a IRQ0 poderá ser ligada à interrupção 45h ou a outra qualquer. Assim, quando a IRQ0 for sinalizada, a interrupção 45h vai ser gerada.
Se colocarmos a IRQ0 na interrupção 45h, a IRQ1 ficará em 46h, a IRQ2 em 47h e assim por diante. Só se especifica a primeira interrupção interrupt, as outras são consecutivas. As IRQs do segundo PIC também serão redirecionadas para serem logo depois das IRQs do primeiro PIC.
int UnmaskIRQ(unsigned int irq);
Esta função habilita a IRQ irq. Quando uma IRQ está habilitada, um sinal na IRQ vai gerar uma interrupção no processador.