5015|10

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教一段无线网卡驱动程序,请高手指点! [复制链接]

我所做的工作是一个嵌入式系统中进行无线上网卡的驱动程序开发,该系统的DSP为Philips 的TM1300,网卡的MAC芯片型号为RTL8185,射频芯片为RTL8225,驱动程序是在Linux下用C语言开发的,下面是无线网卡驱动程序中的射频初始化部分的程序片断:
……
write_rtl8225(dev, 0xd, 0x6db); //向偏移地址为0xd的射频芯片寄存器写数据
mdelay(1); //让CPU空转1毫秒
write_rtl8225(dev, 0xe, 0x29); //向偏移地址为0xe的射频芯片寄存器写数据
mdelay(1); //让CPU空转1毫秒
write_rtl8225(dev, 0xf, 0x914); //向偏移地址为0xf的射频芯片寄存器写数据
if(priv->card_type == USB) //若网卡使用的是USB插口
{
        force_pci_posting(dev);//***这个函数里面只有一个读寄存器的操作
        mdelay(100); //让CPU空转100毫秒
}
……
现在我想请教的是:
(1) 为什么每一个写寄存器操作之后都要有一个停顿,即使用mdelay()函数让CPU空转,这些停顿的依据是什么?
(2) 从上面的程序片断中可以看出每次停顿的时间也不尽相同,有时候停1毫秒(mdelay(1)),有时候停100毫秒(mdelay(100)),我想请问停顿的具体时间怎么确定?它跟那些因素有关?跟DSP芯片的频率有关吗?

请各位高手赐教,不胜感激!

最新回复

你在另外一个帖子中已经问过的。 没有找到这两句trace对应的函数吗?看看中断里面是不是没有做正确的处理。还有先禁止掉中断,看看是不是不会有这两条错误了。  详情 回复 发表于 2008-5-24 09:46
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1,可能是芯片手册上要求的,某2个寄存器写入中一定要有多少时间间隔。
2,至于到底要停多久,也可能来自经验。但读操作后所需停顿较少也是合理的情况。
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是不是对模拟部分的操作都需要加延时啊?
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

4
 
高手们,回一个吧,我正眼巴巴的等着你们的指教呢!
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
LZ可以找做硬件的聊聊,在操作许多硬件设备的时候都需要一些延时,而且这样的延时长短大多是根据经验得出来的,不同的设备需要不同的延时长短。实际上延时最简单的理由就是:没有足够的延时,硬件就不能正常的工作。能保证硬件稳定工作的时间就是延时长短的依据。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼上说的很有道理

很多硬件寄存器写入值后需要一定的延时,以便系统达到稳定状态
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
什么接口?驱动用你们自己写么?

好像realtek官方网站上有这个驱动啊
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
现在的CPU内部主频逐渐提高,运算和控制速度很快。
但是外设(比如网卡芯片,射频芯片等)的响应速度不快,得到相应的控制信息后,对其自身内部的配置是需要一定时间的,比如1毫秒。

在外设的自身配置过程中,是无法继续响应CPU新的指令的,所以此时,CPU就只有等待外设配置好,才能发下一条命令。

平时用电脑吧?现在电脑速度的一个瓶颈就是在硬盘的读写速度上,因为CPU太快,而硬盘读写速度太慢,所以CPU读或者写一次之后,只能等硬盘慢慢转,完成这次的数据操作,然后发一个信号(RDY,ready),CPU再进行下一次操作。如果硬盘的速度能跟上CPU的速度……那硬盘肯定要冒烟了。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
硬件的要求,你的芯片DATASHEET上应该有说明的啊.
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢各位的回复。

      sailor_8318说:

      “什么接口?驱动用你们自己写么?

       好像realtek官方网站上有这个驱动啊”


我的网卡是PCI接口的,Realtek官方网站上提供的驱动我也看过,他们提供了很多操作系统下的参考源代码,其中有Linux的,我的驱动程序大部分都是从这里移植过来的。我移植开源代码进行修改之后调试,碰到如下现象:
    (1)网卡上的ACT指示灯闪烁,而LINK指示灯不亮;
    (2)我将调试信息显示出来,发现网卡初始化(包括射频初始化)完成之后,系统立即进入中断服务程序,所显示的异常中断为:“接收描述符不存在”和“接收FIFO溢出”,每次重启之后系统依然不停的发生这两个异常中断,基本上很少能进入其它线程。

    小弟刚刚着手硬件驱动开发工作,不知道我是不是在移植开源代码时出了错误,或者是还有什么地方没有注意到,敬请各位高手根据你们的经验多多指教,我在线急等!谢谢!

 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
你在另外一个帖子中已经问过的。

没有找到这两句trace对应的函数吗?看看中断里面是不是没有做正确的处理。还有先禁止掉中断,看看是不是不会有这两条错误了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表