Uma interrupção é um sinal para o processador emitido pelo hardware ou software indicando um evento que precisa de atenção imediata. Sempre que ocorre uma interrupção, o controlador completa a execução da instrução atual e inicia a execução de uma Rotina de Serviço de Interrupção (ISR) ou Interrupt Service Handler. O ISR informa ao processador ou controlador o que fazer quando a interrupção ocorre. As interrupções podem ser de hardware ou de software.
- Interrupção de Hardware
- Interrupção de software
- O que é sondagem?
- Interrupções v/s Polling
- Interrupt Service Routine
- Interrupt Vector Table
- Passos para executar uma interrupção
- Edge Triggering vs. Level Triggering
- Ativar e desativar uma interrupção
- Interrupt Enable Register
- Interrupt Priority in 8051
- Interrupt inside Interrupt
- Acionar uma interrupção por software
Interrupção de Hardware
Uma interrupção de hardware é um sinal de alerta eletrônico enviado ao processador a partir de um dispositivo externo, como um controlador de disco ou um periférico externo. Por exemplo, quando pressionamos uma tecla no teclado ou movemos o mouse, elas acionam interrupções de hardware que fazem com que o processador leia o teclado ou a posição do mouse.
Interrupção de software
Uma interrupção de software é causada por uma condição excepcional ou por uma instrução especial no conjunto de instruções que causa uma interrupção quando ela é executada pelo processador. Por exemplo, se a unidade lógica aritmética do processador executa um comando para dividir um número por zero, para causar uma exceção divisão por zero, fazendo com que o computador abandone o cálculo ou exiba uma mensagem de erro. As instruções de interrupção do software funcionam de forma semelhante às chamadas de sub-rotina.
O que é sondagem?
O estado de monitorização contínua é conhecido como sondagem. O microcontrolador continua a verificar o estado de outros dispositivos; e enquanto o faz, não faz outra operação e consome todo o seu tempo de processamento para a monitorização. Este problema pode ser resolvido usando interrupções.
No método de interrupção, o controlador responde apenas quando ocorre uma interrupção. Assim, o controlador não é obrigado a monitorar regularmente o estado (bandeiras, sinais, etc.) dos dispositivos com interface e embutidos.
Interrupções v/s Polling
Aqui está uma analogia que diferencia uma interrupção da sondagem –
Interrupção | Polling |
---|---|
Uma interrupção é como um lojista. Se alguém precisa de um serviço ou produto, ele vai ter com ele e o ajuda a satisfazer as suas necessidades. Em caso de interrupções, quando as bandeiras ou sinais são recebidos, eles notificam o controlador que eles precisam ser atendidos. | O método de sondagem é como um vendedor. O vendedor vai de porta em porta enquanto solicita a compra de um produto ou serviço. Da mesma forma, o controlador continua monitorando as bandeiras ou sinais um a um para todos os dispositivos e fornece serviço para qualquer componente que precise de seu serviço. |
Interrupt Service Routine
Para cada interrupção, deve haver uma rotina de serviço de interrupção (ISR), ou manipulador de interrupção. Quando ocorre uma interrupção, o microcontrolador executa a rotina de serviço de interrupção. Para cada interrupção, há um local fixo na memória que contém o endereço da sua rotina de serviço de interrupção, ISR. A tabela de posições na memória reservada para manter os endereços dos ISRs é chamada de Tabela Vetorial de Interrupção.
Interrupt Vector Table
Existem seis interrupções incluindo RESET no 8051.
Interrupções | Localização da ROM (Hex) | Pin |
---|---|---|
Interrupções | Localização da ROM (HEX) | |
Série COM (RI e TI) | 0023 | |
Timer 1 interrupts(TF1) | 001B | |
Interrupção HW Externa 1 (INT1) | 0013 | P3.3 (13) |
Interrupção HW Externa 0 (INT0) | 0003 | P3.2 (12) |
Timer 0 (TF0) | 000B | |
Reset | 0000 | 9 |
-
Quando o pino de reset é ativado, o 8051 salta para o endereço 0000. Isto é reinicialização da alimentação.
-
Duas interrupções são reservadas para os temporizadores: uma para o temporizador 0 e uma para o temporizador 1. As posições de memória são 000BH e 001BH respectivamente na tabela de vetores de interrupção.
-
Duas interrupções são reservadas para as interrupções externas de hardware. Os pinos nº 12 e nº 13 na porta 3 são para as interrupções externas de hardware INT0 e INT1, respectivamente. As posições de memória são 0003H e 0013H respectivamente na tabela de vetores de interrupção.
-
A comunicação serial tem uma única interrupção que pertence tanto à recepção como à transmissão. A localização de memória 0023H pertence a esta interrupção.
Passos para executar uma interrupção
Quando uma interrupção fica ativa, o microcontrolador passa pelos seguintes passos –
-
O microcontrolador fecha a instrução em execução no momento e salva o endereço da próxima instrução (PC) na pilha.
-
Também salva o estado atual de todas as interrupções internamente (ou seja não na pilha).
-
Salta para a localização da memória da tabela vectorial de interrupções que contém o endereço do serviço de interrupção.
-
O microcontrolador obtém o endereço do ISR da tabela vectorial de interrupções e salta para ela. Ele começa a executar a sub-rotina de serviço de interrupção, que é RETI (return from interrupt).
-
Upão executando a instrução RETI, o microcontrolador retorna ao local onde foi interrompido. Primeiro, ele obtém o endereço do contador do programa (PC) da pilha, colocando os bytes superiores da pilha no PC. Depois, ele começa a executar a partir desse endereço.
Edge Triggering vs. Level Triggering
Interrupt modules are of two types – level-triggered or edge-triggered.
Acionamento por nível | Acionamento por borda |
---|---|
Um módulo de interrupção acionado por nível gera sempre uma interrupção sempre que o nível da fonte de interrupção é afirmado. | Um módulo de interrupção acionado por borda gera uma interrupção somente quando detecta uma borda afirmada da fonte de interrupção. A borda é detectada quando o nível da fonte de interrupção realmente muda. Ela também pode ser detectada por amostragem periódica e pela detecção de um nível assertivo quando a amostra anterior foi desasserted. |
Se a fonte de interrupção ainda é assertiva quando o manipulador de interrupção do firmware manipula a interrupção, o módulo de interrupção irá regenerar a interrupção, fazendo com que o manipulador de interrupção seja invocado novamente. | Módulos de interrupção acionada por borda podem ser acionados imediatamente, não importa como a fonte de interrupção se comporta. |
Interrupções acionadas em nível são complicadas para o firmware. | Interrupções acionadas em nível mantêm a complexidade do código do firmware baixa, reduzem o número de condições para o firmware, e fornecem mais flexibilidade quando as interrupções são manipuladas. |
Ativar e desativar uma interrupção
Rearme do componente, todas as interrupções são desativadas mesmo que estejam ativadas. As interrupções devem ser habilitadas usando software para que o microcontrolador possa responder a essas interrupções.
IE (interrupção habilitada) o registro é responsável por habilitar e desabilitar a interrupção. O IE é um registro bitaddressable.
Interrupt Enable Register
EA | – | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
---|
-
EA – Global enable/disable.
-
– – Indefinido.
-
ET2 – Habilitar Timer 2 interrupção.
-
ES – Habilitar interrupção da porta serial.
>
-
ET1 – Habilitar Timer 1 interrupção.
-
EX1 – Habilitar interrupção externa 1.
-
ET0 – Habilitar Temporizador 0 interrupção.
-
EX0 – Habilitar Interrupção externa 0.
Para habilitar uma interrupção, nós damos os seguintes passos –
-
Bit D7 do registro do IE (EA) deve ser alto para permitir que o resto do registro tenha efeito.
-
Se EA = 1, as interrupções serão habilitadas e serão respondidas, se seus bits correspondentes no IE forem altos. Se EA = 0, nenhuma interrupção responderá, mesmo que seus pinos associados no registro do IE sejam altos.
Interrupt Priority in 8051
Podemos alterar a prioridade da interrupção atribuindo a prioridade mais alta a qualquer uma das interrupções. Isto é feito programando um registro chamado IP (interrupção de prioridade).
A figura seguinte mostra os bits do registro IP. Ao reiniciar, o registrador IP contém todos os 0’s. Para dar uma prioridade maior a qualquer uma das interrupções, nós fazemos o bit correspondente no registro IP alto.
– | – | – | – | PT1 | PX1 | PT0 | PX0 |
---|
– | IP.7 | Não Implementado. |
– | IP.6 | Não Implementado. |
– | IP.5 | Não Implementado. |
– | IP.4 | Não Implementado. |
PT1 | IP.3 | Definindo o nível de prioridade de interrupção do Temporizador 1. |
PX1 | IP.2 | Define the External Interrupt 1 priority level. |
PT0 | IP.1 | Define the Timer 0 interrupt priority level. |
PX0 | IP.0 | Define the External Interrupt 0 priority level. |
Interrupt inside Interrupt
O que acontece se o 8051 estiver executando uma ISR que pertence a uma interrupção e outra ficar ativa? Nesses casos, uma interrupção de alta prioridade pode interromper uma interrupção de baixa prioridade. Isto é conhecido como interrupção dentro de uma interrupção. No 8051, uma interrupção de baixa prioridade pode ser interrompida por uma interrupção de alta prioridade, mas não por qualquer outra interrupção de baixa prioridade.
Acionar uma interrupção por software
Há momentos em que precisamos testar uma ISR por meio de simulação. Isto pode ser feito com instruções simples para definir a interrupção em alta e assim fazer com que o 8051 salte para a tabela de vetores de interrupção. Por exemplo, defina o bit IE como 1 para o temporizador 1. Uma instrução SETB TF1 irá interromper o 8051 em qualquer coisa que estiver fazendo e forçá-lo a pular para a tabela vetorial de interrupção.
Deixe uma resposta