referÊncia rÁpida mcf52221 e 52223 ea871 - laboratÓrio...

33
REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO DE COMPUTAÇÃO DCA - FEEC / UNICAMP (versão 01/agosto/2012) Este texto apresenta um conjunto de facilidades baseadas nos manuais do fabricante, para auxiliar na familiarização com o microcontrolador ColdFire® MCF52221 e 52223 da Freescale. Na experiência de laboratório (disciplina EA871) é utilizada a versão V2 do sistema ColdFire® juntamente com a placa de desenvolvimento M52211DEMO e a Placa Auxiliar FEEC, apoiadas pelo ambiente CodeWarrior® versão 10.2, ferramenta da Freescale para a programação de microcontroladores. Manual inicial desenvolvido por: Professor Responsável: Daniel Camilo Alunos: Guilherme Abrahão Zalewski Pedro A M de Carvalho Carlos Manuel de Cabral Bruno Marostega Atualização anterior: janeiro 2012 (Prof. Léo Pini Magalhães - [email protected] ) e agosto 2012 (Prof. J. Mario De Martino – [email protected]) Os responsáveis pela disciplina EA870 / EA871 alertam que o material deste manual encontra-se em edição. O material de ajuda foi escrito para facilitar aos alunos ingressantes o trabalho com microcontroladores. Neste contexto, aceitamos a colaboração daqueles que se disponham a cooperar com a edição. 1

Upload: others

Post on 18-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

REFERÊNCIA RÁPIDA MCF52221 e 52223EA871 - LABORATÓRIO DE COMPUTAÇÃO

DCA - FEEC / UNICAMP (versão 01/agosto/2012)

Este texto apresenta um conjunto de facilidades baseadas nos manuais do fabricante, para auxiliar na familiarização com o microcontrolador ColdFire® MCF52221 e 52223 da Freescale. Na experiência de laboratório (disciplina EA871) é utilizada a versão V2 do sistema ColdFire® juntamente com a placa de desenvolvimento M52211DEMO e a Placa Auxiliar FEEC, apoiadas pelo ambiente CodeWarrior® versão 10.2, ferramenta da Freescale para a programação de microcontroladores.

Manual inicial desenvolvido por: Professor Responsável: Daniel CamiloAlunos: Guilherme Abrahão Zalewski

Pedro A M de Carvalho Carlos Manuel de Cabral Bruno Marostega

Atualização anterior: janeiro 2012 (Prof. Léo Pini Magalhães - [email protected]) e agosto 2012 (Prof. J. Mario De Martino – [email protected])

Os responsáveis pela disciplina EA870 / EA871 alertam que o material deste manual encontra-se em edição. O material de ajuda foi escrito para facilitar aos alunos ingressantes o trabalho com microcontroladores. Neste contexto, aceitamos a colaboração daqueles que se disponham a cooperar com a edição.

1

Page 2: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Sumário

1. Introdução1.1 Introdução 1.2 Objetivo

2. Arquitetura clássica de computadores2.1 Introdução 2.2 Arquitetura clássica de computadores

2.2.1 A memória 2.2.2 As interfaces de entrada e saída 2.2.3 CPU 2.2.4 A CPU em micro-computadores

2.3 O Núcleo do processador ColdFire: MCF52221 2.3.1 Unidade da parte de Programação com Inteiros 2.3.2 Modos de Operação

3. Comandos do ambiente CodeWarrior 4. Criação e execução de um projeto no ambiente CodeWarrior

5. Endereçamento no MCF522215.1 Introdução e visão geral 5.2 Acesso à memória 5.3 Gravação de dados na Flash 5.4 Acesso aos periféricos 5

6. Entrada e Saída6.1 Introdução e visão geral 6.2 Configuração de uma Porta 6.3 Descrição dos Registradores 6.4 Uso das portas 6.5 Exemplo

7. Conversor Analógico/Digital (ADC)7.1 Introdução e visão geral 7.2 Conversão

8. Interrupção8.1 Introdução e visão geral 8.2 Níveis de Prioridade 8.3 Habilitação do tratamento da interrupção. 8.4 Configuração específica da interrupção de cada dispositivo 8.5 Definição da Rotina de Tratamento da Interrupção

9. QSPI9.1 Introdução e visão geral 9.2 Configuração e registradores 9.3 Sobre a placa auxiliar FEEC

10. LCD10.1 Introdução e visão geral 10.2 Sobre a placa auxiliar FEEC10.3 Configuração 10.4 Configurando10.5 Referências

2

Page 3: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

11. Conversor Digital/Analógico (DAC)11.1 Introdução e visão geral 11.2 Conversão

Referências

3

Page 4: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

1. Introdução

1.1 Introdução

O enfoque nas disciplinas da FEEC, tanto as teóricas como as de laboratórios, é o ensino de conceitos e fundamentos da matéria em questão. Assim, o fundamental é a conceituação dos fenômenos pertinentes à matéria em estudo. Conceitos e fundamentos das disciplinas, mesmo as que passam por constantes atualizações, apresentam mudanças lentas e graduais. Ao contrário, a evolução constante e notável da tecnologia demanda a necessidade da introdução de novas ferramentas e técnicas para melhor realizar e verificar os conceitos a serem analisados e ensinados.

Com a ementa da disciplina EA870 / EA871 - Laboratório de Programação Básica de Sistemas Digitais - não poderia ser diferente. Ao longo de sua existência, a ementa, em si mesma, foi pouco alterada. Porém as ferramentas tecnológicas, antes computadores, depois microprocessadores e agora microcontroladores (estes, com recursos de processamento e periféricos adicionais) provocaram mudanças significativas e contínuas. Em vista a estas mudanças, no segundo semestre de 2007 foi solicitada pelo Professor Daniel Camilo/DCA/FEEC uma mudança da plataforma do microcontrolador utilizado para uma melhoria nas disciplinas pertinentes.

Para que essa atualização fosse possível, foi oferecida uma bolsa ao aluno Bruno Marostega que começou o trabalho de pesquisa e desenvolvimento de novos roteiros para o laboratório. No fim do primeiro semestre de 2008 o projeto foi parado, e, logo no segundo semestre do mesmo ano, dois alunos foram escolhidos para continuar o projeto: Pedro Augusto e Guilherme A. Zalewski. Além desses, foram recrutados vários alunos para o auxílio, porém poucos atenderam a requisição, sendo esses os alunos: Yuri Isayama, Igor Biscaia, Carolina Franciscangelis, Alexandre Passos e Carlos Cabral. Com essa equipe foi possível a conclusão da atualização da matéria, com a supervisão dos professores Daniel Camilo e Antônio Quevedo e seu oferecimento para os alunos do primeiro semestre de 2009.

