Forums

Problems with UART1 on LPC2132

Started by soren_t_hansen June 20, 2005
Hi everybody

I want to transmit a number og bytes on UART1 and some of them are 0.
When I receive the bytes on the PC, all the 0s are gone, resulting in
an error on that side.

I use the following to transmit the bytes:

while (!(U1LSR & 0x20));
U1THR = buffer[i];

Isn't possible to transmit a 0?

Best Regards
Sen


An Engineer's Guide to the LPC2100 Series

Oh, you can transmit a 0 ok, it's just that the PC may strip NULs (0's)
from the input stream. It just comes back down to what software you are
using to receive. But since I don't know what you are using I can't help. :)

BTW, try transmiting 0's from the PC back to the PC to test that end.
Elimination is the 1st part of debugging.

*Peter*

soren_t_hansen wrote:

>Hi everybody
>
>I want to transmit a number og bytes on UART1 and some of them are 0.
>When I receive the bytes on the PC, all the 0s are gone, resulting in
>an error on that side.
>
>I use the following to transmit the bytes:
>
>while (!(U1LSR & 0x20));
> U1THR = buffer[i];
>
>Isn't possible to transmit a 0?
>
>Best Regards
>Sen
>




I use a Win32 comport to receive with. It has the following setup:

HANDLE m_hCom = 0;
m_hCom = CreateFile(m_sComPort, // pointer to name of the file
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
NULL);

I then read the comport with the following call:

ReadFile(m_hCom, buffer, length, &iBytesRead, NULL);

How can I prevent the PC from stripping the 0s?

Sen

--- In lpc2000@lpc2..., Peter Jakacki <peterjak@t...> wrote:
> Oh, you can transmit a 0 ok, it's just that the PC may strip NULs (0's)
> from the input stream. It just comes back down to what software you are
> using to receive. But since I don't know what you are using I can't
help. :)
>
> BTW, try transmiting 0's from the PC back to the PC to test that end.
> Elimination is the 1st part of debugging.
>
> *Peter*
>
> soren_t_hansen wrote:
>
> >Hi everybody
> >
> >I want to transmit a number og bytes on UART1 and some of them are 0.
> >When I receive the bytes on the PC, all the 0s are gone, resulting in
> >an error on that side.
> >
> >I use the following to transmit the bytes:
> >
> >while (!(U1LSR & 0x20));
> > U1THR = buffer[i];
> >
> >Isn't possible to transmit a 0?
> >
> >Best Regards
> >Sen
> >


Hi Sen,

well, that would be the first UART if that was the case :-)
What are you using for reception on the PC end ?
And. have you measured the TX line from the ARM to see if the '0' is
actually sent (or not) ?

Regards,
Carsten Gr
http://www.moonbounce.dk
--- In lpc2000@lpc2..., "soren_t_hansen"
<soren_t_hansen@y...> wrote:
> Hi everybody
>
> I want to transmit a number og bytes on UART1 and some of them are
0.
> When I receive the bytes on the PC, all the 0s are gone, resulting
in
> an error on that side.
>
> I use the following to transmit the bytes:
>
> while (!(U1LSR & 0x20));
> U1THR = buffer[i];
>
> Isn't possible to transmit a 0?
>
> Best Regards
> Sen


Sorry,
didn't see the other replys before posting.

The Win functions does not care about zero etc....
Do a quick check with a scope on the TX line (I'll bet the '0' is
sent ok), but then you have ruled the ARM out....
Then, do a TX of a '0' from the PC using loopback (and to be safe,
measure that with a scope too......
Carsten
--- In lpc2000@lpc2..., Carsten Gr <cgroen@m...> wrote:
> Hi Sen,
>
> well, that would be the first UART if that was the case :-)
> What are you using for reception on the PC end ?
> And. have you measured the TX line from the ARM to see if the '0'
is
> actually sent (or not) ?
>
> Regards,
> Carsten Gr
> http://www.moonbounce.dk >


You are using the generic controls for Win32. You are going to need to
change the DCE control for windows and write your own drivers. Windows
assumes that the serial RXD and TXD will be in ASCII and not in
binary. To get binary you have to change the ASCII setting to a BINARY
setting in teh DCE and then create a RAW rxd and txd routine to allow
you to get the characters. You can probably use an ActiveX control to
help you do this so you do not have to reinvent the wheel. If you need
some ideas I can email you a link of some source code that was written
for a serial DLL that we give away to customers.

