PIT – Periodic Interrupt Timer para FRDM-KL25Z

Periodic Interrupt Timer

Olá caro leitor. Continuando com a série de artigos “Bibliotecas de Software para a Freedom Board KL25Z“, neste artigo será abortado o PIT – Periodic Interrupt Timer, apresentada a biblioteca de software para a sua utilização e exemplo de aplicação.

As bibliotecas aqui apresentadas nesta série de artigos foram desenvolvidas utilizando o Kinetis Design Studio IDE. As bibliotecas são facilmente portáveis para as demais Freedom Board.

O microcontrolador presente na Freedom Board KL25Z é o MKL25Z128VLK4. O PIT (Periodic Interrupt Timer) é um dos recursos de Timer que esse microcontrolador possui. Além do PIT, ele conta também com TPM (Timer/PWM Module) abordado no último artigo sobre PWM, LPTMR (Low-Power Timer) e RTC (Real Time Clock).

O periférico PIT possui dois canais (0 e 1), conta com contador de 32 bits. As características que mais de destacam neste módulo são: capacidade de temporizar e gerar disparo para o DMA, capacidade de temporizar e gerar interrupções e temporizador independente para cada canal.

Demonstrarei a seguir a biblioteca de software com as configurações mínimas para trabalhar com PIT, apresentando funções de inicialização e funções de manipulação de um Timer com o PIT.

Inicializando o PIT

Configurando o Clock do Periférico

O primeiro item a ser configurado para inicializar o PIT é habilitar o Clock para o periférico. Essa operação é feita utilizando o registrador System Clock Gating Control Register 6 (SIM_SCGC6). Para habilitar o Clock deve-se utilizar a macro SIM_SCGC6_PIT_MASK.

Nas figuras abaixo temos a representação dos bits do registrador System Clock Gating Control Register 6 (SIM_SCGC6).

SIM SCGC6
SIM SCGC6

Figura 1 – Detalhes do Registrador System Clock Gating Control Register 6 (SIM_SCGC6)

Configurando os parâmetros do PIT

O primeiro parâmetro a ser configurado é o registrador PIT Module Control Register (PIT_MCR). Esse registrador é responsável em ativar o temporizador e modo de depuração.

É através do Bit MDIS (Module Disable – (PIT section)) que é ativado o temporizador. Para manipular este Bit deve-se utilizar a macro PIT_MCR_MDIS(x), onde “x” é valor do bit (0 ou 1).

O bit FRZ (Freeze) é responsável por ativar o módulo de depuração. Para atuar sobre esse bit, deve-se utilizar a macro PIT_MCR_FRZ(x), onde “x” é valor do bit (0 ou 1).

As imagens abaixo detalham o registrador PIT Module Control Register (PIT_MCR).

pit mcr 0
pit mcr 1
pit mcr 2

Figura 2 – Detalhes Registrador PIT Module Control Register (PIT_MCR).

O segundo parâmetro a ser configurado é o contador. Como já dito anteriormente, o PIT possui temporizador de 32 bits. O registrador Timer Load Value Register (PIT_LDVALn) é responsável por receber o valor do temporizador. Para configurar deve-se usar a macro PIT_LDVAL_REG(base,index), onde a “base” é o ponteiro do periférico (PIT) e “index” é o numero do canal (0 ou 1).

A seguir temos uma figura que ilustra o registrador Timer Load Value Register (PIT_LDVALn).

pit ldval

Figura 3 – Detalhes do Registrador Timer Load Value Register (PIT_LDVALn).

O registrador Timer Control Register (PIT_TCTRLn) possui três Bits a serem configurados, são eles: o Bit CHN (Chain Mode), Bit TIE (Timer Interrupt Enable) e Bit TEN (Timer Enable).

Para manipular o registrador, deve-se utilizar a macro PIT_TCTRL_REG(base,index), onde a “base” é o ponteiro do periférico (PIT) e “index” é número do canal (0 ou 1).