1.2 Objetivo

O objetivo de agrupar diversos manuais na forma de capítulos é que sirva de “Referência rápida à plataforma do microcontrolador MCF52221/3” da Freescale. Com isso, familiarizar o aluno com o novo sistema de desenvolvimento que, a partir de então, será utilizado nas disciplinas EA870 e EA871.

O novo sistema envolve a placa de desenvolvimento M52221DEMO, que utiliza o microcontrolador COLDFIRE 52221 e o ambiente CodeWarrior versão 10.2, da Freescale, responsável pela edição dos códigos e montagem dos mesmos para serem executados na placa.

Como o próprio nome está sugerindo, o presente manual objetiva suavizar, ao iniciante, os primeiros contatos com a máquina. Neste sentido, consultas mais elaboradas devem ser feitas aos próprios manuais do fabricante.

4

Page 5: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

2. Arquitetura clássica de Computadores

2.1 Introdução

As experiências desenvolvidas no decorrer desta disciplina – EA870 / EA871 - utilizam como plataforma os microcontroladores Freescale MCF52221 e MCF52223 (Single Board Computer grounded on Freescale Semiconductor, Inc. Microcontroler). O objetivo desta disciplina é o aprendizado e fixação de conceitos, no que diz respeito às características de organização básica de um microcontrolador. Para isto, utilizamos como objeto de experimentação esta plataforma de hardware.

2.2 Arquitetura clássica de computadores

A arquitetura de um computador digital é constituída tipicamente de:

• Unidade Central de Processamento (CPU); • Memória (dados e programas compartilham a memória);• Interfaces de Entrada e Saída.

A Figura 2.1 apresenta a arquitetura típica de um computador digital com estas

características. Esta máquina é conhecida como máquina Von Neumann ou Princeton por compartilhar dados e programas na mesma memória; máquinas onde não há este compartilhamento são denominadas “de Harvard”. Estas denominações homenageiam instituições cujos pesquisadores propuseram as arquiteturas na década de 1940.

2.2.1 A memória

Em geral, é um arranjo linear de células individuais de armazenamento. Cada célula possui um endereço que permite a sua identificação individual e um conteúdo, que é a informação armazenada na célula. A memória pode ser utilizada para armazenar instruções ou operadores e dados. Instruções ou operadores são os elementos de informação que comandam as atividades da CPU. Os dados são os elementos de informação que são processados e/ou gerados pela CPU. Um conjunto de instruções logicamente sequenciado, relacionado e armazenado na memória é denominado de programa.

5

Page 6: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

2.2.2 As interfaces de entrada e saída

Permitem a troca de informações entre o computador e o exterior. Os dispositivos que realizam as interfaces de E/S adequam (elétrica e temporalmente) os sinais que fluem entre computador e exterior. Exemplos de dispositivos externos que podem ser acoplados a estas interfaces são: a tela de vídeo, teclado, disco removível, "mouse", leitora de cartão ou fita, etc.

2.2.3 CPU

Unidade Central de Processamento - é a unidade que controla as atividades do sistema como um todo. Os sinais de controle que atuam nos relacionamentos entre as unidades são provenientes da CPU e trafegam via barramentos. Barramentos - bus - são rotas paralelas de fios / circuitos que interligam os dispositivos. Existem, basicamente, três tipos distintos de barramento: de endereço, de dados e de controle. Para desempenhar seu papel controlador, a CPU lê as instruções na memória, decodifica-as e controla sua execução. Além dos acessos à memória, a CPU efetua, também, acesso às interfaces de E/S. A finalidade é, por exemplo, a busca de operandos, configurar registradores ou ainda guardar resultados que, eventualmente, tornam-se necessários à execução de instruções.

Pelo barramento de endereço, a CPU especifica o endereço da posição de memória (célula de memória ou interface de E/S) com quem ela deseja se comunicar. Pelo barramento de controle, a CPU especifica controles de, por exemplo, operações para entrada/saída de dados ou ainda leitura/escrita em posição de memória. Pelo barramento de dados, a CPU envia dados que serão escritos/lidos como informação em células de memória. 2.2.4 A CPU em microcontroladores

Tipicamente uma CPU é constituída por:

• Registradores • Unidade de Aritmética e Lógica (UAL) • Circuitos de controle (UC)

Registradores são células de armazenamento internas à CPU. Uma CPU possui, geralmente,

um conjunto de registradores de propósito geral, utilizados em tempo de execução – run time - para processamento de programas e dados de controles próprios da CPU. Destaca-se, por exemplo, para estes últimos: o registrador contador de programa (Program Counter -PC), registrador apontador de pilha (Stack Pointer) – SP e registrador de estado (Status) - SR.

A CPU opera de modo cíclico. Primeiro lê da memória a instrução a ser executada (esta operação de leitura é denominada de "acesso de busca ou fetch de instrução"). Em seguida, decodifica-a. Finalmente, executa a operação especificada pela instrução. O acesso de busca da instrução a seguir dá continuidade a este processo. O registrador contador de programa - PC - registra, em seu conteúdo, o endereço de cada próxima instrução a ser executada. Após a leitura de uma instrução, o conteúdo do PC é automaticamente atualizado pela CPU. O endereço resultante que atualiza o PC é dependente da instrução (de seu comprimento, por exemplo) que, ora, está em execução, para fazê-lo apontar para a próxima instrução a ser executada.

Um programa, em essência, corresponde a codificação de um algoritmo. Simplificadamente, um algoritmo é uma sequência de instruções finitas que, quando executada, termina. As instruções que, de modo geral, compõem um programa são armazenadas, sequencialmente e em ordem crescente, na memória. Cada instrução ocupa uma célula - um ou mais bytes. Ao dispor um programa na memória, uma ordem crescente é estabelecida nos endereçamentos das células.

6

Page 7: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Portanto, a despeito das instruções serem dispostas sequencialmente, em tempo de execução o endereço efetivo - <ea> - resultante que atualiza o PC é dependente da instrução que, ora, está em execução. Existem instruções que permitem alterar a execução sequencial das células e, em consequência, alterar o valor do PC. Instruções de chamada de subrotinas, desvio - branch - e salto - jump - são exemplos.

O registrador de estado - Status Register - SR (que contém o registrador de condições – CCR, como será tratado a frente) é geralmente interpretado bit-a-bit. Os bits são associados a resultados das operações aritméticas e/ou lógicas. Se o resultado da operação, por exemplo, é zero, negativo ou ocorreu overflow (resultado com erro), etc. Cada fabricante pode apresentar diferenças próprias em seu processador, o que leva a maneiras diferentes de interpretar e acionar os bits correspondentes do registrador de estado.

