O documento discute GPIOs (General Purpose Inputs/Outputs) em microcontroladores ARM Cortex M0+, com foco no Kinetis KL25. Ele explica como configurar e usar os pinos GPIO para interfaces de entrada e saída, como ligar LEDs e ler botões.
2. Fábio Souza 2015
Introdução aos GPIOs
Um dos grandes beneficio de um microcontrolador em relação aos
microprocessadores são os pinos de I/O de uso geral.
Estes pinos efetuam a interface entre o microcontrolador e o mundo externo. Nestes
pinos podem ser ligados os botões, LED’s, motores, etc.
Nesse módulo aprenderemos como funcionam os pinos de GPIO nos
microcontroladores Kinetis L e como fazer corretamente as configurações para uso
dos mesmos.
3. Fábio Souza 2015
GPIO Kinetis L25Z
O Kinetis KL25 contém 4 portas, sendo elas PORTA, PORTB, PORTC, PORTD e
PORTE, onde:
● PORTA = 8 pinos;
● PORTB = 8 pinos;
● PORTC = 16 pinos;
● PORTD = 8 pinos;
● PORTE = 13 pinos;
● TOTAL = 53 I/O’s disponíveis com multiplas funções
5. Fábio Souza 2015
Conexão do GPIO a CPU
Nota-se no diagrama de blocos que os PORTs se comunicam
através de um barramento com o microcontrolador. Como os
pinos de GPIO não são de alta velocidade é possível multiplexar
os mesmos ou conectá-los em um barramento compartilhado,
reduzindo assim a quantidade de vias necessárias para interface
com a CPU.
7. Fábio Souza 2015
Registradores
Cada PORT possui um conjunto de registradores para configuração e controle dos
pinos de GPIO. No Kinetis L os seguintes registradores são utilizados:
● SIM_SCGC5 (System Clock Gating Control)
● Pin Control Register n (PORTx_PCRn)
● GPIO Port Data Direction Register (GPIOx_PDDR)
● Port Data Output Register (GPIOx_PDOR)
● Port Set Output Register (GPIOx_PSOR)
● Port Clear Output Register (GPIOx_PCOR)
● Port Toggle Output Register (GPIOx_PTOR)
● Port Data Input Register (GPIOx_PDIR)
8. Fábio Souza 2015
Ativando o Clock para o PORT
Antes de utilizar o pino deve-se ativar o clock para cada conjunto de porta. Isso é feito
através do registrador:
SIM_SCGC5 (System Clock Gating Control)
9. Fábio Souza 2015
Configurando o pino como GPIO
Os pinos geralmente possuem diversas funções que são multiplexadas ao mesmo.
Dessa forma é necessário configurar qual função vai ser utilizada. Para isso utiliza-se
o registrador : Pin Control Register n (PORTx_PCRn).
Para uso do pino como GPIO deve-se configurar o MUX como 1. Conforme tabela na
pagina 184, do KL25 Sub-Family Reference Manual.
10. Fábio Souza 2015
Configurando a direção do pino
Antes de utilizar o pino deve-se configurar o mesmo como uma entrada ou saída
digital. Para isso utiliza-se o registrador GPIO Port Data Direction Register
(GPIOx_PDDR), conforme a necessidade do projeto:
11. Fábio Souza 2015
Alterando valores nos pinos de saídas
Quando o pino for configurado como saída, existem 4 registradores que irão
determinar o estado do pino:
● Port Data Output Register (GPIOx_PDOR)
● Port Set Output Register (GPIOx_PSOR)
● Port Clear Output Register (GPIOx_PCOR)
● Port Toggle Output Register (GPIOx_PTOR)
12. Fábio Souza 2015
Port Data Output Register (GPIOx_PDOR)
Coloca o pino correspondente em nível lógico “1” ou “0”.
13. Fábio Souza 2015
Port Set Output Register (GPIOx_PSOR)
Escreve nivel lógico “1” no pino correspondente
14. Fábio Souza 2015
Port Clear Output Register (GPIOx_PCOR)
Escreve nivel lógico “0” no pino correspondente
15. Fábio Souza 2015
Port Toggle Output Register (GPIOx_PTOR)
Inverte os estado lógico presente no pino
16. Fábio Souza 2015
Leitura de estados de pinos de entrada
Port Data Input Register (GPIOx_PDIR) - Contêm o estado presente no pino
configurado como entrada Digital.
17. Fábio Souza 2015
Exemplo 1 - LEDs (GPIO_LEDS)
Acionar os leds RGB presentes na FRDM KL25Z. Cada led pode ser manipulado
separadamente com a configuração dos registradores.
18. Fábio Souza 2015
Exemplo 1 - Esquemático
Conforme exibido no esquemático da FRDM KL25Z os LEDs estão ligados da
seguinte forma:
Note que estão ligados em anodo comum, dessa forma para ligar o LED o pino
correspondente dever ir para nivel ‘0’.
19. Fábio Souza 2015
Exemplo 1 - passos
1 - Ligar o clock para o PORT dos LEDs
2 - Configurar o pino como GPIO
3 - Configurar o pino como saída
4 - ligar leds
20. Fábio Souza 2015
Exemplo 2 - Piscar LEDS (GPIO_BLINK)
Piscar os leds utilizando rotina de delay
Passos:
1. Ligar LED
2. Aguardar 1 seg
3. Desliagar LED
4. Aguardar 1 seg
21. Fábio Souza 2015
Exemplo 3 - Teclas (GPIO_TECLAS)
Fazer a leituras das teclas presentes no shield e ligar leds quando forem
pressionadas. SW1 comanda D3 e SW2 comanda D4.