网卡驱动设计--2440

2024-06-09 03:48
文章标签 设计 驱动 网卡 2440

本文主要是介绍网卡驱动设计--2440,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注意学习软件的移植。。
从uboot中找出DM9000的参考代码;先参考其初始化代码,进行了如下步骤: 前两步需分析得出
1、由于DM9000是一个单独的芯片,所以要设置其片选
1.1设置数据位宽
1.2设置其工作时序(参考uboot--初始化CPU对应目录U-Boot\arch\arm\cpu\arm920t\s3c2440\lowlevel_init.s)
2、中断初始化(采用中断的方式使用DM9000)
2.1初始化中断引脚(触发中断方式,使能)
3、复位设备(参考uboot得出)
3.1实现向dm9000中读/写数据的函数(注意第一步设置的位宽为16bit);回忆第一节课DM9000读写的的方式
DM9000的两个操作接口:index接口(0x20000300),数据接口(0x20000304)
3.2实现复位函数内的操作(对比uboot)
4、寻找DM9000芯片(移植dm9000_probe(void));对比厂商ID(Vendor ID -- VID)、产品ID(Product ID -PID)
5、MAC初始化(移植)
6、填充MAC地址
6.1设置其物理地址(有偏移地址10H做起始地址)
6.2暂时用不到以 偏移地址 16H为开头的Multicast address register,暂时不用初始化


分析发送函数;参考函数(static int dm9000_send(struct eth_device *netdev, void *packet, int length)
1、禁止中断---设置IMR(偏移地址FFH)寄存器;禁止[5:0]位相对应的中断
2、设置发送长度---设置TXPLL\TXPLH(偏移地址FCH)
3、将数据搬移到DM9000的发送RAM中(准备数据)---设置MWCMD(偏移地址为F8H)
4、把数据放入发送缓冲寄存器---利用数据接口发送DM_DAT
5、发出发送命令---设置TCR(发送控制寄存器,偏移地址02H),第0位置1
6、等待传送完毕---提取TCR的第0位,因其表示发送数据完成之后自动清零
7、清除发送状态---设置(读或写都将该位清零)NSR的第5位wakest、第3位TX2END、 第2位TX2END;即向NSR寄存器写入0x2c.
8、恢复中断使能--- 使能接收中断

分析接收函数;static int dm9000_rx(struct eth_device *netdev)
1、检测接收状态,判断产生接收中断,产生则代表接收到数据,未产生中断则返回---ISR(中断状态寄存器)的接收位第0位PR
2、清除接收位---向ISR第0位写1
3、空读(Dummy read)---MRCMDX
//先隔过对数据的检查,进行以下操作
4、读取数据包状态 /* A packet ready now & Get status/length */ ----MRCMD
4.1读取数据包的长度----LEN= DM_DAT
5、读取包的数据--与以太网的数据的最大长度( PKT_MAX_LEN 1522)作比较,不可超过,注意接收的数据宽度为16位

中断处理函数的实现(接收数据后触发中断)
1、保存环境
2 、调用接收函数
3、清除中断
3、恢复环境



这篇关于网卡驱动设计--2440的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1044145

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系