Um microcontrolador, de modo geral, semelhante à plataforma Freescale MCF52221/3 que dispomos no Laboratório de EA871 / EA870, diferencia-se de um microprocessador por dispor, além da CPU, de memória volátil e não volátil, temporizadores, conversor A/D e interfaces de E/S integradas em um único Circuito Integrado (CI).

2.3 Microcontrolador ColdFire: MCF52221

O microcontrolador MCF52221 possui a seguintes características:

• Processador RISC: núcleo ColdFire Version 2 com unidade MAC (multiply-accumulate)

• Barramentos internos de endereço e de dados de 32 bits• 16 registradores de dados e de endereço de 32 bits• Unidade MAC (multiply-accumulate)• 16 Kbyte SRAM interna (memória volátil)• 120 Kbytes flash memory interna (memória não-volátil)• Interface USB OTG (Universal Serial Busa On-The-Go)• 3 UARTs (Universal asynchronous/synchronous receiver transmitter)• Interface I2C (Inter-Integrated Circuit)• Interface QSPI (Queued Serial Peripheral Interface) • Conversor A/D de 12 bits• 4 temporizadores de 32-bit com suporte a DMA (Direct Memory Access)• Temporizador de propósito geral• Temporizador para PWM (Pulse-Width Modulation)• 2 temporizadores de interrupção (PITs)• Controlador de interrupção programável• Controlador de DMA programável• Até 56 bits para E/S programáveis (GPIO – General Purpose I/O)

2.3.1 Unidade de Programação com Inteiros

A Figura 2.3 ilustra o modelo da parte do usuário para programação com inteiros. Esta parte consiste dos seguintes registradores.

– 16-registradores de propósito geral com 32-bits D0 a D7; A0 a A7;– Registrador Contador de Programa (PC - Program Counter) de 32-bits;– Registrador de Códigos de Condição (CCR).

7

Page 8: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Registradores de Dados (D0 - D7)

Estes registradores são usados em operações em bit, byte (8-bits), word (2-bytes ou 16-bits), longword (32-bits). Também podem ser usados como registradores índice.

Os 8 Registradores de Dados (DO-D7), com 32 bits cada, suportam operandos de tipo byte, word e long word. Operandos do tipo byte ocupam os 8 bits menos significativos do registrador de dados; operandos do tipo word ocupam os 16 bits menos significativos e os 1ong word todos os 32 bits do registrador. O bit menos significativo é endereçado como bit 0, o bit mais significativo é endereçado como bit 31. Uma transferência de dados para/de um destes registradores afeta/utiliza apenas a porção da parte menos significativa que for apropriada; a parte mais significativa não é afetada/utilizada.

Registradores de Endereços (A0-A7)

Estes registradores podem ser usados como Stack Pointers, registradores de índice, e/ou registradores base de endereçamento. Em particular, o registrador de Endereço A7 funciona como

8

Page 9: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

um Stack Pointer (apontador de pilha) de hardware, durante o empilhamento - stacking - nas chamadas de subrotinas e manipulação de exceções.

Os 7 registradores de endereço (AO - A6) e o apontador de pilha (A7) têm 32 bits cada. Estes registradores suportam apenas operandos do tipo word e long word. Ao servir como operando fonte, apenas a porção apropriada do registrador é utilizada - os 16 bits menos significativos (word) ou todos os 32 bits (long word). Porém, um registrador de endereço ao ser utilizado como operando destino terá sempre todos os seus 32 bits utilizados. O Registrador Contador de Programa (Program Counter - PC)

O Registrador PC contém o endereço da instrução a ser executada imediatamente antes da busca. Durante a execução da instrução corrente e processamento de exceção, o processador prepara a execução da próxima instrução alocando um valor apropriado ao PC. Em alguns modos de endereçamento (endereçamento relativo) o PC é utilizado como endereço base.

O Registrador de Códigos de Condição - CCR

No processador Coldfire aqui utilizado o registrador CCR consiste de 5-bits usados no registro do estado resultante das operações e armazenado nos 5-bits da parte do byte menos significativa da palavra. Esta (a que contém, o CCR) é a única parte do Status Register - SR - disponível no modo usuário. Muitas instruções com inteiro afetam o CCR que indica o resultado da instrução. Programa e instruções do sistema de controle também usam certa combinação destes bits para controle do fluxo de execução.

Obs.: (1) o bit sinalizado por P é implementado somente na versão V3 como “branch prediction bit”

9

Page 10: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

2.3.2 Modos de Operação

Uma particularidade do MCF52221/3 refere-se aos dois modos distintos em que ele pode operar: o modo usuário e o modo supervisor. O modo supervisor é um modo privilegiado de processamento, reservado tipicamente para programas de gerenciamento (sistemas operacionais, monitores, etc.), onde é necessário o acesso irrestrito aos recursos da máquina. O modo usuário é um modo de processamento não privilegiado, onde certas instruções não são permitidas, bem como determinados tipos de acesso à memória e de controle de interrupção.

O processador indica através de três sinais do barramento de controle o seu modo de operação. Assim, é possível restringir, por hardware, o acesso a determinadas posições de memória e/ou interfaces de entrada/saída que, por serem vitais para a operação do sistema, não devem ser inadvertidamente ou propositalmente alteradas por usuários menos experientes ou mesmo mal-intencionados.

Cada um destes modos de operação possui o seu próprio registrador apontador de pilha (A7). Além disto, no modo supervisor, é possível o acesso a todos os 16 bits do Registrador de Estado (SR) - byte do sistema e byte do usuário (CCR). Já no modo usuário, o acesso a este registrador é restrito ao byte menos significativo (CCR). Notemos que o bit 13 do registrador de estado estabelece o modo de operação do processador. A alteração deste bit, portanto, só é possível no modo supervisor.

10

Page 11: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

3. Comandos do ambiente CodeWarrior

Este capítulo introduz ao usuário a interface do CodeWarrior, sistema que apoia a tradução, carregamento e acompanhamento de execução dos programas (em Assembly e C) no laboratório. Utilize o HELP do Sistema CodeWarrior para maior detalhamento.

O início de operação é o seguinte:

• Abrir (executar) o CodeWarrior, através do link “CodeWarrior_V10.2”, na área de trabalho;• selecione um “Workspace”, no caso C:\EA871\seuRA . Este é o seu diretório-mãe que

conterá todos os seus laboratórios (Lab1, Lab2, etc.); • então “Go to Workbench” (as outras opções: Project Importer, Tutorials etc. você deverá

experimentar posteriormente); • agora está aberta a janela de trabalho. Escolha: File > New > Bareboard Project;• você está criando um projeto. Dê um nome, por exemplo Project name: Lab0;• Next;• selecione ColdFireVX Evaluation Boards > ColdFireV2 > M52221DEMO;• Finish

