新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2017-6-28
- 在线时间
- 1 小时
|
DM9000A和ARM11引脚连接如图所示,所以cs引脚接xm0csn1,所以我把DM9000的基地址设为了0x18000000,所以地址端口为dm_addr_port=0x18000000,数据端口为dm_data_port=0x18000004.
然后编写了读写寄存器的函数,接着我就写了DM9000A的初始化函数
//对特定寄存器写入特定参数
void dm_reg_write(unsigned char reg,unsigned char data)
{
dm_addr_port=reg;
dm_data_port=data;
}//对特定寄存器进行读取
unsigned int dm_reg_read(unsigned int reg)
{
dm_addr_port=reg;
return dm_data_port;
}
//DM9000A初始化int dm_init(void)
{
unsigned long id;
Uart0_Init();
dm_reg_write(NCR,0x03);//软件复位DM9000aep,
Timer0_yms(1000); //至少延时20us以上,因为复位是在该信号的至少10us以后
dm_reg_write(NCR,0x00);
dm_reg_write(NCR,0x03);
Timer0_yms(1000);
dm_reg_write(NCR,0x00);//为确保复位正确,进行两次复位操作
//读取产品id
id = dm_reg_read(VIDL);
id |= dm_reg_read(VIDH)<<8;
id |= dm_reg_read(PIDL)<<16;
id |= dm_reg_read(PIDH)<<24;
Uart0_SendString(hex2char(dm_reg_read(NCR)));
//清中断
dm_reg_write(IMR,0x80);
//设置相关联界面//LED mode1
dm_reg_write(TCR2,0x80);//LED mode1
//gpioset(0x00,0x01);参考第五章
//gpiow(0x00,0x00);//开启内部的PHY电源,参考第五章
dm_reg_write(GPCR,0x01);
dm_reg_write(GPR,0x00);
//填充MAC地址
dm_reg_write(PAR0,0x00); //设置6字节的MAC地址
dm_reg_write(PAR1,0x01);
dm_reg_write(PAR2,0x02);
dm_reg_write(PAR3,0x03);
dm_reg_write(PAR4,0x04);
dm_reg_write(PAR5,0x05);
dm_reg_read(NSR);//清TX状态
dm_reg_write(TCR,0x00); //设置TX控制,使能发送
dm_reg_read(ROCR);
dm_reg_write(FCR,0x28);//流控制寄存器
dm_reg_write(ISR,0x3f);//清中断状态,3f是16bit模式,bf是3bit模式
dm_reg_write(IMR,0x81);
dm_reg_write(RCR,0x31); //设置RX控制,接收控制寄存器,接收使能以及一些配置
dm_reg_write(BPTR,0x3f); // 背压阈值寄存器,3K,600us,至少3k,200us
dm_reg_write(FCTR,0x38);//流控制阈值寄存器,接收FIFO门限3K,8K
dm_reg_write(SMCR,0x00);//特殊模式控制寄存器*/
}
用上述函数对DM9000A进行初始化之后没有任何的反应,正常初始化成功的话网口的LED灯应该亮的,现在没亮,就说明初始化没成功,在网上找了一些资料觉得我写的没什么问题啊,可是就是找不到初始化不成功的原因,请各位大神不吝赐教,小女子感激不尽啊!!!
|
|