Criando Biblioteca para LPC1768- (Parte 2/21)

Criando Biblioteca para LPC1768- (Parte 2/21)

Este é outro artigo que apresenta a programação do microcontrolador ARM Cortex-M3 LPC1768. A maioria dos tutoriais usará bibliotecas pré-fabricadas nos tutoriais a seguir. Às vezes é necessário criar uma nova biblioteca para o seu próprio projeto. Este tutorial explica como fazer uma biblioteca customizada em Keil e também inclui uma biblioteca construída para as funções GPIO do LPC1768. 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.

Bibliotecas:

Existe uma biblioteca de dois arquivos, um arquivo de código e um arquivo de cabeçalho. Eles deveriam ter o mesmo nome, mat_lib por exemplo. O arquivo de código é chamado mat_lib.c e o arquivo de cabeçalho mat_lib.h. O arquivo de código é o arquivo que contém o código real que deve ser executado e os arquivos de cabeçalho são apenas uma lista com todas as instruções da biblioteca dentro. Para adicionar novos arquivos a um projeto:

Adicionar novos arquivos para projeto em LPC1768

Fig. 1: Adicionar novos arquivos para projeto em LPC1768

Para este exemplo, faremos o seguinte código em uma biblioteca:

UMA = UMA * 2;

UMA = UMA + 2;

O código simplesmente multiplica uma variável por 2 e depois adiciona 2. A instrução será nomeada A = Multiplicar soma2(A); Para a biblioteca é necessário criar 2 arquivos no projeto. Arquivo AC e um arquivo H conforme explicado acima.

O código da biblioteca deve ser colocado em uma função como esta:

vazio Multiplyadd2( vazio )

{

//instrução

}

Void significa vazio, se uma instrução não precisar enviar nenhum dado de volta, void pode ser usado. A variável que queremos modificar precisa ser enviada com a instrução e a instrução deve enviar um valor de volta. Para alterar a instrução pode-se usar variáveis ​​do código principal para o qual deve ser alterado:

void Multiplyadd2 (variável uint32_t)

Em vez de uint32_t qualquer variável pode ser usada. Múltiplas variáveis ​​também podem ser usadas:

(Variável uint32_t, Variável uint16_t2, Char char3)

O comando para a linha acima é: A = Multiplicaradicionar2(Variável, Variável2, Caráter3); Para o comando multiplicar e adicionar 2 a uma variável basta usar 1 variável, aquela que precisa ser multiplicada etc.

A instrução também deve enviar o valor de volta após a conclusão dos cálculos. Para fazer isso, o void no início deve ser alterado em uma variável:

uint32_t Multiplyadd2(variável uint32_t)

{

}

Agora o código real pode ser adicionado à instrução:

uint32_t Multiplyadd2(variável uint32_t)

{

Variável = Variável * 2;

Variável = Variável + 2;

variável de retorno;

}

A instrução de retorno envia a variável de volta após a conclusão dos cálculos. O arquivo .c também precisa de algumas inclusões. No topo do arquivo .c, os seguintes includes precisam ser adicionados:

#incluir “lpc17xx.h”

#incluir “tipos.h”

#incluir “mat_lib.h”

Essas inclusões são necessárias para que a biblioteca saiba qual microcontrolador é usado e que variáveis ​​podem ser usadas na biblioteca. Também é possível adicionar outras inclusões para outras bibliotecas para que possam ser utilizadas na nova biblioteca.

A única coisa que resta é adicionar o código do arquivo .h. Nos arquivos .h estão listadas todas as instruções que podem ser usadas. Esta biblioteca de exemplo possui apenas uma instrução, então o código é:

uint32_t Multiplyadd2(variável uint32_t);

Para utilizar a biblioteca basta incluir Tutlibrary.h no código principal e ela estará pronta para uso. Criar bibliotecas para o LPC1768 funciona da mesma forma que criar bibliotecas para qualquer linguagem de programação C.

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 experimentar a biblioteca feita para GPIO do LPC1768.

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 <

A biblioteca GPIO fornecida acima inclui um total de 7 funções que podem ser usadas para completar as ações do GPIO facilmente.

· GPIOSetDir(uint32_t númeroporta, uint32_t bitPosi, uint32_t dir);

· GPIOSetValue(uint32_t númeroporta, uint32_t bitPosi, uint32_t bitVal);

· GPIOSetPull(uint32_t portNum, uint32_t bitPosi, uint32_t dir);

· GPIOGetValue (uint32_t portNum, uint32_t bitPosi);

· GPIOSetInterrupt (uint32_t portNum, uint32_t bitPosi, uint32_t dir);

· GPIOClearInterrupt(void);

· uint32_t GPIOCheckInterrupts ( uint32_t portNum, uint32_t dir);

As portas GPIO podem ser usadas como entrada ou saída, para este tutorial a porta GPIO é usada como saída. As instruções para configurar uma porta GPIO:

GPIOSetDir(portnum, bitposi, dir);

Portnum é o número da porta, pode ser de 0 a 4 dependendo da porta IO usada. Bitposi é a posição do bit do número da porta; isso pode ser de 0 a 31 dependendo da porta IO usada. Dir é a direção, 0 para entrada e 1 para saída. Também é possível digitar Entrada ou Saída. A porta IO usada neste tutorial é GPIO-1.25 e é usada como saída. A instrução correta para configurar a porta IO é:

GPIOSetDir(1, 25, SAÍDA); ou:

GPIOSetDir(1, 25, 1);

Para aumentar ou diminuir um IO, o comando: GPIOSetValue(portnum, bitposi, valor);

Portnum e bitposi são iguais ao comando GPIOSetDir. O valor determina se um IO está ligado ou desligado, 0 de Baixo para desligado e 1 ou Alto para ligado. Para ativar o pino IO 1.25 no comando é:

GPIOSetValue(1, 25, ALTO); ou

GPIOSetValue(1, 25, 1);

O próprio nome das demais funções dará as explicações para sua utilização. Você pode comparar essas funções da biblioteca com a folha de dados do LPC1768 para melhor compreensão.

Código-fonte do projeto

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

Diagramas de circuito

Diagrama de Circuito Criando Biblioteca para LPC1768

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

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