Compilando a CMSIS DSPLIB para os Cortex M4 da TI

CMSIS DSPLIB
Este post faz parte da série CMSIS DSPLIB para o MSP432. Leia também os outros posts da série:

Caros leitores, neste artigo ensinaremos como compilar a CMSIS-DSPLIB na IDE Code Composer Studio (CCS) para os microcontroladores ARM Cortex M4 da Texas Instruments (Stellaris, Tiva, MSP432), ampliando as possibilidades em seus projetos com estes dispositivos.

 

Nos últimos anos presenciamos um crescimento muito grande da eletrônica embarcada e também de sua popularidade, em especial com o surgimento/popularização dos grupos “makers”. Novas arquiteturas surgiram, outras foram atualizadas, mas o que é inegável é a quantidade de microcontroladores que temos disponíveis para nossos projetos.

 

Uma das arquiteturas que mais cresceram e que cada vez mais fazem parte dos projetos são os microcontroladores com núcleo ARM da família Cortex M.

 

Geralmente os dispositivos desta família, em especial os modelos M3 e M4 (e mais recentemente o M7), possuem grande capacidade de processamento, podendo até serem empregados em tarefas envolvendo processamento de sinais, já que possuem instruções DSP (Digital Signal Processor) nativas bem como instruções SIMD (Single Instruction Multiple Data). Com ponto especial para os modelos M4 e M7, que podem incluir (e tradicionalmente possuem) uma FPU (Float Point Unit), o que irá acelerar muito o processamento de instruções matemáticas utilizando notação de ponto flutuante ou mesmo de ponto fixo. Para conhecer um pouco mais sobre as instruções SIMD indico a leitura deste artigo do Felipe Neves.

 

Entretanto, muito usuários que buscam esses tipos de aplicações não tomam conhecimento da existência da “biblioteca” CMSIS, mais especificamente da CMSIS-DSPLIB que pode acelerar em muito o desenvolvimento ou mesmo adicionar novas funcionalidades. A ARM CMSIS, ou “Cortex Microcontroller Software Interface Standardé uma camada de abstração de hardware padronizada, criada pela ARM. O nosso foco é no bloco CMSIS-DSP, uma biblioteca com mais de 60 funções (tradicionalmente utilizadas no processamento de sinais), otimizada para utilizar a FPU quando disponível e também as instruções SIMD.

 

CMSIS DSPLIB - Estrutura da CMSIS
Figura 1 - Estrutura da CMSIS

 

Um dos dificultadores na sua utilização tem relação com dois pontos, limitada quantidade de informações e dificuldade de encontrar as bibliotecas compiladas para uso, e neste ponto surgiu a ideia deste artigo (já que passei bastante tempo pesquisando sobre como utilizar a DSPLIB em uma launchpad).

 

Existe um tutorial, originalmente criado para os Stellaris, mas depois de testes constatei que o mesmo procedimento (com pontuais modificações) é aplicável a linha Tiva e aos mais recentes MSP432. O documento original (“Using the CMSIS DSP Library in Code Composer Studio for TM4C MCUs”) pode ser encontrado neste link.

 

Neste artigo demonstrarei como compilar a CMSIS DSPLIB para o MSP432 utilizando a IDE Code Composer Studio - CCS, entretanto indicarei o ponto onde devemos realizar modificações para os outros uC’s.

 

 

Baixando os arquivos necessários

 

Inicialmente será necessário realizar o download da CMSIS compatível. O tutorial original se baseia na versão r4p2, entretanto nos testes que realizei a versão mais recente r4p5 funciona normalmente (caso encontrar algum problema deixe comentário ao final do artigo). Também será necessário realizar o download de alguns headers fornecidos pela TI para que a biblioteca se torne compatível. Descompacte ambos os arquivos.

 

Agora será necessário substituir alguns arquivos da CMSIS original pelos header fornecidos pela TI. Siga os caminhos dos headers, copie-os do header da TI e cole na respectiva pasta da CMSIS original (aparecerá o aviso para substituir o arquivo, marque SIM).

 

 

Compilando a DSPLIB

 

Abra o CCS (estou utilizando o CCS v6.2 no Windows 7), clique em “Project >> New CCS Project”. Selecione o modelo do uC, neste caso o MSP432P401R, escolha um nome para o projeto, de preferência algo que identifique para qual uC e qual a versão da CMSIS. Selecione um projeto vazio (sem o main.c). Clique em Advanced settings, então selecione:

  • Output type: Static Library
  • Output format: eabi (ELF)
  • Device endianess: little

 

PS.: Caso for compilar para outro dispositivo (Stellaris ou Tiva) é nesse ponto que você deve selecionar o dispositivo correto.

 

PS.: No caso do MSP432 as opções output format e device endianess são fixas, mas nos Stellaris e Tiva elas estão ativas para configuração.

 

Criando o projeto no CCS
Figura 2 - Criando o projeto no CCS

 

