I have a OMAP-35xx board ported with WinCE-6.0 which uses a TL16c754 quad uart chip
This chip has 4 interruptlines going to a CPLD, where they are OR'ed,
and connected to the CPU.
So, in other words i need to share GPIO irq.
This system used to run Windows CE .net.
The ISR is actually just GIISR.DLL, which was called for each
uart like this:-
KernelLibIoControl(pHWHead->hIsrHandler, IOCTL_GIISR_INFO, &Info,
sizeof(Info), NULL, 0, NULL)
where the GIISR_INFO struct is:
Info.SysIntr = pSerialHead->pHWObj->dwIntID;
Info.CheckPort = TRUE;
Info.PortIsIO = FALSE;
Info.UseMaskReg = FALSE;
Info.PortAddr = (DWORD)pSerialHead->pCPLDUartReg;
Info.PortSize = sizeof(BYTE);
Info.Mask = pSerialHead->UARTChannelNumMask;
My problem is:
When we work with one port, the quart work fine (both receive and transmit)
(At 115200 baud rate if we transmit data through any one port throughput comes aroung 10k
byte per second which is fine )
When we try to send data through one port and receive data on another port
the throughput goes down and we can see some framing errors.
(At 115200 baud rate if we transmit data through both port throughput comes aroung
2.8k byte per second)
When we try to send data from PC to one of the port on device, redirect this data to
another port on device and send it back to PC. It works for some time and then one of the
port just hangs, while the other port keeps on working.
When the port hangs RTS of device/ CTS of PC becomes off for ever. And it becomes on
only on device restart.
Is this the latency issue? if yes how could we able to overcome it?
Is there any way like usinf isr16550.dll would help to improve the performance ?
Is this a design issue to have 8 uart with one interrupt ?
How could we be able to improve the performance. Please do share your experience in this
regard. I would be highly thankful for your advice/suggession.