关于DM9000A驱动的问题

04616115   2010-4-30 14:37 楼主
如题,飞凌开发板的DM9000A的硬件连接:
一:中断口连接到了2440的GPF7上,用来响应网卡中断;

二:CS口接到了2440的nGCS4,即GPA15上,用来选择网卡;

三:CMD口接到了地址总线ADDR2上,用于决定DATA口或INDEX口???

我仔细看了DM9000A的驱动,有如下疑问:
一:整个驱动中没见有GPF7的配置,程序中如何说明采用了GPF7做为中断响应脚?
二:整个驱动中没见有GPA15的配置,程序中如何通过该脚选择DM9000A?不能一直处于选中状态吧!否则总线会造成DRAM出错。
三:CMD口为什么要接到ADDR2上?接到其他地址线上可以吗?

回复评论 (5)

注册表里面信息如下:
  1. IF BSP_DM9000 !
  2.         [HKEY_LOCAL_MACHINE\Comm\DM9CE]
  3.                 "DisplayName"="DM9000A/9010 ISA Fast Ethernet Adapter"
  4.                 "Group"="NDIS"
  5.                 "ImagePath"="dm9isa.dll"

  6.         [HKEY_LOCAL_MACHINE\Comm\DM9CE\Linkage]
  7.                 "Route"=multi_sz:"dm9ce1"

  8.         [HKEY_LOCAL_MACHINE\Comm\DM9CE1]
  9.                 "DisplayName"="DM9000A/9010 ISA Fast Ethernet Adapter"
  10.                 "Group"="NDIS"
  11.                 "ImagePath"="dm9isa.dll"

  12.         [HKEY_LOCAL_MACHINE\Comm\Tcpip\Linkage]
  13.                 "Bind"="dm9ce1"

  14.         [HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms]
  15.                 "BusNumber"=dword:0
  16.                 "BusType"=dword:0
  17.                 "XmitBuffer"=dword:20
  18.                 "RecvBuffer"=dword:20
  19.                 "IrqNumber"=dword:23
  20.                 "MACAddress" =hex:00,0A,EB,FD,7A,00

  21.         [HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms\TcpIp]
  22.                 "EnableDHCP"=dword:0
  23.                 "UseZeroBroadcast"=dword:0
  24.                 "DefaultGateway"="192.168.1.1"
  25.                 "IpAddress"="192.168.1.227"
  26.                 "Subnetmask"="255.255.255.0"
  27.                 "DNS"="192.168.1.1"
  28. ENDIF BSP_DM9000 !


Dm9isa.cpp里面有这么一段:
  1. =
  2. {
  3.         { CID_CONNECTION_TYPE, -1, NDIS_STRING_CONST("ConnectionType") },
  4.         { CID_SLOT_NUMBER, -1, NDIS_STRING_CONST("SlotNumber")},
  5.         { CID_BUFFER_PHYSICAL_ADDRESS, 0, NDIS_STRING_CONST("BufferPhysicalAddress")},
  6.         { CID_TXBUFFER_NUMBER, 0x20, NDIS_STRING_CONST("XmitBuffer")},
  7.         { CID_RXBUFFER_NUMBER, 0x10, NDIS_STRING_CONST("RecvBuffer")},
  8.         { CID_ADAPTER_NUMBER, 0, NDIS_STRING_CONST("AdapterNumber")},
  9.         //{ CID_IO_BASE_ADDRESS, 0x08000300, NDIS_STRING_CONST("IoAddress")},// 这样应该就改成nGCS1了吧!!!
  10.         { CID_IO_BASE_ADDRESS, 0x20300000, NDIS_STRING_CONST("IoAddress")},// 这里说明使用nGCS4???nGCS4所选通的对应的DRAM的地址?
  11.         { CID_IO_RANGE, 0x10, NDIS_STRING_CONST("IoRange")},
  12.         { CID_IRQ_NUMBER, 0X23, NDIS_STRING_CONST("IrqNumber")},// 这里是物理中断号???
  13.         { -1,-1,NULL}
  14. };


请问:DM9000的CS口,那个地址是怎么决定的呢?即上面的,为什么0x20300000表示nGCS4选择?
看2440手册,nGCS4选择的起始地址为0x20000000,加了300000这个偏移地址有什么作用?
如果换成其他选择口,如nGCS1口,地址又是多少?
0x23表示接到哪个硬件中断口上了?迷惑中。。。。。。。。。。。。。。。。。。
点赞  2010-4-30 16:14
中断懂了,原来在S3c2440a_intr.h里面中断定义:
#define IRQ_EINT7           35
0x23 = 35,表示接GPF7.
CS呢?
点赞  2010-4-30 16:35
引用: 引用 1 楼 armeasy 的回复:
注册表里面信息如下:

C/C++ code
IF BSP_DM9000 !
    [HKEY_LOCAL_MACHINE\Comm\DM9CE]
        "DisplayName"="DM9000A/9010 ISA Fast Ethernet Adapter"
        "Group"="NDIS"
        "ImagePath"="dm9isa.dll"……

一般来说,+偏移要么是由寄存器地址决定的,
要么由外部硬件电路决定,例如0x20000001,则最后那个‘1’就是硬件上的高电平。
点赞  2010-4-30 17:31
mark....
点赞  2010-5-5 17:18
结贴,问题解决。
一:中断配置在注册表中,驱动中上文已经提到;
二:CS脚可以处于常选中状态,因为DRAM分配问题;每个bank对应128M;
三:CMD不一定非得接到ADDR2上,可以接到其它地方,改代码即可。
点赞  2010-5-5 21:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复