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