在需要扩充有限的串口情况下,可以利用ISA多串口卡作为实施方案,这样可以避免重新编写驱动程序和为只有卡而没有BSP开发包苦恼。当然,这种方法也有不足的地方,就是一般不能共享中断,资源有限,限制不能扩展比较多的串口。在PB中,自带了一个本机样本串口驱动程序,利用该驱动能够配置3个串口,除去用着调试用的串口(3F8H),分别为(2F8H,3E8H,2E8H),一般主板支持2个串口,另外一个就必须另外添加硬件来满足。
如果还想配置一个串口使用,又不想更改(3F8H)的作用,可以找一个ISA多串口卡,要求该卡可以通过调线自动选择除去这四个地址外的地址,例如250H,中断也可以通过跳线选择。一般IRQ3、IRQ4分配给了2F8H、3E8H,IRQ5分配给2E8H。这样第四个串口可以选择250H、IRQ7作为硬件资源。
在PB中需要作如下修改:
1、在工程设置中添加编译环境信息:
Variable | value |
BSP_SERIAL4 | 1 |
2、在platform.reg修改注册表两处:
[HKEY_LOCAL_MACHINE/Drivers/Resources/IO] "Identifier"=dword:2 "Minimum"=dword:0 "Space"=dword:10000 IF BSP_NOSERIAL "Ranges"="0-0x5F,0x65-0x277,0x284-0x38F,0x392-0x3DF,0x3E2-0xFFFF" ENDIF ; BSP_NOSERIAL IF BSP_NOSERIAL ! "Ranges"="0-0x5F,0x65-0x277,0x284-0x2F7,0x300-0x38F,0x392-0x3DF,0x3E2-0xFFFF" ENDIF ; BSP_NOSERIAL ! IF BSP_SERIAL2 "Ranges"="0-0x5F,0x65-0x277,0x284-0x2F7,0x300-0x38F,0x392-0x3DF,0x3E2-0x3E7,0x3F0-0xFFFF" ENDIF ; BSP_SERIAL2 IF BSP_SERIAL3 "Ranges"="0-0x5F,0x65-0x277,0x284-0x2E7,0x2F0-0x2F7,0x300-0x38F,0x392-0x3DF,0x3E2-0x3E7,0x3F0-0xFFFF" ENDIF ; BSP_SERIAL3 IF BSP_SERIAL4 "Ranges"="0-0x5F,0x65-0x277,0x284-0x2E7,0x2F0-0x2F7,0x300-0x38F,0x392-0x3DF,0x3E2-0x3E7,0x3F0-0xFFFF" ENDIF ; BSP_SERIAL4 |
IF BSP_SERIAL4 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial4] "SysIntr"=dword:17 "IoBase"=dword:0250 "IoLen"=dword:8 "DeviceArrayIndex"=dword:2 "Prefix"="COM" "Dll"="Com16550.Dll" "Order"=dword:0 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial4/Unimodem] "Tsp"="Unimodem.dll" "DeviceType"=dword:0 "FriendlyName"=LOC_FRIENDLYNAME_SERIAL4 "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00 ENDIF BSP_SERIAL4 |
至于注册表中的各项信息的含义可参考Windows CE下驱动程序开发基础。
3、在intltrns文件夹中的cepc.str添加如下信息:
//------------------------------------------------------------------------------ // [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial4] #define LOC_FRIENDLYNAME_SERIAL4 "COM4 上的串行电缆:" |
然后重新编译,就OK了!