Neste artigo vamos conhecer o microcontrolador ARM MSP32P402, um Cortex-M4F muito apropriado para projetar equipamentos modernos. Na atualidade, o crescimento dos microcontroladores ARM é notório, mas ao analisar sua documentação eles parecem complicados de entender e programar. Neste artigo vamos perceber que os microcontroladores ARM (*) são de fácil compreensão e programação.

 

(*) Sugerimos ler antes o artigo MIC145 - Começando a programar os Microcontroladores ARM (de 32 bits), do mesmo autor.

Programação, é uma palavra que significa fazer um plano ou planificar algo que se quer ou que se deseja fazer. Esta palavra é comum a todos os microcontroladores, microprocessadores, DSPs, etc. Qualquer equipamento que tenha um potencial para processar instruções pode ser programado.

 

Instruções, é outra palavra chave dentro da programação. Suponhamos um exemplo e imaginemos que temos um carro programável, quando então podemos dizer: dê a partida, vire para a direita 20 graus, depois avance e siga adiante 3 metros e finalmente gire para esquerda 15 graus, avance 2 metros e detenha-se. Podemos ver em nosso exemplo que o carro programável executa instruções como: ligar, virar a direita, virar à esquerda, parar. Isto é programar. Usar instruções para executar algo.

 

Un carro, como entendemos, é um veículo que pode ser mover de um lado a outro. Portanto, sua programação é muito dedutiva ou intuitiva. Um microcontrolador é muito semelhante a um carro programável, só que executa outras classes de instruções. As instruções que um microcontrolador pode executar são somar, subtrair, dividir, multiplicar, comparar, mover um dado de um lugar para outro, etc. A lista completa de instruções que cada microcontrolador pode executar é listada em suas folhas técnicas.

 

Executar é outra palavra chave dentro da programação de microcontroladores. As instruções dentro de um microcontrolador são executadas pela unidade central de processamento ou CPU. Algumas instruções vem acompanhadas de dados ou variáveis. Na figura 1 podemos observar um diagrama de blocos de um microcontrolador básico. Na memória de programa se armazenam as instruções. A CPU executa as instruções e armazena os dados ou variáveis na memória RAM. Aqui começamos uma aventura no mundo da programação dos microcontroladores ARM, pois a ideia é entender que têm ou de que estão compostos, que podem fazer e assim poder programá-los.

 

Figura 1. Diagrama básico de un microcontrolador
Figura 1. Diagrama básico de un microcontrolador

 

 

 

Classificação dos Processadores ARM

Os processadores ARM podem ser classificados segundo as instruções que podem executar e suas possíveis aplicações, sendo divididos em 3 grandes grupos. A figura 2 mostra esta classificação.

 

 

Figura 2. Família de processadores ARM
Figura 2. Família de processadores ARM

 

 

Cortex-A - Procesadores para aplicações: são usados em equipamentos ou dispositivos eletrônicos onde se requer um sistema operacional (OS) como Linux, Windows, sistema operacionais para móveis e celulares (Android, Windows Mobile, etc.), o que torna estes processadores apropriados para usar em computadores, servidores, telefones celulares, tablets, etc.

 

Cortex-R Processadores para Tempo Real: são usados em equipamentos que devem executar instruções no menos tempo possível como, por exemplo, controle de veículos, controle de freios para automóveis, robôs, aviões, câmeras de vigilância e fotográficas, periféricos de computadores, etc.

 

Cortex-M Processadores para Microcontroladores: são usados em eletrodomésticos, equipamentos de medida, eletrônica de controle industrial, jogos, etc.

 

Os processadores Cortex-M podem ainda ser divididos em outra categorias e instruções que podem executar, conforme mostra a figura 3.

 

 

Figura 3 . Set de Instruções suportados pelo Cortex-M - Clique para ampliar
Figura 3 . Set de Instruções suportados pelo Cortex-M

 

 

Cortex-M0 e Cortex-M0+: são processadores de muito baixo consumo e baixo custo;

 

