Interface Switch e Led com LPC1768- (Parte 4/21)

Este é outro artigo que apresenta a programação do microcontrolador ARM Cortex-M3 LPC1768. Aqui faremos funções de entrada e saída do GPIO do LPC1768. Para melhor compreensão vamos utilizar um botão e o LED. Nossa ideia é programar de forma que ao pressionar o botão o LED fique aceso. A configuração do ambiente para o desenvolvimento do ARM córtex M3 é bem discutida neste artigo.

O LPC 1768 é um microcontrolador baseado em ARM Cortex-M3 para recursos de aplicação embarcados com baixo consumo de energia e alto nível de integração. O ARM Cortex M3 foi projetado de forma a aprimorar os recursos de depuração e um nível mais alto de integração do sistema. Ele funciona a uma frequência de CPU de 100 MHz e incorpora um pipeline de 3 estágios e usa uma arquitetura Harvard com instruções locais separadas e barramentos de dados para periféricos de terceiro barramento. A CPU ARM Cortex-M3 possui uma unidade interna de pré-busca para suportar ramificações especulativas. Os componentes periféricos incluem 512 KB de memória flash, 64 KB de memória de dados, Ethernet MAC, USB OTG, 4 UARTs, controlador DMA de uso geral de 8 canais, 2 controladores SSP, DAC de 10 bits, interface de codificador de quadratura, interface SPI, 3 barramentos I2C interface, interface de barramento I2S de 2 entradas mais 2 saídas, 4 temporizadores de uso geral, relógio em tempo real (RTC) de consumo ultrabaixo com fonte de bateria separada e até 70 pinos de E/S de uso geral, PWM de uso geral de 6 saídas. Os LPC1768/66/65/64 são compatíveis com os pinos da série de microcontroladores baseados em LPC236x ARM7 de 100 pinos.

Interface Switch e Led com Protótipo LPC1768

Fig. 1: Interface Switch e Led com Protótipo LPC1768

Antes de entrar em a codificação da interface do LED e do Switch permite uma introdução ao os Registradores no LPC1768 e sua Configuração.

Configuração de registro (lpc17xx.h):

Como LPC1768 é uma arquitetura de 32 bits com memória mapeada para o local 0x2009 C000 a 0x2009 FFFF. Os registros de funções especiais do LPC1768 são definidos em lpc17xx.h, que está incluído no início do projeto. Existem 5 portas (PORT0 – PORT4). Cada PORT não terá 32 pinos físicos. Uma estrutura é definida no arquivo de sistema LPC_GPIOn(n= 0,1,2,3) contém todos os registros necessários para a operação do GPIO. Consulte o arquivo lpc17xx.h para obter mais informações sobre os registros.

PINSEL: Pinos GPIO Selecione Registro:

O registro PINSEL deve ser configurado antes de usar o PIN, pois quase todos os pinos possuem no máximo quatro funções alternativas. A tabela abaixo explica a função de um pino específico usando dois bits do registro PINSEL.

Valor

Função

Enumeração

00

Função primária (padrão), normalmente porta GPIO

PINSEL_FUNC_0

01

Primeira função alternativa

PINSEL_FUNC_1

10

Segunda função alternativa

PINSEL_FUNC_2

11

Terceira função alternativa

PINSEL_FUNC_3

Fig. 2: Valor do bit do registro PINSEL para selecionar pinos GPIO em LPC1768

FIODIR:Registro rápido de controle de direção GPIO.

Este registro controla individualmente a direção de cada pino da porta.

Valores

Direção

0

Entrada

1

Saída

Fig. 3: Valor do bit do registrador FIODIR para controlar a direção das portas no LPC1768

FIOSET:Registro de conjunto de saída de porta rápida.
Este registro controla o estado dos pinos de saída. A escrita 1 produz agudos nos pinos da porta correspondente. Escrever 0s não tem efeito. A leitura deste registro retorna o conteúdo atual do registro de saída da porta e não o valor da porta física.

Valores

FIOSET

0

Sem efeito

1

Define alto no pino

FIOCLR:Rápido Registro de limpeza de saída da porta.

Este registro controla o estado dos pinos de saída. A escrita 1 produz mínimos nos pinos da porta correspondente. Escrever 0s não tem efeito.

Valores

FIOCLR

0

Sem efeito

1

Define baixo no pino

Fig. 4: Valor do bit do registro FIOCLR para controlar o estado dos pinos de saída no LPC1768

FIOPIN:Registro de valor de pino de porta rápida.
Este registro é usado para ler e escrever dados de/para o PORT.
Saída: Escrever neste registrador coloca valores correspondentes em todos os bits dos pinos PORT específicos.
Entrada: O estado atual dos pinos da porta digital pode ser lido a partir deste registro, independentemente da direção do pino ou da seleção de função alternativa (desde que os pinos não estejam configurados como entrada para ADC).
Observação:Recomenda-se configurar a direção da PORTA e a função do pino antes de usá-la.

Crie um projeto usando Keil uvision4 para microcontrolador LPC1768:

Nesta seção, começaremos a criar um projeto no Keil MDK, já instalamos Keil µVision e Co-MDK Plug-in + CoLinkEx Drivers necessários para o adaptador de programação CoLinkEx. Você pode começar baixando os arquivos do projeto e iniciar seu experimento prático.

Código.rar

Descrição do código:

A programação ARM requer um bom manuseio da manipulação de bits na linguagem C. Aqui está uma pequena nota na introdução da manipulação de bits para um novato. C tem suporte direto para operações bit a bit que podem ser usadas para manipulação de bits. Nos exemplos a seguir, n é o índice do bit a ser manipulado dentro da variável bit_fld, que é um caractere não assinado sendo usado como campo de bit. A indexação de bits começa em 0, não em 1. O bit 0 é o bit menos significativo.

Defina um pouco

bit_fld = (1 <

Limpe um pouco

bit_fld &= ~(1 <

Alterne um pouco

bit_fld ^ = (1 << n)

Teste um pouco

bit_fld & (1 <

O LED está conectado à Porta 2.0 e o Switch está conectado à Porta 1.0, abaixo estão os trechos de código usados ​​para fazê-lo funcionar.

LPC_GPIO2->FIODIR = 0x000000FF; /* P2.xx definido como Saídas */

LPC_GPIO2->FIOCLR = 0x000000FF; /* desliga todos os LEDs */

LPC_GPIO1->FIODIR = 0x00000000; /* P1.xx definido como entradas */

LPC_GPIO1->FIOCLR = 0x000000FF; /* Diminui */

As linhas acima são para definir os pinos da porta 2 como saída e limpá-los. A estrutura LPC_GPIO2 consiste em membros FIODIR, FIOCLR e FIOSET.

switchStatus = (LPC_GPIO1->FIOPIN>>0) & 0x01 ; //Lê o status do switch

if(switchStatus == 1)

{

LPC_GPIO2->FIOPIN = (1<<0);

}

outro

{

LPC_GPIO2->FIOPIN = (0<<0);

}

O loop if acima serve para verificar o status do pino de entrada e alterar a saída do pino de saída de acordo.

Código-fonte do projeto

###
 
The codes are linked in Description ###

Diagramas de circuito

Interface de switch e LED com LPC1768

Componentes do Projeto

  • LIDERADO
  • Resistor

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.