corydon
驱动牛犊
驱动牛犊
  • 注册日期2008-05-11
  • 最后登录2008-06-14
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:2918回复:9

请教:无线网卡驱动调试时一直发生异常中断现象

楼主#
更多 发布于:2008-05-19 16:31
我最近参与了一个嵌入式系统开发的项目,该系统所用的DSP为Philips的TM1300. 我的主要工作是在WLAN下开发无线网卡驱动,我所用的无线网卡型号为KN-W510P,网卡的MAC芯片为RTL8185,射频芯片为RTL8225,我移植开源代码进行修改之后调试,碰到如下现象:
  
    网卡初始化(包括射频初始化)完成之后,系统立即进入中断服务程序,所显示的异常中断  
为:“接收描述符不存在”和“接收FIFO溢出”,每次重启之后系统依然不停的发生这两个异常中断,根本不能进入数据发送线程。  

    小弟刚刚着手硬件驱动开发工作,不知道为什么会不停的发生异常中断,敬请各位高手针对上面的问题多多指教!
zhaoyanghong
驱动小牛
驱动小牛
  • 注册日期2004-11-13
  • 最后登录2008-08-05
  • 粉丝0
  • 关注0
  • 积分341分
  • 威望92点
  • 贡献值0点
  • 好评度91点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-22 14:31
判断可能网卡初始化不完全,检查该网卡的初始化过程代码.
GoodOnline
驱动小牛
驱动小牛
  • 注册日期2007-04-11
  • 最后登录2009-02-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望204点
  • 贡献值0点
  • 好评度191点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-05-23 08:52
引用第1楼zhaoyanghong于2008-05-22 14:31发表的  :
判断可能网卡初始化不完全,检查该网卡的初始化过程代码.


恩,同感.

我就遇到过同样的事情,初始化完全后没有收到包,结果就是没有发送启动命令.(window平台上的)
哎..

检查 download firmware 后,是否发送启动命令.
corydon
驱动牛犊
驱动牛犊
  • 注册日期2008-05-11
  • 最后登录2008-06-14
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-05-24 10:35
急问GoodOnline:

谢谢你的回复,你说:“检查 download firmware 后,是否发送启动命令.”

请问 download firmware 是怎么一回事,启动发送命令有该怎样设置?

我的驱动程序是基于pSOS嵌入式操作系统的,现在这种操作系统已经不常用了。在我的驱动程序中,数据发送线程与中断线程相互分开的,它们之间有一定的逻辑联系,接收数据是通过中断服务程序进行的。

我的程序中,发送数据流程是:首先申请发送描述符,将待发送的数据写入发送描述符指定的发送缓存中,然后设置发送轮询寄存器的相应比特位,通知网卡有待发送数据,这样就启动了发送流程。
接收数据流程:当检测到工作频率范围内的信号能量达到有效信号能量阈值时,网卡启动接收,将收到的数据剥去物理帧头,剩下帧体放入接收FIFO中,当接收FIFO中的数据量达到DMA阈值时,将FIFO中的MAC帧通过DMA送入主存的接收缓存中去,然后修改接收描述符,DMA完成后,发起中断,通知主机处理接收到的数据。主机系统响应中断,调用相应的中断服务程序完成数据的解析和处理。(这里所说的主机是我们所用的DSP的CPU)。

以上就是我的无线网卡驱动驱动程序收发数据的大致流程,但是由于我的程序在网卡初始化(包括射频初始化)完成之后,系统立即进入中断服务程序,所显示的异常中断为:“接收描述符不存在”和“接收FIFO溢出”,每次重启之后系统依然不停的发生这两个异常中断,基本很少能够进入数据发送线程,针对这些问题,敬请各位有经要的高手指教
GoodOnline
驱动小牛
驱动小牛
  • 注册日期2007-04-11
  • 最后登录2009-02-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望204点
  • 贡献值0点
  • 好评度191点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-05-26 11:00
有的网卡要upload firemware去设置片上系统,这就是把一块数据(其实就是代码)发送到芯片的ram上,之后还要发送一个命令,让这些代码开始运行,从而完成对片子的设置.
需要什么样的fireware,以及发送什么样命令,完全是由芯片决定.

我的建议是找到你对应芯片的linux下代码,然后比较你的代码和linux代码,这样检查是否有遗漏的地方,特别是初始化部分.

更细致的地方我也不知道了.因为没有你的环境和硬件.
dstboxu
驱动小牛
驱动小牛
  • 注册日期2004-06-28
  • 最后登录2011-02-15
  • 粉丝0
  • 关注0
  • 积分109分
  • 威望976点
  • 贡献值1点
  • 好评度143点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-05-26 13:27
清中断了吗
corydon
驱动牛犊
驱动牛犊
  • 注册日期2008-05-11
  • 最后登录2008-06-14
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-05-26 16:49
谢谢GoodOnline和dstboxu得回复


请问dstboxu,你所说的清中断是什么意思?
dstboxu
驱动小牛
驱动小牛
  • 注册日期2004-06-28
  • 最后登录2011-02-15
  • 粉丝0
  • 关注0
  • 积分109分
  • 威望976点
  • 贡献值1点
  • 好评度143点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-05-27 08:41
清中断,就是进入中断后,芯片的寄存器需要设置以下,或是读或是写寄存器。然后这个中断就不进入了。不然中断函数退出后还进,没完没了,像死锁一样。如果中断优先级高,除了关掉电源什么也做不了。
zhaoyanghong
驱动小牛
驱动小牛
  • 注册日期2004-11-13
  • 最后登录2008-08-05
  • 粉丝0
  • 关注0
  • 积分341分
  • 威望92点
  • 贡献值0点
  • 好评度91点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-05-27 09:29
最好查一下你所使用的网卡的芯片及网卡的数据手册,上面应有详细的使用方法.
taisande11
驱动牛犊
驱动牛犊
  • 注册日期2008-07-12
  • 最后登录2008-07-19
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-07-13 21:50
也建议从初始化代码开始查,对照linux代码!如果硬件没有问题的话!
游客

返回顶部