关于cs8900中断问题

[复制链接]
 楼主| deyeok 发表于 2007-6-14 16:22 | 显示全部楼层 |阅读模式
我用的是s3c2410的cpu,接收帧设置的是接收广播和个人地址,采用的是中断接收,在启动之后第一次中断得到CS8900的ISQ寄存器数据是0x904,然后就不再产生中断了,后来发现在中断服务程序中连续读几次ISQ寄存器只有读到ISQ寄存器数据是0的时候才能产生下次中断,比如读3次ISQ数据依次是0x904,0x4,0,下一次中断就肯定能发生,如果读到的最后一次数据不是0则下一次中断就不能发生。并且ISQ读到的数据有时候连续多个值都不为0。仔细看了下芯片资料,发现ISQ为0的时候表示是无中断服务器的时候的值。这个问题一直不明白是怎么回事,是什么限制了中断的下次发生?有没有碰到过这种情况的?能否讲解一下啊?
阿南 发表于 2007-6-14 19:52 | 显示全部楼层

没有发现过该问题。请问楼主能否正确读出CS8900的ChipID:630e

  
 楼主| deyeok 发表于 2007-6-15 10:25 | 显示全部楼层

可以阿,id读出来是正确的,我怀疑还是初始化有问题.

但是看不出来什么问题,我的初始化:<br />1首先复位,给复位bit位置位.<br />2设置物理接口,选择10BASE-T<br />3设置全双工模式<br />4设置接收帧类型,选择RXOK,IA地址,广播地址3个bit位置1<br />5设置接收中断类型,RXOKiE位<br />6设置发送配置<br />7设置发送中断类型,不产生中断<br />8选择中断管脚位<br />9设置中断使能<br />10设置接收发送使能<br />请给看下流程有没有问题
armecos 发表于 2007-6-15 11:20 | 显示全部楼层

看样子是中断操作引起的问题

&nbsp;&nbsp;&nbsp;&nbsp;你先用查寻方式编程,看是否能正常驱动网络。<br />&nbsp;&nbsp;&nbsp;&nbsp;因为不同CPU的中断处理机制不同,所以没有统一的中断处理程序。你用的中断是电平触发还是边沿触发?需要撤除中断吗?有顺序要求吗?中断在什么位置应答的?中断号是否设置正确?有无引脚复用问题?复用的话,他们之间是什么关系?接口是8bit还是16bit的?16bit时的顺序等等。这些细节都可能影响中断的正常处理。至于你所说的现象,明显是中断多次重入造成的,你调试中断程序就能发现问题。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;www.armecos.com提供的《ecos增值包》里有解决方案,网卡驱动支持基于中断的模式、8bit/16bit接口自由转换、单机/广播/组播,在ecos、VxWorks、u-boot、uClinux下均已成功运行。同时提供万能中断模板,适合各种CPU架构,包括2410。还提供中断调试环境,让您能进入中断调试。尤其特别适合EasyARM2200和SmartARM2200的用户。
飞儿369 发表于 2007-6-16 22:23 | 显示全部楼层

 楼主| deyeok 发表于 2007-6-27 09:11 | 显示全部楼层

现在用查询方式已经可以ping通了

但是中断方式还是没解决,CS8900用的中断方式是电平触发,没办法用边沿触发,具体电平触发应该是如何去做,现在还不是很清楚。我试过在中断服务程序里面开始先屏蔽掉该中断,等处理完成之后再打开仍然只能收到一次。中断服务程序具体步骤是:1屏蔽该中断。2清除中断标志位。3读ISQ寄存器,如果是04寄存器则再判断RXOK位是否置位,如果置位则发出一个信号。4打开该中断,整个中断服务程序完成。
 楼主| deyeok 发表于 2007-6-27 09:12 | 显示全部楼层

有没有哪位大虾有关于CS8900中断方式的驱动给发一份

谢谢了!email:deyeoksu@126.com
armecos 发表于 2007-6-27 17:34 | 显示全部楼层

你的处理步骤正确,

&nbsp;&nbsp;&nbsp;&nbsp;但是你的分析不对,你怎么肯定只收到一次中断呢?证据何在?<br />&nbsp;&nbsp;&nbsp;&nbsp;遇到这种问题不用问别人,直接调试就清楚了。<br />&nbsp;&nbsp;&nbsp;&nbsp;另,《ecos增值包》提供针对8019的调试环境。
 楼主| deyeok 发表于 2007-6-29 09:22 | 显示全部楼层

中断调试

cs8900是高电平触发中断,第一次产生中断去读ISQ,中断管脚就变为低,以后就不再变为高了,只有在读出ISQ为0的时候才能产生下次中断。这可能就是芯片资料里说的中断队列问题吧,就是说一次中断可能有多个中断事件发生,只有在ISQ读到为0时才说明该次中断队列全部处理完成,ISQ不为0,就不会触发下次中断。我理解的是这样,不知道对不对。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

11

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部