这个问题纠结了好久,仔细看手册后总算搞清楚了,偷懒是解决不了问题的...
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)
其实本部分内容设定了隐藏,需要回复后才能看到