Problemas ao tentar acessar diretamente os pinos.

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Problemas ao tentar acessar diretamente os pinos.

Mensagempor racerxdl » 04 Dez 2007 20:59

Bom to começando e to vendo os basicos aki, ai eu peguei um exemplo do Keil, akele Blinky. E vi como se acessa os pinos. Ai blz montei meu código, mas ele não está funcionando. Os pinos que eu defini (P1.16 a 23) ficam em baixo sempre.

O que tem de errado?

Código: Selecionar todos
#include <stdio.h>                /* prototype declarations for I/O functions */
#include <LPC21xx.H>              /* LPC21xx definitions                      */
  int h = 0;
  int v = 0;
  long color;

void wait (void)  {                        /* wait function */
  int  d;

  for (d = 0; d < 1000; d++);           /* only to delay for LED flashes */
}

int main (void) {
  //unsigned int i;                          /* LED var */
  unsigned int clockup;
  IODIR1 = 0x00FF0000;                     /* P1.16..23 defined as Outputs */
  /* initialize the serial interface   */
 // PINSEL0 = 0x00050000;           /* Enable RxD1 and TxD1                     */
 // U1LCR = 0x83;                   /* 8 bits, no Parity, 1 Stop bit            */
 // U1DLL = 97;                     /* 9600 Baud Rate @ 15MHz VPB Clock         */
 // U1LCR = 0x03;                   /* DLAB = 0                                 */
  clockup = 0x40;
 // printf ("Hello World \n");       /* the 'printf' function call               */

  while (1) {                          /* An embedded program does not stop and       */
      /* ... */
                          /* never returns. We use an endless loop.      */
   IOCLR1 = 0x40;
   if(v == 100) {
      IOSET1 = 0x43;
   }
   if(v == 500) {
      IOSET1 = 0x4C;
   }      
   IOSET1 = 0x40;

   if(v == 799) {
      v = 0;
      h++;
   }

   if(h == 599) {
      h = 0;
   }
   v++; 
 }   
}
racerxdl
Bit
 
Mensagens: 16
Registrado em: 20 Dez 2006 13:28

Mensagempor xultz » 05 Dez 2007 00:03

Você tá com a Jtag habilitada, né? O motivo é esse. Se procurar bem, mas bem mesmo, vai achar uma linha que diz isso.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor NEON » 05 Dez 2007 09:08

Racer,
O erro está no IODIR1 e vc definiu os pinos como entrada e saída fora do lugar. Acho vc está acostumado usar IODIR em PIC. No ARM, é contrário, quando IODIR usa o bit 1 define como saída e 0 define como entrada. O correto no seu código é IODIR1 = 0x00FFFFFF e usa os pinos P1.0 até P1.7 como saída conforme o seu código.

PIC,MSP430 e ARM
Assembly e C
NEON
Nibble
 
Mensagens: 58
Registrado em: 05 Dez 2006 17:04
Localização: RJ

Mensagempor racerxdl » 05 Dez 2007 12:30

Bom, eu resolvi o problema simplesmente jogando as saidas para os primeiros Pinos (P0.1 - P0.6) porém está somente saindo uma alteração (um Pino oscilando, extamente como está aki:
Código: Selecionar todos
   
        IOCLR0 = 0x40;
(...) 
   IOSET0 = 0x40;


porém o código do meio não está funcionando:
Código: Selecionar todos
   if(v == 100) {
      IOSET0 = 0x43;
   }
   if(v == 500) {
      IOSET0 = 0x4C;
   }      


Eu estou fazendo a contagem da forma correta? (Usando v++) E a comparação? No pic funcionava blz isso hehe...

Outra coisa, como fica os maior que e menor que? É <= e >= mesmo?
racerxdl
Bit
 
Mensagens: 16
Registrado em: 20 Dez 2006 13:28


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x