Multicores assimétricos no desenvolvimento de sistemas embarcados – Parte 3: Firmware M4

Multicore Communication library Multicores assimétricos prática Firmware M4
Este post faz parte da série Multicores assimétricos

Dando sequência à série de artigos que visa auxiliar no desenvolvimento de produtos que façam uso de multicores assimétricos, baseado no computador em módulo Colibri VF61 (Freescale® Vybrid), este capítulo apresenta o processo de geração do firmware para gravação do seu core ARM Cortex-M4.

Baixando a ToolChain

Para compilar o firmware para o M4, usamos outra toolchain. Baixe a toolchain na pasta indicada executando os comandos:

mkdir /home/usuario/curso/ecos_toolchain
cd /home/usuario/curso/ecos_toolchain
wget ftp://ftp.gwdg.de/pub/misc/sources.redhat.com/ecos/gnutools/i386linux/test/ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2
tar xjvf ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2

Criando o Projeto

O projeto para o Cortex-M4, será baseado em um “makefile” próprio. Para criar o projeto, na aba Project Explorer, aperte botão direito e selecione:

New > C Project

 

Multicores assimétricos: Firmware ARM Cortex-M4 - Criando projeto
Figura 1- Configurando novo projeto no M4

Em seguida uma janela com os tipos de projetos irá abrir. Selecione “Makefile Project” > “Other Toolchain”.

Multicores assimétricos: Firmware ARM Cortex-M4 - Toolchain
Figura 2 – Configurando Toolchain para M4

Com o projeto criado, clique com o botão direito no projeto e crie 3 arquivos“HelloWorld_M4.c”, “HelloWorld_M4.h” e “makefile”.

New > File

Acrescente o conteúdo de cada arquivo:

HelloWorld_M4.c

/*
* HelloWorld_M4.c
*
* (c) 2015 Toradex AG
*/
#include <stdlib.h>
#include <cyg/hal/hal_intr.h>
#include <cyg/hal/hal_if.h>
#include <math.h>
#include "HelloWorld_M4.h"

#define CYGHWR_HAL_VYBRID_PORT_ALT_GPIO 0
#define CYGHWR_HAL_VYBRID_PORT_INPUT 0x21
#define CYGHWR_HAL_VYBRID_PORT_OUTPUT 0x22

// PTB19 => GPIO 41 => SO-DIMM 45 => Viola X9, Pin 16

//            SODIMM    GPIO    PORT     IRIS X16
// BOTAO1     98        46      PORTC_1  13
// BOTAO2     133       88      PORTD_9  14
// BOTAP3     103       48      PORTC_3  15
// LED1       101       47      PORTC_2  16
// LED2       97        50      PORTC_5  17
// LED3       85        53      PORTC_8  18

#define BOTAO1 CYGHWR_HAL_VYBRID_PIN(C, 1, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_INPUT)
#define BOTAO2 CYGHWR_HAL_VYBRID_PIN(D, 9, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_INPUT)
#define BOTAO3 CYGHWR_HAL_VYBRID_PIN(C, 3, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_INPUT)
#define LED1 CYGHWR_HAL_VYBRID_PIN(C, 2, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)
#define LED2 CYGHWR_HAL_VYBRID_PIN(C, 5, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)
#define LED3 CYGHWR_HAL_VYBRID_PIN(C, 8, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)

// PTB19 => GPIO 41 => SO-DIMM 45 => Viola X9, Pin 16
#define PUL_PWM CYGHWR_HAL_VYBRID_PIN(B, 19, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)

//Control variables

//Main Thread
int main(int argc, char **argv)
{
    diag_printf("----------------------\n");
    diag_printf(" eCos servo drive demo\n");
    diag_printf("----------------------\n");

    // Initialize GPIO
    hal_set_pin_function(LED2);

    while (true)
    {
        hal_gpio_set_pin(LED2);
        cyg_thread_delay(500);
        hal_gpio_clear_pin(LED2);
        cyg_thread_delay(500);
    }
}

