mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-02-21 01:07:18 +08:00
fixd dm9000a driver issue
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1470 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
a967ec707f
commit
d15319c408
@ -48,8 +48,6 @@ struct rt_dm9000_eth
|
|||||||
enum DM9000_TYPE type;
|
enum DM9000_TYPE type;
|
||||||
enum DM9000_PHY_mode mode;
|
enum DM9000_PHY_mode mode;
|
||||||
|
|
||||||
rt_uint8_t imr_all;
|
|
||||||
|
|
||||||
rt_uint8_t packet_cnt; /* packet I or II */
|
rt_uint8_t packet_cnt; /* packet I or II */
|
||||||
rt_uint16_t queue_packet_len; /* queued packet (packet II) */
|
rt_uint16_t queue_packet_len; /* queued packet (packet II) */
|
||||||
|
|
||||||
@ -157,13 +155,13 @@ void rt_dm9000_isr(int irqno)
|
|||||||
|
|
||||||
eint_pend = EINTPEND;
|
eint_pend = EINTPEND;
|
||||||
/* EINT7 for DM9000 */
|
/* EINT7 for DM9000 */
|
||||||
if((eint_pend & 0x80) == 0x80)
|
//if((eint_pend & 0x80) == 0x80)
|
||||||
{
|
{
|
||||||
|
|
||||||
last_io = DM9000_IO;
|
last_io = DM9000_IO;
|
||||||
|
|
||||||
/* Disable all interrupts */
|
/* Disable all interrupts */
|
||||||
// dm9000_io_write(DM9000_IMR, IMR_PAR);
|
dm9000_io_write(DM9000_IMR, IMR_PAR);
|
||||||
|
|
||||||
/* Got DM9000 interrupt status */
|
/* Got DM9000 interrupt status */
|
||||||
int_status = dm9000_io_read(DM9000_ISR); /* Got ISR */
|
int_status = dm9000_io_read(DM9000_ISR); /* Got ISR */
|
||||||
@ -185,11 +183,6 @@ void rt_dm9000_isr(int irqno)
|
|||||||
/* Received the coming packet */
|
/* Received the coming packet */
|
||||||
if (int_status & ISR_PRS)
|
if (int_status & ISR_PRS)
|
||||||
{
|
{
|
||||||
/* disable receive interrupt */
|
|
||||||
dm9000_io_write(DM9000_IMR, IMR_PAR);
|
|
||||||
dm9000_device.imr_all = IMR_PAR | IMR_PTM;
|
|
||||||
dm9000_io_write(DM9000_IMR, dm9000_device.imr_all);
|
|
||||||
|
|
||||||
/* a frame has been received */
|
/* a frame has been received */
|
||||||
eth_device_ready(&(dm9000_device.parent));
|
eth_device_ready(&(dm9000_device.parent));
|
||||||
}
|
}
|
||||||
@ -222,7 +215,7 @@ void rt_dm9000_isr(int irqno)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Re-enable interrupt mask */
|
/* Re-enable interrupt mask */
|
||||||
// dm9000_io_write(DM9000_IMR, dm9000_device.imr_all);
|
dm9000_io_write(DM9000_IMR, IMR_PAR | IMR_PTM | IMR_PRM);
|
||||||
|
|
||||||
DM9000_IO = last_io;
|
DM9000_IO = last_io;
|
||||||
}
|
}
|
||||||
@ -325,7 +318,8 @@ static rt_err_t rt_dm9000_init(rt_device_t dev)
|
|||||||
}
|
}
|
||||||
rt_kprintf("mode\n");
|
rt_kprintf("mode\n");
|
||||||
|
|
||||||
dm9000_io_write(DM9000_IMR, dm9000_device.imr_all); /* Enable TX/RX interrupt mask */
|
/* Enable TX/RX interrupt mask */
|
||||||
|
dm9000_io_write(DM9000_IMR,IMR_PAR | IMR_PTM | IMR_PRM);
|
||||||
|
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
@ -446,7 +440,7 @@ rt_err_t rt_dm9000_tx( rt_device_t dev, struct pbuf* p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* enable dm9000a interrupt */
|
/* enable dm9000a interrupt */
|
||||||
dm9000_io_write(DM9000_IMR, dm9000_device.imr_all);
|
dm9000_io_write(DM9000_IMR, IMR_PAR | IMR_PTM | IMR_PRM);
|
||||||
|
|
||||||
/* unlock DM9000 device */
|
/* unlock DM9000 device */
|
||||||
rt_sem_release(&sem_lock);
|
rt_sem_release(&sem_lock);
|
||||||
@ -569,8 +563,7 @@ __error_retry:
|
|||||||
dm9000_io_write(DM9000_ISR, ISR_PTS);
|
dm9000_io_write(DM9000_ISR, ISR_PTS);
|
||||||
|
|
||||||
/* restore receive interrupt */
|
/* restore receive interrupt */
|
||||||
dm9000_device.imr_all = IMR_PAR | IMR_PTM | IMR_PRM;
|
dm9000_io_write(DM9000_IMR, IMR_PAR | IMR_PTM | IMR_PRM);
|
||||||
dm9000_io_write(DM9000_IMR, dm9000_device.imr_all);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* unlock DM9000 device */
|
/* unlock DM9000 device */
|
||||||
@ -614,7 +607,6 @@ void rt_hw_dm9000_init()
|
|||||||
* SRAM Tx/Rx pointer automatically return to start address,
|
* SRAM Tx/Rx pointer automatically return to start address,
|
||||||
* Packet Transmitted, Packet Received
|
* Packet Transmitted, Packet Received
|
||||||
*/
|
*/
|
||||||
dm9000_device.imr_all = IMR_PAR | IMR_PTM | IMR_PRM;
|
|
||||||
|
|
||||||
dm9000_device.dev_addr[0] = 0x01;
|
dm9000_device.dev_addr[0] = 0x01;
|
||||||
dm9000_device.dev_addr[1] = 0x60;
|
dm9000_device.dev_addr[1] = 0x60;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user