regards,
Charles --- In lpc2000@lpc2..., "soren_t_hansen" <soren_t_hansen@y...>
wrote:
> I use a Win32 comport to receive with. It has the following setup:
>
> HANDLE m_hCom = 0;
> m_hCom = CreateFile(m_sComPort, // pointer to name of the file
> GENERIC_READ | GENERIC_WRITE,
> 0,
> NULL,
> OPEN_EXISTING,
> FILE_FLAG_NO_BUFFERING,
> NULL);
>
> I then read the comport with the following call:
>
> ReadFile(m_hCom, buffer, length, &iBytesRead, NULL);
>
> How can I prevent the PC from stripping the 0s?
>
> Sen
>
> --- In lpc2000@lpc2..., Peter Jakacki <peterjak@t...> wrote:
> > Oh, you can transmit a 0 ok, it's just that the PC may strip NULs
(0's)
> > from the input stream. It just comes back down to what software
you are
> > using to receive. But since I don't know what you are using I can't
> help. :)
> >
> > BTW, try transmiting 0's from the PC back to the PC to test that end.
> > Elimination is the 1st part of debugging.
> >
> > *Peter*
> >
> > soren_t_hansen wrote:
> >
> > >Hi everybody
> > >
> > >I want to transmit a number og bytes on UART1 and some of them are 0.
> > >When I receive the bytes on the PC, all the 0s are gone, resulting in
> > >an error on that side.
> > >
> > >I use the following to transmit the bytes:
> > >
> > >while (!(U1LSR & 0x20));
> > > U1THR = buffer[i];
> > >
> > >Isn't possible to transmit a 0?
> > >
> > >Best Regards
> > >Sen
> > >


I've been using the Mscomm control in VB with no problem. All characters come thru. Jeff.

________________________________

From: lpc2000@lpc2... on behalf of charlesgrenz
Sent: Mon 6/20/2005 7:16 AM
To: lpc2000@lpc2...
Subject: [lpc2000] Re: Problems with UART1 on LPC2132 You are using the generic controls for Win32. You are going to need to
change the DCE control for windows and write your own drivers. Windows
assumes that the serial RXD and TXD will be in ASCII and not in
binary. To get binary you have to change the ASCII setting to a BINARY
setting in teh DCE and then create a RAW rxd and txd routine to allow
you to get the characters. You can probably use an ActiveX control to
help you do this so you do not have to reinvent the wheel. If you need
some ideas I can email you a link of some source code that was written
for a serial DLL that we give away to customers.

regards,
Charles --- In lpc2000@lpc2..., "soren_t_hansen" <soren_t_hansen@y...>
wrote:
> I use a Win32 comport to receive with. It has the following setup:
>
> HANDLE m_hCom = 0;
> m_hCom = CreateFile(m_sComPort, // pointer to name of the file
> GENERIC_READ | GENERIC_WRITE,
> 0,
> NULL,
> OPEN_EXISTING,
> FILE_FLAG_NO_BUFFERING,
> NULL);
>
> I then read the comport with the following call:
>
> ReadFile(m_hCom, buffer, length, &iBytesRead, NULL);
>
> How can I prevent the PC from stripping the 0s?
>
> Sen
>
> --- In lpc2000@lpc2..., Peter Jakacki <peterjak@t...> wrote:
> > Oh, you can transmit a 0 ok, it's just that the PC may strip NULs
(0's)
> > from the input stream. It just comes back down to what software
you are
> > using to receive. But since I don't know what you are using I can't
> help. :)
> >
> > BTW, try transmiting 0's from the PC back to the PC to test that end.
> > Elimination is the 1st part of debugging.
> >
> > *Peter*
> >
> > soren_t_hansen wrote:
> >
> > >Hi everybody
> > >
> > >I want to transmit a number og bytes on UART1 and some of them are 0.
> > >When I receive the bytes on the PC, all the 0s are gone, resulting in
> > >an error on that side.
> > >
> > >I use the following to transmit the bytes:
> > >
> > >while (!(U1LSR & 0x20));
> > > U1THR = buffer[i];
> > >
> > >Isn't possible to transmit a 0?
> > >
> > >Best Regards
> > >Sen
> > >

________________________________

> .



I'm using ordinary C/C++ in the Eclipse environment, and thus needs a
very simple way to receive these 0s.

