2611|3

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

dm9000中的代码 [复制链接]

对dm9000中的寄存器的读写不是很明白,比如在dm9000.c中有


DWORD id_val;
id_val = READ_REG1(0x28);


其中
#define READ_REG1        ReadReg


static UCHAR
ReadReg(USHORT offset)
{
        IOWRITE(dwEthernetIOBase, offset);    //这里dwEthernetIOBase=0x20000300
        return IOREAD(dwEthernetDataPort);    //这里dwEthernetDataPort=dwEthernetIOBase+4
}



#define IOREAD(o)                (UCHAR)*((volatile USHORT *)(o)))
#define IOWRITE(o, d)                *((volatile USHORT *)(o)) = (UCHAR)(d)


这里
IOWRITE(o, d)                *((volatile USHORT *)(o)) = (UCHAR)(d)
先是将o(在这里是dwEthernetIOBase=0x20000300)强制转换成一个指向USHORT的指针,然后将这个指针指向的内存区域赋值为
d(在这里是0x28)。是这样吧?
但是我的理解是dwEthernetIOBase=0x20000300只是一个基址,0x28只是一个偏移量,真正寄存器的地址应该是0x20000328
dm9000的控制寄存器共32个,就是从dwEthernetIOBase到dwEthernetDataPort之间的4个双字,但是读的时候为什么每次都返回
dwEthernetDataPort所指向的地址的内容?每次返回寄存器内容的地址都一样?

我的理解在哪里出问题了?实在是不明白dm9000的控制寄存器是怎么读写的,希望高手指点一下。

最新回复

您好,不知道前面各位的问题解了没,你们说的问题小弟并不太懂,但我们目前是divacom在中国区域的总代理,从03年来一直专注于做DM9000及DIVACOM全线产品,对于研发来说,首先是产品质量有保证(为当年全新原装最新版本),然后通过我们可以找到原厂的工程师做技术支持,当然,是免费提供的,说不定我能帮得上大家的忙,以下是我的联系方式    QQ:1259987438 电话:027-8765163610 (0)13554272382 王洪武  详情 回复 发表于 2009-12-12 14:58
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有DM9000芯片的Datasheet吗?研究一下它的读写时序不就很清楚了
我对该芯片不了解,但这种读寄存器的方法也是存在的,也就是先向一个地址写寄存器的Index,然后就自动可以在某个地址读到相应寄存器的值
Datasheet中应该说得非常清楚,没有上网下一份就OK了
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用楼主 kaios1 的帖子:
对dm9000中的寄存器的读写不是很明白,比如在dm9000.c中有


DWORD id_val;
id_val = READ_REG1(0x28);

其中
#define READ_REG1 ReadReg


static UCHAR
ReadReg(USHORT offset)
{
IOWRITE(dwEthernetIOBase, offset);    //这里dwEthernetIOBase=0x20000300
return IOREAD(dwEthernetDataPort);    //这里dwEthernetDataPort=dwEthernetIOBase+4
}


#define IOREAD(o) (UCHAR)*((volatile USHOR…


这种东西都是很古老的操作方法,记得我刚参加工作的时候,某个芯片也是这样的操作方法的:先在IO寄存器里面写地址,然后到内存里面读寄存器的值。。。。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
您好,不知道前面各位的问题解了没,你们说的问题小弟并不太懂,但我们目前是divacom在中国区域的总代理,从03年来一直专注于做DM9000及DIVACOM全线产品,对于研发来说,首先是产品质量有保证(为当年全新原装最新版本),然后通过我们可以找到原厂的工程师做技术支持,当然,是免费提供的,说不定我能帮得上大家的忙,以下是我的联系方式    QQ:1259987438 电话:027-8765163610 (0)13554272382 王洪武
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表