1 Comentário

Curso de C com microcontroladores MCF51QE128 e MC9S08QE128 – Parte 1

Curso de C com MCF51QE128 MC9S08QE128

ÍNDICE DE CONTEÚDO

MATERIAL DESENVOLVIDO PARA TREINAMENTOS DURANTE O LANÇAMENTO DA LINHA FLEXIS DA FREESCALE EM 2009.

1. Arquiteturas von-Neumann X Arquiteturas Harvard

1.1. von-Neumann

Algoritmos para computadores se baseiam em alguns conceitos básicos e em um modelo de computador, os quais devem ser bem entendidos para que se possa criar algoritmos eficientes. Este modelo foi proposto pelo matemático húngaro Neumann János Lajos Margittai. Em húngaro o nome de família aparece antes. Assim em português o seu nome seria János Lajos Margittai Neumann. O seu pai, que era rico, comprou um título de nobreza e ele passou a se chamar János Lajos Margittai von Neumann.

No modelo de computador proposto por von Neumann as instruções e os dados ficam juntos na memória. O processador busca na memória e executa uma instrução de cada vez. Portanto, as transferências entre a memória e o processador são feitas passo a passo. O ciclo normal da execução de um programa é então:

  1. Busca instrução;
  2. Decodifica instrução;
  3. Executa instrução;
  4. Volta para o passo 1 buscando a instrução seguinte na memória.

Dados e programas compartilham um meio de armazenamento único.

  • Mais simples, menos restritivo, menos eficiente – dados e programas misturados permitem ao programador intercambiar a semântica de dados e programas ao longo do tempo
mcf51-1
mcf51-2

1.2. Harvard

Dados e programas estocados em meios de armazenamento distintos

  • Mais propenso a fomentar paralelismo, mais caro, mais complexo – dados e programas separados permitem que ambos sejam facilmente tratados em paralelo.
  • Harvard permite duas leituras de memória simultâneas (dado e instrução).
  • A maioria dos processadores DSP (celulares, telecom, câmeras digitais,...) usam organização Harvard, pois isto permite maior largura de banda de memória e tempo de acesso a dados mais previsível.
mcf51-3
mcf51-4

1.3. A máquina von-Neumann

mcf51-5

Exemplo de funcionamento de uma arquitetura Von Newmann: SOMAR DOIS NÚMEROS QUE SÃO INSERIDOS NA ENTRADA E COLOCAR O RESULTADO NA SAÍDA.

  1. Colocar o primeiro número a ser somando na porta de entrada do μC.
  2. Dar um pulso de clock no BUFFER.
    1. O primeiro número passa a ocupar o barramento de dados e fica armazenado no BUFFER.
  3. Dar um pulso de clock no Registrador A.
    1. O primeiro número passa a ocupar o barramento interno, fica armazenado no Registrador A e está na entrada da ULA.
  4. Colocar o segundo número a ser somado na porta de entrada do μC.
    1. Enquanto não for aplicado no BUFFER um pulso de clock, em sua entrada terá o segundo número e em sua saída terá o primeiro número.
  5. Dar um pulso de clock no BUFFER.
    1. Ao fazer isso, o primeiro número é apagado da saída do BUFFER, que passa a ser ocupado pelo segundo número. Caso o primeiro número não tenha sido armazenado em algum Registrador, ele será perdido.
  6. Dar um pulso de clock no Registrador B.
    1. O segundo número passa a ocupar o barramento interno, fica armazenado no Registrador B e está na entrada da ULA.
  7. Colocar nos bits de comando da ULA a informação X 0 = 0 e X 1 = 0.
    1. Ao fazer isso, a ULA calculará a soma dos dados que estejam presentes em suas entradas. Se não houver dados na entrada, ela somará zero com zero. Automaticamente, o resultado é colocado na saída da ULA.
  8. Dar um pulso de clock no Gate da ULA (G ULA ).
    1. Ao fazer isso o segundo número é apagado do barramento de dados, que passa a ser ocupado pelo resultado da soma dos dois números.
  9. Dar um pulso de clock no LATCH.
    1. O resultado da soma é colocado na porta de saída.

1.4. Qual a escolha da Freescale para o núcleo S08
(8 bits) utilizado no MCS08QE128?

Nos chips de 8 bits (MC9S08QE128), o núcleo S08 utiliza a arquitetura interna clássica de von Neumann, como pode ser visto na figura abaixo:

mcf51-6

1.5. Qual a escolha da Freescale para o núcleo ColdFire V1 (32 bits) utilizado no MCF51QE128?