Isn't possible to set up the Windows generic controls to receive as
binary?

/Sen

--- In lpc2000@lpc2..., "Lowry, Jeff" <jlowry@s...> wrote:
> I've been using the Mscomm control in VB with no problem. All
characters come thru. Jeff.
>
> ________________________________
>
> From: lpc2000@lpc2... on behalf of charlesgrenz
> Sent: Mon 6/20/2005 7:16 AM
> To: lpc2000@lpc2...
> Subject: [lpc2000] Re: Problems with UART1 on LPC2132 > You are using the generic controls for Win32. You are going to need to
> change the DCE control for windows and write your own drivers. Windows
> assumes that the serial RXD and TXD will be in ASCII and not in
> binary. To get binary you have to change the ASCII setting to a BINARY
> setting in teh DCE and then create a RAW rxd and txd routine to allow
> you to get the characters. You can probably use an ActiveX control to
> help you do this so you do not have to reinvent the wheel. If you need
> some ideas I can email you a link of some source code that was written
> for a serial DLL that we give away to customers.
>
> regards,
> Charles > --- In lpc2000@lpc2..., "soren_t_hansen" <soren_t_hansen@y...>
> wrote:
> > I use a Win32 comport to receive with. It has the following setup:
> >
> > HANDLE m_hCom = 0;
> > m_hCom = CreateFile(m_sComPort, // pointer to name of the file
> > GENERIC_READ | GENERIC_WRITE,
> > 0,
> > NULL,
> > OPEN_EXISTING,
> > FILE_FLAG_NO_BUFFERING,
> > NULL);
> >
> > I then read the comport with the following call:
> >
> > ReadFile(m_hCom, buffer, length, &iBytesRead, NULL);
> >
> > How can I prevent the PC from stripping the 0s?
> >
> > Sen
> >
> > --- In lpc2000@lpc2..., Peter Jakacki <peterjak@t...> wrote:
> > > Oh, you can transmit a 0 ok, it's just that the PC may strip NULs
> (0's)
> > > from the input stream. It just comes back down to what software
> you are
> > > using to receive. But since I don't know what you are using I can't
> > help. :)
> > >
> > > BTW, try transmiting 0's from the PC back to the PC to test that
end.
> > > Elimination is the 1st part of debugging.
> > >
> > > *Peter*
> > >
> > > soren_t_hansen wrote:
> > >
> > > >Hi everybody
> > > >
> > > >I want to transmit a number og bytes on UART1 and some of them
are 0.
> > > >When I receive the bytes on the PC, all the 0s are gone,
resulting in
> > > >an error on that side.
> > > >
> > > >I use the following to transmit the bytes:
> > > >
> > > >while (!(U1LSR & 0x20));
> > > > U1THR = buffer[i];
> > > >
> > > >Isn't possible to transmit a 0?
> > > >
> > > >Best Regards
> > > >Sen
> > > >
>
> ________________________________
>
> > .


Le Lundi 20 Juin 2005 16:27, Lowry, Jeff a rit:
I'm using TCport3 with C++Builder6 and i'm able to receive all byte value from
0 to 255 coming from an embedded board (binary logging). TCPort is working
under C++Builder and Delphi