Neste momento o CodeWarrior irá processar a criação de seu projeto “Lab0” e ao término apresentará a sua interface de trabalho criando o ambiente inicial para o usuário. Neste momento abra (+) Lab0.

Na janela central, após uma edição qualquer ou mesmo para executar o programa exemplo, devemos seguir os passos:

- clicar no menu “Project” e em seguida em “BuildProject”;- em seguida em “Run” selecione “Debug” . A opção “Console Internal RAM”

indica onde o programa será carregado na memória do kit-DEMO.

Consulte via HELP (opção Documentation Roadmap e Getting Start) a referência “Eclipse Quick Reference – CodeWarrior Development Suite” para juda no trabalho com o CodeWarrior.

4. Criação e execução de um projeto no ambiente CodeWarrior

Consulte via HELP (opção Documentation Roadmap e Getting Start) a referência “Eclipse Quick Reference – CodeWarrior Development Suite” para ajuda no trabalho com o CodeWarrior.

11

Page 12: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

5. Endereçamento do MCF52221/3

5.1 Introdução e visão geral

O microcontrolador MCF52221/3 por ser um processador de 32bits possui 232

possibilidades de endereçamento, ou seja, 4 Giga endereços diferentes (4x10243 endereços). Seu espaço de endereçamento está dividido basicamente em:

• Endereçamento da memória flash (memória não volátil), cujo tamanho é de 128 Kbytes;• Endereçamento da memória SRAM (acesso dinâmico), cujo tamanho é de 16Kbytes;• Endereçamento dos periféricos.

Definimos os endereços base para a memória flash como FLASHBAR, da memória RAM como RAMBAR e dos periféricos como IPSBAR (Internal Peripheral System Base Address Register). Se a RAM começar no endereço 0x20000000 temos:

FLASHBAR = 0x00000000 RAMBAR = 0x20000000 IPSBAR = 0x40000000

Endereço Tipo do conteúdo

0x00000000a

0x0001FFFFFlash

0x20000000a

0x20003FFFSRAM

0x40000000a

0x80000000Periféricos

Tabela 5.1

5.2 Acesso à memória

O acesso à memória RAM e FLASH é feito em bytes, ou seja, o endereço RAMBAR+0 é um byte, RAMBAR+1 outro byte, e assim por diante (Figura 5.1). Porém, o acesso à memória FLASH para a escrita deve ser feita de 32bits em 32bits (leia mais sobre como gravar dados na FLASH a seguir na Seção 5.3).

12

Page 13: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Em muitas instruções temos a opção de modificar apenas o byte (8bits), word (16bits) ou

long word (32bits) do endereço. Em MOVE.B (move um byte ao endereço x), colocaremos o nosso dado de 8 bits na posição de memória X+0. Em MOVE.W, colocaremos o nosso dado de 16bits no endereço X+0 e X+1. Por fim, em MOVE.L ou simplesmente MOVE, colocaremos nosso dado de 32 bits no endereço X+0, X+1, X+2 e X+3. As figuras 5.2.1 a 5.2.3 representam estas operações.

13

Page 14: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Para os dados em registradores a representação é um pouco diferente. A figura abaixo

exemplifica:

A próxima figura exemplifica algumas operações:

14

Page 15: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

5.3 Gravação de dados na memória Flash

A memória Flash possui um sistema de proteção aos dados contidos nela. Para utilizar a memória flash, devemos criar uma série de rotinas de configuração. O código a seguir já faz todas as configurações necessárias, o que devemos fazer é criar uma variável do tipo “char” , colocar o dado que irá ser gravado na memória flash e então chamar as funções como no exemplo do código. Devemos lembrar que o que deverá ser alterado no código é apenas a função “main” (principal). Neste exemplo o que está em negrito (e underline) deve ser alterado da forma que for necessário de acordo com a aplicação.

15

Page 16: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

====================== main.c – Escrever na memória flash ===================#include "support_common.h" #include <stdio.h>

#define FLASH_PAGE_SIZE 2048 //Tamanho do bloco que a flash é acessada#define FSYS 48000000 // frequência da placa M52221DEMO#define assert(x) if (! (x)) { asm { halt } } // macro booleana // Rotinas para gravaçãostatic void flash_command(uint8 cmd, uint32 *addr, uint32 data) { uint32 *backdoor_addr; // assert we're initialized assert(MCF_CFM_CFMCLKD & MCF_CFM_CFMCLKD_DIVLD); // assert we're ready assert(MCF_CFM_CFMUSTAT & MCF_CFM_CFMUSTAT_CBEIF); // assert no errors assert(! (MCF_CFM_CFMUSTAT & (MCF_CFM_CFMUSTAT_PVIOL|MCF_CFM_CFMUSTAT_ACCERR))); // write the flash thru the backdoor address backdoor_addr = (uint32 *)(__IPSBAR+0x04000000+(int)addr); *backdoor_addr = data; // write the command MCF_CFM_CFMCMD = cmd; // launch the command (N.B. this clears CBEIF!)

MCF_CFM_CFMUSTAT = MCF_CFM_CFMUSTAT_CBEIF;

// wait for command buffer empty while (! (MCF_CFM_CFMUSTAT & MCF_CFM_CFMUSTAT_CBEIF)) { // assert no errors assert(! (MCF_CFM_CFMUSTAT & (MCF_CFM_CFMUSTAT_PVIOL|MCF_CFM_CFMUSTAT_ACCERR))); } } void flash_erase_pages(uint32 *addr, uint32 npages){ while (npages) { flash_command(MCF_CFM_CFMCMD_PAGE_ERASE, addr, 0); npages--; addr += FLASH_PAGE_SIZE/sizeof(uint32); } // wait for flash command complete while(! (MCF_CFM_CFMUSTAT & MCF_CFM_CFMUSTAT_CCIF)) { // Espera apagar }; } void flash_write_words(uint32 *addr, uint32 *data, uint32 nwords) { while (nwords) { flash_command(MCF_CFM_CFMCMD_WORD_PROGRAM, addr, *data); nwords--; addr++; data++; }

16

Page 17: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

// wait for flash command complete while(! (MCF_CFM_CFMUSTAT & MCF_CFM_CFMUSTAT_CCIF)) { // NULL }; assert(! memcmp(addr, data, nwords*sizeof(uint32))); }

