MSP 430 – Interrupções


As interrupções são recursos importantes para o desenvolvimento em sistemas microcontrolados. Através delas obtemos maior precisão e confiabilidade em determinadas tarefas a serem executadas. Elas são prioridade em nosso sistema, e desta forma, a CPU trata de executá-la assim que for chamada, deixando o restante do código na fila.

 

A interrupção pode vir de uma fonte externa ou interna. Ao ocorrer a interrupção, o sistema salva o estado atual das instruções e variáveis, e o PC (Program Counter) será setado para o vetor de interrupção, que basicamente é um endereço de memória pré-definido.

 

Existem diferentes tipos de interrupção que veremos no decorrer dos artigos. Outra informação importante, é que no datasheet temos uma tabela que define as prioridades das interrupções. Assim se duas interrupções ocorrem ao mesmo tempo, a que ocorrerá primeiro será aquela com maior prioridade. Observe que a interrupção por reset detém a maior prioridade dentre as interrupções.

 

Interrupcoes msp430

Figura 1 – Interrupções MSP 430

 

Neste contexto temos um fator importante que atua em conjunto com as interrupções, as flags. Ela pode ser compreendida como um bit do registrador. Quando ocorre uma interrupção, uma flag específica dessa interrupção é setada. Assim cada interrupção trabalha como uma determinada flag. Você pode verificá-las na tabela anterior.

 

Quando uma interrupção ocorre, é chamada uma rotina, também conhecida como ISR, ou Interrupt Service Routine. Dentro desta rotina de interrupção é que desenvolveremos nosso código a ser executado. E devemos lembrar também de limpar a flag específica ao final da interrupção.

 

Vetor de Interrupção

 

Basicamente cada interrupção é definida através de um vetor de interrupção. Observe na figura abaixo, a relação entre a fonte de interrupção e o seu específico vetor. Essas informações se farão necessárias na hora de você efetuar a programação, pois teremos que indicar com qual vetor de interrupção estaremos trabalhando. Abaixo temos alguns vetores de interrupção que podemos utilizar.

 

VetorInterrupcao

Figura 2 – Vetores de Interrupção MSP430

 

Registradores

 

Vamos verificar agora alguns dos registradores relacionadas as interrupções:

PxIE = Interrupt Enable Register. Aqui vamos habilitar a interrupção para um pino específico de uma determinada porta.

PxIES = Interrupt Edge Select Register. É utilizando para definir se a interrupção será por borda de descida ou borda de subida.

PxIFG = Interrupt Flag Register. Registrador utilizado para verificar a condição da interrupção. Quando a interrupção ocorre, a flag é setada.

 

Código

 

O nosso exemplo acenderá um led quando pressionada a chave. Muito parecido com este artigo anterior em que trabalhamos com entradas. Porém agora estamos fazendo isso através das interrupções.

 

 

Observe que além das configurações tradicionais, temos agora a configuração do vetor de interrupção, conforme a tabela anterior. E posteriormente temos a rotina de interrupção, que é onde estará a ação a ser executada.

 

Prática

 

Acompanhe no vídeo abaixo, o teste prático deste artigo.

 

Inscreva-se para ficar atualizado!

Inscreva-se agora e fique por dentro das novidades do site

Fique tranquilo, respeitamos sua privacidade!

Deixe um comentário

O seu endereço de e-mail não será publicado.