wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
阅读:2261回复:14

9054驱动代码一份,顺便请教一个问题

楼主#
更多 发布于:2007-04-10 14:59
  小弟在这里请教各位高手2个问题:
1. 用DS做的9054例子中的SerialRead和Read这两个例程有什么关系?
2. 我一直搞不懂PCI端基地址寄存器和本地端基地址寄存器在写驱动时各有什么作用,以及两者之间又没什么关系,我看过了9054的datasheet但是没什么感觉,没读懂这方面的动些,忘各位指教一二。

谢谢!
附件名称/大小 下载次数 最后更新
BPSK驱动.rar (442KB)  288 2007-04-10 14:59
wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-10 15:06
自己先顶一下
xp4105
论坛版主
论坛版主
  • 注册日期2006-04-02
  • 最后登录2014-03-29
  • 粉丝1
  • 关注0
  • 积分905分
  • 威望570点
  • 贡献值1点
  • 好评度162点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-04-11 09:10
从代码中就可以看出来啊。还问。看看DATA再说吧。
时光如流水 抓紧时间实现自我价值
wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-11 14:51
我看了一些代码里面的Read例程好像没做什么实质性的工作,重要的都在SerialRead里面,那不要Read例程可以吗?
有哪位高人能讲清楚点呢?
谢谢!
zhangwei_351286
驱动牛犊
驱动牛犊
  • 注册日期2006-10-08
  • 最后登录2008-01-22
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-13 00:05
如果你上位机用了read_file 去进行通信,那么DS自然的给你提供一个派遣例程
让你的IRP有个落脚的地方啊(俗了点&^&),就像DDK里的
IRP_mj_read 对应的DISPATCHREAD例程一样的呀。IO管理器已经把你的IRP和具体的
派遣函数通过函数指针方式(回调)联系起来了。
DS中的 irp---》read---》startIO---》searialread---》进行DMA的传输
当然这个IRP是排队的
wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-13 09:57
谢谢!
似乎有些明白了
suiping
驱动牛犊
驱动牛犊
  • 注册日期2007-03-09
  • 最后登录2009-12-19
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-19 07:42
谢谢楼主的代码,先研究一下!!!
wsjc1999
驱动牛犊
驱动牛犊
  • 注册日期2003-01-28
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望12点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-05-13 15:18
谢谢楼主分享源代码。
bouy2006fly
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2009-07-02
  • 粉丝0
  • 关注0
  • 积分242分
  • 威望45点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-06-13 16:08
当IRP 位 IRP_MJ_READ 的时候,驱动就是靠这个例程来响应 。。
wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-06-13 17:08
现在知道了
Adaxyz
驱动牛犊
驱动牛犊
  • 注册日期2007-04-16
  • 最后登录2007-07-25
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-06-15 09:31
怎么下的是php文件阿
Adaxyz
驱动牛犊
驱动牛犊
  • 注册日期2007-04-16
  • 最后登录2007-07-25
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-06-15 09:33
这回好了,直接点右键,目标另存为就可以了,:)
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-09-06 12:57
谢了,学习中
chivaree
驱动牛犊
驱动牛犊
  • 注册日期2004-04-06
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-10-08 10:43
谢谢楼主分享源代码
fedlt
驱动牛犊
驱动牛犊
  • 注册日期2007-09-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-10-19 16:59
研究了楼主的代码,楼主要是多给点注释就好了。下面说发现的几个问题。
1、楼主的STARTIO例程是不是有点问题?
VOID BPSKDevice::StartIo(KIrp I)
{
    if ( !I.TestAndSetCancelRoutine(
        LinkTo(CancelQueuedIrp),
        NULL,
        CurrentIrp()) )
    {
        return;
    }

    switch (I.MajorFunction())
    {
        case IRP_MJ_READ:
            SerialRead(I);
            break;
        case IRP_MJ_WRITE:
            SerialWrite(I);
            break;
        //case IRP_MJ_DEVICE_CONTROL:   //注释的我认为是我加上的,这个应该不能省调吧
                                          //    DeviceControl(I);
                                          //    break;
        default:
            ASSERT(FALSE);
            PnpNextIrp(I);
            break;
    }
}
2、CONFIG_SYMBOL_RATE_Handler(KIrp I)这个例程中的一句
SYMBOL_RATE_STRUCT *SymbolRate= (SYMBOL_RATE_STRUCT *)(I.IoctlBuffer());
SYMBOL_RATE_STRUCT 是楼主自己定义的结构体,
typedef struct
{
    DWORD ControlWord[100];//控制字,有效位为最低字节,格式 000000xx(十六进制);
    DWORD BytesCount;
}SYMBOL_RATE_STRUCT;
你把I.IoctlBuffer()的返回值PVOID*类型转成这个结构体,是否妥当?如果可以实现,请问BytesCount是怎么赋值的?除非访问I.IoctlBuffer()的返回值是有这个字节数参数?请楼主解释一下!
3、CONFIG_SYMBOL_RATE_Handler(KIrp I)这个例程中的一句
BYTE TEMP=m_IoPortRange1.inb(0xf0);//0xf0:Range for PCI-to-Local Address Space 1
我想问定义TEMP有什么用处?后面的例程也有定义这样的,
BYTE *ModulMode=(BYTE *)(I.IoctlBuffer());
BYTE TEMP=*ModulMode;
我不知道用处,希望知道的告诉我一下。
4、楼主的程序是否真的能运行啊?还是你把别人的发上来的,如果是别人的,是否也能成功运行吗?如果能的话,我就该好好研究我发现的问题了。
谢谢!
游客

返回顶部