Dúvida SPI

Software e Hardware para uC da Qualcomm, NXP, FreeScale e Motorola

Moderadores: 51, guest2003

Dúvida SPI

Mensagempor lafourcade » 27 Nov 2006 07:43

Oi
Eu estou seguindo as orientações do livro do Fabio e estou testando o SPI. eu fiz essa rotina simples:

cpp code
#include <hidef.h> 
#include <MC9S08QG8.h>

void main(void) {

unsigned int contdelay=0, receiv=0;

PTBDD_PTBDD7=1;
PTBD_PTBD7=0;

SPIC1 = 0x00;
SPIC2 = 0x00;
SPIBR = 0x00;
(void)(SPIS == 0); //Ele criou esse comando na Inicialização
SPIC1 = 0x50;

for(;;) {

SPID = 0xB9; // Move byte to send to SPI data register
receiv = SPID;

PTBD_PTBD7=0;

for (contdelay=40000; contdelay; contdelay--) __RESET_WATCHDOG();

PTBD_PTBD7=1;

for (contdelay=40000; contdelay; contdelay--) __RESET_WATCHDOG();

}

}


Só que eu coloco o osciloscópio no pino do clock (SPSCK) e não tem nada. Coloquei um breakpoint no programa, depois que eu atribuo valor para o SPID, e ele não seta o bit de buffer cheio. Será que eu esqueci alguma coisa?

Obrigado
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor Emerson » 27 Nov 2006 13:27

Não olhei a fundo a configuração dos registros do QG8 que vc postou, mas tem um USER GUIDE chamada HCS08QRUG (HCS08 Peripheral Module Quick Reference) no site da Freescale. Nele tem exemplos de implementação dos módulos da família HCS08.

Até mais

Emerson
Emerson
Nibble
 
Mensagens: 68
Registrado em: 22 Nov 2006 21:24
Localização: Santa Rita do Sapucaí - MG

Mensagempor lafourcade » 06 Dez 2006 06:49

Obrigado Emerson, dei uma olhada e tem bastante coisa ali. Não achei ainda a resposta para essa questão:

O fato de eu ficar monitorando a flag de buffer de recepção cheio: SPIS_SPRF, ja não deveria ser suficiente para mim ter a certeza de que posso mandar outro dado pela SPI? Inicialmente eu fazia só assim, mas sem aquele "for" para dar um delay entre um byte enviado e o próximo ele não funciona quando eu mando varios bytes seguidos. É muito tempo, da uns 3ms no meu firmware. Será que eu estou fazendo da melhor forma?


cpp code
unsigned char SpiReadWrite(unsigned char bn) {
unsigned int crw;

SPID = bn; // Move byte to send to SPI data register
while (SPIS_SPRF) crw=SPID;
for (crw=800; crw; crw--) __RESET_WATCHDOG();
return SPID;
}


a quem puder ajudar...

Obigado
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor Fábio Pereira » 06 Dez 2006 08:58

E que tal se você configurar corretamente os pinos da SPI ?

Lembre-se de que no modo mestre, o PTB2 deve ser uma saída, PTB3 saída, PTB4 entrada e PTB5 (se a função SS estiver ativada) uma saída.

Até +
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor leandrosilva » 18 Dez 2006 13:38

Onde eu posso encontrar esse livro do fábio?
Obrigado
leandrosilva
Bit
 
Mensagens: 39
Registrado em: 04 Dez 2006 21:51

Mensagempor Fábio Pereira » 19 Dez 2006 17:37

Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON


Voltar para NXP (ex-FreeScale (ex-Motorola))

Quem está online

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

cron

x