diff options
| author | [email protected] <[email protected]> | 2011-06-08 16:39:24 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2011-06-08 16:39:24 +0000 |
| commit | d15319c4086579fb404a550f1f564cc55c23589f (patch) | |
| tree | 920c343ecaa7ae98b711a498471ab640dd9bf832 | |
| parent | a967ec707faf085f828701c78bcea3d8b49d153b (diff) | |
fixd dm9000a driver issue
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1470 bbd45198-f89e-11dd-88c7-29a3b14d5316
| -rw-r--r-- | bsp/mini2440/dm9000.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/bsp/mini2440/dm9000.c b/bsp/mini2440/dm9000.c index e5cd6d8621..44c38917c1 100644 --- a/bsp/mini2440/dm9000.c +++ b/bsp/mini2440/dm9000.c @@ -48,8 +48,6 @@ struct rt_dm9000_eth enum DM9000_TYPE type;
enum DM9000_PHY_mode mode;
- rt_uint8_t imr_all;
-
rt_uint8_t packet_cnt; /* packet I or II */
rt_uint16_t queue_packet_len; /* queued packet (packet II) */
@@ -157,13 +155,13 @@ void rt_dm9000_isr(int irqno) eint_pend = EINTPEND;
/* EINT7 for DM9000 */
- if((eint_pend & 0x80) == 0x80)
+ //if((eint_pend & 0x80) == 0x80)
{
last_io = DM9000_IO;
/* Disable all interrupts */
- // dm9000_io_write(DM9000_IMR, IMR_PAR);
+ dm9000_io_write(DM9000_IMR, IMR_PAR);
/* Got DM9000 interrupt status */
int_status = dm9000_io_read(DM9000_ISR); /* Got ISR */
@@ -185,11 +183,6 @@ void rt_dm9000_isr(int irqno) /* Received the coming packet */
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 */
eth_device_ready(&(dm9000_device.parent));
}
@@ -222,7 +215,7 @@ void rt_dm9000_isr(int irqno) }
/* 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;
}
@@ -325,7 +318,8 @@ static rt_err_t rt_dm9000_init(rt_device_t dev) }
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;
}
@@ -446,7 +440,7 @@ rt_err_t rt_dm9000_tx( rt_device_t dev, struct pbuf* p) }
/* 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 */
rt_sem_release(&sem_lock);
@@ -569,8 +563,7 @@ __error_retry: dm9000_io_write(DM9000_ISR, ISR_PTS);
/* restore receive interrupt */
- dm9000_device.imr_all = IMR_PAR | IMR_PTM | IMR_PRM;
- dm9000_io_write(DM9000_IMR, dm9000_device.imr_all);
+ dm9000_io_write(DM9000_IMR, IMR_PAR | IMR_PTM | IMR_PRM);
}
/* unlock DM9000 device */
@@ -614,7 +607,6 @@ void rt_hw_dm9000_init() * SRAM Tx/Rx pointer automatically return to start address,
* Packet Transmitted, Packet Received
*/
- dm9000_device.imr_all = IMR_PAR | IMR_PTM | IMR_PRM;
dm9000_device.dev_addr[0] = 0x01;
dm9000_device.dev_addr[1] = 0x60;
|
