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

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.