ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:20.93KB ,
资源ID:12088075      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12088075.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(UBOOT DM9000驱动完全注释.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

UBOOT DM9000驱动完全注释.docx

1、UBOOT DM9000驱动完全注释UBOOT DM9000驱动完全注释UBOOT DM9000驱动完全注释#include ./include/dm9000x.h/* Board/System/Debug information/definition - */#define DM9801_NOISE_FLOOR 0x08#define DM9802_NOISE_FLOOR 0x05/* #define CONFIG_DM9000_DEBUG */#define DM9000_DBG(fmt,args.)/*=/DM9000芯片的PHY层模式/*=enum DM9000_PHY_mode DM

2、9000_10MHD = 0, DM9000_100MHD = 1, DM9000_10MFD = 4, DM9000_100MFD = 5, DM9000_AUTO = 8, DM9000_1M_HPNA = 0x10;/*=/DM9000芯片的网卡类型。NIC=network interface card/*=enum DM9000_NIC_TYPE FASTETHER_NIC = 0, HOMERUN_NIC = 1, LONGRUN_NIC = 2;/*=/DM9000芯片的数据结构/*=typedef struct board_info u32 runt_length_counter

3、; /接收报文长度小于64byte的计数器 u32 long_length_counter; / 接收报文长度大于1514byte 的计数器 u32 reset_counter; /复位计数 u32 reset_tx_timeout; / 由发送超时引起的复位 u32 reset_rx_status; /由接收状态引起的复位 u16 tx_pkt_cnt; /接收包计数 u16 queue_start_addr; /序列起始地址 u16 dbug_cnt; u8 phy_addr; /MAC地址 u8 device_wait_reset; / 设备状态 u8 nic_type; /网卡类型 u

4、nsigned char srom128; board_info_t;board_info_t dmfe_info;/*=/DM9000芯片的设置参数/*=static int media_mode = DM9000_AUTO;static u8 nfloor = 0;/*=/DM9000芯片的函数声明/*=int eth_init(bd_t * bd); /DM9000网卡初始化int eth_send(volatile void *, int); /将来自上层的数据包发送到媒介上int eth_rx(void); /接收数据包并且发送到上层去void eth_halt(void); /关闭

5、网卡static int dm9000_probe(void); /探测网卡芯片static u16 phy_read(int); /从物理层上读取一个字(16位)static void phy_write(int, u16); /往物理层上写一个字(16位)static u16 read_srom_word(int); /读取SROM中的一个字static u8 DM9000_ior(int); /从IO口上读取一个字节static void DM9000_iow(int reg, u8 value); /写一个字节到IO口上/*=/DM9000芯片的的寄存器操作宏,分为byte,word,

6、Dword三种/*=#define DM9000_outb(d,r) ( *(volatile u8 *)r = d )#define DM9000_outw(d,r) ( *(volatile u16 *)r = d )#define DM9000_outl(d,r) ( *(volatile u32 *)r = d )#define DM9000_inb(r) (*(volatile u8 *)r)#define DM9000_inw(r) (*(volatile u16 *)r)#define DM9000_inl(r) (*(volatile u32 *)r)/*=/函数名称:dm90

7、00_probe/函数功能:寻找DM9000芯片,分配内存空间,注册。/ 复位结束后到网卡的vendor ID寄存器和product ID寄存器读取id,/ 检测此网卡是否是dm9000。 /出口参数:无/入口参数:无/*=intdm9000_probe(void) u32 id_val; /32bit变量 id_val = DM9000_ior(DM9000_VIDL);/首先读VIDL vendor ID low byte id_val |= DM9000_ior(DM9000_VIDH) 8;/然后读VIDH vendor ID high byte id_val |= DM9000_io

8、r(DM9000_PIDL) 16;/再读PIDL Product ID low byte id_val |= DM9000_ior(DM9000_PIDH) nic_type = HOMERUN_NIC; program_dm9801(phy_reg3); DM9000_DBG(found homerun NICn); else db-nic_type = LONGRUN_NIC; DM9000_DBG(found longrun NICn); program_dm9802(); break; default: db-nic_type = FASTETHER_NIC; break; DM90

9、00_iow(DM9000_NCR, 0);/*=/函数名称:dm9000_reset/函数功能:DM9000的复位。/出口参数:无/入口参数:无/*=static voiddm9000_reset(void) DM9000_iow(DM9000_NCR, NCR_RST); OSTimeDly(1); /* delay 50ms */*=/函数名称:eth_init/函数功能:网卡的初始化/出口参数:无/入口参数:bd/*=inteth_init(bd_t * bd) int i, oft, lnk; /* RESET device */ dm9000_reset(); dm9000_pro

10、be(); /* NIC Type: FASTETHER, HOMERUN, LONGRUN */ identify_nic(); /* GPIO0 on pre-activate PHY */ DM9000_iow(DM9000_GPR, 0x00); /*REG_1F bit0 activate phyxcer */ /* Set PHY */ set_PHY_mode(); /* Program operating register */ DM9000_iow(DM9000_NCR, 0x0); /* only intern phy supported by now */ DM9000_

11、iow(DM9000_TCR, 0); /* TX Polling clear */ DM9000_iow(DM9000_BPTR, 0x3f); /* Less 3Kb, 200us */ DM9000_iow(DM9000_FCTR, FCTR_HWOT(3) | FCTR_LWOT(8); /* Flow Control : High/Low Water */ DM9000_iow(DM9000_FCR, 0x0); /* SH FIXME: This looks strange! Flow Control */ DM9000_iow(DM9000_SMCR, 0); /* Specia

12、l Mode */ DM9000_iow(DM9000_NSR, NSR_WAKEST | NSR_TX2END | NSR_TX1END); /* clear TX status */ DM9000_iow(DM9000_ISR, 0x0f); /* Clear interrupt status */ /* 下面这段代码是设置dm9000的MAC地址, 选是通过read_srom_word(i)到srom中读取MAC地址值, 再分别写入板子信息数据结构bd和dm9000的MAC寄存器中, 再将Multicast Address Register寄存器全部置1。*/ for (i = 0; i bi_enetaddr)i = read_srom_word(i); printf(MAC: %02x:%02x:%02x:%02x:%02x:%02xn, bd-bi_enetaddr0, bd-bi_enetaddr1, bd-bi_enetaddr2, bd-bi_enetadd

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1