标签:soft 12px ash config 连接 ext border wait ott
0x8800_0000
。TX-
,TX+
与RX-
,RX+
,这意味着网线传输采用的是差分传输。另外网线还有四根地线,用于抗干扰。
start_armboot
init_sequence
board_init
dm9000_pre_init
??该函数其实主要用于初始化SROM_BANK。对于网卡本身的设置,由于u-boot直接移植自Linux内核,所以目前可能还看不懂。
static void dm9000_pre_init(void)
{
unsigned int tmp;
#if defined(DM9000_16BIT_DATA)
SROM_BW_REG &= ~(0xf << 4);
SROM_BW_REG |= (1<<7) | (1<<6) | (1<<5) | (1<<4);
#endif
SROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));
tmp = MP01CON_REG;
tmp &=~(0xf<<4);
tmp |=(2<<4);
MP01CON_REG = tmp;
}
??分析上述被使用的三个寄存器:
SROM_BW
??全称SROM Bus Width & Wait Control Register
SROM_BC
??全称SROM Bank Control Register
??配置按照原厂配置即可
MP0_1CON
??GPIO复用设置
??对于其他的相关配置,有三点值得考虑:
#define DM9000_16BIT_DATA
#define CONFIG_DRIVER_DM9000 1
#ifdef CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE (0x88000300)
#define DM9000_IO (CONFIG_DM9000_BASE)
#if defined(DM9000_16BIT_DATA)
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#endif
#endif
??1.为何DM9000的基地址是多了三百的偏移量?猜测可能是DM9000的型号差异导致的。
??2.为何DM9000的数据线基地址要加上0x100
?DM9000_IO表示访问芯片IO寄存器的基地址,直接就是CONFIG_DM9000_BASE;DM9000_DATA表示我们访问数据时的基地址,因为DM9000芯片的CMD引脚接到了ADDR2,因此这里要+4(0b100
,对应ADDR2)
标签:soft 12px ash config 连接 ext border wait ott
原文地址:https://www.cnblogs.com/0nism/p/12380542.html