> I've been using the Mscomm control in VB with no problem. All characters
> come thru. Jeff.
>
> ________________________________
>
> From: lpc2000@lpc2... on behalf of charlesgrenz
> Sent: Mon 6/20/2005 7:16 AM
> To: lpc2000@lpc2...
> Subject: [lpc2000] Re: Problems with UART1 on LPC2132 > You are using the generic controls for Win32. You are going to need to
> change the DCE control for windows and write your own drivers. Windows
> assumes that the serial RXD and TXD will be in ASCII and not in
> binary. To get binary you have to change the ASCII setting to a BINARY
> setting in teh DCE and then create a RAW rxd and txd routine to allow
> you to get the characters. You can probably use an ActiveX control to
> help you do this so you do not have to reinvent the wheel. If you need
> some ideas I can email you a link of some source code that was written
> for a serial DLL that we give away to customers.
>
> regards,
> Charles > --- In lpc2000@lpc2..., "soren_t_hansen" <soren_t_hansen@y...>
>
> wrote:
> > I use a Win32 comport to receive with. It has the following setup:
> >
> > HANDLE m_hCom = 0;
> > m_hCom = CreateFile(m_sComPort, // pointer to name of the file
> > GENERIC_READ | GENERIC_WRITE,
> > 0,
> > NULL,
> > OPEN_EXISTING,
> > FILE_FLAG_NO_BUFFERING,
> > NULL);
> >
> > I then read the comport with the following call:
> >
> > ReadFile(m_hCom, buffer, length, &iBytesRead, NULL);
> >
> > How can I prevent the PC from stripping the 0s?
> >
> > Sen
> >
> > --- In lpc2000@lpc2..., Peter Jakacki <peterjak@t...> wrote:
> > > Oh, you can transmit a 0 ok, it's just that the PC may strip NULs
>
> (0's)
>
> > > from the input stream. It just comes back down to what software
>
> you are
>
> > > using to receive. But since I don't know what you are using I can't
> >
> > help. :)
> >
> > > BTW, try transmiting 0's from the PC back to the PC to test that end.
> > > Elimination is the 1st part of debugging.
> > >
> > > *Peter*
> > >
> > > soren_t_hansen wrote:
> > > >Hi everybody
> > > >
> > > >I want to transmit a number og bytes on UART1 and some of them are 0.
> > > >When I receive the bytes on the PC, all the 0s are gone, resulting in
> > > >an error on that side.
> > > >
> > > >I use the following to transmit the bytes:
> > > >
> > > >while (!(U1LSR & 0x20));
> > > > U1THR = buffer[i];
> > > >
> > > >Isn't possible to transmit a 0?
> > > >
> > > >Best Regards
> > > >Sen
>
> ________________________________
>
> > . >
> Yahoo! Groups Links >



Look at the source of the LPC21ISP
(http://guest.engelschall.com/~martin/lpc21xx/isp/). There's a good
example how to use the windows serial port without any OCX components.
You can even do non-blocking calls, please let me know if that's the
case and I'll help.

--- In lpc2000@lpc2..., "charlesgrenz" <charles.grenz@s...> wrote:
> You are using the generic controls for Win32. You are going to need to
> change the DCE control for windows and write your own drivers. Windows
> assumes that the serial RXD and TXD will be in ASCII and not in
> binary. To get binary you have to change the ASCII setting to a BINARY
> setting in teh DCE and then create a RAW rxd and txd routine to allow
> you to get the characters. You can probably use an ActiveX control to
> help you do this so you do not have to reinvent the wheel. If you need
> some ideas I can email you a link of some source code that was written
> for a serial DLL that we give away to customers.
>
> regards,
> Charles > --- In lpc2000@lpc2..., "soren_t_hansen" <soren_t_hansen@y...>
> wrote:
> > I use a Win32 comport to receive with. It has the following setup:
> >
> > HANDLE m_hCom = 0;
> > m_hCom = CreateFile(m_sComPort, // pointer to name of the file
> > GENERIC_READ | GENERIC_WRITE,
> > 0,
> > NULL,
> > OPEN_EXISTING,
> > FILE_FLAG_NO_BUFFERING,
> > NULL);
> >
> > I then read the comport with the following call:
> >
> > ReadFile(m_hCom, buffer, length, &iBytesRead, NULL);
> >
> > How can I prevent the PC from stripping the 0s?
> >
> > Sen
> >
> > --- In lpc2000@lpc2..., Peter Jakacki <peterjak@t...> wrote:
> > > Oh, you can transmit a 0 ok, it's just that the PC may strip NULs
> (0's)
> > > from the input stream. It just comes back down to what software
> you are
> > > using to receive. But since I don't know what you are using I can't
> > help. :)
> > >
> > > BTW, try transmiting 0's from the PC back to the PC to test that
end.
> > > Elimination is the 1st part of debugging.
> > >
> > > *Peter*
> > >
> > > soren_t_hansen wrote:
> > >
> > > >Hi everybody
> > > >
> > > >I want to transmit a number og bytes on UART1 and some of them
are 0.
> > > >When I receive the bytes on the PC, all the 0s are gone,
resulting in
> > > >an error on that side.
> > > >
> > > >I use the following to transmit the bytes:
> > > >
> > > >while (!(U1LSR & 0x20));
> > > > U1THR = buffer[i];
> > > >
> > > >Isn't possible to transmit a 0?
> > > >
> > > >Best Regards
> > > >Sen
> > > >