por xultz » 30 Jan 2008 18:28
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?
98% das vezes estou certo, e não estou nem aí pros outros 3%.