High Speed Serial Port Driver (Windows Embedded CE 6.0)
1/6/2010
The sample installable interrupt service routine (ISR) allows you to capture data from the serial port at a higher rate than with a regular serial port driver. This ISR, which is also referred to as ISR16550.dll, is in %_WINCEROOT%\Public\Common\Oak\Drivers\Serial\ISR16550. Any serial driver that links with the SER16550 serial library located in %_WINCEROOT%\Public\Common\Oak\Drivers\Serial\SER16550 can use this installable ISR.
ISR16550.dll minimizes the time to signal the interrupt service thread (IST). This allows faster data transfer because there is a penalty for the system to schedule the IST. ISR16550.dll buffers data from the hardware to receive first-in, first-out (FIFO) data and fills up hardware transmit FIFO data from the software buffer without IST involvement. The IST is signaled only when the receiving buffer reaches its threshold and the transmitting buffer is empty. The IST is also signaled when the incoming data stream times out, which is same condition as hardware FIFO. This allows less frequent signals to the IST and SER16550 or the driver using the installable ISR can handle high throughput.
ISR16550.dll is loaded and enabled when HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial registry key contains certain subkeys and values. The following table shows the specific subkeys and values to include with the HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial registry key.
Subkey | Value |
---|---|
"Irq" |
DWORD:3 |
"IsrDll" |
"isr16550.dll" |
"IsrHandler" |
"ISRHandler" |
If the SER16550 driver does not find any of these registry subkeys and their correct values, or the SER16550 driver cannot load the installable ISR, the installable ISR does not load and soft FIFO is disabled for the SER16550 driver or the driver that is trying to use the installable ISR.
The following registry key example shows the entire HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial registry key:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]
"SysIntr"=dword:13
"Irq"=dword:3
"IoBase"=dword:02F8
"IoLen"=dword:8
"DeviceArrayIndex"=dword:0
"Prefix"="COM"
"Dll"="Com16550.Dll"
"Order"=dword:0
"Priority"=dword:0
"IsrDll"="isr16550.dll"
"IsrHandler"="ISRHandler"
In this example, the value for the Irq registry key is DWORD:3, which means that the driver uses IRQ line 3. If you are using a PCI device, the PCI bus driver generates this entry automatically. If you are using this driver for an ISA or built-in device, this value must be in the registry entry for the driver to use the installable ISR.