water_yuan
驱动牛犊
驱动牛犊
  • 注册日期2003-03-10
  • 最后登录2003-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1349回复:7

KIoRange 读写8250寄存器问题??

楼主#
更多 发布于:2003-05-20 10:17
我用Driver works 写一个串口的wdm驱动程序,用kIoRange来实现对寄存器的读写,但是当地址为0x3f8时(8250)为什么读出的寄存器都为0xff。但是我试过用同样的方法可以读8259 8254 都没有问题,唯独读写8250的时候不对。
请指点,谢谢!!!!!!!!!
chaucer911
驱动牛犊
驱动牛犊
  • 注册日期2003-05-17
  • 最后登录2003-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-20 11:36
我们在干同样的事,但我没碰到这样的问题。我的KInterrupt连接后不能响应中断,我把贴跟在楼主后面,向大家一起参详。谢谢!
water_yuan
驱动牛犊
驱动牛犊
  • 注册日期2003-03-10
  • 最后登录2003-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-20 14:19
请问你初始化的时候是怎样?
我的是这样
status=m_IoPortRange.Initialize(0x3f8,TRUE,8,TRUE);
 if ( !NT_SUCCESS(status) )
return status;
然后
再IoContorl写
UCHAR  data1 = m_IoPortRange.inb(5);//读线路状态寄存器
 t <<\"date:\" << (UCHAR)data1<< EOL;

但是结果却是date:0xff

我写的有问题吗??
在线等待!谢谢
chaucer911
驱动牛犊
驱动牛犊
  • 注册日期2003-05-17
  • 最后登录2003-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-22 10:09
    我的代码跟你的基本上差不多,但你好像没有初始化8250芯片本身啊!例如,速率等等。你可以使用KIoRange送些初始化的数据进去啊!一点愚见,希望能够奏效。
    对了,另有一事相求。请问你的中断连接是怎样做的啊!我的代码好像不响应。我的QQ是88490835,可以方便我们联系啊!
    
water_yuan
驱动牛犊
驱动牛犊
  • 注册日期2003-03-10
  • 最后登录2003-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-23 10:05
奇怪了,问题这样初始化,8250芯片的寄存器根本无法写和读。更不用提初始化8250的波特率和 线路控制器了

至于中断我没有用,可能帮不上太大的忙!qq 3332996
chaucer911
驱动牛犊
驱动牛犊
  • 注册日期2003-05-17
  • 最后登录2003-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-23 21:10
你再看看这个好吗!

Initialize(
   PCM_RESOURCE_LIST pTranslatedResourceList,
   PCM_RESOURCE_LIST pRawResourceList,
   ULONG Ordinal=0,
   BOOLEAN MapToSystemVirtual =TRUE

);
但是!!!!!!!
MapToSystemVirtual
A Boolean flag indicating whether or not the constructor should create a mapping of the address range to nonpaged system space. This is ignored if the peripheral address is mapped to the processor\'s I/O space. It is necessary to do the mapping if the driver is to read or write data to the device.
所以,status=m_IoPortRange.Initialize(0x3f8,TRUE,8) is OK!!

chaucer911
驱动牛犊
驱动牛犊
  • 注册日期2003-05-17
  • 最后登录2003-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-23 21:12
你使用的这个也一样

NTSTATUS Initialize(
   ULONGLONG CpuPhysicalAddress,
   BOOLEAN InCpuIoSpace,
   ULONG Count,
   BOOLEAN MapToSystemVirtual=TRUE
);
water_yuan
驱动牛犊
驱动牛犊
  • 注册日期2003-03-10
  • 最后登录2003-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-24 13:31
It is necessary to do the mapping if the driver is to read or write data to the device.

再说,写了true应该没什么错吧。
谢谢你的意见,我试一下!
游客

返回顶部