关于wince下串口问题

时间:2021-11-10 03:59:16

关于wince下串口问题
我的sbc84500上面有4个物理串口:
串口1:中断号4,io口地址:3F8H
串口2:中断号3,io口地址:2F8H
串口3:中断号10,io口地址:3E8H
串口4:中断号11,io口地址:2E8H

我使用pb定制操作系统时只能添加三个串口,在定制的wince上运行串口测试程序发现,我打开COM1:后操作的是物理串口2,收发数据正常。打开COM2:操作的为物理串口3,发送一次数据后程序无响应。可以打开COM3:,但不能收发数据。
我到网上的相关网站搜索了一下,得知物理串口1是用来调试用的,正常情况下,我们的应用程序不能够访问。
我在注册表中查到的wince下的三个串口设置为:
[HKEY_LOCAL_MACHINE/DRIVERS/BuiltIn/Serial]
 SysIntr=dword:13    //10H+3
 IoBase=dword:02F8H
 IoLen=dword:8
 Prefix="COM"
 Dll="Com16550.dll"
 DeviceArrayIndex=dword:0
 Order=dword:0
 Priority=dword:0
[HKEY_LOCAL_MACHINE/DRIVERS/BuiltIn/Serial2]
 SysIntr=dword:14    //10H+4
 IoBase=dword:03E8
 IoLen=dword:8
 Prefix="COM"
 Dll="Com16550.dll"
 DeviceArrayIndex=dword:0
 Order=dword:0
[HKEY_LOCAL_MACHINE]-[DRIVERS]-[BuiltIn]-[Serial3]
 SysIntr=dword:15   //10H+5
 IoBase=dword:02E8
 IoLen=dword:8
 Prefix="COM"
 Dll="Com16550.dll"
 DeviceArrayIndex=dword:0
 Order=dword:0
我把注册表中的三个串口的SysIntr和IoBase分别改为与物理串口2,3,4相对应。如下:
[HKEY_LOCAL_MACHINE/DRIVERS/BuiltIn/Serial]
 SysIntr=dword:13    //10H+3
 IoBase=dword:02F8H
 IoLen=dword:8
 Prefix="COM"
 Dll="Com16550.dll"
 DeviceArrayIndex=dword:0
 Order=dword:0
 Priority=dword:0
[HKEY_LOCAL_MACHINE/DRIVERS/BuiltIn/Serial2]
 SysIntr=dword:1A    //10H+10
 IoBase=dword:03E8
 IoLen=dword:8
 Prefix="COM"
 Dll="Com16550.dll"
 DeviceArrayIndex=dword:0
 Order=dword:0
[HKEY_LOCAL_MACHINE/DRIVERS/BuiltIn/Serial3]
 SysIntr=dword:1B   //10H+11
 IoBase=dword:02E8
 IoLen=dword:8
 Prefix="COM"
 Dll="Com16550.dll"
 DeviceArrayIndex=dword:0
 Order=dword:0
运行测试程序结果与刚才还是一样,为什么COM1正常,而COM2与COM3却不正常呢,我发现注册表中COM1的键比COM2/COM3多出了一个Priority键,是不是问题处在这里?我在COM2和COM3的注册表项中都添加了Priority键,键值为0。运行测试程序发现:3个串口都能正常打开关闭,也能够正常收发数据,但又出现了新的问题:COM1对应成了物理串口4,COM2对应物理串口3,COM3对应物理串口2。这个问题还是以后再说吧。