0% acharam este documento útil (0 voto)
17 visualizações9 páginas

Lab02 GPIO Output Input

oi

Enviado por

eduardamarques
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
17 visualizações9 páginas

Lab02 GPIO Output Input

oi

Enviado por

eduardamarques
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 9

L ABORATÓRIO AOC II

Lab 02: Programando o Periférico GPIO


como OUTPUT e INPUT

Prof. Thiago Werlley

20 de novembro de 2024
Universidade Federal do Ceará Campus Quixadá

1 Programando o Periférico GPIO como Saída


Muitas vezes, a melhor maneira de se familiarizar com uma nova plataforma de trabalho,
tal como a BeagleBoneBlack, é iniciar utilizando as funcionalidades de GPIO, pois é mais fácil
para começar a trabalhar com a plataforma e também todo projeto sempre tem LEDS, realizando
ação de liga e desliga. Para fazer isso, você deve definir um pino como GPIO (entrada/saída de
uso geral) e programa-lo como saída (output), então realiza o controle do componente a partir
do seu estado. Nesse projeto iremos utilizar a documentação (Technical Reference Manual e
Processors Datasheet) para realizar a programação do GPIO modulo 1 pino 28.

1.1 Ligação do Circuito para um LED


Primeiro, encontrar os pinos do processador para o GPIO que se encontram nos barramentos
expansores P8 e P9, como visto na Figura 1, e que serão utilizados nas etapas que seguirão:

Figura 1: Pinout dos expansores P8 e P9.

Etapas para configurar GPIO via barramento expansor:

1. Desligue a BeagleBone - Antes de ligar qualquer coisa na BeagleBone, uma boa ideia é
desligar e remover a fonte de energia.

2. Conecte a tensão na BBB - Usando um fio, ligue a tensão de 3.3V da BeagleBone (pinos
de 3 ou 4 no expansor P9) para a trilha positiva da protoboard.

3. Conecte ao terra - Conectar o pino GND do BeagleBone (pinos 1 e 2 em ambos os


expansores) a trilha negativa da protoboard.

4. Ligue o pino GPIO para a protoboard - Este exemplo usa GPIO1_28 (pino 12 no
expansor P9). Use um jumper para conectá-lo a uma linha vertical na sua protoboard.

Técnicas de Programação para Sistemas Embarcados I 1


Universidade Federal do Ceará Campus Quixadá

5. Conecte o resistor - Sem um resistor, um LED queima facilmente. Um resistor de 220


ou 470 deve cair a voltagem suficiente sem reduzir o brilho do LED demais. Ligue a
resistência ao jumper que você puxou do pino 12, que liga eficazmente o resistor para
GPIO1_28.

6. Ligue o LED - Ligue a perna negativa do LED - o cátodo, que normalmente é a perna
mais curta - a faixa negativa da placa de ensaio onde estão ligados terra no Passo 3.
Conecte a perna positiva - o ânodo - ao resistor.

Figura 2: Circuito para ligação do LED.

Na Etapa 2, você conecta o pino de 3.3V do BeagleBone à placa protoboard. Na realidade,


para este projeto específico, fazer essa conexão não serve para nada. Em geral, é uma boa
prática, no entanto, ter sempre as faixas horizontais na sua placa de ensaio alimentado com uma
tensão constante e com o terra do circuito.

você conectar o resistor a trilha positiva na sua placa de ensaio, o LED se acende, mas
você não tem nenhum controle sobre ele. Sinta-se a vontade para experimentar!

1.2 Configurando e Controlando o pino 28 do GPIO


A interface de uso geral combina quatro módulos de input/output de uso geral (GPIO).
Cada módulo GPIO fornece 32 pinos dedicados de uso geral com capacidades de entrada e
saída; Assim, a interface de propósito geral suporta até 128 (4 × 32) pinos. O GPIO0 está
no domínio Wakeup e pode ser usado para acordar o dispositivo por meio de fontes externas.
GPIO[1:3] estão localizados no domínio periférico, como visto na Figura 3. Esses pinos podem
ser configurados para as seguintes aplicações:

Técnicas de Programação para Sistemas Embarcados I 2


Universidade Federal do Ceará Campus Quixadá

• Input(captura)/output(controle) de dados
• Interface de teclado
• Interromper a geração em modo ativo na detecção de eventos externos. Os eventos de-
tectados são processados por dois submódulos paralelos independentes de geração de
interrupção para dar suporte às operações do biprocessador.
• Geração de solicitação de despertar em modo inativo mediante detecção de eventos ex-
ternos.

Figura 3: Módulos de GPIO[1-3].

1.2.1 Inicializando o Módulo de Clock do GPIO