Cortex-M1: Um procesador pequeño otimizado para FPGA (Fiel Programmable Gate Array).

Cortex-M3: um procesador de baixo consumo com um set de instruções rico, divisões e multiplicação acumulativas e capacidades e depuração e trace.

Cortex-M4: com instruções para tarefas de DPS, multiplicações acumulativas mais rápidas e capacidade para depuração e trace.

Cortex-M4F: com as mesmas capacidades que o Cortex-M4, mais uma unidade para aritmética de ponto flutuante de simples precisão.

 

Podemos ver na figura 2 e na figura 3 que o microcontrolador MSP432P401 pertence a família Cortex-M4F, ou seja, um dos melhores da família Cortex-M (microcontroladores).

 

 

O Microcontrolador MSP432P401

O microcontrolador MSP430P401 apresenta as seguintes características:

CPU ARM Coter-M4F.

Frequência até 48 MHz

Memoria de Programa de até 256 KBytes

Memoria RAM de 64 KBytets.

Memoria ROM de 32 KBytes com livrarias de periféricos.

RTC (Real Time Clock)

4 Timers de 16 Bits

2 Timers de 32 Bits

UART

SPI

I2C.

Conversor Analógico para Digital de 14 bits (ADC).

2 Comparadores Analógicos

48 I/O com capacidade de interrupção.

Hardware para criptografía de dados.

Monitor de tensão.

Módulos para depuração e acompanhamento (Trace).

Muito baixo consumo, ideal para equipamentos a bateria.

 

Dentre as muitas aplicações em que se pode usar este microcontrolador podemos citar:

Medidores de fluxo.

Medidores elétricos.

Automação residencial.

Automação industrial.

Termostatos inteligentes.

Painéis de Acesso.

Monitores de gas.

Módulos de comunicação.

Relógios.

Medidores digitais wireless.

Equipamentos médicos portáteis.

Medidores de glicose.

Dispositivos portáteis.

 

A figura 4 mostra o diagrama em blocos do microcontrolador MSP432P401. Podemos notar a CPU Cortex-M4F, as memórias flash, RAM, ROM, os GPIO, ADC, comparadores analógicos, timers, UARTs, SPI, I2C, etc.

Os microcontroladores ARM, para ter melhor desempenho,usam vários barramentos para interconectar suas memórias e periféricos, mas no diagrama da figura 4, foram omitidos para facilitar o entendimento. Graças as funções e bibliotecas que a Texas Instruments desenvolveu e que entrega ao programador em um kit de desenvolvimento de software (SDK) chamado Simple Link, estes barramentos são transparentes na hora de programar.

 

Figura 4.Diagrama  em blocos do microcontrolador MSP432P401 
Clique para ampliar
Figura 4.Diagrama em blocos do microcontrolador MSP432P401

 

 

Placa de Desenvolvimento

A Texas Instruments criou um kit de desenvolvimento de fácil uso chamado MSP-EXP432P401R LaunchPad. Com este kit podemos começar a programar o MSP432P401 e testar seus múltiplos periféricos e capacidades.

A figura 5 mostra uma imagem deste kit. Deve-se notar que existem 2 kits MSP-EXP432P401R, chamados Ver 1.0 (Black) e Ver. 2.0 (Red). A diferença entre estas duas versões é principalmente estética e para melhorar seu uso por parte do programador ou usuário. A mostrada na figura 5 é a Ver 2.0.

Muitas ferramentas de desenvolvimento ou IDE (Editores e Compiladores) estão disponíveis para programar o kit como: o IDE Code Composer Sudio, IDE IAR Embedded Workbench, o IDE Leil uVision.

 

Figura 5. Kit de Desenvolvimento MSP-EXP432P401R
Figura 5. Kit de Desenvolvimento MSP-EXP432P401R

 

 

A figura 6 mostra um diagrama de blocos do kit MSP-EXP432P401R.

