Camilo&Quevedo:Espaco

De DCA-Wiki

Professor, este é o roteiro com as questòes adicionadas por mim e pelo Antônio no item roteiro de estudos.

Att. Guilherme.

==



==


Contents

Roteiro 1 - Micro-controlador ColdFire MCF5221

  • Introdução a sua arquitetura e linguagem de montagem
  • Interface de Comandos

1.1 - Instruções Gerais sobre a disciplina EA870

Os roteiros de todas as aulas podem ser encontrados na wiki da disciplina, que pode pode ser acessada a partir do seguinte endereço:

http://calhau.dca.fee.unicamp.br/wiki/index.php/Curso_de_EA870_1S2008

O roteiro da 1a. aula está sendo distribuído aos alunos em formato papel, por ser o primeiro contato com a disciplina. A partir dos próximos experimentos, os alunos devem providenciar uma cópia do roteiro previamente à aula, a partir da wiki.

ATENÇÃO: A partir da 2a aula, o professor não distribuirá mais o roteiro impresso, a obtenção do mesmo de responsabilidade do aluno.

1.2 - Introdução ao Experimento de Hoje

O objetivo deste laboratório é introduzir as características básicas do micro-controlador ColdFire MCF5221, com ênfase em sua arquitetura, organização, linguagem de máquina e montagem. Este roteiro está organizado nas seguintes seções:

  • Seção 1.2.1 – Roteiro de Estudos: Série de perguntas elaboradas, que servem de guia para o aprendizado do conteúdo julgado essencial à realização da experiência. Observe que,não é necessário a entrega desta série de exercício. Sobretudo, (cuidado)estas mesmas questões podem fazer parte tanto nas provas como nos testes feitos com ajuda do programa PHPTEST.
  • Seção 1.2.2 – Recomendações à confecção do relatório: Apresenta as recomendações que devem ser seguidas para apresentação dos relatórios referentes aos experimentos realizados.
  • Seção 1.2.3 – Exercícios: conjunto de exercícios que devem ser respondidos e entregues em forma de relatório.
  • Seção 1.2.4 – Referências: lista de referências que devem ser consultadas à realização do estudo e tarefas associadas aos roteiros.

1.2.1 - Roteiro de Estudos

