本帖最后由 云帆沧海 于 2014-5-8 10:50 编辑
近来在调试dm9000驱动,使用电脑ping 2440板子,能够接收中断,但是进入中断判断数据包是否接收完成时,总是检测没有完成。(驱动使用的是友善之臂提供的(版本linux2.6.32.2))
#define DM9000_PKT_RDY 0x1
具体出问题的地方如下:
static void
dm9000_rx(struct net_device *dev)
{
board_info_t *db = netdev_priv(dev);
struct dm9000_rxhdr rxhdr;
struct sk_buff *skb;
u8 rxbyte, *rdptr;
bool GoodPacket;
int RxLen;
/* Check packet ready or not */
do {
ior(db, DM9000_MRCMDX); /* Dummy read */
/* Get most updated data */
rxbyte = readb(db->io_data);
/* Status check: this byte must be 0 or 1 */
if (rxbyte & DM9000_PKT_ERR) {
dev_warn(db->dev, "status check fail: %d\n", rxbyte);
iow(db, DM9000_RCR, 0x00); /* Stop Device */
iow(db, DM9000_ISR, IMR_PAR); /* Stop INT request */
printk("%s exit!---%d\n",__func__,__LINE__);
return;
}
printk("rxbyte:0x%x\n",rxbyte);//打印出接收的数据总是0x08或则其他的数据
if (!(rxbyte & DM9000_PKT_RDY))//(在这一步总是检测接收到的数据包没有完成,程序直接跳出)
{
printk("%s exit!---%d\n",__func__,__LINE__);
return;
}
不知道上述出现是什么原因,望大家指点,谢谢
|