SPI com 9 bits

Software e Hardware para uC PSoC

Moderadores: andre_luis, 51

SPI com 9 bits

Mensagempor sanabio » 13 Mar 2008 11:02

Olá pessoal,

o PSoC tem um módulo SPI de 8 bits e eu tenho que comunicar com um dispositivo que trabalha com SPI de 9 bits.

O primeiro bit que eu tenho que mandar significa Data=1 ou Command=0 the os demais fazem parte do código ou próprio dado.

Já tentei colocar o bit manualmente na porta e então forçar o clock... mas não obtive resultados. O timming não está legal....

Vocês têm alguma idéia?

Este é o código que estive tentando:
Código: Selecionar todos
void send_data(unsigned char data)
{
   SCK_OFF;
   CS_OFF;
   SDO_ON;
   SCK_ON;


   while( ! (SPIM_2_bReadStatus() & SPIM_2_SPIM_TX_BUFFER_EMPTY ) );
   SPIM_2_SendTxData(data);
   //while(!(SPIM_2_bReadStatus() & SPIM_2_SPIM_SPI_COMPLETE));

   CS_ON;
   SSPEN = 0;
}


Obrigado!
Rick
sanabio
Bit
 
Mensagens: 10
Registrado em: 05 Mar 2008 15:37

Mensagempor Fábio Pereira » 13 Mar 2008 11:59

Olá Sanabio,

Qual o modo SPI que o dispositivo utiliza?

No seu programa, você somente gerou uma borda de subida no clock, mas não uma borda de descida ...

T+
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 sanabio » 13 Mar 2008 13:09

Fábio Pereira escreveu:Olá Sanabio,

Qual o modo SPI que o dispositivo utiliza?

No seu programa, você somente gerou uma borda de subida no clock, mas não uma borda de descida ...

T+


Olá Fábio! Obrigado por ajudar!
Realmente tenho dúvidas quanto aos modos SPI. Procurei informações a respeito mas nada muito esclarecedor. Seguindo o exemplo fornecido pelo PSoC Designer, estou usando o modo 0:
Código: Selecionar todos
SPIM_2_Start(SPIM_2_SPIM_MODE_0 | SPIM_2_SPIM_MSB_FIRST);

Vou verificar também a descida do clock.
Outra dúvida: quanto configuramos no Device Editor os pinos que serão utilizados para SPI, é possível setar estes mesmos bits por código?
Pois no meu código além de configurar o módulo SPI, estou forçando as portas de saída da seguinte maneira:
Código: Selecionar todos
#define  SCK_ON         PRT0DR |= bit7
#define  SCK_OFF        PRT0DR &= ~bit7


O diagrama de tempo (link) de como o dispositivo com o qual estou tentando comunicar deve ser tratado. Este é por ter dúvidas quanto ao modo SPI.

Muitíssimo obrigado.

Sanabio
sanabio
Bit
 
Mensagens: 10
Registrado em: 05 Mar 2008 15:37

Mensagempor Fábio Pereira » 13 Mar 2008 13:30

Olá Sanabio,

Infelizmente não trabalho com PSOCs. Na maioria dos microcontroladores que conheço, ao ativar um periférico você perde a funcionalidade de I/O do pino (o pino passa a ser controlado diretamente pelo periférico). Verifique se este é o caso dos PSOCs.

Se isto se confirmar, creio que a tentativa de escrever nos pinos de clock e dados não produzirá efeito, a não ser que seja feita com a SPI desativada.

T+
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

Modos SPI

Mensagempor sanabio » 19 Mar 2008 08:21

Bom.. fiz um apanhado geral sobre SPI e postei em um outro fórum:

http://www.mundomelhor.eng.br/portal/forum/forum_posts.asp?TID=76

O código agora funcionou corretamente! No entanto optei por elaborar minha própria função SPI, uma vez que quando estou usando o módulo SPI as portas realmente ficam reservadas e não tenho acesso direto à elas.

Obrigado!
sanabio
Bit
 
Mensagens: 10
Registrado em: 05 Mar 2008 15:37


Voltar para Cypress

Quem está online

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

x