Uma pasta com um projeto vazio surgiu e nela iremos importar os arquivos necessários da CMSIS para posterior build. Mas antes, iremos criar um PATH VARIABLE para facilitar a portabilidade do projeto, ou mesmo garantir que após uma atualização no seu PC você não terá que repetir todos os passos. Clique em “Resource >> Linked Resource” e então adicione um novo “Path variable”, este deverá apontar para a pasta da CMSIS que anteriormente você baixou e descompactou. Se você verificar, no tutorial original não existe este passo, mas isso facilita a portabilidade. Por exemplo, você trocou a CMSIS de diretório, ao tentar compilar receberá diversos erros. Utilizando este método será necessário apenas corrigir o caminho deste PATH VARIABLE.

 

Criando o PATH VARIABLE
Figura 3 - Criando o PATH VARIABLE

 

Agora iremos importar os arquivos necessários. Clique com o botão direito sobre o projeto que criou e então em “Import >> Import..”. Na tela que surgir selecione “General >> File System e então clique em “Next”. Na próxima tela busque pela localização do diretório “...\CMSIS\DSP_Lib\Source”. Neste ponto marque o diretório “Source”, após isso desmarque “ARM”, “GCC”, e dentro de “TransformFunctions” desmarque “arm_bitreversal2.S. Marque a opção “Overwrite existing resources without warning”. Clique em “Advanced”, marque “create links in workspacee então em “create link locations relative to” selecione o PATH VARIABLE que você criou. Clique em “FINISH” para importar os arquivos.

 

Importando os arquivos
Figura 4 - Importando os arquivos

 

Após este processo diversas pastas virtuais irão surgir dentro do projeto, conforme a figura a seguir.

 

Arquivos dentro do projeto
Figura 5 - Arquivos dentro do projeto

 

Uma parte do processo já foi realizada, agora falta editar as propriedades do projeto, para isso clique com o botão direito sobre o projeto e selecione “Properties”. Vá até ao submenu “Build >> MSP432 Compiler >> Processor Options” (para o Stellaris ou Tiva estes serão diferentes, mas a sequência é a mesma). Verifique se o “Target processorestá como 7M4, se o “Designate code state” está em “16” e se o “floating point support” está em “FPv4SPD16”.

 

Processor Options
Figura 6 - Processor Options

 

Agora em “Optimization”, em “Optimization level” selecione “2 - globals”, e em “speed vs size” selecione a opção que melhor se adequar, eu tenho preferido manter no nível “2”, mantendo um bom equilíbrio entre tamanho e desempenho.

 

Configurações de otimização
Figura 7 - Configurações de otimização

 

Expanda “Advanced options” e selecione “Assembler options”. Marque o ítem “Use unified assembly language (--ual)”.

 

Assembler Options
Figura 8 - Assembler Options

 

Em “Diagnostic options” desmarque a opção “Emit diagnostic identifier numbers”.

 

Diagnostic Options
Figura 9 - Diagnostic Options

 

Agora em “Include Options” adicione um “#include search path”, clique em adicionar, após isso clique em “Variables” e busque pela PATH VARIABLE que você criou. Após isso clique em “Extend” e selecione a pasta “Include”.

 

Include search path
Figura 10 - #Include search path

 

Caro leitor, não desanime, estamos quase lá. Em “Advanced Options >> Predefined Symbols”, Adicione os seguintes valores “ARM_MATH_CM4” e “__FPU_PRESENT=1” (ambos sem as aspas).

 

Predefined Symbols
Figura 11 - Predefined Symbols

 

Em “Runtime Model Options” selecione “On” em “Place each function in a separate subsections”.

 

Runtime Model options
Figura 12 - Runtime Model options

 

Finalmente chegamos ao final das edições, clique em “Ok”. Após estes procedimentos poderemos realizar o tão esperado Build. Neste ponto, aproveite seu tempo para preparar um bom café e degustá-lo (afinal, todo desenvolvedor de embarcados adora café, não é!?) já que o processo pode demorar bons minutos dependendo da sua máquina.

 

Build da CMSIS DSPLIB
Figura 13 - Build da CMSIS DSPLIB

 

Ao final do processo será gerado um arquivo “.lib” que está dentro da pasta “Debug“ do seu projeto. O arquivo terá o mesmo nome do seu projeto. Neste ponto é interessante movê-lo para dentro da pasta da CMSIS, mais especificamente para a sub-pasta “Lib”. Dentro dela crie uma pasta “CCS” e então cole/mova o arquivo.

 

Caro leitor, chegamos ao final deste artigo. Agora você já pode compilar sua CMSIS DSPLIB. No próximo artigo apresentaremos abordaremos como testá-la, como adicioná-la a projetos já existentes no CCS.

 

Qualquer dúvida ou comentário, utilize o espaço abaixo. Um abraço e até a próxima!

Outros artigos da série

Executando um exemplo da CMSIS DSPLIB para o MSP432 >>
Este post faz da série CMSIS DSPLIB para o MSP432. Leia também os outros posts da série:
NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Haroldo Amaral
Doutorando em Eng. Elétrica pela Poli-USP, mestre em Eng. Elétrica pela UNESP-Bauru e graduado em Tecnologia em Sistemas Biomédicos pela FATEC-Bauru.Um apaixonado por eletrônica que adora passar seu tempo "queimando alguns componentes" e escovando alguns bits. Entre outras paixões estão a música, uma boa reunião com os amigos, papear sobre tecnologia e afins.

Deixe um comentário

avatar
 
  Notificações  
Notificar