Nos chips de 32 bits (MCF51QE128) a CPU utiliza uma arquitetura proprietária, batizada de Coldfire Version 1 (V1), cujo diagrama em blocos pode ser visto na figura a seguir:

mcf51-7

Esta estrutura do tipo Pipeline, com dois fetch trabalhando em paralelo (IFP e OEP), com acesso ao barramento de dados por duas vias e ao barramento de endereço em separado, permite um funcionamento bem similar ao obtido com estruturas Harvard.

Isto significa que enquanto a máquina de estados está processado uma instrução, outra parte da máquina já está fazendo o carregamento da próxima instrução, tornando o seu processamento muito mais rápido.

1.6. CISC x RISC?

A principal função de um microcontrolador é executar uma série de ordens (comandos ou instruções), armazenados em um programa, na sua memória. Cada uma destas instruções é interpretada pela CPU e, então, executada. Assim, cada tipo de computador digital, deve ter um conjunto de instruções (ou set de instruções) definidas, de modo que sua CPU possa interpretá-las e executá-las. Em função deste conjunto de instruções, existem duas classes de computadores digitais:

1.6.1. CISC -> Complex Instruction Set Computer

  • Conjunto de instruções ampliado, ou seja, a CPU é capaz de executar um grande número de instruções (ex.: microcontrolador 8051, da Intel, com 256 instruções);
  • É geralmente associada a computadores com arquitetura von-Neumann, mas modificações nas máquinas de estados podem permitir seu uso em arquiteturas Harvard modificadas.
  • Esta é a escolha da Freescale para os dois chips, de 8 e 32 bits.

1.6.2. RISC -> Reduced Instruction Set Computer

  • Conjunto de instruções reduzido (ex.: família PIC, da Microchip, com 35 instruções, e família MSP430, da Texas, com 24 instruções emuladas e 27 instruções físicas);
  • É geralmente associada a computadores com arquitetura Harvard.

1.7. Diferenças entre os núcleos ColdFire V1 (32 bits) e S08 (8 bits)

Os núcleos ColdFire V1 e S08 tem diferenças significativas entre si, já que o núcleo de 32 bits do ColdFire V1 tem várias melhorias que aumentam sua performance. Dentre suas características, os estágios em pipeline permitem que o core processe múltiplas instruções ao mesmo tempo.

1.7.1. ColdFire V1 -> 32 bits -> MCF51QE128

É a sua arquitetura ortogonal que lhe concede vantagens. Ela tem 16 registradores para trabalho que podem ser utilizados, ao invés de apenas um, como é comum na maioria das arquiteturas de microcontroladores. Sem contar que o seu processamento de dados que tenham um tamanho de 32 bits é muito mais eficiente do que num núcleo de 8 bits.

1.7.2. S08 -> 8 bits -> MC9S08QE128

É uma arquitetura clássica baseada no uso de acumulador, onde a grande maioria das instruções aritméticas e lógicas tem que fazer uso deste registrador. Para trabalhar com dados de 32 bits, esta arquitetura necessita de um maior ciclo de máquina, pois deverá particionar o dado em pedaços de 8 bits.

2. Detalhamento do hardware

Periféricos do MC9S08QE128

mcf51-8

Periféricos do MCF51QE128

mcf51-9
mcf51-9

Diagrama em blocos do MC9S08QE128 .

mcf51-10

Diagrama em blocos do MCF51QE128

mcf51-11

Principais características do MC9S08QE128

mcf51-12
mcf51-13

Principais características do MCF51QE128 .

mcf51-14
mcf51-15

2.1. Comparativo entre os chips MC9S08QE128 e MCF51QE128

mcf51-16
mcf51-17
mcf51-18

3. Fontes de clock para os μCs Freescale

3.1. Velocidade de processamento de instruções

Quanto tempo demora a ser executada cada uma das instruções nos μCs Freescale que serão abordados neste treinamento? E quanto tempo demora em outras arquiteturas? Para responder a esta pergunta, a primeira observação deve ser feita quanto a divisão de sinais de clock. Veja na figura a seguir um comparativo entre diversas arquiteturas de mercado:

mcf51-19

Nos dois μCs Freescale utilizados neste treinamento há divisão do sinal de clock por dois. Isto significa que cada dois pulsos de clock (que nestes dois μCs são referenciadas ao sinal de clock chamado de ICSOUT), será um ciclo de máquina.

Na arquitetura clássica do 8051, a quantidade de ciclos de máquina necessária para executar uma instrução varia de acordo com o modo de endereçamento utilizado e com o formato da instrução. Na arquitetura S08 (8 bits), o mesmo conceito do 8051 será aplicado: a quantidade de ciclo de máquinas necessária para executar uma instrução dependerá de fatores como o modo de endereçamento utilizado e do formato da instrução. Isto fica claro com o exemplo mostrado abaixo, onde a instrução MOV pode gastar tempos diferentes para ser executada:

mcf51-20

Na arquitetura ColdFire V1 (32 bits), devido a estrutura pipeline, todas as instruções são executadas em um ciclo de máquina, independente do formato da instrução ou dos modos de endereçamento utilizados, como se pode ver no exemplo das instruções de movimentação mostrado abaixo.

mcf51-21

3.2. Sinais de clock dos μCs

Os dois μCs que serão utilizados neste curso tem uma arquitetura de clock muito parecida, como pode ser visto nas figuras abaixo. Com estas máquinas é possível utilizar um ressonador cerâmico ou cristal de quartzo (de 31,25 khz a 16 Mhz) como fonte de clock externo conectado a um oscilador do tipo Pierce. Se a opção é gerar o sinal internamente, o módulo ICS, através de um circuito FLL, produz um sinal com 0,2% de resolução e 2 % de desvio, com valores entre 2 e 50,33 Mhz.

Sinais de clock no MC9S08QE128:

mcf51-22

Sinais de clock no MCF51QE128:

mcf51-23

3.3. Sinais de clock externo

Basta conectar um cristal ou ressonador externo nos terminais XTAL e EXTAL, conforme o diagrama abaixo.

mcf51-24

A necessidade de utilização e os valores para os resistores RF e RS e os capacitores C1 e C2 dependem do valor do cristal e das especificações do fabricante do cristal.

3.4. Sinais de clock interno

Os sinais de clock internos são gerados pelo módulo ICS (Internal Clock Source), que é idêntico para os chips MCF51QE128 e MC9S08QE128 , como pode ser visto na figura:

mcf51-25

Os registradores internos configuram e ajustam os sinais de clock que saem da máquina ICS, permitindo ajustar quem são os sinais de saída:

  • ICSOUT: este sinal de clock é utilizado como clock da CPU e é dividido por 2 para gerar o sinal de clock no barramento de periféricos. Através de bits de controle nos registradores do ICS é possível determinar qual destas três fontes alimentará este sinal:
    • Referencia de clock interna;
    • Referência de clock externa;
    • Saída do módulo FLL (Frequency-locked loop);.
  • ICSLCLK: este sinal de clock é gerado pelo DCO (Digitally Controlled Oscillator) quando o módulo ICS para desligar a referência de clock externa ou interna.
  • ICSERCLK: esta é uma fonte de clock externo.
  • ICSIRCLOK: esta é a fonte de clock interno, e pode ser selecionado como fonte de clock do RTC.
  • ICSFFCLK: este sinal é o FFCLK (Fixed Frequency Clock).
  • LPOCLK: este sinal é gerado por um oscilador interno de baixo consume, completamente independente do módulo ICS. Este sinal pode ser selecionado para alimentar o watchdog timer COP ou do RTC.
  • OSCOUT: este sinal é a saída direta do módulo de oscilador externo.

3.5. Os registradores que controlam os clocks

Para ajustar o funcionamento destas diversas fontes de clock, é necessário manipular adequadamente os bits dos registradores de controle da máquina ICS (Internal Clock Source), como é mostrado nas duas figuras a seguir.

mcf51-26

Neste primeiro módulo de linguagem C, não é objetivo manipular totalmente estes registradores. Faremos isto no curso avançado, onde serão abordados os periféricos destes chips.

mcf51-27

4. Ultra Low Power Features

Assim como outras arquiteturas de microcontroladores existentes no mercado, as diversas fontes de clock disponíveis no módulo ICS permitem que funções de ultra baixo consumo sejam aplicadas a este chip.

Nos dois chips utilizados neste treinamento, existem seis modos de uso que permitem ajustar qual o consumo acontecerá para cada atividade a ser feita, como pode ser visto na figura abaixo:

mcf51-28

Existirá uma relação direta entre a maior funcionalidade (maior capacidade de execução de tarefas e processamento de dados) do chip com o seu consumo de energia.

Assim, quanto maior for um modo de trabalho, maior o seu consumo e maior a velocidade de processamento do chip.

Mas será que precisamos o tempo inteiro que o nosso microcontrolador tenha a sua velocidade máxima disponível?

4.1. Power Saving Modes

Uma típica aplicação microcontrolada pode passar diversas vezes por diversos modos de economia de energia. Se observarmos a média de consumo de uma aplicação, teremos um baixo consumo como um todo, como se pode ver na figura abaixo. Podemos ainda estimar a duração de uma determinada bateria em função de seu consumo médio.