O registrador PRCM base (SOC_CM_PER_REGS=0x44E0_0000) acompanhado do mó-
dulo de controle gerencia a passagem (isto é, a desativação) e a ativação dos clocks aos mó-
dulos da placa. Os clocks são gerenciados com base nas restrições de exigência dos módulos
associados. Primeira coisa que deve realizar é a inicialização do módulo CM_PER clock para
o GPIO módulo 1, como mostrado no exemplo abaixo.
HWREG(SOC_CM_PER_REGS + module) |= setting

Onde:
setting = (1<<18) | (0x2<<0)
module = CKM_PER_GPIO1_CLKCTRL
CKM_PER_GPIO1_CLKCTRL (0x0AC)

SOC_CM_PER_REGS = SOC_PRCM_REGS + 0
SOC_PRCM_REGS (0x44E00000)

1.2.2 Inicializando o Módulo de Controle


O módulo de controle inclui status e lógica de controle não endereçados dentro dos peri-
féricos ou o resto da infraestrutura da placa. Este módulo fornece interface para controlar as
seguintes áreas do dispositivo:
• Functional I/O multiplexing

Técnicas de Programação para Sistemas Embarcados I 3


Universidade Federal do Ceará Campus Quixadá

• Device control and status

• DDR PHY control and IO control registers

• EDMA event multiplexing control registers

O módulo de controle responde apenas ao tipo de dispositivo e POR (Power On Reset)


interno. Ao ligar, os valores de reset para os registradores definem o estado seguro para o
dispositivo. No modo de inicialização, somente os módulos a serem usados no momento da
inicialização estão associados às PADs. Outros módulos de entrada são internamente ligadas e
as placas de saída são desligadas. Após POR, o software define os registros de multiplexação
funcional e de configuração do PAD para os valores desejados de acordo com a configuração da
placa solicitada.
Os registos de controlo PAD são registadores de 32 bits para controlar o sinal multiplexado e
outros aspectos de cada PAD I/O. Após o POR, o software deve configurar a funcionalidade de
multiplexação do PAD e configurações dos registros para os valores desejados de acordo com
a configuração solicitada. A configuração é controlada pelos PADs ou por um grupo de PAD.
Cada pino configurável tem seu próprio registrador de configuração para controle pullup/down
e para a atribuição a um dado módulo.
Para realizar a inicialização do pino 28 para o GPIO módulo 1, siga as instruções como
mostrado no exemplo abaixo.
HWREG(SOC_CONTROL_REGS + module) |= mode

Onde:
mode = 7
module = CM_conf_gpmc_ben1
CM_conf_gpmc_ben1 (0x0878)
SOC_CONTROL_REGS (0x44E10000)

1.2.3 Configurando Direção do GPIO


O registrador GPIO_OE é usado para habilitar os recursos de saída dos pinos. Na reiniciali-
zação, todos os pinos GPIO relacionados são configurados como entrada e capacidades de saída
estão desativados. Este registrador não é usado com o módulo, sua única função é carregar a
configuração dos PADs. Quando o aplicativo está usando um pino como uma saída e não quer
a geração de interrupção a partir deste pino, o aplicativo pode/tem que configurar corretamente
os registradores que habilita interrupção.
addr_temp = SOC_GPIO_1_REGS + GPIO_OE
val_temp = HWREG(addr_temp)

val_temp &= ~(1<<pin);


val_temp |= (dir<<pin);

HWREG(addr_temp) = val_temp;

Onde:
dir = 0
SOC_GPIO_1_REGS (0x4804C000)
GPIO_OE (0x134)

Técnicas de Programação para Sistemas Embarcados I 4


Universidade Federal do Ceará Campus Quixadá

1.2.4 Realizando Controle do GPIO no modo OUTPUT


Registrador GPIO_DATAOUT (offset = 13Ch) [reset = 0h]
O registro GPIO_DATAOUT é usado para definir o valor dos pinos de saída GPIO. Os
dados são escritos no registrador GPIO_DATAOUT de forma síncrona com o clock da interface.
Este registro pode ser acessado com operações diretas de leitura/gravação ou usando o recurso
alternativo Set/Clear. Este recurso permite definir ou limpar bits específicos deste registro com
um único acesso de escrita ao registro de setar a saída de dados (GPIO_SETDATAOUT) ou ao
endereço de registro para limpar a saída de dados (GPIO_CLEARDATAOUT).

Figura 4: bits do registrador GPIO_DATAOUT, GPIO_SETDATAOUT e


GPIO_CLEARDATAOUT.

Registrador GPIO_SETDATAOUT (offset = 194Ch) [reset = 0h]


Uma operação de escrita no registrador GPIO_SETDATAOUT, significa escrever 1 no bit
correspondente no registrador GPIO_DATAOUT, onde temos 32 bits para 32 pinos (32 GPIO
como saída) como mostrado na Figura 4; Um bit escrito 0 não tem efeito. Já Uma leitura no re-
gistrador GPIO_SETDATAOUT retorna o valor do registrador de saída de dados (GPIO_DATAOUT).
addr_temp = SOC_GPIO_0_REGS + GPIO_SETDATAOUT;
val_temp = 1<<pin;

