Projeto com a FRDM-K64F e KDS - Suporte ao KSDK

Na primeira parte do artigo, expliquei como gerar código sem suporte à biblioteca KSDK e sem suporte ao Processor Expert. Dando continuidade ao assunto, neste artigo explicarei como gerar código com suporte ao KSDK e sem suporte ao Processor Expert.

 

Apenas para informação, esta é a sequencia de post proposta na primeira parte:

 

 

O que é o KSDK?

 

É uma coleção de códigos-fontes que auxiliam no acesso aos periféricos e em alguns casos já tem algum algoritmo de tratamento de dados.

 

Um exemplo de tratamento dos dados é aplicado na UART, onde existe um prévio tratamento de interrupção e os dados que chegam pelo pino de RX já são armazenados em um Buffer. Um dos campos da estrutura é a quantidade de bytes recebidos, e uma função de callback é chamada. Esta funcionalidade ajuda bastante, pois faz alguns tratamentos críticos no momento que uma interrupção ocorre.

 

No manual do KSDK (Kinetis SDK v.1.2.0 API Reference Manual.pdf), esta e outras funcionalidades são muito bem explicadas. Este manual fica na pasta “doc” de onde foi instalado o KSDK.

 

 

Criando o projeto com o Gerador Automático de Projeto

 

Para auxiliar no desenvolvimento de firmware, a Freescale desenvolveu uma ferramenta bem interessante para gerar um projeto base que utiliza a biblioteca KSDK, o KSDK Project Generator.

 

É necessário aceitar um acordo, e ter um registro no site. A instalação não é necessária, apenas descompacte em uma pasta, e rode o programa de acordo com o seu sistema operacional. Ao executar o programa, a seguinte tela é apresentada:

 

KSDK-Project-Generator
Figura 1: KSDK Project Generator

 

Onde:

  • KSDK Path: caminho onde foi instalado o KSDK;
  • Project Name: nome do projeto;
  • Choose board: selecionar a placa Freedom como base de projeto;
  • Quick Generate!: Botão para gerar o projeto.

 

Neste programa é necessário indicar onde foi instalado o KSDK, o nome do projeto, qual a placa Freedom que receberá o código.

 

Pressionar o botão “Quick Generate!”. O caminho base onde o projeto é gravado é:

<caminho KSDK>/examples/<placa>/user_apps/<nome_do_projeto>

 

Sugestão de nome para o projeto: PiscaLedComSuporteKSDK.

 

 

Abrindo o programa gerado usando o KDS

 

Para abrir o projeto feito pelo KSDK-Project-Generator no KDS, é necessário importar o projeto. Clicar com o botão direito na área do “Project Explorer” e selecionar a opção “Import”.

      

KSDK-import
Figura 2: Selecionando Import

 

Selecione a opção General -> Existing Projects into Workspace.

 

KSDK-import-existing
Figura 3: Selecionando uma maneira de importar o projeto

 

Selecionar a opção “Select root directory”. Clicar em “Browse”. Selecionar a pasta do projeto, de acordo com o que foi apresentado no programa de geração de projetos. Escolher a pasta kds.

 

KSDK-select-project
Figura 4: Selecionando o projeto a ser importado

 

Clicar em “OK”. Certificar que no campo “Projects” o projeto criado está marcado. Clicar em “Finish”. O arquivo “main.c” ficará da seguinte maneira.

 

suporte-ao-KSDK-main
Figura 5: Resultado ao importar um projeto feito pelo KSDK Project Generator

 

Perceba que, tem um “PRINTF” no código. Pois é, a porta serial que passa pelo debugger já está configurada e pronta para uso. É só configurar um terminal serial e selecionar a porta serial virtual gerada em conjunto com o driver OpenSDA mostrada no Gerenciador de Dispositivos.

 

A configuração dessa porta é:

  • Baudrate: 115200
  • Número de bits: 8
  • Paridade: Nenhum
  • Stop bits: 1

 

 

Criando o código

 

Criei alguns defines para facilitar a codificação:

 

 

Os blocos que devem ser configurados são os mesmos que o projeto anterior, mas agora utilizando as APIs do KSDK. Devemos fazer:

  1. Habilitar o fornecimento de clock para os ports. Já foi feito na função “hardware_init().
  2. Configurar os pinos para operar como GPIO.
  3. Configurar a direção dos pinos.
  4. Operar no acionamento dos pinos.

 

Configurar os pinos para operar como GPIO:

 

Um dos módulos criados automaticamente é o “board”. Neste módulo existem alguns arquivos de configuração. Porém se referem diretamente ao esquema desta placa (FRDM-K64F). Para configurar algum pino específico que não esteja no esquema da placa, é necessário utilizar algumas funções do KSDK.

 

Seguindo as configurações feitas no projeto anterior, é necessário acessar as seguintes funções: MUX, DSE, ODE, PFE, SER, PE, PS. Existem chamadas prontas para configurar cada uma das funções:

  • MUX: PORT_HAL_SetMuxMode
  • DSE: PORT_HAL_SetDriveStrenghtMode
  • ODE: PORT_HAL_SetOpenDrainCmd
  • PFE: PORT_HAL_SetPassiveFilterCmd
  • SER: PORT_HAL_SetSlewRateMode
  • PE: PORT_HAL_SetPullCmd
  • PS: PORT_HAL_SetPullMode

 

Então o código fica assim:

 

 

Configurar a direção dos pinos:

 

Utilizar a função GPIO_HAL_SetPinDir():

 

 

Operar no acionamento dos pinos:

 

  • Para setar uma saída, usar a função: GPIO_HAL_SetPinOutput().
  • Para o toggle de uma saída, usar a função: GPIO_HAL_TogglePinOutput().

 

 

A função de delay será usada uma variável com valor bem alto e decrementar até chegar a zero.

 

 

Obs.: Da maneira que o projeto foi criado, a otimização de código pode alterar o funcionamento, então, é necessário não otimizar nada no código. E para fazer isso, entre nas propriedades do projeto:

 

Botão direito sobre o nome do projeto -> Properties -> C/C++ Build -> Settings -> Optimization -> Optimization Level -> None (-O0).

 

Habilite a impressão do tamanho do binário gerado. Para isso siga o caminho:

 

“Botão direito no nome do projeto -> Properties -> C/C++ Build -> Settings” -> “Aba Toolchains”. Marque o checkbox “Print size”.

 

suporte-ao-KSDK-tamanho-do-binario
Figura 6: Tamanho do binário

 

Código completo:

 

 

 

Conclusão

 

Para este processo foi necessário utilizar apenas o documento sobre as APIs do KSDK, mas mesmo assim, procurar por alguns detalhes bem específicos sobre o hardware. Um dos passos já foi executado automaticamente, e um brinde foi proporcionado, a porta serial para debug.

 

Teve uma diferença no tamanho de código, claro, mas pensando na facilidade de configurar os registradores, é de se pensar, não?

 

No próximo post, veremos mais uma maneira de se fazer projetos. Enquanto isso aproveite para explorar a documentação do KSDK, tem muita informação interessante lá.

Engenheiro de Desenvolvimento de Sistemas Embarcados formado à 10 anos. Desenvolvimento de circuitos microcontrolados de 8, 16 e 32 bits (PIC, dsPIC, Cortex M0+, Cortex M3 e Cortex M4F). Firmwares bare metal, FreeRTOS. Módulos de comunicação GSM. Interesses em conectividade, IoT, Linux Embarcado, plataformas open hardware.

Deixe um comentário

Seja o Primeiro a Comentar!

Notificar
avatar
 
wpDiscuz