mcf51-29
mcf51-30

4.2. Valores típicos de consumo para cada um dos Power Saving Modes

Abaixo você poderá visualizar o valor típico de consumo de corrente para cada um dos Power Saving Modes previstos para os dois chips utilizados neste treinamento.

mcf51-31

Se comparamos os núcleos de 8 e 32 bits, devido a suas arquiteturas, teremos pequenas diferenças de consumo, como mostra a tabela a seguir. É importante notar o tempo estimado para sair de um modo de baixo consumo para um de alto consumo: apenas 6 us! Isto torna as aplicações em baixo consumo totalmente viáveis!

mcf51-32

É claro que cada um dos modos de baixo consumo permitem que determinados periféricos estejam ou não ativos no uC. Então, para saber o que podemos ou não fazer em cada um destes modos, se faz necessária uma consulta a tabela abaixo.

mcf51-33

5. Registradores de trabalho e registradores especiais

5.1. Registradores no MC9S08QE128

O uC de 8 bits, MC9S08QE128 , por manter aquela estrutura clássica da arquitetura von Neumann, também mantém a estrutura de ser baseado em um acumulador, como se pode ver abaixo.

mcf51-334

Note que apesar do chip ser de 8 bits, a sua capacidade de enredeçamento é de 16 bits (2 16 = 65536 endereços = 64 kbytes), devido ao fato do contador de programa (PC) ter 16 bits. Isto também ocorre com o ponteiro da pilha (stack pointer) e com o registrador de indexação (Index register).

Os registradores clássicos, que estão presentes em diversas outras arquiteturas de microcontroladores, inclusive de outros fabricantes, são mostrados a seguir.

5.1.1. Program Counter -> contador de programa

Aponta qual será a próxima instrução dentro do programa a ser executada pela CPU.

5.1.2. Stack Pointer -> ponteiro da pilha

A pilha é um recurso utilizado para armazenar informações enquanto são executadas rotinas de interrupção ou chamadas de sub-rotinas. Para tanto é necessário apontar qual posição da pilha será utilizada. Isto é feito através do registrador Stack Pointer.

5.1.3. Acumulador

É o registrador que tem acesso a CPU. Portanto qualquer operação lógica ou aritmética quem que passar obrigatoriamente por este registrador.

5.1.4. Index Register (R3)

Serve para indexar (ordenar em forma de índice) qualquer região da memória, sendo constantemente utilizado pela pilha ou qualquer outro processo que precise ser organizado.

5.1.5. Condition Code Register

Indica o status de qualquer operação que tenha sido executada pela CPU, além de conter o bit I, que desliga todas as interrupções mascaráveis quando está com nível lógico 1.

5.1.6. Program Page Register (PPAGE)

Se olharmos com mais detalhes esta arquitetura, notaremos algumas informações interessantes. Vejam a figura mostrada na próxima página.

O program counter (contador de programa) pode utilizar uma estrutura com 14 bits de endereçamento fixo (alcance de 214 = 16 Kbytes), mais 8 bits de paginação (222 = 4 Mbytes). Os bits PPAGE são os seletores de página de memória.

mcf51-35
mcf51-36

5.1.7. Linear Address Pointer (LAP)

Mas outra estrutura que chama a atenção é o LAP (Linear Address Pointer). Ele serve para acessar diretamente qualquer endereço dentro da totalidade da memória do microcontrolador. Esta estrutura pode trabalhar com auto incremento e utilizar ponteiros com complemento de 2 para somar ou subtrair um indicador.

mcf51-37

5.2. Registradores no MCF51QE128

O uC de 32 bits, MCF51QE128 , tem uma estrutura Harvard modificada, e por isto tem uma estrutura de registradores bem diferente do chip anterior, como pode ser visto na figura a seguir.

mcf51-38

São os seguintes registradores:

  • 16 registradores de uso geral de 32 bits (D0 a D7 e A0 a A7)
  • 1 contador de programa com 32 bits (capacidade de endereçamento de 232 = 4 GB.
  • 1 registrador de condição com 8 bits (CCR);
  • 1 registrador de status com 16 bits (SR);
  • 1 registrador de ponteiro de pilha com 32 bits (SSP);
  • 1 registrador de vetor base com 32 bits (VBR);
  • 1 registrador de configuração de CPU com 32 bits (CPUCR).

Estes registradores são mostrados na figura a seguir:

mcf51-39

6. Estrutura de memórias: RAM, ROM (Flash)

Como pode ser visto no item 2 deste material, as memórias RAM, ROM (Flash) são dois trechos distintos dentro do hardware. Porém seu mapeamento é contínuo, incluindo os vetores de interrupção, de reset, periféricos e registradores com funções especiais.

6.1. Mapeamento de memória nos μCs Freescale

Mapeamento de memória no MC9S08QE128 .

mcf51-40

Mapeamento de memória do MCF51QE128

mcf51-41

6.2. Memória RAM

Os dois microcontroladores (de 8 e de 32 bits) tem área de memória RAM de variam para cada dispositivo. É necessário uma consulta ao datasheet específico para saber exatamente
qual é a área de memória RAM.

Como em todas as outras arquiteturas de microcontroladores, a memória RAM é dedicada a
armazenamento de dados temporários, que serão perdidos caso a tensão de alimentação fique abaixo do valor de retenção especificado no datasheet.

6.3. Memória ROM (Flash)

Estes μCs armazenam todo o programa que será executado em sua memória ROM/FLASH. Perceba que na arquitetura destes processadores não há memória do tipo EEPROM. Deste modo, dados permanentes, que não podem ser perdidos em caso de falta de energia elétrica, devem também ser armazenados na memória FLASH.

6.3.1. Principais características das memórias FLASH na Freescale

  • Tamanho:
    • MC9S08QE128: 131,072 bytes (256 páginas com 512 bytes cada)
    • MC9S08QE96: 98,304 bytes (192 páginas com 512 bytes cada)
    • MC9S08QE64: 65,536 bytes (128 páginas com 512 bytes cada)
    • MCF51QE128: 131,072 bytes (128 setores com 1024 bytes cada)
    • MCF51QE64: 65,536 bytes (64 setores of 1024 bytes cada)
    • MCF51QE32: 32,768 bytes (32 setores of 1024 bytes cada)
  • Única fonte de alimentação para gravação e escrita.
  • Algoritmo automatizado para escrita e apagamento.
  • Operação rápida para gravação e apagamento.
  • Comando para gravação por rajada, para gravação rápida de grande quantidade de dados.
  • Até 100.000 ciclos de gravação e apagamento para as tensões e voltagens típicas de funcionamento.
  • Esquema flexível de proteção para prevenir gravação ou apagamento acidental
  • Função de segurança para prevenir acessos não autorizados a memória flash e a memória RAM
  • Auto power-down para baixas frequências de leitura.

7. Complete Instruction Set Code – CISC

Os chips da Freescale estudados neste treinamento têm um conjunto completo de instruções implementadas. Isto significa dizer que são CISC. São 256 instruções diferente para cada um dos dispositivos.

O que pode ser algo maçante no primeiro contato, pois estudar cada uma destas 256 instruções é uma tarefa árdua, mostra-se uma vantagem durante a programação em linguagem assembly, já que o programador tem uma vasta gama de opções de instruções para resolver seus problemas.

Como nosso treinamento é de linguagem C, caberá ao compilador transcrever nosso código para linguagem de máquina.

Assim apenas listaremos aqui quais são as instruções utilizadas pelos dois chips, para termos uma referência do que o compilador está fazendo.

7.1. Modos de endereçamento

Uma mesma instrução pode ser utilizada de diversar formas, possibilitando o acesso a áreas diferentes do mapeamento de memória. Uma coisa é uma instrução de movimentação que acessa a memória RAM. Outra coisa é se esta instrução deve se conectar a uma porta de I/O.

7.1.1. Modos de endereçamento do MC9S08QE128

São sete os modos de endereçamento do chip de 8 bits, como pode ser visto abaixo:

mmcf51-45

7.1.2. Modos de endereçamento do MCF51QE128

Já o chip de 32 bits tem 12 diferentes modos de endereçamento, mostrados a seguir:

mcf51-46

7.2. Instruções do MC9S08QE128

mcf51-47
mcf51-48
mcf51-49
mcf51-50
mcf51-51
mcf51-52
mcf51-53
mcd51-54
mcf51-55

7.3. Instruções do MCF51QE128

mcf51-56
mcf51-57
mcf51-58
mcf51-59
mcf51-60
mcf51-61

Referências

Fonte da imagem de destaque.

Outros artigos da série

Curso de C com microcontroladores MCF51QE128 e MC9S08QE128 - Parte 2 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » Curso de C com microcontroladores MCF51QE128 e MC9S08QE128 - Parte 1
Comentários:
Notificações
Notificar
guest
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Souza
Souza
28/11/2016 20:08

Ótimo material.
Amanhã vou olhar com mais atenção.
Em e a partir de "Periféricos do MCF51QE128" as imagem que seguem são, as duas, a mesma imagem. Mas, nada que prejudique.

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link