Roteiro 1 EA870 2S2009 - DCA-Wiki
Roteiro 1 EA870 2S2009
1 Roteiro 1 - Introduçao Geral a Microcontroladores e o ColdFire MCF52221 - MCF52
2 Instruções Gerais sobre a disciplina EA870
3 Introdução ao Experimento de Hoje
4 Roteiro de Estudos
5 Recomendações para a confecção do relatório
6 Utilizando o CodeWarrior: Pela Janela de Comandos - "Command Windows"
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.
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]
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.
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;
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.
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.
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.
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.
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.
Termina todos os processos e desconecta. A sintaxe: kill <enter>
Inicia a conexão com a placa. Sintaxe: connect <enter>
Fecha a janela do terminal, sem encerrar a conexão atual. Sintaxe: exit <enter>
Exibe histórico dos comandos digitados no terminal. Sintaxe: history <enter>
Pára o programa em curso no microcontrolador. Sintaxe: stop <enter>
Reinicia o microcontrolador. Sintaxe: reset <enter>
Executa próxima linha de instrução em assembly, do ponto onde a execução foi interrompida. Sintaxe: next <enter>
Inicia execução do "programa" (processo padrão). Sintaxe: go <enter>
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.
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/.
(Considere o registrador de endereço inicialmente com o valor: A1=0x2010abcd)
ADDI  #0x201010ab,0x201001ef  Cuidado, nesta instrução há "erro". Consulte R/2/, Seção 3.2, Tab 3.14. Comente o erro.
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".
a. MOVE   #0x2000abef,A0
b. ADDI   #0x201010ab,D0
6.	Codifique as instruções da subrotina abaixo no formato hexadecimal. À frente de cada instrução comente a instrução.
LOOP: MOVE D0,D1
CMPI #0x000000DA,D1
7. Considere o seguinte programa:
MOVE #0x00000001,D1
MOVE #0x0000fedc,D2
MOVE #0x20000011,A1
ADD D2,D0
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.
/1/	ColdFire Family Programmer´s Reference Manual; Doc nº:CFPRM. http://www.freescale.com/files/dsp/doc/ref_manual/CFPRM.pdf
/2/	MCF52221 ColdFire Integrated Microcontroller Reference Manual. Doc n°:MCF52223RM - http://www.freescale.com/files/32bit/doc/ref_manual/MCF52223RM.pdf
/3/ CodeWarrior Development Studio IDE 5.6 (e/ou 5.7) Windows Automation Guide
/4/ CodeWarrior Development Studio Assemblers Reference.
/12/ - CodeWarrior Development Tools - IDE 5.7 Windows Automation Guide - http://www.freescale.com/files/soft_dev_tools/doc/ref_manual/