M
Misbah
Hello!
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.
Thank you,
Misbah
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.
Thank you,
Misbah