smartdong
驱动牛犊
驱动牛犊
  • 注册日期2004-07-26
  • 最后登录2007-09-02
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1903回复:11

PXA255 串口驱动

楼主#
更多 发布于:2005-01-25 15:54
我使用Xscale PXA255的开发板,目前正在对串口进行调试。

开发板上共有三个异步串口,一个用作调试串口,一个是蓝牙串口BTUART,一个是全功能串口FFUART。

调试串口没有问题,蓝牙串口也能驱动起来,起来后为COM1,而全功能串口FFUART无论如何也加载不成功,从串口驱动来看,BTUART和FFUART的驱动为同一个Dll,即xsc1bd_serial.Dll。其中BTUART的IoBase为a6400000,而FFUART的IoBase为a6300000

BTUART的注册表设置如下:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]
   "Dll"="xsc1bd_serial.Dll"
   "IoBase"=dword:a6400000   ;BTUART_BASE_U_VIRTUAL
   "IoLen"=dword:24
   "Irq"=dword:0 ;21 - Dummy value. This subkey is not really used by the driver.
   "Tsp"="Unimodem.dll"
   "DeviceArrayIndex"=dword:2
   "Prefix"="COM"
   "Order"=dword:0
   ;"Index"=dword:4
   ;"Priority256"=dword:67 ; Using default priority value
   "DeviceType"=dword:0
   "FriendlyName"=LOC_DISPLAYNAME_SERIAL
; Eliminate flow control bit
   "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

根据BTUART的注册表设置,我添加FFUART的注册表设置如下:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]
   "Dll"="xsc1bd_serial.Dll"
   "IoBase"=dword:a6300000   ;FFUART_BASE_U_VIRTUAL
   "IoLen"=dword:24
   "Irq"=dword:0 ;21 - Dummy value. This subkey is not really used by the driver.
   "Tsp"="Unimodem.dll"
   "DeviceArrayIndex"=dword:2
   "Prefix"="COM"
   "Order"=dword:0
   ;"Index"=dword:4
   ;"Priority256"=dword:67 ; Using default priority value
   "DeviceType"=dword:0
   "FriendlyName"=LOC_DISPLAYNAME_SERIAL
; Eliminate flow control bit
   "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

但FFUART的驱动总是加载不成功,请高手给分析一下原因!

谢谢
ziyun
驱动小牛
驱动小牛
  • 注册日期2003-07-28
  • 最后登录2009-05-31
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望109点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-25 16:17
"DeviceArrayIndex"=dword:2
这玩意能一样吗?仔细看看串口驱动pdd文件的最后一个函数!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-25 16:53
你把两个设备的注册表都放到:[HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\Serial]里面?分开三,一个叫SERIAL1另外一个SERIAL2三
根据地的兄弟们,团结就是力量
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-25 17:47
厉害
kikyang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-25 17:54
"DeviceArrayIndex"=dword:2
这玩意能一样吗?仔细看看串口驱动pdd文件的最后一个函数!

同意ZIYUN的意见.:)
我看也是这里的问题.你看看帮助中各值是什么意思,就明白这里该怎么设置了.
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-25 18:12
这些值不是能在帮助中看就能得到的
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-25 19:02
"DeviceArrayIndex"=dword:2
这玩意能一样吗?仔细看看串口驱动pdd文件的最后一个函数!

同意ZIYUN的意见.:)
我看也是这里的问题.你看看帮助中各值是什么意思,就明白这里该怎么设置了.


(1)这两处的DeviceArrayIndex的值不应该相同的,你可以在
pb查看相应的主题,查DeviceArrayIndex即可,里面有的。
(2)wxl_50685330大哥说的对,你怎么能把把两个设备的注册表项放在一起啊?分开放才对。
Come on, let us drive the world.
smartdong
驱动牛犊
驱动牛犊
  • 注册日期2004-07-26
  • 最后登录2007-09-02
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-25 19:39

谢谢各位。

FFAURT的注册表是从BTUART的注册表拷贝下来的,忘了改那两处,在实际测试过程中,我已经将这两处改为了:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial1

"DeviceArrayIndex"=dword:3

但还是加载不成功!请高手再给分析一下!



wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-25 20:14
你的驱动中能设断点吗?跟进去看看?
Come on, let us drive the world.
ziyun
驱动小牛
驱动小牛
  • 注册日期2003-07-28
  • 最后登录2009-05-31
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望109点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-26 11:58
PHWOBJ GetSerialObject(DWORD DeviceArrayIndex)
{
  //FFUART's DeviceArrayIndex is zero in the registry.
  if (0 == DeviceArrayIndex)
   return(&SerObj1);
  //STUART's DeviceArrayIndex is four in the registry
  else if ( 4 == DeviceArrayIndex)
    return (&IRObj1);
  //External modem
  else if ( 1 == DeviceArrayIndex)
    return (&SerCardObj);
  //BTUART's DeviceArrayIndex is two in the registry.
  if (2 == DeviceArrayIndex)
   return(&SerObj2);
  else
   return(NULL);
}
你看看=3返回什么??
smartdong
驱动牛犊
驱动牛犊
  • 注册日期2004-07-26
  • 最后登录2007-09-02
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-26 18:10
问题解决了,谢谢!
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-27 08:45
厉害:))
Come on, let us drive the world.
游客

返回顶部