Roteiro 1 EA870 2S2009

De DCA-Wiki

Contents

Roteiro 1 - Introduçao Geral a Microcontroladores e o ColdFire MCF52221 - MCF52

  • Introdução Geral a Microcontroladores
  • ColdFire MCF52221 - Conceitos, Arquitetura básica e sua linguagem Assembly

Erros encontrados nas questoes 5 e 6 ja foram corrigidos.

Agradecimento

O desenvolvimento deste roteiro teve a grata contribuição de Bruno Marostega (b.marostega@uol.com.br) e Guilherme Abrahão Zalewski (buzzag@gmail.com).

Instruções Gerais sobre a disciplina EA870

Os roteiros de todas as aulas podem ser encontrados na wiki da disciplina. Endereço de acesso:


http://calhau.dca.fee.unicamp.br/wiki/index.php/Curso_de_EA870_2S2009_-_freescale_-_MCF12[1]

Introdução ao Experimento de Hoje

O experimento deste roteiro1 objetiva-se a iniciar o aluno à prática e manuseio das características básicas do micro-controlador ColdFire MCF5221 (MCF52). Para isto, é dado ênfase nos conceitos fundamentais: da arquitetura, na organização dos registradores da CPU, e modos de endereçamentos. Para manuseio e fixação dos conceitos é introduzido a linguagem de programação assembly (de máquina ou montagem). Este roteiro está organizado nas seguintes seções:

  • Seção 4 – 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 ou, ainda, à critério do professor, como questões de teste dadas no início de cada experiência.
  • Seção 5 – 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 7 – Relatório: conjunto de exercícios que devem ser respondidos e entregues em forma de relatório.
  • Seção 8 – Referências: lista de referências que devem ser consultadas à realização do estudo e tarefas associadas aos roteiros.

Roteiro de Estudos

A lista de questões a seguir é uma seqüência sugerida para o estudo do microcontrolador ColdFire MCF52. É imprescindível o entendimento do conteúdo deste estudo, então associado à experiência. Respondendo a estas questões capacitará o aluno 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 ITEM e, também, dos demais Roteiros de Estudos. Os textos, manuais e demais referências estão listados na Seção 1.2.4.

  • 1. O que é um microcontrolador? Ilustre qual é a diferença dele com um microcomputador.
  • 2. Dê exemplos de onde microcontralodres são usados e o nome de alguns existentes no mercado.
  • 3. É correto afirmar que o microcontrolador MCF52221 tem uma CPU (ou UCP)? Ilustre e explique sua afirmação.
  • 4. Em geral, quais são as unidades consideradas clássicas, componentes de um microcontrolador? /20, 21/
  • 5. Os principais registradores do MCF52 são os de dados, os de endereço, o PC, o CCR e o SP. Represente-os graficamente e descreva, sucintamente, a função e tamanho (bits) de cada um deles.
  • 6. Quantos bits tem um endereço no MCF52? A palavra do MCF52221 é de tamanho único? Caso não seja, explique e ilustre como se diferencia o tamanho das palavras.
  • 7. Quantas memórias de execução o MCF52 tem disponível. Como se faz para ter acesso a uma e/ou a outra? Qual é a memória de livre acesso para execução de instruções e programas? Dica: veja Cap. 4 /20,21/.
  • . Qual a diferença entre linguagem de máquina e linguagem simbólica (assembly)? Dê 1 exemplo de cada, utilizando a linguagem assembly do ColdFire MCF52221 (MCF52). (Veja ref. /1/)
  • 8. Através do conceito dos termos: "sintaxe, semântica e análise" Defina e explique, sucintamente, o que é compilação e o que é montagem e, também, o que os tornam diferentes entre si.
  • 9. Constantemente, precisamos nos referir a posições de memória do MCF52. Isso é feito através dos modos de endereçamento. O que é isso?
  • 10. O MCF52 tem 12 modos de endereçamento. Explique e dê um exemplo para os seguintes modos: 2.2.1, 2.2.2, 2.2.3, 2.2.10, 2.2.11 e 2.2.12 (definidos no Chapter 2 Addressing Capabilities da referência /1/).
  • 11. O que é endereço efetivo, [[<ea>]], de uma instrução? Exemplifique-o. O [[<ea>]] pode ser completamente definido pelo código de máquina da instrução? Dê um exemplo. À linguagem assembler o conhecimento de todos modos de endereçamento é imprescindível /1/
  • 12. É possível mover o conteúdo de uma certa posição de memória para outra através de uma única instrução de MOVE? Caso sim, mostre como. Se não, mostre a seqüência de instruções que o fazem. Dica: veja: 3.7.2 MOVE Instruction Execution Times /2/, see also: 3.1.1 Data Movement Instructions /1/.
  • 13. Para quais representações numéricas o MCF52221 - que doravante, por facilidade menmônica usaremos: MCF52 ColdFire, tem suporte nativo de instruções?

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-se 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á consequências evitáveis à qualificação 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 e RA do autor 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.
  • Jamais apresente relatório feito à mão.

