阅读:1969回复:3
关于dm9000a的注册表修改问题
我的s3c2440-wince5.0板子,由DEMO板访制,多加了个CPLD,但dm9000a没用它。现在调试dm9000a,片选是CS3,中断EINT7,CMD为ADDR2。
症状是:一旦dm9000a有片选,则LCD触摸屏出现黑线,并逐渐发白,触摸、鼠标不能输入,感觉像是卡住了,同时整个板子的电流有较大起伏,约200mA。片选一变高,则一切恢复正常;再一会又有片选时,症状如此反复。全程‘INT’脚没动静。 我想是:dm9000a没有产生中断而占用CPU过长,导致LCD不能刷新。但同样的NK.bin下载到DEMO板却能正常用。 然后我修改platform.reg。(这是本身的没改) [HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms] ... "RecvBuffer"=dword:20 "IrqNumber"=dword:23 "SysIntr"=dword:12 "IoAddress"=dword:18000000 //cs3的起始地址 其中"IrqNumber"应该怎么计算呢?在s3c2440a_intr.h里有:#define EINT7 35,就是这个吗? "SysIntr"的值是SysIntr_firmware+2,即是16+2。 "IoAddress"=dword:18000000,有的说要偏移0x300,即为:18000300 .为啥?在哪里查看其偏移量? 但是在dm9isa.cpp里却是:(仅贴出不同的地方) { CID_RXBUFFER_NUMBER, 0x10, NDIS_STRING_CONST("RecvBuffer")}, //?上为0x20 { CID_IO_BASE_ADDRESS, 0x10000000, NDIS_STRING_CONST("IoAddress")}, { CID_IRQ_NUMBER, 0x03, NDIS_STRING_CONST("IrqNumber")}, //?上为0x23 { -1,-1,NULL} 注册表信息与驱动信息不同。但好像是说wince注册表和驱动没啥关系,可现在驱动里的片选地址都是错的。 我在其他地方看到有这样的问题:‘DM9000的RX没有打开,并且RX和TX的中断也没有打开’,这个在那里查看?还有MMU的状态,在哪里查看。 (我的dm9000a的驱动包含以下文件:common.cpp,common.h;dm_types.h;device.cpp,device.h;dm9isa.cpp,dm9isa.h,dm9isa.def;driver.cpp,driver.h;wince.c;dm9000_3.2.9-wince5.0.README;) 麻烦分析一下,我的邮箱是stblade@tom.com。 |
|
沙发#
发布于:2009-11-06 00:11
"IoAddress"=dword:18000000,有的说要偏移0x300,即为:18000300 .为啥?在哪里查看其偏移量?
这个是你CS3选择的地址啊! |
|
板凳#
发布于:2009-11-06 08:43
回 1楼(NewTech) 的帖子
可是cs3的地址是:18000000,为何要偏移0x300?为何驱动和注册表不一致,要改的话只改注册表就可以了吗? 你觉得我这种没有中断的问题,可能会是什么错误呢? 麻烦了,我现在真是一头雾水。 |
|
地板#
发布于:2009-11-10 03:10
dm9000这个貌似可以不加0x300的偏移
irq是硬件决定的。你选择了哪个中断,irq即定死了。 35的话对应的十六进制就是0x23 |
|