Para configurar o Bit CHN deve-se usar a macro PIT_TCTRL_CHN(x), onde “x” é o valor do Bit (0 ou 1).
A macro PIT_TCTRL_TIE(x), onde “x” é o valor do Bit (0 ou 1), é utilizada para configurar o Bit TIE. Para manipular o Bit TEN devesse utilizar a macro PIT_TCTRL_TEN(x), onde “x” é o valor do Bit (0 ou 1).

Nas figuras abaixo são apresentados detalhes do registrador Timer Control Register (PIT_TCTRLn).

pit tctrl
pit tctrl

Figura 4 – Detalhes do Registrador Timer Control Register (PIT_TCTRLn)

O último a ser configurado na inicialização do PIT é habilitar a interrupção, para essa tarefa deve utilizar a função:

Com o parâmetro “PIT_IRQn”, que é numero da interrupção do PIT no vetor de interrupção.

Inicializando Contagem e Encerando Contagem no PIT

Para iniciar e encerar a contagem com o periférico Periodic Interrupt Timer, é feita através do registrador Timer Control Register (PIT_TCTRLn), manipulando o Bit TEN (Timer Enable), onde o Bit com o valor em 1 inicia a contagem e com valor em 0 para a contagem.

Rotina de Interrupção 

É através do registrador Timer Flag Register (PIT_TFLGn) que ocorre a notificação de interrupção do PIT. A macro utilizada para realizar a consulta a Flag da interrupção PIT_TFLG_REG(base,index), onde “base” é ponteiro do periférico (PIT) e “index” é o numero do canal (0 ou 1). Para limpar a Flag devesse utilizar a macro PIT_TFLG_TIF_MASK.

A seguir temos imagem que ilustra com maior detalhes o registrador Timer Flag Register (PIT_TFLGn).

pit tflg

Figura 5 – Detalhes do Registrador Timer Flag Register (PIT_TFLGn)

Funções para Timer 

Na biblioteca de software que estou apresentando é para a utilização do Periodic Interrupt Timer. Optei em apresentar duas maneiras de trabalhar com o Timer, a primeira é utilizando uma Flag para sinalizar o término da contagem do PIT. A segunda é um contador, que retorna o número de interrupção do PIT.

Para a rotina com a Flag são apresentadas duas funções:

que é através dessa função que é feita a consulta a Flag. A segunda função é limpar a Flag:

A rotina de contador de interrupções também são apresentadas nas duas funções:

que retorna o número de interrupções. A segunda função é responsável por zerar a variável que armazena o número de interrupções ocorridas:

A seguir é apresentado o código fonte da biblioteca desenvolvida para o periférico.

Aplicação Dual Blink LED

A aplicação proposta é utilizar os dois canais do PIT para sincronizar o acionamento de cada LED. Para o LED vermelho é utilizado o canal 0 e fazendo uso da rotina de Flag. O LED verde utiliza o canal 1, inicializado com valor 100, menor em relação ao canal 0. A rotina de contador de interrupção foi utilizada para sincronizar o acionamento do LED. Quando a contagem atinge o valor de 100 o LED verde é acionado.

Conclusão 

Neste artigo foi apresentada mais uma biblioteca de software para a Freedom Board KL25Z utilizando o periférico PIT – Periodic Interrupt Timer.

Nos próximos artigos vamos apresentar mais bibliotecas de software (Timer, UART e entre outras) para a Freedom Board KL25Z. A biblioteca apresentada está disponível no meu Github.

Referências

Github – Library-FRDM-KL25Z

Reference Manuals KL25Z

community.nxp

Outros artigos da série

<< Biblioteca PWM para FRDM-KL25ZBiblioteca DAC para FRDM-KL25Z >>
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.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Adriel Vasques dos Santos
Adriel Vasques dos Santos
14/10/2018 03:19

O valor 100 é em que: ns, ms???

Talvez você goste:

Séries



Outros da Série

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services