A lista de questões a seguir é uma seqüência sugerida para o estudo do micro-controlador ColdFire MCF52221. É imprescindível o entendimento do conteúdo deste estudo, então associado à experiência. Respondendo a estas questões capacitará você a trabalhar os conceitos e informações básicas associadas às atividades a serem desenvolvidas. Repetimos, não é necessário a entrega das respostas deste e de todos os demais Roteiros de Estudos. Os textos, manuais e demais referências estão listados na Seção 1.2.4.

  • 1. Defina linguagem de máquina. Exemplifique usando a linguagem assembly do ColdFire MCF52221.
  • 2. Defina linguagem simbólica. Dê um exemplo. Como usualmente se denominam a linguagem simbólica e o seu tradutor?
  • 3. O que é: ciclo de máquina, ciclo de barramento (bus cycle) e ciclo de instrução?
  • 4. O que é pipeline? O ColdFire MCF52221 faz uso dessa tecnologia?
  • 5. Mostre a organização básica do processador ColdFire Versão 2 (V2) MCF5221, ilustrando com diagramas e explicações os módulos internos: Núcleo Pipeline, Registradores de propósitos gerais para dados e endereços, PC, CCR, ColdFire UMAC, SSP e VBR./3/ vide cap. 3, 4 e 5.
  • 6. Quais os registradores de dados, e qual a utilidade de cada um deles?
  • 7. Qual é o número de bits de endereçamento e o tamanho da palavra (número de bits do conteúdo das posições de memória) do Freescale MCF52221? /2/ veja cap. 1 e 2.
  • 8. Como você classifica o Freescale MCF52221 ColdFire: máquina de 1, 2, 3 endereços ou não se insere neste contexto?
  • 9. Quais são os bits de condição (flags) da UAL do Freescale MCF52221 ColdFire? Qual é a utilidade de cada bit de condição (flag)? /2/ cap. 1
  • 10. Quais são os modos de endereçamento do Freescale MCF52221 ColdFire? /2/ Como eles se encaixam na classificação apresentada na referência /1/?
  • 11. O que é endereço efetivo de uma instrução? Exemplifique. O <ea> pode ser completamente definido pelo código de máquina da instrução? Dê um exemplo. /2/
  • 12. Dê um exemplo de cada modo de endereçamento usando instruções do MCF52221 ColdFire. Qual é a simbologia utilizada pelo fabricante para indicar o modo de endereçamento imediato? /2/ (dica: veja <ea> na tabela 2.3)
  • 13. Explique como cada uma das formas de endereçamento, mostradas na questão anterior, classificam-se de acordo com a referência /1/?
  • 14. Dê um exemplo de instrução com endereçamento absoluto longo (Absolute Data Addressing - Long) e um exemplo com endereçamento absoluto curto (Absolute Data Addressing - Short).
  • 15. Quais são os registradores que podem ser utilizados para índice no MCF52221 ColdFire no modo de endereçamento relativo (ou indexado)?
  • 16. Para quais representações numéricas o MCF52221 ColdFire tem suporte nativo de instruções?
  • 17. Quais são as representações possíveis do número zero no MCF52221 ColdFire em ponto flutuante?E do infinito?
  • 18. Qual o registrador de flags do MAC e qual a utilidade de cada um dos bits desse registrador?
  • 19. Descreva passo a passo como se cria um projeto MCF52221 ColdFire (Compile,....). /6/
  • 20. O MCF52221 ColdFire suporta e implementa o conceito de pilha? Caso suporte, como é feita a manipulação?
  • 21. Defina e exemplifique os seguintes comandos: mem, change, reg, display, status, kill, connect, exit, cls, history, restart, stop, reset, next, go. /4/
  • 22. O que acontece quando se tenta modificar o conteúdo da Flash memory (CFM) pelo comando mem?
  • 23. O MCF52221 ColdFire e o ambiente de desenvolvimento Cold Warrior oferecem suporte a depuração (debug)? Como isso é feito?

1.2.2 - Recomendações para a confecção do relatório

Para facilitar o processo de correção e reforçar a necessidade profissional de procurar sempre produzir material claro e organizado, principalmente quando estes serão apresentados a outros, segue um conjunto de observações que devem ser atendidas na confecção dos relatórios desta disciplina. A não observação destas recomendações acarretará uma redução da nota a ser atribuída ao relatório.

  • Apresentar no início do relatório: A atividade a que se refere o relatório; o professor e a turma; nome(s) e RA(s) do(s) autor(es) do relatório;

Exemplo:


EA-870 Laboratório de Computação
Relatório 1 – dd/mm/aaaa
Autor:Beltrano de Tal RA YYYYYY Turma:


  • Apresentar o relatório em folhas de mesmo tamanho, grampeadas e numeradas em seqüência. Retirar eventuais picotes e rebarbas das folhas. As listagens dos programas devem ser apresentadas em anexos grampeados ao relatório. Identificar os anexos e numerar a folhas. Para as listagens, utilizar preferencialmente o papel de 80 colunas disponível no laboratório – destacar o picote e retirar os furos guia. Observar que mesmo grampeado o relatório deve permitir a leitura de todos os detalhes de seu conteúdo.
  • Identificar claramente os exercícios e suas repostas (não é necessário copiar o enunciado). Identificar claramente as respostas associadas a itens e subitens. Caso a solução seja um programa, indicar no corpo do relatório o anexo que contém a listagem do programa. É importante que os anexos também estejam identificados e numerados. Apresentar as respostas na mesma ordem em que os exercícios foram propostos.
  • O relatório deve ser datilografado/digitado e impresso. É proibido apresentar fluxogramas ou qualquer que seja a descrição feita à mão.

