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.

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
###
Diagramas de circuito
| Interface de switch e LED com LPC1768 | ![]() |
Componentes do Projeto
- LIDERADO
- Resistor
Vídeo do projeto
