Microprocessadores 1º Ano - LECOM

Propaganda
Microprocessadores
1º Ano - LECOM
Universidade do Minho
Dept. De Electrónica Industrial
1
Interrupções: Motivação
• Pretende-se desenvolver um sistema que sintetize uma
onda quadrada com um frequência de 100 KHz e que
conte o número de eventos externos. Os eventos
externos ocorrem sob a forma de transições negativas no
pino 4 do porto A.
• A solução do problema acima descrito poderia ser:
...
loop
call
call
goto
...
gerarPeriodo
contarEvento
loop
1
Interrupções: Motivação
...
loop
call
call
goto
...
gerarPeriodo
contarEvento
loop
• No problema anterior, temos dispositivos que estão a
executar comportamento concorrentemente com o
programa.
9
Timer: geração da onda quadrada.
9
Porto: que é actuado por um processo externo.
9
Mas poderíamos ainda ter o watchdog timer ou ainda a escrita na
EEPROM.
Interrupções: Motivação
• Estes dispositivos ao terminar indicam o fim da tarefa pela
activação de um bit num registo. Por exemplo, no caso do
timer é o bit T0IF no registo INTCON.
• Chamamos de polling à estratégia de periodicamente
testar o bit de status dos dispositivos para verificar o fim
da sua tarefa.
2
Interrupções: Motivação
• Problemas encontrados na solução anterior baseada em
polling:
9
Na solução anterior, teríamos que compensar o atraso da rotina
‘contarEvento’ no cálculo do valor a utilizar na temporização.
9
O valor a usar para o tempo variará consoante houve ou não uma
transição no pino de entrada.
9
O que significa que este valor deve ser inicializado na rotina
‘contarEvento’, embora seja usado na rotina ‘gerarOnda’; ou seja,
estamos a criar uma dependência de dados entre as duas rotinas, o
que pode introduzir bugs subtis.
...
loop
call
call
goto
...
gerarPeriodo
contarEvento
loop
Interrupções: Motivação
9
Imagine que pretendíamos introduzir mais uma
operação, por exemplo, zerar o contador e activar uma
saída quando o número de eventos externos
ultrapassa certo limite.
...
loop
call
call
call
goto
...
gerarPeriodo
contarEvento
processarContagemDeEventos
loop
3
Interrupções: Motivação
...
loop
call
call
call
goto
...
9
gerarPeriodo
contarEvento
processarContagemDeEventos
loop
Consequências da alteração:
9
Teríamos que recalcular o tempo da onda quadrada, sendo
que existe um limite para o qual não será possível compensar.
9
Como na implementação das rotinas ‘contarEvento’ e
‘processarContagemDeEventos’ existem diferentes caminhos
será cada vez mais difícil calcular o valor a usar na
temporização.
Interrupções: Motivação
• Podemos concluir que a solução baseada em
polling não é indicada quando existem
temporizações que temos que obedecer para que
o comportamento da nossa aplicação seja
correcto.
4
Interrupções: O que são ?
• Como definiria interrupção ?
9
Sinal gerado por um dispositivo e enviado ao CPU.
9
Este sinal indica ao CPU a ocorrência de um evento
externo.
9
9
Por exemplo, overflow do timer ou ainda a mudança de estado
num pino do porto.
O CPU executa uma ISR (interrupt service routine),
que efectua acções específicas em resposta à
interrupção.
Interrupções: O que são ?
• As interrupções provocam uma transferência de
execução para um endereço conhecido onde
reside uma rotina de serviço à interrupção (ISR).
9
Ao executar uma ISR, o CPU coloca o endereço de
retorno na pilha.
9
Ao concluir a execução da ISR, a instrução de retorno
actualiza o PC (IP) com o endereço de retorno
presente na pilha.
5
Interrupções: O que são ?
• No caso do PIC:
9
A ISR deve terminar necessariamente com a execução
da instrução ‘retfie’.
9
Portanto a estrutura de uma ISR será a seguinte:
entradaDaISR
; ... Implementação da ISR
...
retfie
A instrução ‘retfie’ é
responsável por colocar
o endereço de retorno
que está guardado no
topo da pilha no registo
PC e por habilitar as
interrupções
Interrupções: O que são ?
6
Interrupções: O que são ?
• Interrupção versus Polling
Vantagens do Polling
Vantagens da Interrupção
• Utiliza poucos recursos de Hw, e
como tal é fácil de implementar
•
Não desperdiça tempo de
execução na verificação
contínua do estado dos
dispositivos
•
O atendimento aos dispositivos
pode ser imediato, fornecendo
por isso capacidade de resposta
em tempo-real
• A execução está sincronizada com
a execução do programa, o
programador sabe exactamente
quando é verificado o estado do
dispositivo e quanto tempo será
necessário para servi-lo.
•
Não será necessário um sistema
automático para salvaguardar o
estado do processador
• Não requer atenção à gestão da
pilha
Interrupções: O que são ?
• Interrupção versus Polling
Desvantagens do Polling
Desvantagens da Interrupção
• Desperdiça tempo de execução,
reduzindo por isso tempo
disponível às outras actividades
• Requer Hw extra e complexo.
• Os dispositivos não podem ser
atendidos de forma instantânea,
tornando-se às vezes necessário
mais recursos de armazenamento
•
Dispositivos menos prioritários
podem nunca ser atendidos
• Introduz um overhead sempre que
um dispositivo interrompe a
execução do programa.
• A execução da ISR é assíncrona
relativamente à execução do
programa, dificultando a estimação
da temporização da interrupção.
• A gestão de um número excessivo
de interrupções pode tornar o
sistema lento, podendo mesmo
bloqueá-lo.
7
Interrupções: O que são ?
• As interrupções podem ser mascaradas ou
desactivadas.
9
O CPU recebe informação para ignorar as interrupções.
9
A maioria dos processadores apresenta uma instrução que
informa o CPU para ignorar todas as interrupções
“macaráveis”.
9
9
Designado por desactivação das interrupções.
O controlador de interrupções normalmente fornece
facilidades para desactivar interrupções individualmente.
Interrupções: O que são ?
• No caso do PIC:
9
Temos as seguintes fontes de interrupções:
9 Interrupção
9 Timer
0.
9 Transição
9 Fim
externa RB0/INT.
de estado no porto B (RB7:RB4).
de escrita de um dado na EEPROM.
8
Interrupções: O que são ?
• No caso do PIC:
9
As interrupções são controladas pelo registo INTCON
bit 3
Estes bits permitem activar
ou desactivas cada uma das
fontes de interrupção.
A terminação indica:
XXIE – ‘interrupt enable’
Interrupções: O que são ?
• No caso do PIC:
9
O status das interrupções são consultados no registo
INTCON
bit 2
Estes bits permitem identificar qual foi a fonte de
interrupção, ou seja, quem provocou a interrupção
(timer, interrupção externa, ...)
9
Interrupções: O que são ?
9
Mas onde encontramos o status associado a
interrupção de fim da escrita de EEPROM ?
9 Este
se encontra no registo EECON1.
bit 4
Interrupções: O que são ?
• Quando se deve desactivar as interrupções?
9
Quando estamos a executar uma actividade que não
deve ser interrompida, ou seja, quando a actividade
deve ser considerada como atómica.
10
Interrupções: O que são ?
• Como é que o CPU sabe qual a ISR a executar
aquando da ocorrência de uma interrupção?
9
Cada interrupção tem associado um número de
identificação.
9
O CPU usa este número de interrupção para consultar
a tabela de vectores de interrupção e obter o endereço
da ISR correcta.
9
A tabela de vectores é uma colecção de apontadores para as ISRs.
9
O número da interrupção serve de índice na tabela de vectores de
interrupção.
9
Cada entrada da tabela de vectores de interrupção tem um número
fixo de bytes que é suficientemente grande para armazenar um
endereço de memória.
Interrupções: O que são ?
• O que acontece logo no início da ocorrência de
uma interrupção?
Programa em
execução
Ocorrência de
Interrupção
¥
Memória de código
¥
instr n-1
PC
instr n
Registo de flags
Outros
instr n+1
¥
¥
Registos
ISR
Pilha
PC
Tabela de
vectores de
interrupção
11
Interrupções: O que são ?
Programa em
execução
Ocorrência de
Interrupção
¥
¥
instr n-1
PC
instr n
Registo de flags
Outros
instr n+1
• Uma interrupção é
desencadeada durante a
execução da instrução n.
• O sistema concluí a
execução da instrução n.
¥
¥
Registos
ISR
Pilha
• Como resposta, o sistema
salvaguarda o PC actual e
o registo das flags na
pilha.
Tabela de
vectores de
interrupção
PC
Interrupções: O que são ?
Programa em
execução
Ocorrência de
Interrupção
¥
¥
instr n-1
PC
instr n
Registo de flags
Outros
instr n+1
¥
ISR
PC
• O sistema concluí a
execução da instrução n.
¥
Registos
Pilha
• Uma interrupção é
desencadeada durante a
execução da instrução n.
• Como resposta, o sistema
salvaguarda o PC actual e
o registo das flags na
pilha.
Tabela de
vectores de
interrupção
12
Interrupções: O que são ?
Programa em
execução
Interrupção
¥
¥
A tabela de vectores é uma
colecção de apontadores
para as ISRs.
instr n-1
instr n
instr n+1
¥
¥
ISR
Pilha
• O número de interrupção
serve de índice na tabela de
vectores de interrupção
• Cada apontador
corresponde a um número
de interrupção.
Tabela de
Registo de flags
vectores de
interrupção
PC
Interrupções: O que são ?
Programa em
execução
Interrupção
¥
¥
instr n-1
instr n
instr n+1
¥
¥
• Alguns processadores usam
uma tabela de saltos em vez
da tabela de vectores de
interrupção.
• Cada entrada na tabela
deve ser capaz de
armazenar uma instrução de
salto.
ISR
Pilha
Registo de flags
PC
Tabela de
vectores de
interrupção
• O processador salta para
uma entrada da tabela e
literalmente será
redireccionado para a ISR
dado que a entrada é uma
instrução de salto.
13
Interrupções: O que são ?
Programa em
execução
Interrupção
¥
¥
instr n-1
instr n
PC
instr n+1
• Ao concluir a execução, a
ISR restaura da pilha os
registos que o programa
interrompido usava
¥
Registo de flags
• Restaura também o registo
PC
¥
Outros
Registos
ISR
Tabela de
Pilha
• Esta última operação
devolve o controlo ao
programa interrompido
vectores de
interrupção
Interrupções: O que são ?
• No PIC
9
O processamento das interrupções do PIC é bastante
elementar.
9
A tabela de vectores do PIC tem apenas uma entrada no
endereço 0x0004. Nesta entrada deve estar o código da
ISR ou uma instrução de ‘goto’ para a ISR.
14
Interrupções: O que são ?
9
Mas se o PIC apenas tem uma entrada na tabela de
vectores como é possível distinguir qual é a fonte de
interrupção (Timer, entradas dos portos, ...) ?
9
Como todas as interrupções do PIC partilham o mesmo
vector de interrupção, o programador terá que na entrada
da ISR testar os bits de status (INTCON e EECON2) para
determinar quem causou a interrupção.
Interrupções: O que são ?
9
O mapa da memória de código do PIC será então:
org 0x000
goto
main
org 0x004
goto
myISR
myISR
...
retfie
main
...
END
15
Interrupções: O que são ?
• Quando se deve desactivar determinada interrupção em vez de desactivar todas as
interrupções ?
9
Deve-se mascarar uma interrupção caso não seja usada,
evitando deste modo a possibilidade de ocorrência de falsas
interrupções .
9
9
A maioria das aplicações desactivam todas as interrupções que não
estejam em uso durante a inicialização.
Uma ISR deve mascarar a sua própria interrupção para
impedir a reentrância, activando-a posteriormente ao
concluir o processamento.
9
Tem a vantagem de desactivar apenas uma determinada interrupção,
enquanto permite que outras interrupções possam ser processadas.
Interrupções: O que são ?
• No PIC
9
Em geral sabemos que: “Uma ISR deve mascarar a
sua própria interrupção para impedir a reentrância,
activando-a posteriormente ao concluir o
processamento”.
9
Contudo:
9
No PIC não é necessário desactivar a interrupção, porque por
defeito o PIC desactiva todas as interrupções ao passar o
controlo à ISR, voltando a realbilitá-las quando a instrução
retfie é executada.
16
Interrupções: O que são ?
• O que se entende por estado do CPU?
9
9
Na maioria dos processadores, o estado do CPU é
constituído pelos registos genéricos e pelas flags do
processador
9
Normalmente, as flags do processador são salvaguardadas na
pilha juntamente com o endereço de retorno ao código
interrompido
9
A instrução retorno-da-interrupção executada no final da ISR
restaura automaticamente as flags e transfere o controlo à
aplicação interrompida
Ao seleccionar um processador deve-se compreender o que
constituí o estado do CPU, bem como se as ISRs devem
preservar algo para além dos registos genéricos
Interrupções: O que são ?
• No caso do PIC:
9
O estado do processador compreenderá o registo de
STATUS, o registo W e o registo FSR (caso a ISR use o
modo de endereçamento indirecto).
9
Uma vez que não existe instruções de push e pop não é
possível usar a stack para guardar dados, então o estado
do processador deve ser armazenado na memória interna
do processador.
9
Por ex.,
movwf
movf
movwf
movf
movwf
wTemp
STATUS, W
statusTemp
FSR, W
fsrTemp
; guarda W
; guarda STATUS
; guarda FSR
17
Interrupções: O que são ?
9
Na saída da ISR, o estado inicial do processador deve ser
reposto.
9
Por ex.,
movf
movwf
movf
movwf
movf
fsrTemp, W
FSR
statusTemp, W
STATUS
wTemp, W
; restaura valor de FSR
; restaura valor de STATUS
; restaura valor de W
Interrupções: O que são ?
• Porque é que uma ISR deve preservar o estado
do CPU ?
9
Se não preservar o estado do CPU, quando a ISR termina a
execução e devolve o controlo à aplicação interrompida,
esta encontrará valores diferentes nos registos.
9
Repare que a aplicação não tem conhecimento de que foi
interrompida.
9
Em tais casos, a depuração da aplicação é difícil, porque o
sistema começará a “crashar” de forma estranha e de difícil
reprodução – o cenário resultante do crash será único
9
Notar que cada vez que a ISR é executada e corrompe os
registos, uma secção diferente do código da aplicação estará em
execução
18
Interrupções: Exemplo
• Problema.
9
Sabendo que dispõe de um sistema com um
microcontrolador PIC 16F84A com um cristal
de 4 MHz, escreva um programa para gerar
uma onda quadrada com uma frequência de
10 KHz.
19
Download