关于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。这个问题还是以后再说吧。