Página 1 de 1

Bibliotecas LPC

MensagemEnviado: 29 Jan 2008 13:46
por Pianta
Olá pessoal,
estou iniciando na parte de programação do lpc mais especificamente lpc2292, gostaria de saber se há disponível como no 8051 por exemplo um asm51 que define as portas e registradores ao invés de usarmos os endereços hexadecimais? Como um biblioteca include lpc2292.h por exemplo. Dei uma olhada e achei atraves de alguns programas exemplos catados na internet o pessoal usando include iolpc2138.h minha dúvida é onde posso achar essas definicoes para o 2292?

MensagemEnviado: 29 Jan 2008 15:19
por alessandro
Acho que você terá que escrever um pequeno arquivo com suas definições de como quer chamar cada pino e seu respectivo endereço. Depois disso é colocar como include em seus projetos.

Agora se quer algo pronto, tem uma lib que vem junto com o kit que o Rodrigo PA vende de ARM. Talvez possa ser útil para você. Já usei e quebra um galho. Vou dar uma olhada se ainda tenho aqui.

Alessandro

MensagemEnviado: 29 Jan 2008 15:32
por barboza
Se quiser pode usar este da Keil.

http://www.keil.com/dd/docs/arm/philips/lpc22xx.h

MensagemEnviado: 30 Jan 2008 14:59
por Pianta
Valeu pelo link da keil com a include. Muito bom, mas tenho uma pergunta como reconhecer qual é o pino de GPIO? Por exemplo pego um ali do include lpc22xxx.h beleza, depois na placa uso um pino P1.21 qual o pino correspondente ao define da include lpc22xx.h?

Abri o include que mandaste o link, vi lá os general purpose input/output (GPIO), mas o primeiro como exemplo #define IOPIN0 qual porta ele está relacionada? Na verdade estou perguntando na teoria, eu teria como descobrir isso programando e simulando mas como nao estou nem programando ainda estou terminado meu hardware, então depois para facilitar e ter tudo que puder ter mastigado seria melhor.
Agradeço desde já pelos post.
Abraços

MensagemEnviado: 30 Jan 2008 15:11
por barboza
Busque alguns exemplos no próprio site da Keil e/ou na NXP que tem exemplos com todos os periféricos de cada familia LPC.

MensagemEnviado: 30 Jan 2008 18:28
por xultz
Pianta, a manipulação de pinos nos LPC é ligeiramente diferente dos outros micros.
Você tem três registrados distintos para cada porta, sendo que o 22xx tem quatro portas de 32 bits cada (eu não sei exatamente quais destes bits representam qual IO porque eu nunca mexi com este modelo específico, eu só trabalhei com o 2106 e 2105). Uma rápida olhada no datasheet e você descobre qual bit manipula qual IO. Porém, várias GPIOs compartilham pinos com outras funções, como USART, I2C, etc.
Então primeiro você precisa configurar um determinado pino como GPIO para poder manipulá-la. Isso você faz colocando os bits certos nos registradores PINSELx (veja no datasheet qual bit colocar aonde para cada GPIO que for usar). Depois precisa configurar o registrador IODIRx para dizer se o pino é de saída ou entrada.
Feito isso, você pode mexer no pino. Para colocar o pino em nível alto, você deve escrever 1 no bit correspondente à GPIO no registrador IOSETx, e para colocá-lo em nível baixo, escreva 1 no bit correspondente no registrador IOCLRx. Porém, se quiser manipular escrevendo 1 para colocar em nível alto e 0 para nível baixo, use o registrador IOPINx.

Ficou claro?

MensagemEnviado: 30 Jan 2008 18:56
por Pianta
xultz escreveu:Pianta, a manipulação de pinos nos LPC é ligeiramente diferente dos outros micros.
Você tem três registrados distintos para cada porta, sendo que o 22xx tem quatro portas de 32 bits cada (eu não sei exatamente quais destes bits representam qual IO porque eu nunca mexi com este modelo específico, eu só trabalhei com o 2106 e 2105). Uma rápida olhada no datasheet e você descobre qual bit manipula qual IO. Porém, várias GPIOs compartilham pinos com outras funções, como USART, I2C, etc.
Então primeiro você precisa configurar um determinado pino como GPIO para poder manipulá-la. Isso você faz colocando os bits certos nos registradores PINSELx (veja no datasheet qual bit colocar aonde para cada GPIO que for usar). Depois precisa configurar o registrador IODIRx para dizer se o pino é de saída ou entrada.
Feito isso, você pode mexer no pino. Para colocar o pino em nível alto, você deve escrever 1 no bit correspondente à GPIO no registrador IOSETx, e para colocá-lo em nível baixo, escreva 1 no bit correspondente no registrador IOCLRx. Porém, se quiser manipular escrevendo 1 para colocar em nível alto e 0 para nível baixo, use o registrador IOPINx.

Ficou claro?


Beleza ficou sim, mas estou partindo para a programação agora. Ainda estou saindo de uma plataforma até então não muito complexa como o 8051 e partindo para o ARM. Eu percebi hoje mesmo através do link do amigo que postou acima com as dicas do site da Keil e me esclareceu bastante coisa, também estou usando bibiografias que estão me ajudando também, mas nada como o forum e resposta diretas as dúvidas, muito obrigado Xultz. Qualquer dúvida postarei novamente.
Abraços.

MensagemEnviado: 14 Fev 2008 08:38
por lrfad2
Por acaso alguem teria pronta bibliotecas para tratamento e conversão de dados? Por exemplo
IntToStr -> converte um valor numérico em String

MensagemEnviado: 25 Mar 2008 00:27
por barboza
De uma estudada nas bibliotecas do próprio C!

MensagemEnviado: 25 Mar 2008 07:42
por helton
exemplo de um led...

Código: Selecionar todos

#define LD1            16
#define LD1_OUTPUT      GPIO0_IODIR |= ( 1 << LD1 )
#define LD1_ON            GPIO0_IOSET = ( 1 << LD1 )
#define LD1_OFF            GPIO0_IOCLR = ( 1 << LD1 )




sobre strings IntToStr só no borland...

http://www.cplusplus.com/reference/clibrary/cstring/

no link acima, exemplos de funções em C para manipulação de strings...
[/url]

MensagemEnviado: 25 Mar 2008 08:58
por xultz
Eu tenho por hábito o seguinte: imagine três IOs, na P0.1 um led, na P0.2 um relé, e na P0.3 um buzzer. Eu declaro
#define LED 0x00000002
#define RELE 0x00000004
#define BUZZER 0x00000008

Se eu quero ligar o led
IOSET = LED;

Se quero desligar o led
IOCLR = LED;

Se quero ligar o RELE e o Buzzer ao mesmo tempo
IOSET = BUZZER + RELE;

Eu acho que fica prático assim...