Podemos observar neste diagrama que se usa um cristal externo de 48 MHz, 40 pinos para conexão, botões e LEDs para interagir com o usuário, uma interface JTAG para finalidades de depuração, um conector USB para conexão com o computador. As figuras 7 e 8 mostram a pinagem da placa de desenvolvimento. Podemos observar as várias entradas analógicas, GPIOs, UART, SPI, I2C, PWM, Timers, Entradas de captura, etc. Esta pinagem é um padrão compatível com uma série de módulos projetados para este tipo de placa. É importante estar atendo e verificar se o módulo é 100% compatível ou se deve ser feita alguma modificação.

 

Figura 6. Diagrama de blocos do MSP-EXP432P401R
Figura 6. Diagrama de blocos do MSP-EXP432P401R

 

 

 

Figura 7. Pinagem dos conectores J1 e J3 do kit MSP-EXP432P401R
Figura 7. Pinagem dos conectores J1 e J3 do kit MSP-EXP432P401R

 

 

Figura 8. Pinagem dos conectores J2 e J4 do kit MSP-EXP432P401R
Figura 8. Pinagem dos conectores J2 e J4 do kit MSP-EXP432P401R

 

 

A figura 9 mostra a pinagem do microcontrolador MSP432P401RIPZ onde podemos observar seu rico set de periféricos indicados anteriormente.

 

 

Figura 9. Pinagem do microcontrolador MSP432P401RIPZ
 - Clique na imagem para ampliar
Figura 9. Pinagem do microcontrolador MSP432P401RIPZ

 

 

 

Ferramentas de Programação

A Texas Instruments desenvolveu um kit de desenvolvimento de software o SDK (Software Development Kit) para facilitar o uso e programação do microcontrolador. A figura 10 mostra os componentes que formam o SDK:

 

Figura 10. Componentes do SDK SimpleLink
Figura 10. Componentes do SDK SimpleLink

 

 

OS/Kernel : é um sistema operacional em tempo real (ROS – real Time Operatin System) muito útil para simplificar a tarefa de programação.

POSIX : são funções (API – Aplication Programming Interface) para habilitar o código de aplicação para ser portátil e ter compatibilidade com outros OS/Kernels.

DriveLib : é uma biblioteca (HAL – Hardware Abstraction Layer) que cria uma camada entre o acesso mais baixo dos periféricos e a aplicação.

TI Drivers : são funções (API) que permitem acessar os periféricos de forma fácil.

Graphics : uma biblioteca para manusear displays (LCDs) e imagens.

BLE/WiFi : Biblioteca para conexões Blueth e WiFi.

Sub-1 GHz: Biblioteca para conexões Sub-1 GHz.

Examples: Código exemplo para demonstrar o uso das bibliotecas anteriores.

 

A todas estas funções ou rotinas (SDK) a Texas Instruments deu o nome SimpleLink. Com a prática veremos seu uso fácil e sua utilidade, pois o programador não tem que se preocupar com a criação de rotinas para controlar os periféricos. Assim, o programador pode se concentrar no aplicativo e ganhar tempo para terminar o projeto;

 

 

PROGRAMA EXEMPLO

Um dos programas exemplo mais utilizado para microcontrolador é acender e apagar um LED (Blinking). Nas bibliotecas (SDK) do microcontrolador MSP432P401, também encontramos este exemplo para acender e apagar um LED.

 

int main(void)

{

volatile uint32_t i;

 

// Stop watchdog timer

WDT_A_hold(WDT_A_BASE);

 

// Set P1.0 to output direction

GPIO_setAsOutputPin(

GPIO_PORT_P1,

GPIO_PIN0

);

 

while(1)

{

// Toggle P1.0 output

GPIO_toggleOutputOnPin(

GPIO_PORT_P1,

GPIO_PIN0

);

 

// Delay

for(i=100000; i>0; i--);

}

}

 

Explicando o programa, podemos dizer que a primeira função que o programa chama é main(). A seguinte é uma linha de código que declara uma variável chamada i:

 

volatile uint32_t i;

 

A linha seguinte de código é para o timer watchdog:

 

