Interface de Comunicação SCI

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

Moderadores: 51, guest2003

Interface de Comunicação SCI

Mensagempor Giovak » 15 Jan 2008 15:20

Boa tarde, estou tentando utilizar a interface de comunicação serial SCI.
Tenho dois microcontroladores AW, onde quero transmitir e receber nas duas, mais não ao mesmo tempo ou seja uma comunicação half-duplex.
Para ser mais especifico queria saber como configurar os registradores e as funções de transmissão e recepção em "C".
Eu consegui transmitir e receber utilizando dois pinos qualquer do micro, mais não consegui utilizar os pinos Tx e Rx do micro.
Muito obrigado.
Giovak
Bit
 
Mensagens: 12
Registrado em: 19 Out 2006 07:21

Mensagempor Fábio Pereira » 15 Jan 2008 16:05

Você já tentou com os exemplos do meu livro sobre HCS08?

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 Giovak » 16 Jan 2008 07:56

Eu não tenho o livro mais vi os exemplos. Tem dois. Simulei os dois mais não obtive resultados.
No exemplo numero 12 quando simulo, fica sempre aguardando um caractere. Imagino que seja porque não esta recebendo.
Poderia me explicar como devo transmitir e como devo receber?
Vou ligar dois AW e fazer um transmitir e o outro receber.
Grato
Giovak
Bit
 
Mensagens: 12
Registrado em: 19 Out 2006 07:21

Mensagempor CCandido » 22 Jan 2008 21:47

configuraçao xtal=4mhz up pll bus=20mhz
BAUD= 178571 bps

void Init_sci1(void){

SCI1C1= 0x00; /* Configure the SCI */
SCI1C3=0x00; /* Disable error interrupts */
SCI1S2=0x00;
SCI1C2=0x00; /* Disable all interrupts */

SCI1BDH = 0x00;
SCI1BDL = 0x07;
SCI1C2_TE = 0x01; /* Enable transmitter */
SCI1C2_RE = 0x01; /* Enable receiver */

SCI1C2 |= ( SCI1C2_TE_MASK | SCI1C2_RE_MASK | SCI1C2_RIE_MASK);
// SCI1C2=0x34;

}
//----------------------------------------------------------
void Init_sci2(void){

SCI2C1= 0x00; /* Configure the SCI */
SCI2C3=0x00; /* Disable error interrupts */
SCI2S2=0x00;
SCI2C2=0x00; /* Disable all interrupts */

BAUD= 178571 bps
SCI2BDH = 0x00;
SCI2BDL = 0x07;
SCI2C2_TE = 0x01; /* Enable transmitter */
SCI2C2_RE = 0x01; /* Enable receiver */

SCI2C2 |= ( SCI2C2_TE_MASK | SCI2C2_RE_MASK | SCI2C2_RIE_MASK);

}
------------
__interrupt 20 void SCI2_Interrupt(void){

while(!SCI2S1_RDRF); wait

byte = SCI2D; salva o byte recepcionado

}
//------------------------------------------------
__interrupt 17 void SCI1_Interrupt(void){

while(!SCI1S1_RDRF); wait

byte = SCI1D;

}
---------------------------
para enviar byte

while (! SCI2S1_TC ); wait

SCI2D = Byte;

eu uso no aw isto ai e funciona
na hora de colar aqui pode ter avido erros....
boa sorte
CCandido
Byte
 
Mensagens: 120
Registrado em: 12 Out 2006 12:54
Localização: Londrina-PR

Mensagempor Fábio Pereira » 23 Jan 2008 07:08

Basicamente você transmite escrevendo um dado no registrador SCIxD. A transmissão é completada quando a SCI coloca o bit TC (registrador SCIxS1) em um.

A recepção é sinalizada por RDRF (registrador SCIxS1). Quando RDRF está setado, um novo caractere foi recebido. Você deve efetuar a leitura do mesmo no registrador SCIxD.

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 Giovak » 23 Jan 2008 10:31

Consegui transmitir e receber.
Realmente não tem nenhum segredo. Estava configurando errado os registradores.
Fico muito grato.
Giovak
Bit
 
Mensagens: 12
Registrado em: 19 Out 2006 07:21

Mensagempor Giovak » 31 Jan 2008 18:09

Seguinte,,, consegui comunicar dois microcontroladores AW, os dois mandam dados e recebem. Gostaria de comunicar 5 microprocessadores.
Como poderia fazer a ligação entre elas. Pelos pinos Rx e Tx???
Quero que uma central receba os dados dos outros 4 modulos.
Muito obrigado.
Giovak
Bit
 
Mensagens: 12
Registrado em: 19 Out 2006 07:21

Mensagempor Kremer » 31 Jan 2008 20:24

A SCI nao seria o periferico mais indicado para esta sua necessidade. Eu partiria para outras que o micro pode oferecer. Acho que ficaria mais simples se fosse por SPI ou I2C.
Avatar do usuário
Kremer
Nibble
 
Mensagens: 82
Registrado em: 25 Jul 2007 17:15
Localização: Florianópolis

Mensagempor Giovak » 31 Jan 2008 21:39

tem algum link onde possa entender como funciona isso?
Grato
Giovak
Bit
 
Mensagens: 12
Registrado em: 19 Out 2006 07:21

Mensagempor Kremer » 01 Fev 2008 07:43

Avatar do usuário
Kremer
Nibble
 
Mensagens: 82
Registrado em: 25 Jul 2007 17:15
Localização: Florianópolis

Mensagempor Fábio Pereira » 01 Fev 2008 07:49

O meu livro novo tem um exemplo de comunicação mestre-escravo de dois HCS08 (QG8) via I2C. O dispositivo master lê e escreve no slave. O Slave possui duas entradas analógicas selecionáveis e uma porta de I/O de 8 bits.

Tem uma aplication note da Freescale que mostra algo parecido com isso.
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 CCandido » 01 Fev 2008 18:04

pode verificar rede LIN usado em automotiva
veja no site da freescale.
CCandido
Byte
 
Mensagens: 120
Registrado em: 12 Out 2006 12:54
Localização: Londrina-PR

Re: Interface de Comunicação SCI

Mensagempor raillux » 22 Ago 2017 17:22

eu estou com um problema, que em alguns dados ele muda 1 bit
por exempro se eu mando 0x07 ele entende como 0x0f.
alguem pode ajudar??
raillux
 
Mensagens: 1
Registrado em: 22 Ago 2017 17:19

Re: Interface de Comunicação SCI

Mensagempor mastk » 17 Out 2017 10:57

Veja se o Baudrate está bom, antes de considerar que o dado obtido é valido, checar os registros de erros, que podem ser dos mais diversos.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43


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

Quem está online

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

x