Utilizando o CodeWarrior: Pela Janela de Comandos - "Command Windows"

Segue, agora, uma descrição de execução da Janela (windows) de comandos. Para se adaptar rapidamente ao Code Warrior é aconselhável que execute a lista completa dos comandos /4,6/. No texto que se segue é feito referência a alguns dos comandos. O comando deve ser digitado em letras minúsculas. A terminação “hexa ou 0x” é a abreviação e símbolo à declaração de códigos hexadecimal.

  • mem

O comando mem é usado R/W na memória. Sintaxe:

    • mem [endereço hexa] <press enter> exibe o conteúdo de uma célula de 32 bits a partir do endereço especificado (Obs.: 1 endereço = 8 bits, 1 célula = 4 endereços, 1 byte = 8 bits).
    • mem [endereço hexa] [nº de células] <enter> exibe N células a partir do endereço especificado.
    • mem [endreço hexa] = [dado hexa] <enter> preenche uma célula (que começa no endereço hexa) com o dado especificado.
    • mem [endereço hexa] [nº de células] = [dado hexa] <press enter> à preenche N células subseqüentes, a partir do endereço hexa especificado, com o dado de entrada.
    • mem [endereço hexa]
   %d <enter> à exibe a célula em decimal;
   %f <enter> exibe a célula em ponto flutuante;
   %u <enter> exibe a célula em decimal s/ sinal;
   %x <enter> exibe a célula em hexa (padrão).
    • mem [endereço hexa] x”N” <enter> à exibe célula de N bytes (não usar as aspas). N pode variar entre 1, 2, 4, 8 e 16
    • mem [endereço hexa] x”N”h”M” = [dado hexa] <enter> à trabalhar na célula de N bytes, com M bytes de dados (não usar aspas). N e M podem variar entre 1, 2, 4, 8 e 16.
  • change

O comando change modifica o conteúdo da memória, registradores e das variáveis do sistema. Segue algumas das principais sintaxes:

    • change [endereço hexa] [dado hexa] <enter> preenche uma célula de 32 bits (que começa no endereço especificado) com o dado hexa digitado.
    • change [endereço hexa] [nº de células] [dado hexa] <enter> à preenche N células com o dado.
    • change Rn [dado hexa] <enter> à preenche o registrador Rn com o dado hexa digitado.
    • change [nome da variável] [dado hexa] <enter> preenche a variável com o dado entrado.
  • reg

O comando reg seta (R/W) registradores. Sintaxes principais:

    • reg Rn <enter>: exibe o conteúdo e o “grupo” de Rn.
    • reg Rn = [dado hexa] <enter> altera o conteúdo de Rn, para o dado especificado.
  • reg nr:Rn [nº reg] <enter> exibe N registradores subseqüentes, a partir de Rn.
  • display

O comando display exibe registradores, memória ou variáveis. Descrição de algumas sintaxes:

    • display [endereço hexa] <enter>
    • display [endereço hexa] [nº de células] <enter>
    • display [endereço hexa] [nº de células]x[nº de bytes] <enter>
    • display Rn <enter> exibe conteúdo do registrador Rn.
    • display Rn –d <enter> exibe o conteúdo de Rn e informações adicionais.
  • kill

Termina todos os processos e desconecta. A sintaxe: kill <enter>

  • connect

Inicia a conexão com a placa. Sintaxe: connect <enter>

  • exit

Fecha a janela do terminal, sem encerrar a conexão atual. Sintaxe: exit <enter>

  • history

Exibe histórico dos comandos digitados no terminal. Sintaxe: history <enter>

  • stop

Pára o programa em curso no microcontrolador. Sintaxe: stop <enter>

  • reset

Reinicia o microcontrolador. Sintaxe: reset <enter>

  • next