HelloWorld_M4.h

/*
* HelloWorld_M4.h
*
* (c) 2015 Toradex AG
*/

#include <stdio.h>
#include <unistd.h>

#include <cyg/infra/cyg_type.h>
#include <cyg/infra/diag.h>
#include <cyg/hal/hal_io.h>
#include <cyg/hal/var_io.h>
#include <cyg/hal/var_io_gpio.h>
#include <cyg/io/io.h>
#include <cyg/io/serialio.h>
#include <cyg/hal/hal_intr.h>
#include <cyg/hal/hal_if.h>
#include <cyg/kernel/kapi.h>

#ifndef HELLOWORLD_H_
#define HELLOWORLD_H_

#define MCC_NODE_A5         (0)
#define MCC_NODE_M4         (0)
#define MCC_SENDER_PORT     (1)
#define MCC_RESPONDER_PORT  (2)

void thread_mcc_fn(void);

#endif /* HELLOWORLD_H_ */

Makefile

all: HelloWorld_M4.c
    ~/curso/ecos_toolchain/gnutools/arm-eabi/bin/arm-eabi-gcc -g -I./ -g -I./build-tree/install/include HelloWorld_M4.c -L./build-tree/install/lib -Ttarget.ld -Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Wno-write-strings -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-exceptions -nostdlib -mcpu=cortex-m4;
    ~/curso/ecos_toolchain/gnutools/arm-eabi/bin/arm-eabi-objcopy -O binary a.out HelloWorld_M4.bin
clean:
    $(RM) HelloWorld_M4.bin a.out

Compilando o projeto

Antes de compilar o projeto, uma série de arquivos includes são necessários. Copie para dentro do projeto a pasta encontrada dentro da sua máquina virtual em:

cp /home/usuario/curso/ecos_toolchain/build-tree.tar.bz2 /home/usuario/curso/workspace/HelloWorld_M4/
cd /home/usuario/curso/workspace/HelloWorld_M4/
tar xjvf build-tree.tar.bz2

Agora podemos compilar os exemplos usando o comando CTRL + B. Ou por meio do menu:

Project > Clean...
Project > Build All

Executando o Firmware no M4

Para executar o firware no M4, é necessário alterar uma configuração no uBoot. Uma vez alterada e salva, não é necessário realizar outra vez.

Pare o uBoot no ao ligar a placa apertando qualquer tecla no terminal nos primeiros 3 segundos e entre com os seguintes comandos:

Colibri VFxx # set memargs mem=240M
Colibri VFxx # set fdt_high 0x88000000
Colibri VFxx # saveenv

Copie o firmware gerado para placa usando SSH:

scp /home/usuario/curso/workspace/HelloWorld_M4/HelloWorld.bin root@192.168.10.2:/home/root/

Para executar o Firmware no M4, acesse o terminal da placa, suba o módulo mcc e em seguida lance a aplicação:

modprobe mcc
mqxboot /home/root/HelloWorld.bin 0x8f000400 0x0f000411

Multicores assimétricos

Multicores assimétricos no desenvolvimento de sistemas embarcados – Parte 2: Eclipse Multicores assimétricos no desenvolvimento de sistemas embarcados – Parte 4: Prática
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
3 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Diego Codevilla
22/07/2016 06:29

Hello! Thank you for sharing these great articles series!

I have trouble copying build-tree.tar.bz2 to my workspace… (cp /home/my_user/curso/ecos_toolchain/build-tree.tar.bz2 /home/my_user/curso/workspace/HelloWorld_M4/)

It seems that build-tree.tar.bz2 doesn’t exist in ecos_toolchain/ folder

¿Where can I download this file?

Thanks in advance!

Home » Software » Sistemas Operacionais » Multicores assimétricos no desenvolvimento de sistemas embarcados – Parte 3: Firmware M4

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: