2 Comentários

Configurando o microcontrolador KL05z

Kinetis Design Studio

Neste terceiro artigo serão abordados alguns aspectos da arquitetura dos microcontroladores Kinetis KL05 e como inicializar corretamente estes dispositivos. Esta análise será baseada nas informações disponibilizadas pelo datasheet do componente. Maiores informações estão disponibilizadas no github do Gabriel Marcatto.


É importante ressaltar que este tipo análise, apesar de específico para o KL05z, obedece o mesmo procedimento para qualquer microcontrolador.

Entendendo o KL05z

A configuração básica de um microcontrolador é uma etapa importante para garantir o bom funcionamento da placa. Como se trata das configurações iniciais, é comum que sejam alteradas de acordo com o desenvolvimento do produto, principalmente quando novas funcionalidades são adicionadas no projeto. Em geral, o datasheet do produto explicita todas as configurações necessárias e como alterá-las.

Abaixo é apresentado o diagrama de blocos do KL05 que apresenta todos os periféricos disponíveis.

Datasheet do microcontrolador KL05z

Para a grande maioria dos microcontroladores do mercado, os pontos mais críticos são: o clock, os sistemas de interrupção e o watchdog. Eles podem ser considerados críticos pois configurações erradas nestes periféricos vão criar problemas no funcionamento da placa, bugs intermitentes ou até a total paralisação do software.

A fonte de clock

De acordo o capítulo 5 do datasheet, que apresenta a arquitetura do clock para o microcontrolador, o Cortex M0+ possui um core síncrono, permitindo que os clocks do processador, bus masters, flash e periféricos sejam configurados de modo independentes. A seleção e multiplexação do clock do sistema é controlado e programado via o módulo MCG, já o clock dos drivers são programados via o módulo SIM. Esse tipo de arquitetura é denominada de clock gating e permite uma maior economia de energia. Normalmente o clock nos módulos são desativados como padrão.

Configurando o clock do sistema

O MCG (Multipurpose Clock Generator) é um módulo que permite diversas fontes de clock para o microcontrolador. Ele contém um frequency-locked loop (FLL). O FLL é controlado pela referência interna ou externa de clock. O módulo pode escolher o FLL interno ou externo como fonte de clock para o sistema do MCU. O MCG opera em conjunto com um cristal oscilador, que permite outra fonte de clock externa produza o clock de referência [página 343 do datasheet].

O capítulo 24, referente ao MCG, também oferece um Memory Map/ Register definition, que mostra quais registros pertencem ao módulo e quais possuem acesso de leitura e/ou escrita.

Mapa de memória do microcontrolador KL05z

Verificando a função de cada um dos registros, descobre-se que através do registro MCG_C4 é possível configurar o clock do sistema:

Registrador MCG do microcontrolador KL05z

Para determinar o clock do sistema é necessário manipular os bits 7, 6 e 5 do registro. Ao ligarmos o bit 7, o clock da placa passa a ser 24 MHz. Então se realizarmos uma operação do tipo OU (OR) com valor 0x80u (0b10000000) no ponteiro MCG_C4, estaremos ligando o bit 7. As outras opções como FCTRIM e SCFTRIM não são necessárias para a configuração inicial. Logo, o código responsável por essa operação é:

A biblioteca do MCU oferece máscaras e structs que permitem uma facilidade na programação. Utilizando essas ferramentas disponíveis, o código anterior se transforma em:

Configurando o clock gating das portas

Após configurar o sistema, é necessário ativar o clock nas portas A e B. O clock pode ser habilitado ou desabilitado através do registro SCGC5[PORTx] no módulo SIM. Esses bits são sempre limpos após a qualquer tipo de reset, o que desabilita o clock do módulo correspondente para economizar energia [página 147 do datasheet].

System Clock Gating Register do microcontrolador KL05z

Para ligar o clock nas portas A e B é necessário manipular os bits 9 e 10. Para que isso ocorra é preciso realizar uma operação do tipo OU (OR) com o valor 0x600u (0b11000000000) no registro SIM_SCGC5. O TSI e LPTMR não são necessários para a configuração inicial, o valor “padrão serve”. Logo, o código responsável por essa operação é:

Utilizando as máscaras e structs fornecidas, o código acima se transforma em:

Watchdog

O COP watchdog tem função de forçar um reset no sistema quando o software falha em executar como esperado. Para evitar o acionamento do watchdog, e a consequente reinicialização da placa, a aplicação deve resetar o contador do COP periodicamente. Depois de qualquer reset, o COP Watchdog é habilitado. Caso a aplicação não utilize o Watchdog, ele pode ser desabilitado limpando os btis do COPCTRL[COPT] no SIM [página 64 do datasheet]. O capítulo também mostra uma tabela com as configs do COP.

COP do microcontrolador KL05z
COP do microcontrolador KL05z

Para desligar o COP watchdog é necessário limpar os bits 3 e 2. Para que isso ocorra é preciso realizar uma operação do tipo NAND com o valor 0xCu (0b1100) no registro SIM_COPC. Logo, o código responsável por essa operação é:

Utilizando as máscaras e structs fornecidas, o código acima se transforma em:

Non-Maskable Interrupt

O NMI (Non-Maskable Interrupt) da placa, por configuração padrão,vem conectado no pino 13. Isso pode causar problemas pois qualquer flutuação no pino pode disparar o interrupt. Para arrumar esse inconveniente é necessário desconectar o NMI do pino.

NMI no microcontrolador KL05z

O microcontrolador multiplexa diversas funções para um único pino, permitindo uma maior customização. Essas opções podem ser selecionadas através do registro PORTx_PCRn.

Pin Control Register do microcontrolador KL05z

Para remover o NMI da PORTB5 é necessário escolher a alternativa 1 do Mux. Então é necessário manipular os bits 10, 9 e 8. As outras configurações do registro não são necessárias incialmente. Logo, o código responsável por essa operação é :

Utilizando as máscaras e structs fornecidas, o código acima se transforma em:

Deste modo o código mínimo de configuração do sistema, levando em conta os periféricos que devem ser minimamente inicializados para o bom funcionamento do microcontrolador, é apresentado abaixo.

Outros artigos da série

<< Programando a KL05z com Kinetis Design StudioCriando uma biblioteca de acesso aos IOs da KL05 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

Software » Configurando o microcontrolador KL05z
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Angélica Muniz
21/02/2018 17:00

Ah sim! Depois que vi que era uma sequência de posts.. Agora entendi perfeitamente 😀

Angélica Muniz
Angel
14/11/2017 11:54

Consegui entender a configuração dos registradores e tal. Mas em relação ao código, fiquei um pouco perdida em algumas partes. Teria algum outro post que explicasse melhor essa linguagem?
Obrigada!

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link