PROBLEMA SPI1 LPC2478 {RESOLVIDO}

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

PROBLEMA SPI1 LPC2478 {RESOLVIDO}

Mensagempor fabim » 02 Fev 2011 10:03

Pessoal.
Estou desde antonti, me batendo com um chip dedicado para touch screem, ADS7843.
Pois bem, a porqueira não estava funcionando ai depois descobri que era por causa do maldito FIO4MASK, que o bit do P4.19 tinha que estar a zero pra eu poder usar a la vontré.
Fora que estava testando o bit busy de forma incorreta, e estava atropelando os bytes.

Resolvi tudo, e agora to me batendo com o seguinte.

Código: Selecionar todos
 ADS7843       -------     LPC2478
 DOUT                          MISO  "SSP1"
 DIN                             MOSI  "SSP1"
 DCLK                           SCK    "SSP1"
 CS                              P4.19
 


O PCLK ta rodando a 36mhz.
E estão aqui as configurações.

Código: Selecionar todos
  SSP1Init( void ){
 
  //liga clock SSP1
  PCONP |= (1 << 10);
 
 
  //configura pinos P4-20.SCK-22.MISO-23.MOSI para função SPI
  PINSEL9 |= (1<<15 |1<<14 |1<<13 |1<<12 |1<<9 |1<<8)  ;
  //configura pino P4-19-21 para função pino para CS do touch screem e memoria AT45.
  PINSEL9 &= ~(1<<6|1<<7|1<<10|1<<11);
  //configura direção IO dos pinos
  //pinos P4-19=CS.touch,20=SCK,21=CS.at45,23=MOSI como saida
   FIO4DIR |= (1<<19|1<<20|1<<21|1<<23);
  //pino P4-22=MISO como entrada
   FIO4DIR &= ~(1<<22);

   FIO4MASK &= ~(1<<19|1<<21|1<<22);
  //coloca CS do touch como 1
   desel_tch;
   FIO4SET  = 1<<21; //CS.AT45 = 1 desel

      
  /* Set DSS data to 8-bit, Frame format SPI, CPOL = 0, CPHA = 0, and SCR is 15 */
  SSP1CR0 = 0x0707;

  /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */
  SSP1CPSR = 0x0C;

     
  /* Device select as master, SSP Enabled, loopback operational mode */
  SSP1CR1 = SSPCR1_LBM | SSPCR1_SSE;
  /* Set SSPINMS registers to enable interrupts */
  /* enable all error related interrupts */
  SSP1IMSC = 0x00;
 
}


e aqui esta a forma que eu estou fazendo para ler o ADS7843.


Código: Selecionar todos
char touch_H, touch_L;


  FIO4PIN &= ~(1<<19);//CS.ADS7843 = 0

    for(i=0;i<4;i++){;}
   
      SSP1DR = read_x;//envia comando para ler X
   while ( (SSP1SR & SSPSR_BSY) );
                for(i=0;i<100;i++){;}
   dummy = SSP1DR;// limpa lixo
   
   SSP1DR = 0x00;//envia bummy para gerar clock
                while ( (SSP1SR & SSPSR_BSY) );
   for(i=0;i<10;i++){;}
                 touch_H = SSP1DR;//pega high

               SSP1DR = 0x00;//envia dummy para gerar clock
                while ( (SSP1SR & SSPSR_BSY) );
   for(i=0;i<10;i++){;}
                touch_L = SSP1DR; //pega low

        FIO4PIN |= 1<<19;
    contador = 0; //CS.ADS7843 = 1


O que ocorre é que:
O ADS esta respondendo ao comando, tudo bunitinho pois estou aferindo com o osciloscopio, só que o arm. Seja qual for o valor que eu mando como dummy, ele não pega o byte que o ads responde, ele simplesmente pega o ultimo valor que ele escreveu no DR ou seja, o dummy.

Alguém ja passou por isto ? tem alguma sugestão ?
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor fabim » 02 Fev 2011 14:29

um bit perdido apenas, agora resolveu..

Maldito loop back dos caralhos !!!!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor proex » 03 Fev 2011 07:19

Bom, depois que mandei exemplo do meu codigo, depois que te disse pra tirar aquela maldita exclamacao no while, ficou facil achar o problema né? :lol:
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor fabim » 03 Fev 2011 08:08

proex escreveu:Bom, depois que mandei exemplo do meu codigo, depois que te disse pra tirar aquela maldita exclamacao no while, ficou facil achar o problema né? :lol:


Pior não é isso, sabe o que é pior ?

Lembra aquele codigo do wiznet que eu mudei do 2368 pro 1768 e não funcionou o wiznet ?
Fui ver o drive que eu adaptei, e todos os LCD_SSP->SSP1SR & busy, estão com " ! "...
Muito provavelmente aquela placa pode estar funcionando com o wiznet...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor proex » 03 Fev 2011 08:33

No codigo do Wiznet que te mandei não tinha o ponto de exclamação nessa linha de comando.

Foi vc quem detonou meu código.

As MINHAS rotinas de SPI funcionam muito bem obrigado.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor fabim » 03 Fev 2011 08:35

fui confirmar, num tinha exclamação não
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor jeanfernandes » 14 Fev 2011 10:08

kkkkkkkkkkkkkkkkk, eu to com um problema no I2C do Cortex, e com certeza deve ser algo perto dessas coisas, mas nao de ! , mas de resposta do chip. mo doideira isso.
Jean P. Fernandes - Eng. Eletrônico - (83) 2102-2116 - APEL - www.apel.com.br - Campina Grande - PB
jeanfernandes
Word
 
Mensagens: 539
Registrado em: 11 Out 2006 15:36
Localização: Campina Grande - PB

Mensagempor Djalma Toledo Rodrigues » 14 Fev 2011 12:38

pô!

Fabim!

como!

da!

uma!

dessa!

Abraço!

DJ!

P.S. ___!___
:D !

P. S. 2 Felizmente resolto !
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22


Voltar para ARM

Quem está online

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

x