Manipulando Reset e Interrupção Jadsonlee da Silva Sá [email protected] www.univasf.edu.br/~jadsonlee.sa Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Reset e Interrupções Há 25 diferentes fontes de interrupção mais o reset. Essas interrupções e o vetor de reset possuem um vetor de programa separado no espaço da memória de programa. Cada vetor de programa ocupa duas posições da memória de programa. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções O fuse BOOTRST e o bit IVSEL de MCUCR indicam, respectivamente, o endereço do vetor de reset e o de início do vetor de interrupções interrupções.. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Registrador de Controle MCU Bits 1 e 0 Se IVSEL=0, os vetores de interrupção são colocados no início da memória flash. Se IVSEL = 1, os vetores de interrupção são movidos para o início da seção boot loader da flash. O endereço atual do início da seção boot flash é determinado pelos fuses BOOTSZ. Para evitar mudanças não intencionais da tabela do vetores de interrupções, um procedimento especial de escrita deve ser seguido para mudar o bit IVSEL. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Registrador de Controle MCU Passo 1: Faça IVCE = 1. Passo 2: Dentro dos próximos 4 ciclos de clock, escreva o valor desejado em IVSEL e faça IVCE=0 . As interrupções são automaticamente desabilitadas durante essa sequência. Assim que IVSEL for escrito, as interrupções são habilitadas, caso contrário, elas ficam desabilitadas por 4 ciclos de clock. O bit I não é afetado. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Registrador de Controle MCU Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Vetores de Interrupção – ATmega328P Configuração mais geral para os endereços do reset e vetor de interrupção. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Vetores de Interrupção – ATmega328P Quando o fuse BOOTRST não for programado, o tamanho da seção de boot é setado para 2 Kbytes e o bit IVSEL de MCUCR é setado antes de qualquer interrupção ser habilitada. A configuração de programa mais geral para os endereços de reset e vetor de interrupção são: Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Vetores de Interrupção – ATmega328P Quando o fuse BOOTRST for programado e o tamanho da seção de boot for setado para 2 Kbytes, a configuração de programa mais geral para os endereços de reset e vetor de interrupção são: Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Vetores de Interrupção – ATmega328P Quando o fuse BOOTRST for programado, o tamanho da seção de boot for setado para 2 Kbytes e IVSEL de MCUCR for setado antes de alguma interrupção ser habilitada, a configuração de programa mais geral para os endereços de reset e vetor de interrupção são: Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Todas as interrupções possuem bits separados que devem ser setados ‘1’ juntamente com o bit I de STATUS, que habilita a interrupção global, de modo a habilitar a interrupção. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Possuem níveis de prioridade determinadas: quanto menor o endereço, maior é a prioridade. Reset possui a maior prioridade, em seguida, INT0 (External Interrupt Request 0), e assim por diante. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Quando uma interrupção ocorre, o bit I é zerado e todas as interrupções são desabilitadas. – O software do usuário pode fazer I=1 para habilitar interrupções aninhadas. Então, todas as interrupções habilitadas podem interromper a rotina da interrupção atual. O bit I é automaticamente setado quando a instrução RETI for executada. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Há dois tipos de interrupção: – Gatilhada por um evento que seta o flag de interrupção; – Gatilha a interrupção assim que ocorrer a condição. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções 1º tipo: PC é carregado com o endereço do vetor da interrupção atual, de modo a executar a rotina de manipulação de interrupção, e o hardware zera o flag de interrupção correspondente. – Os flags de interrupção podem ser zerados escrevendo ‘1’ no bit correspondente. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções 2º tipo: não necessariamente possuem flags de interrupção. Se a condição de interrupção desaparecer antes da interrupção ser habilitada, ela não será gatilhada. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Quando o AVR sai de uma interrupção, ele sempre retorna ao programa principal e executa uma ou mais instruções antes de uma interrupção pendente ser servida. STATUS não é automaticamente armazenado quando uma rotina de interrupção for servida, e nem restaurado quando retorna da interrupção. Isso deve ser feito por software. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Instrução CLI - As interrupções são imediatamente desabilitadas quando CLI (desabilita interrupções) for executada. Nenhuma interrupção será executada após CLI, mesmo se ela ocorrer simultaneamente com a execução de CLI. Instrução SEI – Após a execução de SEI (habilita interrupções), a instrução seguinte será executada antes de qualquer interrupção pendente. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções O tempo de resposta da interrupção para todas as interrupções AVR habilitadas é de pelo menos quatro ciclos de clock. Após quatro ciclos de clock, o endereço do vetor de programa para a atual rotina de manipulação de interrupção será executado. Durante os quatro ciclos de clock, PC é colocado na pilha. O vetor é normalmente um salto para a rotina de interrupção, e esse salto gasta três ciclos de clock. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Se uma interrupção ocorrer durante uma instrução multiciclo, essa instrução será finalizada antes da interrupção ser servida. Se uma interrupção ocorrer quando o uC estiver no modo sleep, o tempo de resposta será aumentado por quatro ciclos de clock, devido o tempo de startup time do modo sleep selecionado. O retorno de uma rotina de interrupção dura quatro ciclos de clock. Nesse tempo, PC (dois bytes) é restaurado da pilha, SP é incrementado por dois, e o bit I é setado. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Interrupções Exemplo de código – Timer 0 no modo normal. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP