Mostrando postagens com marcador ARM CORTEX M4. Mostrar todas as postagens
Mostrando postagens com marcador ARM CORTEX M4. Mostrar todas as postagens

quarta-feira, 28 de outubro de 2015

Preparando-se para programar os microcontroladores ARM Cortex M0 e M4

Programar um processador ARM Cortex M0 ou M4 é, aparentemente, uma tarefa complicada. Muitos detalhes são necessários mas, o ideal, é começar da forma mais simples. A figura abaixo mostra um fluxo básico de desenvolvimento de aplicações para o processador ARM Cortex M0 o qual é o mesmo para o modelo M4.
Fluxo básico de desenvolvimento
Programa-se, idealmente, através de código C, C++ ou Assembly. Uma vez compilado, o código gerado dever ser preparado para a carga no processador através de um linker. Esse último processo toma as saídas dos compiladores mais arquivos de configuração, que veremos adiante, e gera o arquivo final de carga ou executável o qual possui formatos diferentes conforme o uso: simulação, carga da memória flash ou depuração.
Para iniciarmos o entendimento desse fluxo ao mesmo tempo que entendemos o funcionamento dos processadores ARM Cortex M0 e M4, precisamos de algumas ferramentas ou, no jargão da área: um toolchain. Muitas das ferramentas de desenvolvimento ARM Cortex são proprietárias o que dificulta o seu uso para aplicações não comerciais. Existe porém, um conjunto de ferramentas abertas desenvolvida para processadores ARM que é totalmente compatível com eles e plenamente utilizável.
O site GCC ARM Embedded (https://launchpad.net/gcc-arm-embedded) possui o conjunto completo de compiladores e ferramental necessário para compilar e gerar aplicações para carga, simulação e depuração desses processadores. Como a maioria dos fornecedores de microcontroladores que utilizam esses processadores possuem suas ferramentas baseadas em MS-Windows, utilizaremos o toolchain para esse SO.

Baixemos a versão executável para win32 conforme a figura acima e, após sua conclusão, instalemo-la.  


Siga os passos de instalação e, ao final, não esqueça de ligar a opção "Add path to environment variable" conforme indicado abaixo.


Feche as janelas e abra uma nova janela de linha de comando e execute o comando arm-none-eabi-gcc -v. Se tudo correu bem, a resposta deve ser semelhante à mostrada abaixo:


Uma pausa aqui. O último comando retornou uma informação importante: Target: arm-none-eabi .

O compilador GCC pode gerar executáveis para diversas arquiteturas como: x86, ARM v4/v5/v6/v7 entre outras. Em computadores pessoais, GNU GCC é um compilador voltado para aplicações escritas para LINUX X86 para PC. Quando desenvolvemos em uma plataforma como por exemplo MS-Windows para uma plataforma destino distinta como, por exemplo, ARM Cortex, temos um ferramental denominado cross compiler. Devido à diversidade de arquiteturas diferentes toolchains existem. A convenção para a denominação desses ferramentais é a seguinte:

arch [-vendor] [-os] - eabi

  • arch: corresponde à arquitetura destino (no caso aqui: ARM)
  • vendor: corresponde ao fornecedor do ferramental
  • os: refere-se ao sistema operacional destino
  • eabi: significa Embedded Application Binary Interface ou Interface Binária de Aplicações Embarcadas

Dessa forma, estamos trabalhando com um toolchain de arquitetura destino ARM, sem fornecedor e sem sistema operacional e para aplicações binárias embarcadas: arm-none-eabi.

Finalmente, por estarmos em ambiente de desenvolvimento em MS-Windows, precisamos de algumas ferramentas auxiliares nativas do ambiente Linux. Uma publicação dessas ferramentas suficiente para o que precisamos é a Minimalist GNU for Windows cujo download está em http://sourceforge.net/projects/mingw/files/ . Baixemos o instalador e procedamos à instalação.
Certifique-se de selecionar as opções mingw-development-kit e msys-base na tela do MinGW Intallation Manager. 



 Selecione Apply changes na no menu Intallation.


E novamente Apply.


Ao final da instalação, feche as janelas e abra uma nova janela de linha de comando. Direcione ao diretório de executáveis do MinGW através do comando: cd C:\MinGW\msys\1.0\bin.
Execute os comandos: make -v e dd --version. Uma resposta semelhante à abaixo deve aparecer:


Por último, acrescente o diretório C:\MinGW\msys\1.0\bin à variável PATH do Windows.

REFERÊNCIAS:
"The Definitive Guide to the ARM Cortex-M0",Joseph Yiu
https://launchpad.net/gcc-arm-embedded
https://en.wikipedia.org/wiki/Application_binary_interface
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html
http://www.mingw.org/

sexta-feira, 23 de outubro de 2015

Microcontroladores ARM Cortex M0 e M4

Uma família de microcontroladores muito difundida no mercado possui processadores ARM-CORTEX de 32 bits. São processadores de baixo consumo e alta performance. Com resposta rápida a interrupções, são ideais para equipar microcontroladores. Possuem um reduzido conjunto de instruções (da ordem de 60 para o processador CORTEX-M0), permitindo economia de memória de programa, desejável para aplicações embarcadas. Esses processadores são licenciados para fabricantes que incorporam periféricos e produzem microcontroladores para diversos fins 

Licenciamento do processador ARM Cortex para um microcontrolador
Os processadores da família ARM possuem dois tipos de arquitetura de barramento: Von Neumann e Harvard. Na primeira, dados e código residem na memória acessada pelo mesmo barramento permitindo alteração do código pelo próprio código. É o caso da arquitetura usada no processador ARM CORTEX M0 mostrada abaixo. Nota-se que o mesmo barramento AHB dá acesso a toda a memória.
Arquitetura básica do processador ARM Cortex M0
Já para os processadores ARM CORTEX M3 e M4, a arquitetura de barramento é Harvard possuindo um barramento AHB para acesso da memória ROM, onde reside o código, e outro barramento AHB para acesso à memória RAM usada para dados.

Arquitetura básica do processador ARM Cortex M4
Para facilitar o desenvolvimento de aplicações entre diversos fornecedores de microcontroladores com o processador ARM Cortex, utiliza-se a camada de desenvolvimento CMSIS (Cortex Microcontroller Software Interface Standard) conforme a figura abaixo.  Isso permite o rápido porte de um microcontrolador para outro,
Abstração do hardware pela camada CMSIS
Essa camada é, na verdade, uma abstração das áreas que dão acesso aos periféricos, registradores de controle, memória e vetores de interrupção facilitando o trabalho de programação ao mesmo tempo que permite conhecer o funcionamento do microcontrolador.

Programando em C, normalmente é necessário apenas a inclusão de um header disponibilizado pelo fornecedor do microcontrolador para o modelo específico usado. Também é necessário incluir o código de inicialização compatível com o CMSIS.

Veremos nos próximos posts exemplos de uso e acesso aos diversos periféricos de um microcontrolador ARM CORTEX.

REFERÊNCIAS:
"The Definitive Guide to the ARM Cortex-M0",Joseph Yiu
http://www.arm.com/products/processors/cortex-m/cortex-m-system-design-kit.php
http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php