Relatório 5

Autor: Henrique dos Reis Soares

Objetivo

Executar o programa pisca LED a partir de projetos que o fazem de diferentes formas. Formas estas que são definidas a seguir.

Proj. 1. Utilizando o oscilador interno e espera de tempo usando laço simples com contador para gastar tempo de CPU e fazer o LED piscar.

Proj. 2. Laço simplies, como definido anteriormente, porém, utilizando o cristal externo do oscilador.

Proj. 3. Usando cristal externo e temporizador para esperar o tempo para piscar o LED.

Proj. 4. Usando cristal externo, temporizador e interrupção para piscar o LED.

Em todos os casos, utilizou-se o Processor Expert como ferramenta auxiliar para execução dos programas.

Proj. 3 - Programa Pisca-LED Módulo Timer

Primeiramente, foi desenvolvido um programa que faz o LED piscar utilizando como base o programa exemplo do CodeWarrior e um atraso (através de um loop do tipo 'for'), o qual pode ser visto no Relatório Complementar. U Um programa com a mesma finalidade utilizando o Módulo Timer (MTIM1), conforme foi relatado no relatório 4. Nas aulas 9 e 10, os programas desenvolvidos foram testados e seu funcionamento foi verificado na placa, com o auxílio do módulo BDM. O BDM é o responsável pela comunicação entre a placa e o CodeWarrior e, uma vez finalizada a montagem e os testes, ele foi utilizado pela primeira vez.

O código referente ao programa com temporizador MTIM encontra-se a seguir:

PTFDD = 0x80;    //Define porta F, pino 7 como saída
PTFD = 0;        //Zera o registrador de dados
MTIM1SC_TRST = 1;//Zera o contador do MTIM
For(;;){
    If(MTIM1SC_TOF == 1){
    PTB PTBD7 = ~PTBD PTBD7;
    MTIM1SC_TRST = 1;//Zera o contador do MTIM
    }
_RESET_WATCHDOG();
}/*Loop infinito*/

Proj. 4 - Programa Pisca-LED Módulo Timer e Interrupção

Uma vez que os programas desenvolvidos funcionaram, o próximo passo foi o desenvolvimento de um programa que fizesse o LED piscar utilizando o conceito de interrupção. Na janela do Processor Expert, inicializa-se o módulo MTIM como descrito no relatório 4 mas, desta vez, a opção "Interrupts" é habilitada. A janela do módulo MTIM no PE deve ficar conforme a figura abaixo.

/media/Attachments/courseEA079_1S2010/Mhen_5/PEinterrupt.JPG

Figure 1: Janela do módulo MTIM do Processor Expert.

Ao gerar esta configuração, ocorre o mesmo que já foi explicado no relatório anterior, com a diferença de que o vetor de interrupções recebe uma nova entrada, cujo nome é especificado pelo próprio usuário (vide figura 1 - nome escolhido: BARRA_LED). Além do vetor de interrupções, a função MTIM3.c apresenta uma região na qual deve ser escrita a rotina de interrupção. As duas situações estão ilustradas abaixo.

/media/Attachments/courseEA079_1S2010/Mhen_5/VetorInterrupt.JPG

Figure 2: Vetor de interrupções gerado na inicialização.

/media/Attachments/courseEA079_1S2010/Mhen_5/RotinaInterrupt.JPG

Figure 3: Rotina de interrupção desenvolvida.

O código presente na função main, no caso da utilização de interrupção, é reduzido para:

PTFDD = 0x80;    //Define porta F, pino 7 como saída
PTFD = 0;        //Zera o registrador de dados
MTIM1SC_TRST = 1;//Zera o contador do MTIM
for(;;){
_RESET_WATCHDOG();
}

Neste programa, toda vez que houver overflow no contador do módulo timer (a contagem "estourar"), uma interrupção é gerada e, quando esta é atendida pela CPU, é executada a rotina de tratamento de interrupção programada pelo usuário. No caso, a rotina é BARRA_LED. Toda vez que ocorrer a interrupção de overflow, portanto, o valor do pino conectado ao LED irá trocar seu valor lógico e o LED irá apagar ou acender. O prescaler e o módulo do contador foram escolhidos de maneira que o período de geração de interrupção fosse grande o suficiente para que se pudesse ver o LED piscando. No caso, o período escolhido foi de 500ms (calculado pelo Processor Expert).

Os itens 1 e 2 estão descritos em Relatório Complementar.

Referências

[1] MCF51CN128 ColdFire® Integrated Microcontroller Reference Manual, 12/2009.

[2] Relatório 4.