void flash_initialize(void) { if (FSYS > 25600000) { MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_PRDIV8|MCF_CFM_CFMCLKD_DIV((FSYS-1)/2/8/200000); } else { MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_DIV((FSYS-1)/2/200000); } MCF_CFM_CFMPROT = 0; MCF_CFM_CFMSACC = 0; MCF_CFM_CFMDACC = 0; MCF_CFM_CFMMCR = 0; }

// MAIN – ALTERAR AQUI // int main(void) { uint32 *address=(uint32 *)0x1f800; // define um inteiro sem sinal (mude o endereço)char foo[] ="somedata"; // define o dado a ser enviado (mude o valor) //PS.: Você pode definir o dado outra hora, não necessariamente na declaraçãoflash_initialize(); //Rotina para iniciar a flashflash_erase_pages(address, 2); // Rotina para apagar o conteúdo da memória

// onde será gravado flash_write_words(address,(uint32 *)foo, 2); //Grava o dado 38 //Lembrando que o número 2 é a quantidade de palavras, no caso, a cada 4 caracteres, 1 palavra // somedata = 8caracteres = 2palavras} ===================================================================

5.4 Acesso aos periféricos

O acesso aos periféricos, seja em suas configurações, alteração de máscaras, flags, etc., deve ser feito através do endereço base IPSBAR somado ao endereço do periférico indicado no manual [1].

Daremos um exemplo para o acesso ao registrador de direção de uma porta, o DDRTC: (vide Figura 5.5)

17

Page 18: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Contando da esquerda para a direita, temos que o endereço a ser somado ao ISPBAR é

0x100027. O underline (do endereço) é para facilitar a nossa visualização, devemos desprezá-lo. Então, se quisermos alterar as configurações de DDRTC, devemos mover o dado para a posição de memória ISPBAR+0x100027, que resulta em 0x40100027. Ex.:

MOVE #40100027, A0 MOVE.B #FF, (A0)

/*Coloca o valor FF no registrador DDRTC (mapeado no endereço hexadecimal 40100027), configurando-o assim como saída*/

O endereço de todos os registradores/periféricos do MCU pode ser encontrado na seção do periférico ou no Apêndice A da referência [1] (ver seção Referências).

18

Page 19: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

6. Entrada e Saída

6.1 Introdução e visão geral

A Figura 6.1 apresenta alguns dos pinos do chip do microcontrolador MCF52221/3. No caso são apresentados os pinos que tem função de E/S. Os pinos estão agrupados em portas de 8 bits. Como será descrito, para cada porta há um grupo de registradores responsável por configurar, monitorar e controlar o funcionamento dessas portas e, assim, cada pino. Todas as informações aqui contidas podem ser encontradas no manual do MCF52221/3 (ver [1] da Seção Referências).

6.2 Configuração de uma Porta

A configuração e utilização são sempre feitas através de registradores que se encontram mapeados na memória RAM. Tabelas indicando as posições desses registradores e se encontram no capítulo 12 da referência [1] (ver por exemplo a Fig. 6.1 acima). Devemos atentar que o endereço indicado nas tabelas para cada registrador é considerado a partir de um endereço base (no caso, 0x40000000).

Essa configuração será descrita em partes: inicialmente é necessário decidir se os pinos serão utilizados como entrada ou saída (quando isto for possível), para isso é usado um tipo específico de registrador (DDRn); em seguida, para escrever um dado na porta são usados outros tipos de registradores (PORTn, SETn ou CLRn); no caso de querermos obter um dado de um pino os registradores utilizados são o PORTnP.

19

Page 20: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

6.3 Descrição dos Registradores

Port Output Data Registers (PORTn)

Essa classe de registradores armazena o dado a ser colocado nos pinos correspondentes da porta “n” definida, quando esses pinos são definidos como saída. São registradores de 8bits ou menos, variando para cada porta.

Port Data Direction Registers (DDRn)

Os registradores DDRn controlam se os pinos da porta desejada serão configurados para entrada ou saída. Ao iniciar o microcontrolador todos os pinos são zerados (configurados como entrada). Mudar um bit do registrador para 1 corresponde a configurar tal pino como saída.

Port Clear Output Data Registers (CLRn)

Esses registradores permitem zerar os pinos da porta, quando isso é possível. Para tanto basta escrever zeros nos pinos correspondentes no registrador. O número 1 (um) não surte efeito nesse registrador.

Port Pin Data/Set Data Registers (PORTnP/SETn)

Equivalentemente aos registradores CLRn, esses registradores têm a função de escrever 1 nos pinos da referida porta. Logo, escrever 0 (zero) no registrador não surte efeito. Existe, entretanto, outra função importante nesse grupo de registradores. Eles refletem o estado atual dos pinos, desse modo, quando se deseja fazer a leitura de um dado (entrada), é através desses registradores que isso é feito.

Pin Assignment Registers (PnPAR)

Esse é um grupo de registradores muito importante, uma vez que um pino pode ter mais de uma função (E/S e transmissão serial, por exemplo). Desse modo, é preciso definir qual função desejamos usufruir de um pino. Existem dois tipos de pinos que podem ser configurados (é por esse motivo que ocorrem os dois tipos: Dual Function Pin e Quad Function Pin Assignment Registers). Nos pinos duais, 1 define que o pino usará sua função primária e 0 o pino assume sua função GPIO. Já nos pinos chamados Quad, 00 define função GPIO, 01 função primária, 10 função alternativa 1 e 11 função alternativa 2.

6.4 Uso das portas

Uma tabela de fácil visualização que facilita o trabalho com os pinos do microcontrolador é a Fig. 6.1 retirada da referência [1]. Usando a placa de desenvolvimento desse microcontrolador (M5221DEMO), será observado, que já ocorrem pinos pré estabelecidos para diversas funções, como por exemplo utilização dos LEDs (PORT TC). Outras funções para esses pinos como Interrupção, Conversão D/A, PWM, entre outras estão também na referência [1].

6.5 Exemplo

Nesse exemplo, será executada uma tarefa simples. Os dois primeiros pinos da porta PORT TC serão configurados como entrada, enquanto que os dois seguintes serão definidos como saída.

20

Page 21: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Então, a informação de entrada será colocada na saída.

Tabela 6.1

Address 31-24 23-16 15-8 7-0

0x10_000C PORTQS RESERVED PORTTA PORTTC

0x10_0024 DDRQS RESERVED DDRTA DDRTC

0x10_003C PORTQSP/SETQS RESERVED PORTTAP/SETTA PORTTCP/SETTC

0x10_0054 CLRQS RESERVED CLRTA CLRTC

A tabela acima foi gerada a partir da Tabela 12-1 da referência [1]. A partir dela e da referência [2] o código a seguir pode ser gerado.

Programa exemplo:

