12718|38

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince5.0的Dm9000驱动调试问题 [复制链接]

各位大侠好!小弟现在搞wince5.0下的DM9000驱动遇到点问题!
我在驱动中加调试信息发现我申请中断处问题了!
EDeviceRegisterInterrupt()函数中有个NdisMRegisterInterrupt()这个函数应该是NDIS层的函数。意思是申请了中断吗?可是现在我这出了问题了
if((status=NdisMRegisterInterrupt(
                &m_InterruptHandle,
                m_pUpper->GetNdisHandle(),
                37,        // or say, irq vector
                37,        // irql level
                TRUE,                // request ISR
                TRUE,//(BOOLEAN)m_szConfigures[CID_IRQ_SHARED],                // shared interrupt
                (KINTERRUPT_MODE)m_szConfigures[CID_IRQ_GEN_TYPE])) != NDIS_STATUS_SUCCESS)       
        {
                if(status==NDIS_STATUS_RESOURCE_CONFLICT)
                        RETAILMSG(DM9000_DEBUG, (TEXT("NDIS_STATUS_RESOURCE_CONFLICT\r\n")));
                else if(status==NDIS_STATUS_RESOURCES)
                        RETAILMSG(DM9000_DEBUG, (TEXT("NDIS_STATUS_RESOURCES\r\n")));
                else
                        RETAILMSG(DM9000_DEBUG, (TEXT("NDIS_STATUS_FAILURE\r\n")));
                RETAILMSG(DM9000_DEBUG, (TEXT("request irq fucking errors\r\n")));               
                THROW((ERR_STRING("Error in registering interrupt"),status));
        }
现在调试信息显示时红色部分我看help中这样描述的:
The attempt to initialize the interrupt object failed, possibly due to another driver's prior claim on the InterruptVector or InterruptLevel in the registry.

想请教下各位是怎么回事呀??

最新回复

这个帖子终于可以结了,经过反复测试验证,看波形比较,最后换了块DM9000AEP芯片,竟然奇迹般的ko了!现在的困惑是为什么都是DM9000AEP 007版的芯片,为什么换了一块就好了呢??也不管了,让硬件区解决这个难题吧!  详情 回复 发表于 2010-1-20 13:48
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
忘记说了 我dm9000是这样配置的
1.SD0~SD15  --------  LDATA0~LDATA15  数据线和地址线复用
2.CMD            --------  LADDR2                唯一的一根地址线用于判断是数据还是地址
3.nCS            --------  nGCS3                  片选BANK3
中断号是 EINT9(GPG1)我的注册表是这样配置的:
[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms]
"BusNumber"=dword:0
"BusType"=dword:1
"XmitBuffer"=dword:20
"RecvBuffer"=dword:20
;"SysIntr"=dword:26
"IrqNumber"=dword:25
"IoAddress"=dword:18000300
"UseSoftwareMac"=dword:1
"SoftwareMacAddress0"=dword:20
"SoftwareMacAddress1"=dword:04
"SoftwareMacAddress2"=dword:09
"SoftwareMacAddress3"=dword:18
"SoftwareMacAddress4"=dword:00
"SoftwareMacAddress5"=dword:07
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
帮顶下.

mark,学习下。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
友情关注,这个没弄过。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
就没有朋友做过吗?我现在对中断这很困惑!不是dm9000是怎么和ce的中断结合的?看help的意思是NdisMRegisterInterrupt()申请中断的,可是为什么申请不成功呢??
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
帮你娃顶一下   看你娃也好可怜啊  呵呵  
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

7
 