1.2.3 - Exercícios

  • (Veja na página da disciplina, na opção calendário a data referente à entrega de cada relatório).
  • Em certos exercícios a seguir considere o RA: abcdef, onde, cada letra corresponde ao respectivo dígito de seu RA.
  • OBSERVAÇÃO: Ao longo da disciplina, utilizaremos várias ferramentas (depurador, montador, compilador) que, infelizmente, apresentam diferentes sintaxes para a representação de números. É importante observar e ter presente qual a sintaxe particular utilizada por uma determinada ferramenta. No contexto deste roteiro, tomando o número 10 como exemplo, a seguinte convenção é utilizada: 10 (representa um número decimal – o valor dez em decimal); $10 (um número hexadecimal – valor dezesseis em decimal); %10 (representa um número binário – valor dois em decimal).
  • 1. Defina e explique cada um dos modos de endereçamentos suportado pelo ColdFire MCF52221. Na explicação de cada modo, apresente exemplo de uma instrução que a utilize.
  • 2. Ilustre o tamanho (número de bits e bytes) e a função de cada registrador (de armazenamento temporário e propósito geral para dados e endereços. Qual é o registrador que especifica o endereço de operando, ou seja, aponta para a próxima instrução. Explique como o <ea> é calculado e entra neste registrador.
  • 3. Para cada instrução isoladamente, a seguir, dê o endereço efetivo <ea> do operando que recebe o resultado, então entrado no PC.
       a. MOVE D1,0x20001cdE
       b. ADDI #0x01100cfa,D5
       c. AND D3,(A1)
       d. MOVE #0x20100cef,A1
       e. OR D2,A7
        Obs.: o prefixo “0x” antes de um valor significa que o mesmo está sendo representado em hexadecimal.
  • 4. Considere as instruções que se seguem:
 Considere o registrador de endereço inicialmente com o valor: A1=0x2010abcd
MOVE  A1,0x201001ef
ADDI  #0x201010ab,0x201001ef
MOVE  0x201001ef,D0
OR    #0x00001111,D0
MOVE  #0x000Fdcba,A1
SUB   A1,D0
AND   #0x10101010,D0
a. Identificar os modos de endereçamento utilizados em cada instrução.
b. Indicar quais as modificações ocorridas em endereços de memória e registradores após a execução de cada instrução.
  • 5. No seguinte programa, escrito em linguagem de montagem (assembly), determine o tamanho em word de cada instrução, mostrando a construção hexadecimal de cada uma das instruções.

(Observe-se que onde não for conhecido o conteúdo, deixe indicado):

a. MOVE   0x401facd11,0x2000abef
b. ADDI   #0x201010ab,0x201001ef
c. MOVE   0x20100acf,D7
d. OR     #0x00001ea1,D2
e. MOVE   #0xacfe0000,A1
f. SUB    A1,D1
g. AND    #0x01010101,D0
  • 6. Codifique as instruções da subrotina abaixo no formato hexadecimal.
      MOVE #0x00000000,D0
LOOP: MOVE D0,A1
      ADDI #0x00000001,D0
      CMPI #0x000000DA,A1
      BNE  LOOP
FIM:  RTS 
Responda e justifique: Quantas vezes a função ADDI será executada?
  • 7. Utilizando comandos no terminal, indique como é possível gravar o programa abaixo na memória: (dica: veja /4/)
MOVE #0x0000abcd,D0
MOVE #0x0000fedc,A1
ADD A1,D0
MOVE D0,0x20000011
RTS
Após a execução do programa, qual o valor que estará presente na posição 0x20000011 da memória do microcontrolador? (Sugestão: nas questões 7, 8 e 9 use os guias de referência rápida /4,6/, que apresentam alguns comandos do terminal do CodeWarrior).
  • 8. Escreva a linha de comando no terminal que executa as seguintes funções:

a. Imprimir na tela 32 bytes a partir do endereço 0x20000000. (Lembre-se que uma célula possui 32 bits ou 4 bytes ou 2 words ou que apresentam 4 endereços) d. Exibir o conteúdo do registrador de dados de D0 a D5, e endereço de A1 a A7.

  • 9. Descreva passo a passo como inserir pelo terminal a seqüência de bytes:

a. Gravar, a partir da posição de memória 0x200000cd, os dados: 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xff; b. Gravar, intercalando-se: 0 (zero) e 1 (um), em 32 endereços a partir do endereço 0x20000000.

  • 10. Descreva como alterar o conteúdo dos registradores D0 a D7 e A0 a A7 através de comandos do terminal. Mostre através de comando da tela como gravar 0xabcdeffa no registrador D7.

1.2.4 - Referências

  • /1/ Beatriz M. Daltrini, Mario Jino, Léo P. Magalhães; Introdução a Sistemas de Computação Digital; Makron Books do Brasil Editora Ltda; ISBN 85-346-0986-1
  • /2/ ColdFire Family Programmer´s Reference Manual; Doc nº:CFPRM.
  • /3/ MCF52221 ColdFire Integrated Microcontroller Reference Manual. Doc n°:MCF52211RM
  • /4/ CodeWarrior Development Studio IDE 5.6 Windows Automation Guide
  • /5/ CodeWarrior Development Studio Assemblers Reference.
  • /6/ Hints&Dicas of ColdFire MCF52221 - by Bruno Marostega.



Roteiro 2 - Sistema de desenvolvimento, Placa MCF52211 assembler e execução, programa modelo

Introdução

O objetivo deste laboratório é introduzir o sistema de desenvolvimento de software, para suporte ao usuário, que será utilizado na disciplina. O sistema de desenvolvimento envolve o microcontrolador ColdFire MCF52211, suportado pelo superset device MCF52211. É visto, também, o editor de textos CodeWarrior, o compilador C e C++ e, embutido no compilador C está o assembler, que monta os programas codificados em assembly language. O ColdFire system, programa browser, estabelece a comunicação entre usuário (PC) e microcontrolador. O CodeWarrior Studio, ambiente de apoio às aplicações externas, dá suporte à criação, carregamento, debugger e execução de projeto (programa do usuário).

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.
  • 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 MCF52221 ColdFire e o ambiente de desenvolvimento Cold Warrior oferecem suporte a depuração (debug)? 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?

Roteiro da Aula

Nesta experiência iremos criar e executar o programa DISP.S que está codificado em assembly language do ColdFire MCF52211. Para isto, há a necessidade de usarmos os seguintes passos:

  1. Edição do arquivo fonte
  2. Montagem (cuidado: "compilação do assembly"), gerando arquivo de listagem e arquivo objeto
  3. Carregamento do arquivo objeto
  4. Execução do programa na memória

Edição do código fonte

Instruções para começar um novo projeto no CodeWarrior:

  • Inicialmente, deve-se criar o nome do projeto no CodeWarrior. Para isto:
    • primeiro clique no menu “File”;
    • depois em “New”;
    • Na janela que se abre, selecione, à direita, “ColdFire Stationery”;
    • e ao lado, à direita, dê um nome ao arquivo (este é o nome do projeto).
    • Selecione, também, uma pasta no diretório para salvar o nome do projeto criado (Pede-se o favor de criar sua pasta, no SubDiretório: EA870Alunos);
    • Clique, então, em OK.
    • Na seqüência, uma janela é aberta, seleciona-se nela: CF_M52221DEMO;
    • Clique-se no “+”, e, nas opções que se abrem, deve-se escolher “C”;
    • Clicar novamente em [[OK]].

O nome de um novo projeto já está criado.

Em seguida, para editar o código fonte, deve-se ir até a janela da esquerda, selecionar “Source”, com duplo clique e, então, “main.c”. O código do projeto (programa fonte) se abre na tela.

Montagem e geração de arquivo de listagem e arquivo objeto

Após uma edição qualquer ou mesmo para rodar o programa exemplo, siga os passos:

  • Clique no menu “Project” e em seguida em “Compile”.
  • Clique no menu “Project“ e em seguida em “Make”.
  • Clique no menu “Project” e em seguida em “Debug”: – A janela de debug irá se abrir.

Execução do programa

  • Finalmente, clique em “Project” e em seguida em “Run”. O programa irá então ser executado.

Como utilizar o terminal ou tela de comando:

  • Opção 1 - Deve-se, após criado um novo projeto, ir até o menu “Debug” e clicar em “connect”.

A janela de debug irá se abrir. Feito isso, vá até o menu “View” e então selecione “Command Window”. A janela de comando ou tela de comando se abrirá. Pronta, portanto, para a execução de comandos.

  • Opção 2 - Deve-se após ter criado um novo projeto, ir até o menu “View” e selecionar “Command Window”. Na janela de comandos, dê o comando “connect” (em minúsculas). A janela de debug irá se abrir. Basta então voltar ao terminal e pode-se utiliza-lo normalmente.

Programa DISP.S

/*

* File:		main.c
* Purpose:		sample program
*
*/
#include "support_common.h" /* include peripheral declarations and more */
#include <stdio.h>
int main(void)
{
    asm
    {	
               move #(0xff000000),D3 /* Configura a porta TC para funcionar como saída */
               move D3,0x40100027
               move #(0x4010000f),A1  /* Coloca no reg de endereço A1 o end de onde se  
                                        coloca informação na saída */
    UM:        move #0x00000009,D1 /* Inicia contador de ciclos (igual ao numero de dados
                                     do vetor) */
               move #(0x00000000),D7
    DOIS:      move D7,(A1) /* Coloca informação na saída */
               move #0x000fffff,D0 /* "Tempo" entre uma informação  outra, no loop */	 		
    LOOP:      sub  #0x00000001,D0 /* Loop de delay */
               cmpi #0x00000001,D0
               bne  LOOP	
               cmpi #0x00000005,D1 /* Verifica se é hora de acender ou apagar os LEDs */
               bgt  OU	
    E:         move #0x00000002,D6	/* Apaga o primeiro LED aceso */
               mulu D6,D7 /* Shif left */
               bra  SU		
    OU:        move #0x00000002,D6 /* Acende o próximo LED */
               mulu D6,D7 /* Shift left */		
               or   #0x01000000,D7 /* Primeiro bit em 1 */	
    SU:        sub  #0x00000001,D1 /* subtrai ciclo */
               cmpi #0x00000001,D1
               beq  UM /* Se total de ciclos passados = numero de dados do vetor, 
                         começar de novo */				
    VOLTA:     bra  DOIS /* Inicia o processo do proximo dado na saída */
    }
 }


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 PDHC11-FEEC.
  2. Faça um diagrama de blocos do programa DISP.S, procurando entendê-lo.
  3. Olhando a listagem DISP.LST, qual o endereço da variável DIGITO? E do terceiro elemento do vetor XORG?
  4. Olhando a listagem DISP.LST, quais são os endereços iniciais e finais do programa? Idem para a área de dados.
  5. Encontre no programa a instrução SEC e explique sua função nele. DICA: Procure na tabela 10-1 de /4/ pela instrução ROL.
  6. Encontre no programa a instrução LDAA #4. O que aconteceria se ela fosse modificada para LDAA #3? E para LDAA #5? Qual dessas alterações teria impacto maior? Explique.

- Referências

  • /1/ Beatriz M. Daltrini, Mario Jino, Léo P. Magalhães; Introdução a Sistemas de Computação Digital; Makron Books do Brasil Editora Ltda; ISBN 85-346-0986-1
  • /2/ ColdFire Family Programmer´s Reference Manual; Doc nº:CFPRM.
  • /3/ MCF52221 ColdFire Integrated Microcontroller Reference Manual. Doc n°:MCF52211RM
  • /4/ CodeWarrior Development Studio IDE 5.6 Windows Automation Guide
  • /5/ CodeWarrior Development Studio Assemblers Reference.
  • /6/ Hints&Dicas of ColdFire MCF52221 - by Bruno Marostega.
Ferramentas pessoais