| ??? 11/23/04 08:34 Read: times |
#81750 - 9th bit is supported Responding to: ???'s previous message |
hi,
The last time I tried it, it was impossible using the standard MS drivers & Windows API. This was because Windoze simply sets a "Parity Error" bit - but does not identify which specific character had the parity error. Which API do you mean? We use 9-bit communication via _outp() and _inp(). COM port initialization looks like: #define PORT 0x3F8 //... _outp(PORT+3, (128+32+8+2+1)); // 8 bit, 1 stop, parity always 1 _outp(PORT+1, 0); // baudrate _outp(PORT+0, 1); // 115200 _outp(PORT+3, (32+8+2+1)); // 8 bit, 1 stop, parity always 1 //...Our protocol uses syncronization bytes with 9th bit = 1 and data bytes with 9th bit = 0. To send it we use: // send sync byte to COM port with 9th bit = 1
void SendSyncByte (unsigned char sync)
{
while (! (_inp(PORT+5) & 32))
{} // wait till port ready
_outp(PORT+3, (32+8+2+1)); // 8 bit, 1 stop, parity always 1
_outp(PORT+0, sync);
}
// send data byte to COM port with 9th bit = 0
void SendDataByte (unsigned char data)
{
while (! (_inp(PORT+5) & 32))
{} // wait till port ready
_outp(PORT+3, (32+16+8+2+1)); // 8 bit, 1 stop, parity always 0
_outp(PORT+0, data);
}To receive and determine data/sync we use next:// read from COM port
unsigned int ReadByte (unsigned int time_out)
{
unsigned int data, timeout = time_out;
unsigned char status;
_outp(PORT+3, (32+8+2+1)); // 8 bit, 1 stop, parity always 1
while (! ((status = _inp(PORT+5)) & 1))
{
if (! timeout--)
return (0xFFFF); // timeout
}
data = (unsigned int)_inp(PORT+0);
if (status & 8) return (0xFFFE); // frame error
if (!(status & 4)) data += 256; // determine sync/data;
// return data as 0...255
// and sync as 256...511
return (data);
}This works at least for Win98. The only one restriction is that it is not possible to send/receive bytes simultaneously because parity control is modifyed depend on send/read. So only half-duplex mode used: PC sends to MCU sync+data then MCU answers with sync+data.
Regards, Oleg |
| Topic | Author | Date |
| Need help... MCU and PC communication | 01/01/70 00:00 | |
| MCU & PC communication | 01/01/70 00:00 | |
| I have the same problem | 01/01/70 00:00 | |
| Need more help from this | 01/01/70 00:00 | |
| I use ascii | 01/01/70 00:00 | |
| Reply to Jose' | 01/01/70 00:00 | |
| Fix the problem | 01/01/70 00:00 | |
| To my helpers | 01/01/70 00:00 | |
| Handshaking... | 01/01/70 00:00 | |
| RETI | 01/01/70 00:00 | |
| ascii ? | 01/01/70 00:00 | |
| Handshaking and More !! | 01/01/70 00:00 | |
| Delays | 01/01/70 00:00 | |
| Thanks to all my helpers, problem solved | 01/01/70 00:00 | |
| Delays | 01/01/70 00:00 | |
| Delays | 01/01/70 00:00 | |
| UART, mode 3 | 01/01/70 00:00 | |
| The 9th bit is the parity for VB | 01/01/70 00:00 | |
| send data from mcu to pc | 01/01/70 00:00 | |
| Yes, but the 9th bit is the parity in VB | 01/01/70 00:00 | |
| 9th bit lost by Windoze? | 01/01/70 00:00 | |
| 9th bit is supported | 01/01/70 00:00 | |
32-bit MS Windows | 01/01/70 00:00 |



