主题 : DM9000数据和命令寄存器地址分析 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 54261
精华: 9
发帖: 43
金钱: 665 两
威望: 133 点
贡献值: 9 点
综合积分: 266 分
注册时间: 2011-08-27
最后登录: 2014-08-08
楼主  发表于: 2013-05-16 22:34

 DM9000数据和命令寄存器地址分析

这个问题纠结了好久,仔细看手册后总算搞清楚了,偷懒是解决不了问题的...

DM9000地址相关的信号有片选脚(CS)和命令/地址脚(CMD)
CMD为1表示访问命令寄存器,CMD为0表示访问数据寄存器
Tiny210用CS1连接DM9000的片选信号,所以数据寄存器地址是0x88000000
Tiny210用ADDR2连接DM9000的命令/地址信号,要ADDR2为1,貌似命令寄存器地址应该是0x88000004,实际测试不对哈!!!
Tiny210访问DM9000是16位总线方式,所以存在地址移位的问题,正确的命令寄存器地址应该是0x88000008,如何理解移位呢???
CPU以16位总线方式访问外设,每次访问可以读到2个字节,意味着:
    读地址0(0000b),返回第0,1两个字节
    读地址1(0001b),返回第2,3两个字节
    读地址2(0010b),返回第4,5两个字节
    读地址3(0011b),返回第6,7两个字节
    读地址4(0100b),返回第8,9两个字节
读第8字节时,ADR2才输出1, clear ?
结论:
#define S5PV210_PA_DM9000_A        (0x88000000)
#define S5PV210_PA_DM9000_F        (S5PV210_PA_DM9000_A + 0x08)

BUT
为啥网上一堆代码都加了0x300呢?更诡异的是,友善内核的定义
#define S5PV210_PA_DM9000_A        (0x88001000)
#define S5PV210_PA_DM9000_F        (S5PV210_PA_DM9000_A + 0x300C)

其实
本部分内容设定了隐藏,需要回复后才能看到
级别: 新手上路
UID: 140714
精华: 0
发帖: 2
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2019-01-06
最后登录: 2019-03-27
1楼  发表于: 2019-03-17 20:33

 回 楼主(mei5150) 的帖子

正需要,嘻嘻