Executa próxima linha de instrução em assembly, do ponto onde a execução foi interrompida. Sintaxe: next <enter>

  • go

Inicia execução do “programa” (processo padrão). Sintaxe: go <enter>

Relatório

(Veja na página da disciplina, na opção calendário a data referente à entrega de cada relatório).

Nos exercícios a seguir, o prefixo 0x (zero x) é utilizado para representação de um número hexadecimal (o que de fato ocorre na linguagem assembly do MCF52). Por exemplo, 0x0101FEFE é a representação de 0101FEFE em hexadecimal (e corresponde à 16908030 na representação decimal). Definidos no Chapter 2 Addressing Capabilities da referência /1/).

Em certos exercícios, a seguir, considere o RA: abcdef (minúsculas), onde, a posição de cada letra corresponde ao respectivo dígito de seu RA, como exemplo, caso seu RA for 089123, o endereço 0xFF11abcf seria: 0xFF110893.


  • 1. O MCF52221 tem 12 modos de endereçamento. Para entregar no relatório, explique e dê um exemplo para os seguintes modos: 2.2.1, 2.2.2, 2.2.3, 2.2.10, 2.2.11 e 2.2.12 (definidos no Chapter 2: Addressing Capabilities da referência /1/). Para cada um deles, dê um exemplo de uma instrução na linguagem assembly que o utilize. Desenhe a palavra de cada modo, e mostre graficamente cada modo de endereçamento com ilustrações dos respectivos campos e nomes destes na palavra ocupado pelos correspondentes bits (0,1). (Aconselha-se, para completa compreensão, que se faça os 12 modos de endereçamento). Na dúvida consulte o professor ou tutor.
  • 2. Ilustre graficamente o tamanho (número de bits ou 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 e defina o <ea> e como é calculado e entra no respectivo registrador.
  • 3. Para cada instrução, isoladamente, dê o endereço efetivo <ea - effective address)> do operando que recebe o resultado, e entra no PC. Desenhe graficamente e ilustre nos respectivos campos da palavra os correspondentes bits para cada uma das instruções. Explique a diferença entre os símbolos D e A que aparecem em cada instrução.
       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. Dica: ver Chapter 2 Addressing Capabilities, referência /1/.

  • 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  Cuidado, nesta instrução há "erro". Consulte R/2/, Seção 3.2, Tab 3.14. Comente o erro.
MOVE  0x201001ef,D0
OR    #0x00001111,D0
MOVE  #0x000Fdcba,A1
SUB   A1,D0
AND   #0x10101010,D0

a. Identifique e justifique com comentários o modo de endereçamento utilizado em cada instrução. Explique e comente, também, o significado do símbolo: #, $ e % no modo de endereçamento. Como feito nas questões anteriores, ilustre graficamente cada campo das palavras correspondentes com os bits (0,1).

b. Indique quais as modificações que ocorreram em endereços de memória e registradores (como estava antes e como ficou depois) na execução de cada instrução.

c. Em que sentido se dá o movimento dos dados nos operandos: do primeiro para o segundo ou vice-versa. Neste contexto, o MCF52 é uma máquina de 1, 2 ou 3 endereços??

  • 5. No seguinte programa, escrito em linguagem de montagem (linguagem assembly), determine o tamanho em word (1 word = 2Bytes, 1 byte = 8bits) de cada instrução, codificando o código em hexadecimal. Dica: pegue o resultado na janela de comando "Command Windows".

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

a. MOVE   #0x2000abef,A0
b. ADDI   #0x201010ab,D0
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. À frente de cada instrução comente a instrução.
      MOVE #0x00000000,D0
LOOP: MOVE D0,D1
      ADDI #0x00000001,D0
      CMPI #0x000000DA,D1
      BNE  LOOP
FIM:  RTS 

Responda e justifique: Quantas vezes a função ADDI será executada?


  • 7. Considere o seguinte programa:
MOVE #0x0000abcd,D0
MOVE #0x00000001,D1
MOVE #0x0000fedc,D2
MOVE #0x20000011,A1
ADD D2,D0
ADD D0,D1
MOVE D1,A1
RTS

Descreva em linguagem natural e em apenas uma frase o que tal programa faz.


  • 8. Exemplique um programa, de modo semelhante ao programa apresentado na questão anterior, escrito na linguagem assembly do MCF52221 que utiliza todos os registradores de endereços e dados.

Referências

Ferramentas pessoais