Reply by "nielsen.daniel"●January 28, 20102010-01-28
I havent read all the threads but i do have working string tx/rx code for both
sci1 and sci0 for the dragon12+ board if you need? its written in c for
codewarrior
--- In 6..., folgli@... wrote: >
> Hello,
>
> >Have you enabled the TE and RE bits in SCI0CR2?
> Yes by using this function:
>
> #define TX 0x08
> #define RX 0x04
>
> SetSCI0(RX|TX);
>
> void SetSCI0(char OnOff)
> {
> SCI0CR2= OnOff; // SCI Control Register 2 (SCICR2)
> }
> I am able to send one character. I thing setting TE and RE is not the problem.
I thing something is destroying the status flags but what and why...
>
Reply by folg...@yahoo.com●January 24, 20092009-01-24
Hello,
>Have you enabled the TE and RE bits in SCI0CR2? Yes by using this function:
#define TX 0x08
#define RX 0x04
SetSCI0(RX|TX);
void SetSCI0(char OnOff)
{
SCI0CR2= OnOff; // SCI Control Register 2 (SCICR2)
}
I am able to send one character. I thing setting TE and RE is not the problem. I
thing something is destroying the status flags but what and why...
Reply by Rob Milne●January 24, 20092009-01-24
Have you enabled the TE and RE bits in SCI0CR2?
Reply by folg...@yahoo.com●January 23, 20092009-01-23
Hello,
thank you but it is the same. It is possible to send one character put_s("T");
but it is not possible to send a string put_s("Text");
It always stopps here: while((SCI0SR1 & 0x80) == 0);
I do not know. There really seems to be something wrong with the flags....
Reply by Rob Milne●January 23, 20092009-01-23
The following works fine for me if I only need a synchronous solution.
Using an interrupt driven routine gives much better performance wrt
concurrency.
void put_s(char* str) {
while(*str)
put_char(*str++);
} > Has anybody an example about SCI with or without SCI
to test?
Reply by folg...@yahoo.com●January 22, 20092009-01-22
Hello,
I think that there is something wrong with the SCI Status Register 1
(SCISR1).
"Clear TDRE by reading SCI status register 1 (SCISR1), with TDRE set and then
writing to SCI data
register low (SCIDRL)"
I do this:
while( !(SCI0SR1 & 0x80) );
SCI0DRL= cPut;
but if I want to send a string the programm stops at the while loop.TDRE seems
to be always 0.
Has anybody an example about SCI with or without SCI to test?
Reply by folg...@yahoo.com●January 22, 20092009-01-22
Hello,
I tried another terminal programm and it is the same, I think there is no echo
function in hyperterminal and nothing is received by the controller.
I tried the following:
PutcharSCI0('A');
PutcharSCI0('B');
That does not work. It is the same result like PutStSCI0("AB");
It is only possible to send one character: PutcharSCI0('A'); That
works and the A is received.
Reply by jpdi●January 22, 20092009-01-22
How...
I think I had that problem of SCI locked...
I don't use Hyperterminal, just scope to see if I transmit.
When I had this problem, it seems SCI received character, and this character
was not read. Do you know if Hyperterminal send characters (echo function) ?
If you don't use handshake, and have an oscilloscope, try to disconnect
Hyperterminal and see what you have on your output.
Or slow down your baudrate, and put a led + resistor...
Joel Petrique
> -----Message d'origine-----
> De: 6... [mailto:6...] De la part de
> f...@yahoo.com
> Envoy jeudi 22 janvier 2009 16:32
> : 6...
> Objet: [68HC12] Re: Problem in using SCI...send a string
>
> Hello,
>
> >What is the '/' in
> >> while ( !(SCI0SR1 & 0x80) ); /
> >> SCI0DRL =3D *strPut++;
> >I suppose it's an error when you typed your mail ?
>
> Yes!
>
> TX and RX are defined like this:
>
> #define TX 0x08
> #define RX 0x04
> #define RIE 0x20
>
> Using:
>
> void PutcharSCI0(unsigned char cPut)
> {
> while( !(SCI0SR1 & 0x80) );
> SCI0DRL= cPut;
> }/* void PutcharSCI0(unsigned char cPut) */
>
> AND
>
> PutcharSCI0('8');
>
> works. The PC (Hyperterminal) receives the 8. If I want to send a string
>
> PutStSCI0("Send Text");
>
> void PutStSCI0(unsigned char *strPut)
> {
> while ( (*strPut) != '\0' )
> {
> PutcharSCI0(*strPut++);
> }
>
> }/* void PutcharSCI0(unsigned char cPut) */
>
> It does not work. It stops here:
>
> while( !(SCI0SR1 & 0x80) );
>
> SCI0SR1 & 0x80 seems to be always 0.
>
>
>
>
>
>
>
>
Reply by folg...@yahoo.com●January 22, 20092009-01-22
Hello,
>What is the '/' in
>> while ( !(SCI0SR1 & 0x80) ); /
>> SCI0DRL = *strPut++;
>I suppose it's an error when you typed your mail ?
Sometimes, I use polling technique too (transmission at high baudrate)
About your init :
SCI0BDH and SCI0BDL for init baudrate seems ok to me
What about RX and TX ? For me, I write "SCI0CR2 = 0x0c;" to switch on TE and
RE bits of CR2. Maybe you have to check your value OnOff ? For me, RX and TX
are not defined in my compiler (ICC12).
What is the '/' in > while ( !(SCI0SR1 & 0x80) ); /
> SCI0DRL = *strPut++; I suppose it's an error when you typed your mail ?
I hope this will help you...
Joel Petrique
> -----Message d'origine-----
> De: 6... [mailto:6...] De la part de
> f...@yahoo.com
> Envoy jeudi 22 janvier 2009 14:04
> : 6...
> Objet: [68HC12] Problem in using SCI...send a string
>
> Hello,
>
> I have a problem with using SCI interface. I am able to send one character
> but sending a string does not work. Perhaps anyone can tell me what is
> wrong.
>
> void InitSCI0(void)
> {
> SCI0BDH= 0x00; // SCI Baud Rate Registers (SCIBDH and SCIBDL)
> // calculating the baud rate is: SCI baud rate = SCI
> // module clock / (16 x BR)
>
> SCI0BDL= 26; // SCI Baud Rate Registers (SCIBDH and SCHBDL)
> // Bit 7 6 5 4 3 2 1 0
> // SBR7 SBR6 SBR5 SBR4 SBR3 SBR2 SBR1 SBR0
> // 26 -> 19200 Baudrate at Bus Clock 8MHz
> SCI0CR1= 0x00; // SCI Control Register 1 (SCICR1); 8N1
> SCI0CR2= 0x00; // SCI Control Register 2 (SCICR2)
> }/* void InitSCI0(void) */
>
> void SetSCI0(char OnOff)
> {
> SCI0CR2= OnOff; // SCI Control Register 2 (SCICR2)
> }/* void SetSCI0(char OnOff) */
>