asm{ move #0x4010000F, A0 ;carrega o endereço do PORTTC em A0

move #0x40100027, A1 ;carrega o endereço do DDRTC em A1 move #0x4010003F, A2 ;carrega o endereço do PORTTCP em A2 ;podemos observar que o registrador PORTTC será o único usado para atualização de dados dos ;pinos. Não serão utilizados SETTC nem CLRTC

move.b #0%00001100, (A1) ;o valor carregado no endereço apontado por A1 ;(DDRTC), configura os dois primeiros pinos como entrada e os dois seguintes como saída move.b (A2), D0 ;obtém o valor que se encontra nos pinos de entrada de

;PORTTC através do registrador PORTTCP btst.b #0%0000000, D0 ;testa o bit 0 de D0, ou seja, verifica se o primeiro pino

;da porta é 0 ou 1 beq PN ;se o primeiro pino é nulo, é realizado um salto relativo

;para Primeiro Nulo (PN) btst.b #0%0000001, D0 ;testa o bit 1 de D0, ou seja, verifica se o segundo pino

;da porta é 0 ou 1 43 beq SN ;se o segundo pino é nulo, é realizado um salto relativo

;para Segundo Nulo (SN) move.b #0%00001100, (A0) ;se nenhum “branch” foi realizado, se conclui que os

;dois pinos são 1 bra FIM

PN: btst.b #0%0000001, D0 ;testa o bit 1 de D0, ou seja, verifica se o segundo pino ;da porta é 0 ou 1

beq PN1 move.b #0%00001000, (A0) bra FIM PN1: move.b #0%00000000, (A0) bra FIM SN: move.b #0%00000100, (A0) bra FIM FIM: nop }

21

Page 22: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

7. Conversor Analógico/Digital (ADC)

7.1 Introdução e visão geral

Um ADC consiste em um circuito eletrônico capaz de converter uma grandeza analógica (normalmente tensão ou corrente elétrica) em uma grandeza digital. Os ADCs são muito úteis no interfaceamento entre dispositivos analógicos e computadores, sendo utilizados em aplicações como leitura de sensores, digitalização de áudio e vídeo.

Na Placa Auxiliar FEEC temos (ver no esquemático - página 1 de 2) uma Entrada Analógica para um sinal de interesse do usuário e uma entrada para o Sensor de Temperatura (LM61) [3]. O periférico ADC do microcontrolador (ver [1] Capítulo 26) faz as conversões necessárias e com elas trabalhamos, convertendo as tensões em números binários. Lembrando que a entrada analógica do periférico ADC não pode ultrapassar sua tensão de referência, igual a 3V.

7.2 Conversão

O sensor de temperatura possui três conexões, duas de alimentação e outra de saída. A sua saída é uma tensão proporcional à temperatura que está medindo. Através das conversões feitas pelo microcontrolador, obtemos o valor digital desta entrada. Para que possamos transformá-la em um valor “visível” para nós (algo como o valor da tensão e não um número proporcional à tensão), devemos aplicar a fórmula abaixo (conforme [1] Capítulo 26):

(para esta fórmula no manual da placa - conforme [1] Capítulo 26) -, VREFH = 3 e VREFL = 0 correspondem as tensões de referência alta e baixa respectivamente). Lembre-se que “ValorDigital” é o valor lido do termômetro.

Devemos ter um cuidado com as aproximações, já que um valor com vírgula será arredondado (se utilizadas as instruções para inteiro). Logo, para valores pequenos de tensão, como no caso do nosso sensor, podemos trabalhar com milivolts ao invés do valor em volts, apenas multiplicando o valor por 1000 (coloque isso na fórmula acima antes das divisões para que o processamento das instruções de valor inteiro do microcontrolador não arredonde o valor para zero). Com o valor da tensão em mãos, encontramos a fórmula da proporção da temperatura/tensão do sensor, e com isso encontramos o valor da temperatura. V0 é “Entrada” acima.

(Fonte: datasheet do sensor) [3]

22

Page 23: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

8. Interrupção

8.1 Introdução e visão geral

Usar interrupções é uma forma muito mais efetiva de se identificar algum evento externo à CPU, sem ela ter de ficar varrendo cada dispositivo verificando o que está acontecendo. A varredura toma muitos ciclos nos quais a CPU poderia estar executando instruções de programas propriamente ditos.

O MCF52221/3 possui 57 fontes de interrupção. Cada fonte possui um registrador (mapeado em endereço de memória) próprio de controle (ICRnx) que define além do nível, a prioridade dentro do nível. Cada fonte e seu respectivo número que corresponde ao (ICRnx) pode ser visualizado na Tabela 13-16 [1]. Conhecendo a fonte de interrupção a ser utilizada, é necessário definir o nível e a prioridade da interrupção no registrador correspondente de controle de interrupção de acordo com a Tabela 13-13 da mesma referência.

Como o processador trabalha com prioridades de interrupção, faz-se necessária a modificação de um importante registrador do processador, o SR (Status Register). Nele, devemos definir a prioridade com que o sistema se encontra no momento, desse modo, interrupções com prioridade igual ou abaixo à especificada não serão atendidas (exceto o nível 7 que é não mascarável). Agora veremos, passo a passo, como configurar uma interrupção no ColFire MCF. Uma descrição detalhada pode ser encontrada em [1].

8.2 Níveis de Prioridade

Primeiramente, devemos entender que o sistema de interrupção do ColdFire MCF trabalha com o conceito de nível de prioridade. Basicamente, isso significa que algumas interrupções podem ser configuradas como sendo mais importantes que outras. Assim, a CPU executará primeiramente as de mais alta prioridade e poderá até ignorar o tratamento de uma interrupção de nível mais baixo.

O ColdFire trabalha com 7 níveis de prioridade. Portanto, para utilizar uma interrupção, devemos:

• como programador, setar no registrador SR - Status Register da CPU, a partir de qual nível de desejamos tratar na aplicação. Se colocarmos “3”, por exemplo, somente interrupções com prioridade acima de 3 serão tratadas;

• definir, no registrador ICRnx (onde x é o número que identifica a fonte de sua interrupção, segundo Tabela 13.13 do manual [1]), qual será o nível de prioridade da interrupção.

8.3 Habilitação do tratamento da interrupção

O sistema de interrupção precisa saber quais interrupções estão ativas (habilitadas) para fazer um tratamento adequado das mesmas.

Para isso, o programador deverá escrever nos registradores IMRH e IMRL, no bit correspondente à interrupção de interesse o valor 0. Assim, a cada ciclo, a CPU pode eficientemente verificar se houve ou não a geração das interrupções habilitadas. Esses registradores ainda permitem a CPU, ao ter de fazer alguma operação crítica como por exemplo RESET, mascarar, ou seja, desabilitar todas as fontes de interrupção.