HWREG(addr_temp) |= val_temp;

Onde:
SOC_GPIO_0_REGS (0x44E07000)
GPIO_SETDATAOUT (0x194)
Registrador GPIO_CLEARDATAOUT (offset = 190Ch) [reset = 0h]
Uma operação de escrita no registrador GPIO_CLEARDATAOUT, significa escrever 1 no
bit correspondente no registrador GPIO_DATAOUT, onde temos 32 bits para 32 pinos (32
GPIO como saída) como mostrado na Figura 4; Um bit escrito 0 não tem efeito. Uma lei-
tura do registrador GPIO_SETDATAOUT retorna o valor do registrador de saída de dados
(GPIO_DATAOUT).
addr_temp = SOC_GPIO_0_REGS + GPIO_CLEARDATAOUT;
val_temp = 1<<pin;

HWREG(addr_temp) |= val_temp;

Onde:
SOC_GPIO_0_REGS (0x44E07000)
GPIO_SETDATAOUT (0x190)

Técnicas de Programação para Sistemas Embarcados I 5


Universidade Federal do Ceará Campus Quixadá

O resultado final da prática da placa com um circuito simples para relaização de um pisca
LED é apresentado na Figura 5.

Figura 5: sistema completo da prática pisca LED.

Se a intensidade luminosa do LED parece fraca, tente um valor menor de resistência.


Não tente inferior a 220 Ohms, apesar de tudo.

2 Programando o Periférico GPIO como Entrada


O procedimento para configurar um pino de GPIO (general purpose input/output) como
entrada é muito semelhante à configuração de um GPIO como saída. A principal diferença é
que você ler o valor do pino, em vez de escrever nele. Para realizar essa diferença, você precisa
construir o circuito.

2.1 Ligação do Circuito para um pushButton


Primeiro, encontrar/escolher os pinos do processador que se encontram nos barramentos
expansores P8 e P9 com função de GPIO, como visto na Figura 1, e que serão utilizados nas
etapas que seguirão:
Para conectar um botão para o BeagleBone, construa na protoboard um circuito resistivo
como mostrado na Figura 6.
Em seguida faça as próximas passos para configurar GPIO via barramento expansor:
1. Desligue a BeagleBone - Antes de ligar o circuito na BeagleBone, é recomendado desligá-
la e remover a fonte de energia.

Técnicas de Programação para Sistemas Embarcados I 6


Universidade Federal do Ceará Campus Quixadá

Figura 6: Circuito para funcionalidade botão

2. Ligar a protoboard - Usando um fio, ligue a fonte de 3.3V da BeagleBone (pinos de 3


ou 4 no expansor P9) para a faixa positiva da protoboard.

3. Configure o terra - Conectar o pino GND da BeagleBone, por exemplo, pinos 1 e 2 em


ambos os expansores, na faixa negativa da protoboard.

4. Ligue o pino GPIO com a protoboard - Este exemplo usa GPIO 60 (gpio1_28 - modulo
1 pino 28) do pino 12 no expansor P9. Use um jumper para conectá-lo a uma linha vertical
na sua protoboard.

5. Conecte o pushButton - Se você estiver usando um botão de quatro pontas, você deve
colocá-lo no centro da protoboard para separar os pares de pernas.

6. Conecte umas das pernas do pushButton no positivo - Use um jumper para realizar
esta conexão.

7. Conecte a outra perna no pino de entrada - Conectá-lo ao jumper que vem do pino da
BeagleBone do GPIO que você está usando (exemplo: pino 12 do expansor P9).

8. Conecte um resistor de pull-down - Uma resistência de pull-down é um resistor usado


para evitar a existência de um curto-circuito quando o botão está fechado. Ligue-o a partir
da faixa do GND para o pé do botão, que liga ao pino de entrada. Um resistor de 10K
deve fazer o trabalho.

Quando o botão está fechada (que é o mesmo que dizer que o botão é pressionado), tendo
uma resistência de pull-down faz com que a corrente, que segue o caminho da menor
resistência, de acordo com a Lei de Ohm, deve ir ao pino de entrada, em vez do GND.
Assim, existe uma leitura de voltagem no pino de entrada.

Técnicas de Programação para Sistemas Embarcados I 7


Universidade Federal do Ceará Campus Quixadá

3 Atividades Práticas
pratica 1:

Crie um sistema Button, no qual a sequência de pisca dos LEDs internos mude para
externos quando o botão for pressionado. Segundo botão muda as seguintes sequências:

• mude de 2 LEDs (de 0 até 3), para 3 LEDs (de 0 até 7).

• mude de 3 LEDs (de 0 até 7), para 4 LEDs (de 0 até 15).

Técnicas de Programação para Sistemas Embarcados I 8

Você também pode gostar