谢谢楼上兄弟!呵呵!我现在在我驱动中都加了调试信息,驱动加载后信息如下
DM9000 DriverReset
C_DM9000::DeviceReset
C_DM9000::EDeviceInitialize
DM9000ReadPort:Address=0x28,value=0x46
DM9000ReadPort:Address=0x29,value=0xa
DM9000ReadPort:Address=0x2a,value=0x0
DM9000ReadPort:Address=0x2b,value=0x90
[dm9000: Chip signature is 90000A46
DM9000ReadPort:Address=0xfe,value=0x0
C_DM9000::DeviceOnSetupFilter
C_DM9000::DeviceStart
C_DM9000::DeviceEnableInterrupt
C_DM9000::DeviceOnSetupFilter
C_DM9000::DeviceOnSetupFilter
DM9000 DeviceCalculateCRC32
DM9000 DeviceCalculateCRC32
DM9000 DeviceCalculateCRC32
DM9000 DriverQueryInformation
DM9000ReadPort:Address=0x7,value=0x0
DM9000ReadPort:Address=0x7,value=0x0
DM9000ReadPort:Address=0x7,value=0x0
DM9000ReadPort:Address=0x7,value=0x0
DM9000ReadPort:Address=0x7,value=0x0
DM9000ReadPort:Address=0x7,value=0x0
DM9000ReadPort:Address=0x7,value=0x0
+OALIntrDoneIrqs(1, 0x8201eefc)
+BSPIntrDoneIrq(26). 然后不停地在reset!不知道怎么回事?但是我ping不通我的开发板??
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

8
 
LZ的irq跟系统中断map起来没有?是动态请求的还是静态映射的?
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 4 楼 xuefeng_baggio 的回复:
就没有朋友做过吗?我现在对中断这很困惑!不是dm9000是怎么和ce的中断结合的?看help的意思是NdisMRegisterInterrupt()申请中断的,可是为什么申请不成功呢??


这个API只是注册吧,不是申请。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

10
 
我现在对这个中断已经很困惑了!不知道是怎么样一个流程!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
我用的是动态申请的?
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(高级)

12
 
lz的这个函数走完了吗?MiniportInitialize
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 
先看chipid吧
 
 
 

回复

173

帖子

0

TA的资源

一粒金砂(高级)

14
 
"dm9000: Chip signature is 90000A46 "
LZ的chipid应该是已经读到了。
最近DM9000的驱动很火,呵呵
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 
谢谢楼上兄弟,我在eeworld上看到你以前也做过这方面的移植,你指点下吗??我的chipid是90000a46?不知道对不对??
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

16
 
不好意思,DM9000的CE驱动移植我没有做过。上次看到Ricky_hu大哥的帖子就顺便看了下代码。不过没有看懂。-_-||
90000a46好像应该是DM9000EP的ID。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

17
 
1)在系统中注册中断(连接到中断).对应NDIS库中的NdisMRegisterlnterrupt函数来实现中断的注册。
2) 确定中断的优先级别,我估计是不是没有确定中断的优先级。
3) 接收到中断并对中断进行排队
每一个MiniportXxx函数或ProtocolXxx函数都运行在一个特定的IRQL上,在中间层驱动程序中这些函数可使用的IRQL从PASSIVE_LEVEL一直到DISPATCH_LEVEL(包括DISPATCH_LEVEL)。
至于NdisMRegisterlnterrupt()申请不成功的原因,我现有的资料只有DDK方面的,所以不敢妄下结论。正在学习中!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

18
 
托雷斯兄弟!你就不要谦虚了!呵呵!我看了你的帖子发现你也在弄这东西!我的驱动是移植立于泰的DM9000,关键是我不知道在wince5.0中怎么申请这个中断。特别是注册表那得!还有程序中:
CONFIG_PARAMETER        g_szDm9ConfigParams[] =
{
        { CID_CONNECTION_TYPE, -1, NDIS_STRING_CONST("ConnectionType") },
        { CID_SLOT_NUMBER, -1, NDIS_STRING_CONST("SlotNumber")},
        { CID_BUFFER_PHYSICAL_ADDRESS, 0, NDIS_STRING_CONST("BufferPhysicalAddress")},
        { CID_TXBUFFER_NUMBER, 0x20, NDIS_STRING_CONST("XmitBuffer")},
        { CID_RXBUFFER_NUMBER, 0x10, NDIS_STRING_CONST("RecvBuffer")},
        { CID_ADAPTER_NUMBER, 0, NDIS_STRING_CONST("AdapterNumber")},
        { CID_IO_BASE_ADDRESS, 0x18000300, NDIS_STRING_CONST("IoAddress")},
        { CID_IO_RANGE, 0x10, NDIS_STRING_CONST("IoRange")},
        { CID_IRQ_NUMBER, 0x1A, NDIS_STRING_CONST("IrqNumber")},
        { -1,-1,NULL}
};
这段我很困惑,如果我设置的不是0x1a的话,dm9000驱动都加载不成功!但是0x1a的话 理论上讲不通 ,因为0x1a的十进制是26 ,而26是#define IRQ_USBH            26是usbh的中断,我看了我注册表usb部分确实也是26.我本来自认为对wince中断了解了一点点,现在发现自己正是自以为是!这个wince中断我现在时一点都不明白了!还请你指点下!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

19
 
为了方便你们分析问题我把我的usb OHCI部分注册表信息贴上来:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\OHCI]
   "InterfaceType"=dword:0     ; Internal
   "Prefix"="HCD"
   "Dll"="ohci2.dll"
   "Index"=dword:1
   "Order"=dword:1
   "Irq"=dword:1a                ; 26
   "SysIntr"=dword:11                ; (SYSINTR_FIRMWARE+1)
   "MemBase"=dword:49000000
   "MemLen"=dword:1000
   "UseExistingSettings"=dword:0
还请各位大侠分析下!!
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

20
 
帮顶!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表