8.4 Configuração específica da interrupção de cada dispositivo

Cada dispositivo do microcontrolador é único. Portanto, nada mais natural de que a geração

23

Page 24: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

de interrupção, entre dispositivos, tenha algumas diferenças.

Portanto, deveremos estudar o dispositivo sendo utilizado e utilizar as opções de configuração que desejarmos para as interrupções dele.

8.5 Definição da Rotina de Tratamento da Interrupção

Configurado corretamente o dispositivo - detecção e prioridade – ao ocorrer a interrupção gerada pelo dispositivo, a CPU verificará a identificação desta (o número associado à interrupção) e utilizando esta identificação como índice de uma tabela, o chamado Vetor de Interrupções, obterá o endereço da rotina que deverá ser executada bem como definirá em SR o nível de prioridade sendo atendido e o fluxo de execução será desviado para essa rotina.

Portanto, deveremos:

• criar, na aplicação, a função que deverá ser executada quando a interrupção ocorrer. Feito isso, adicionar ao ínicio do código (que define todas as suas funções) a seguinte diretiva: ◦ “ __declspec(interrupt) tipodafunção nomedafunção(argumentos); “Essa é uma diretiva para indicar ao compilador que esse arquivo contém uma definição de uma rotina de tratamento de interrupção, a função: tipodafunção nomedafunção(argumentos)

• toda vez que criarmos um projeto do CodeWarrior (veja a Seção 3), um arquivo de nome exceptions.c é criado. Então devemos acessar esse arquivo e procurar a entrada de número: 64+ número de fonte da sua interrupção. Por exemplo, se a fonte da sua interrupção tem número 4, procurar a entrada 64+4 = 68. Nessa linha, substituir a expressão: “asm_exception_handler”, por “nomedafunção” (sem aspas), conforme definido acima.Devemos colocar também, após as definições (DEFINE) no arquivo exceptions.c a definição: “__declspec(interrupt) tipodafunção nomedafunção(argumentos);“ novamente, para que o compilador saiba que essa função está definida em outro arquivo.

24

Page 25: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

9. QSPI (Queued Serial Peripheral Inteface)

9.1 Introdução e visão geral

O MCF52221/3 possui um periférico especifico para transmissão serial síncrona: o QSPI. Esse periférico permite transferências de tamanhos que variam de 8 até 16 bits. Além disso, é possível deixar até 16 palavras em espera para transmissão sem que seja necessário acesso do usuário para início de cada transmissão. São ainda configurados o baud rate, atrasos (antes e depois da transmissão), polaridade e fase do relógio e ainda permite o modo “wrap-around” para transferências contínuas.

9.2 Configuração e registradores

A configuração do QSPI é feita através de registradores específicos mapeados em endereços de memória (via IPSBAR Offset) conforme abaixo (ver também [1] capítulo 22).

O QMR é o registrador de modo. Seu primeiro bit deve, necessariamente ser definido como

“1”. Isso ativa o master mode, que é o modo obrigatório para o periférico. Os quatro bits menos significativos desse registrador definem o baud rate através da seguinte fórmula:

QMR[baud] = (frequência do sistema) / (2x(baud rate desejado))

Os bits 10-13 definem o tamanho da transmissão, entretanto, para utilizar essa opção é necessário ativar o bit 14 do registrador de dados destinado a comandos (QCR0_15[BITSE]).

Através do QDLYR, os atrasos podem ser escolhidos. Talvez mais importante do que isso, o bit mais significativo desse registrador tem a tarefa de iniciar a transmissão QSPI, ao ser setado.

Para o caso de transmissões contínuas o QWR deve ser utilizado, contudo, mesmo no caso de transmissões únicas, QWR deve indicar os endereços que sinalizam as transferências que se encontram em espera. No caso de ser necessário uma parada na transmissão serial, o bit mais significativo de QWR deve ser setado (QWR[HALT]).

O registrador QSPI é responsável pelas interrupções. O bit menos significativo desse é um flag (SPIF) que indica o fim da transmissão. Através do bit 8 – SPIFE – esse flag ativará uma interrupção.

25

Page 26: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

QDR é o registrador de dados auxiliar, ler ou escrever algum dado na memória é feito

indiretamente pelo registrador de dados. O registrador QDA deve apontar para a posição de memória em que o dado deve ser lido/escrito. Portanto, valores lidos em QDR, são valores lidos na posição de memória apontada por QDA. O mesmo ocorre para escrita.

A memória do periférico se divide em três grandes blocos: transmissão, recepção e comandos. QDA deve apontar para essas diferentes posições de memória.

Figura 9.1: Mapa de Memória do QSPI

26

Page 27: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

9.3 Sobre a placa auxiliar FEEC

Na Placa Auxiliar FEEC, o QSPI é tanto utilizado para o periférico de conversão Digital-Analógico (DAC) como para o controle de um LCD que ela contém. Para ambos, é utilizado um registrador de deslocamento – shift-register 74LS164– no qual os dados são recebidos serialmente, e então lançados paralelamente nos pinos tanto do LCD quanto do conversor Digital-Analógico. Esses, ao receberem o valor “1” do seletor do próprio periférico QSPI – CS0, admitem a entrada dos dados (No LCD isso é feito pelo “enable” – pino 6 e no DAC pelo pino CS_DA).

Entretanto, os dados enviados pelo QSPI, não devem ser utilizados simultaneamente pelo LCD e pelo DAC; pode haver inclusive a necessidade do uso de ambos em uma mesma aplicação, contudo, com diferentes objetivos. Assim, a porta PORTAS1 é utilizada para tal escolha através de um circuito mono estável – 74LS123 - onde a efetividade do sinal CS0 depende dessa porta. Se a referida porta contiver o sinal lógico “1” o mono estável seleciona o LCD, enquanto que se essa for “0” o DAC é selecionado.

Resumidamente:

DAC: PAS = 0; CS0 = 1(ativação).

LCD: PAS = 1; CS0 = 1(ativação).

Esse esquema lógico pode ser observado no esquemático da placa auxiliar FEEC [4].

27

Page 28: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

10. LCD (Liquid Cristal Display)

10.1 Introdução e visão geral

Os displays fabricados atualmente possuem um circuito padrão e, portanto, não se encontra grandes diferenças ao variarem os modelos e fabricantes. A pinagem e programação são basicamente padrão (ver por exemplo [5]).

São encontrados inúmeros manuais – datasheets – na rede, entretanto, se assemelham de forma que não há necessidade de diferentes referências para consulta. A Figura 10.1 mostra um esquema dos pinos encontrados em um display comercial, como o utilizado na placa auxiliar.