WDT_A_hold(WDT_A_BASE);

 

Temos então uma linha que configura o pino 0, da porta P1 como saída.:

GPIO_setAsOutputPin(

GPIO_PORT_P1,

GPIO_PIN0

);

 

A linha seguinte de código é usada para que o programa sempre se repita, ou seja, é um loop infinito::

while(1)

 

Temos então uma linha de código que é usada para midar o estado (toggle) do pino 0 da porta P1.:

GPIO_toggleOutputOnPin(

GPIO_PORT_P1,

GPIO_PIN0

);

A linha seguinte de código é usada para retardar (delay) o programa por um tempo para que possamos observar as piscadas do LED:

for(i=100000; i>0; i--);

 

Para compilar e editar o exemplo anterior foi usado o IDE Keil. A figura 11 mostra este ambiente de desenvolvimento.

 

Figura 11. Ambiente de desenvolvimento Keil
Figura 11. Ambiente de desenvolvimento Keil

 

 

Outra vantagem de se usar os microcontroladores MSP432P401, é sua compatibilidade com o modelo de programação Arduino. A Texas Instruments oferece uma IDE de desenvolvimento chamada Energia, que é muito parecida com a IDE de Arduino. A figura 12 mostra o ambiente de trabalho para a placa

MSP-EXP432P401R. É necessário instalar a placa na IDE, e para fazer isso vá ao menu de ferramentas>placa>gestor de Placas. A seguir um exemplo para acender e apagar um LED usando a IDE Energia:

 

Figura 12. Ambiente de Desenvolvimento da IDE Energia
Figura 12. Ambiente de Desenvolvimento da IDE Energia

 

 

#define LED RED_LED

 

void setup() {

pinMode(LED, OUTPUT);

}

 

void loop() {

digitalWrite(LED, HIGH);

delay(1000);

digitalWrite(LED, LOW);

delay(1000);

}

 

 

Podemos observar que o programa é muito simples. Primeiro na função void setup(), se configura o pino da porta para ser saída

pinMode(LED, OUTPUT);

 

Em seguida, na função do loop infinito, a sáida do LED é colocada num nível alto (HIGH), com a seguinte linha de código:

digitalWrite(LED, HIGH);

 

Retardamos então por 1 000 milissegundos (1 segundo), com a seguinte linha de código:

delay(1000);

 

Depois, colocamos em nível baixo (LOW) a saída do LED com a seguinte linha de código:

digitalWrite(LED, LOW);

 

E, depois voltamos a retardar por 1 000 milissegundos (1 segundo), com a seguinte linha de código:

delay(1000);

 

Este código que se encontra dentro da função void loop(), se repete infinitamente e assim o LED vai acender e apagar (blinking).

 

Como podemos observar, começar a programar um microcontrolador ARM MSP432P401 é muito simples, e isso também é válido para qualquer microcontrolador ARM daa familia Cortex-M.

 

 

Vantagens em usar o SDK SimpleLink

A Texas Instruments desenvolveu todo um ecossistema ou portafolio em torno do SDK SimpleLink para facilitar o projeto com os microcontroladores MSP432P401. A figura 13 mostra um exemplo do que foi dito anteriormente. Como podemos ver , se desenvolveu um termostato e se for desejado acrescentar uma conexão wireless, só devemos adicionar ao código original as funções (bibliotecas) e o hardware necessário para a aplicação desejada. SempleLiknk da suporter para as conexões WiFi, Bluetooth, Sub 1-GHz. Isto permite o reuso do código e a escalabilidade em 100%.

 

Como conclusão, podemos dizer que conhecer um microcontrolador ARM é uma questão de prática e também conhecer a terminologia que está em torno dos microcontroladores ARM. Nos próximos artigos faremos uso dos diferentes recursos que oferece o microcontrolador ARM MSP432P401 e o SKD SimpleLink.

 

 

Figura 13. Exemplo de reuso de código com o SDK SimpleLink
Figura 13. Exemplo de reuso de código com o SDK SimpleLink