OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3394|回复: 1

ENC28J60.H里面有几个地方不太明白,原子哥指点下,谢谢、、、

[复制链接]

27

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-7-5
在线时间
47 小时
发表于 2015-7-28 10:52:32 | 显示全部楼层 |阅读模式
5金钱



1、//这个值是做什么用的?
#define SPRD_MASK        0x80

2、BANK区寄存器的地址值后面或0x20、0x40等,那些是自己规定的吗?如果是它的意思是不是偏移地址呢?

最佳答案

查看完整内容[请看2#楼]

1、SPRD_MASK看名字就知道是掩码,为0X80,用来判断某个控制寄存器是否属于MAC或者PHY寄存器(我们的例程没有用到这个功能) 2、控制寄存器后面跟的0X20,0X40和0X60这些是地址偏移,因为ENC28J60有4个BANK,每个BANK大小都是0X20,所以BANK1中寄存器的地址就是BANK0对应寄存器地址上加上0X20,比如BANK0的ERDPTL为0x00,那么BANK1的EHT0就是(0X00|0X20),同理,BANK2的MACON1就是(0X00|0X40),BANK3的MAADR1寄存器就是(0x00|0X60), ...
学习ING,坚持啊、、
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-7-28 10:52:33 | 显示全部楼层
1、SPRD_MASK看名字就知道是掩码,为0X80,用来判断某个控制寄存器是否属于MAC或者PHY寄存器(我们的例程没有用到这个功能)
2、控制寄存器后面跟的0X20,0X40和0X60这些是地址偏移,因为ENC28J60有4个BANK,每个BANK大小都是0X20,所以BANK1中寄存器的地址就是BANK0对应寄存器地址上加上0X20,比如BANK0的ERDPTL为0x00,那么BANK1的EHT0就是(0X00|0X20),同理,BANK2的MACON1就是(0X00|0X40),BANK3的MAADR1寄存器就是(0x00|0X60),为什么有些寄存器后面还要在或上一个0X80呢?注意看,或上0X80的寄存器都是以MA或者MI开头的,MA开头的是以太网MAC寄存器,MI开头的为以太网PHY寄存器,这里其实是通过给MAC和PHY寄存器的bit7置1来和其他控制寄存器区分开来。这里你可能会问,人为的将寄存器地址的bit7置1不就改变了寄存的真实地址了吗?其实不会的,从ENC28J60的SPI指令集可以看出一个控制寄存器地址的bit0~birt4才是寄存器的真正有效的地址。综上所述,控制寄存器的地址各个bit的含义就是:bit7代表此寄存器是否属于MAC和PHY寄存器,bit5~bit6用于区分BANK,bit0~bit4才是寄存器的地址。
开往春天的手扶拖拉机
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 12:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表