10.2 Sobre a placa auxiliar FEEC

Na placa auxiliar, o controle do LCD é feito por um periférico do MCF52221/3, o QSPI, seguido de um registrador de deslocamento – shift-register 74LS164. O pino PAS1 deve conter o nível lógico “1” para seleção do display, e a borda de subida do sinal CS0 (do QSPI) ativa um mono estável que se encontra ligado ao pino 6 – enable – que permitirá a entrada dos dados que já devem se encontrar na entrada do display – DB0 a DB7.

Lembrando: Se a porta PAS1 contiver o sinal lógico “1”, o mono estável seleciona o LCD, enquanto que se essa for “0” o DAC é selecionado.

Resumidamente:

DAC: PAS = 0; CS0 = 1 (ativação).

LCD: PAS = 1; CS0 = 1(ativação).

Logo, concluímos que a cada dado a ser inserido no display, um pulso no pino enable (que ativa em borda de descida) deve ocorrer para que ele seja utilizado.

No display, “R/W” é o pino que define se ocorrerá escrita ou leitura de dados; em um display só ocorre escrita. Assim, na placa auxiliar apenas a escrita é permitida, e como está representado no esquemático dela [4] esse pino é aterrado, de modo que o seu sinal lógico é “0” (write).

Já o pino RS define se o dado será uma configuração do display ou a entrada de um novo caractere. Quando este for lógico “0”, uma nova configuração deve estar nos pinos de entrada do LCD, enquanto que ser for “1”, um novo caractere será inserido. A porta que está conectada a esse pino é o PAS0.

Logo, sabemos que: (com PAS1 = 1, ou seja com seleção do LCD)

PAS0 = 0 , então COMANDO PAS0 = 1 , então CARACTER

28

Page 29: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

10.3 Configurações

A tabela a seguir mostra uma lista de comandos utilizados para configuração de um display.

Outra tabela encontrada na internet em que os comandos são disponibilizados de outra forma

é apresentada a seguir:

29

Page 30: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Com relação aos códigos mostrados na tabela, um importante comando que pode ser

ressaltado e exemplificado é “Posiciona no endereço da DDRAM”. Com ele o cursor pode ser posicionado em qualquer lugar no display, através da seguinte tabela.

30

Page 31: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Portanto, se desejarmos posicionar o cursor na segunda linha na primeira posição, o comando a se definir nos pinos de DB7 a DB0 é C0, que nada mais é que o endereço de DDRAM 0x40 mais 0x80 do comando (pino DB7 em nível lógico “1”).

10.4 Configurando

Os passos de configuração do LCD são simples. Devemos escolher como o nosso LCD funcionará e então enviamos um a um os comandos. É importante ter presente (ver coluna “t” na Tabela 10.2) a necessidade de esperar um tempo (atraso) até que o comando seja processado, criando um atraso a cada instrução (seja ela comando ou dado) enviada.

Um exemplo de configuração:

ENVIE O COMANDO 0x38, ou seja: PAS1 = 1; PAS0 = 0; SPI = 0x38 ATRASOENVIE O COMANDO 0x06, ou seja: PAS1 = 1; PAS0 = 0; SPI = 0x06 ATRASOENVIE O COMANDO 0x0F, ou seja: PAS1 = 1; PAS0 = 0; SPI = 0x0F ATRASOENVIE O COMANDO 0x01, ou seja: PAS1 = 1; PAS0 = 0; SPI = 0x01 ATRASOESCREVA “A”, ou seja: PAS1 = 1; PAS0 = 1; SPI = 0x41 ATRASO

10.5 Referências

Uma boa referência na internet é o site do Professor Terroso da PUC do Rio Grande do Sul (http://www.ee.pucrs.br/~terroso/html/lcd.html). Nele se encontram algumas dicas e mais importante que isso, um simulador de display (http://www.ee.pucrs.br/~terroso/ SIMULADOR _LCD.zip) que permite a entrada de comandos e verificar o que ocorre, desde a configuração até a exibição dos caracteres.

31

Page 32: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

11. Conversor Digital/Analógico (DAC)

11.1 Introdução e visão geral

DAC é um circuito eletrônico capaz de converter uma grandeza digital (por exemplo um código binário) em uma grandeza analógica (normalmente uma tensão ou uma corrente). Na Placa Auxiliar FEEC temos o circuito integrado DAC557 que recebe os bits e os converte, dentro de uma escala comparativa, em tensão. Fazemos isso usando a transmissão SPI (transmissão serial síncrona) dos bits e, com os dados já transmitidos devemos setar a porta PAS1 em nível lógico zero (podemos selecionar o LCD se PAS1 = 1) e setar o CS0 (componente da transmissão SPI) em nível lógico um, lembrando que o CS0 deve estar zerado na transmissão e só ir para “1” quando os dados já tiverem sido transmitidos.

11.2 Conversão

O valor enviado para o DAC gera uma tensão na saída analógica da Placa Auxiliar FEEC conforme a tabela de conversão abaixo.

Logo, temos uma resolução de aproximadamente 0,010 V , ou seja, a cada bit temos um

acréscimo de 0,010V e com isso conseguimos mapear uma grande região de tensão através da fórmula:

com E igual ao sinal analógico, D igual ao sinal digital, Vmax igual ao sinal analógico máximo e Dmax igual ao número de possibilidades (2 bits).

Um exemplo: caso desejemos ter o valor 1,280 V na saída, pela fórmula:

encontramos D = 128 (decimal).

Observando a tabela, vemos que o mínimo produzido é 0V e o máximo é 2.55V (teoricamente a faixa seria de 0V a 2,6V) e pela entrada ser de 8bits, temos 2 8 possibilidades de tensões diferentes, ou seja, 256 possibilidades.

32

Page 33: REFERÊNCIA RÁPIDA MCF52221 e 52223 EA871 - LABORATÓRIO …leopini/DISCIPLINAS/EA871/documentos/… · 2. Arquitetura clássica de Computadores 2.1 Introdução As experiências

Referências

(acessar via http://www.dca.fee.unicamp.br/~leopini/DISCIPLINAS/EA871/2012-1/WebEA871-12012.html)

[1] [MCF52223RM] - MCF52223 ColdFire® Integrated - Microcontroller Reference Manual

[2] [CFPRM] - Programmer’s Reference Manual (CFPRM.pdf).

[3] [LM61] - Datasheet Sensor LM61 [4] [Placa FEEC] - Descrição do Hardware da Placa Auxiliar FEEC.

[5] [LCD] - Display LCD – Ilton L. Barbacena, Claudio Afonso Fleury, outubro 1996 – Intech.

33