Roteiro 3 EA870 2S2009

De DCA-Wiki

Contents

Roteiro 3 - Sistema de desenvolvimento, Placa MCF52221, assembly e execução

  • Continuação da programação em assembly
  • Edição de programas
  • Portas IO e delays

Agradecimento

O desenvolvimento deste roteiro teve a grata contribuição Pedro Augusto (okaitt@gmail.com) e Guilherme A. Zalewski (buzzag@gmail.com).

Introdução

O objetivo desta experiência é aprofundar mais o conhecimento do software do microcontrolador ColdFire MCF52 - CM5, para dar suporte e torná-lo mais familiar ao usuário da disciplina. É visto o editor de textos CodeWarrior, o compilador C e C++ . Adicionalmente, é visto, também, a necessidade de pré-processar e pré-compilar programas, escritos em linguagem de fonte diferentes, antes mesmo que sejam compilados, como exemplo, na própria liguagem fonte de montagem - assembly language. O ColdFire system sendo o programa browser, que estabelece a comunicação entre usuário (PC) e microcontrolador torna-se importante aprofundar o conhecimento de sua Barra de Ferramentas. O CodeWarrior Studio, ambiente de apoio às aplicações externas, dá suporte à criação, preprocessamento, compilação, carregamento, debugger e execução de projeto (programa do usuário) /4, 5 e 6/.

Recomenda-se, para maior facilidade e tornar mais familiar a programação na placa MCF52221, a leitura do manual Referência rápida para o MCF52221 /20/, constante na lista de referências de Manuais Feitos na FEEC.

Questões de Estudo

Responder às questões abaixo para estudo. Os textos de referência para este estudo estão listados na Seção de Referências.

  • 1. Defina compilador e montador, e explique a diferença entre os dois/100/.
  • 2. Indique se é possível escrever um dado armazenado em memória diretamente num outro endereço de memória no MCF52221DEMO. Caso contrario indique um modo para realizar tal operação.
  • 3. O MCF52 ColdFire e o ambiente de desenvolvimento Cold Warrior oferecem suporte a depuração (debug - é importante que se estude o Capítulo de DEBUG na ref - 6)? Como isso é feito?
  • 4. Defina instruções do tipo "branch" dando exemplos, e indique qual o modo de endereçamento associado a tal tipo de instrução?
  • 5. Explique como é feita a comparação entre dois valores na instrução assembly CMP? e CMPI? /2/
  • 6. Explique como pode ser visto e alterar valores nos registradores (Dados e Endereços) através do ColdWarrior do MCF52.
  • 7. Como se introduz/retira o Breakpoint em um programa? Exemplifique.
  • 8. É possível alterar posições de memória em runtime?? Se sim explique. Para isto é importante que se estude os Capítulos de DEBUG e Memory na ref - 6.

Roteiro da Aula

Nesta experiência iremos criar e executar o programa LEDS/main.c que está codificado em assembly language do ColdFire MCF52.

- Programa LEDS/main.c

#include "support_common.h" /* include peripheral declarations and more */
#include <stdio.h>

#define DDRTC   0x40100027
#define PORTTC  0x4010000F

int main(){
  asm
  {	
         move.b #0x0f,D3   //Configura 4 bits da porta TC para funcionar como saída
         move.b D3, DDRTC
         movea #PORTTC,A1  //Coloca no reg de endereço A1 o end de onde se coloca 
                           // informação na saída

 INICIO: move #8,D1        //Inicia contador de ciclos (igual a número de dados do vetor)
         move #0,D7

 CICLO:  move.b D7,(A1)      //Coloca 8bits na portTC, definida como a de saída
         move #0x000fffff,D0 //Em D0 def o "Intervalo de Tempo" entre as informações
                                      // no loop	 		

 WAIT:   sub  #1,D0        //Loop de delay, vai sub de D0 ate que mude de sinal. Este 
                           //loop é para dar tempo de que podemos ver a luz piscar 
         bne  WAIT	
         cmpi #4,D1      //Verifique e explique se é hora de acender ou apagar os LEDs
         bgt  ACENDE	

         lsl  #1,D7        //shift left
         bra  CONT		

 ACENDE: lsl  #1,D7	   //shift left
         or   #0x01,D7     //Primeiro bit em "1"	

 CONT:   sub  #1,D1        // subtrai ciclo
         bne  CICLO        // Se total de ciclos passados = número de dados do vetor,
                           // começa tudo de novo				
         bra  INICIO       // Inicia o processo do proximo dado na saída
 }
}
  • Crie um novo projeto no CodeWarrior e utilize o código acima como código principal (main).
  • Utilizando o esquemático de nossa placa auxiliar, busque entender exatamente o que o código faz.

Relatório

Entregar as questões abaixo na forma de relatório

  • 1. Faça um diagrama de bloco do processo de edição do programa assembly até a sua execução na memória do CMF52.
  • 2. Faça um diagrama de blocos do programa LEDS/main.c, procurando entendê-lo.
  • 3. Após entendido o programa nos seguintes aspectos:
    • Movimento de dados e endereços nos registradores: An e Dn;
    • Cada instrução, em seu específico modo de endereçamento, tem um certo número de ciclo de execução. Faça as devidas conversões de unidade de tempo: Hz para seg e calcule em ns (nanoseg) o tempo gasto no loop de espera na instrução de subtração. O cálculo deste tempo, a partir de cada ciclo, é o tempo em que o LED fica aceso ou apagado;
    • Sugira e faça uma outra programação (menos luzitana) para este loop de espera.
    • O movimento (move...) de cada destes valores nos respectivos registradores;
    • Faça e ilustre com resultados intermediários a execução passo a passo /6/.
  • 4. Implemente um programa, em assembly language, com quatro ciclos de acende-apaga, onde:
    • No ciclo 1 o LED1 acenda apenas uma(1) vez;
    • No ciclo 2 o LED2 acenda duas (2) vezes;
    • No ciclo 3 o LED3 acenda três (3) vezes;
    • No ciclo 4 o LED4 acenda quatro (4) vezes;
    • No ciclo 1 o LED1 ..........
  • 5. Faça com que haja a leitura de dados da memória no programa, de modo que, o período (de duração do LED aceso ou apagado) seja um dado definido na posição de memória 0x20000100.
  • 6. Mude o valor da memoria (período) através do comando change no Command Window enquanto seu programa estiver rodando e observe.
  • 7. Faça um diagrama de blocos do programa LEDS/main.c modificado.


  • Observação: Pede-se, por gentileza aos alunos que, quando for editar programas e criar projetos, sempre, mas sempre mesmo edite-os em alguma subpasta criada por voce (denomine-a com seu nome/RA/apelido) porém, que seja dentro da pasta: EA870Alunos. Veja dicas para isto em /6, 12, 20/.

- Referências

Ferramentas pessoais