update lm3s9b9x eth driver

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1750 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
wuyangyong 2011-10-11 02:13:45 +00:00
parent 6ab04c6746
commit 402102457a
1 changed files with 24 additions and 20 deletions

View File

@ -99,7 +99,7 @@ rt_err_t luminaryif_init(rt_device_t dev)
// //
EthernetIntEnable(ETH_BASE, ETH_INT_RX | ETH_INT_TX); EthernetIntEnable(ETH_BASE, ETH_INT_RX | ETH_INT_TX);
return RT_EOK; return RT_EOK;
} }
void luminaryif_isr(void) void luminaryif_isr(void)
@ -121,7 +121,7 @@ void luminaryif_isr(void)
// Indicate that a packet has been received. // Indicate that a packet has been received.
// //
rt_err_t result; rt_err_t result;
/* a frame has been received */ /* a frame has been received */
result = eth_device_ready((struct eth_device*)&(luminaryif_dev->parent)); result = eth_device_ready((struct eth_device*)&(luminaryif_dev->parent));
@ -137,7 +137,7 @@ void luminaryif_isr(void)
/* A frame has been transmitted. */ /* A frame has been transmitted. */
rt_sem_release(&tx_sem); rt_sem_release(&tx_sem);
} }
} }
/* control the interface */ /* control the interface */
@ -182,7 +182,7 @@ rt_size_t luminaryif_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt
{ {
rt_set_errno(-RT_ENOSYS); rt_set_errno(-RT_ENOSYS);
return 0; return 0;
} }
//**************************************************************************** //****************************************************************************
// //
@ -200,11 +200,11 @@ rt_err_t luminaryif_tx(rt_device_t dev, struct pbuf *p)
int iGather; int iGather;
unsigned long ulGather; unsigned long ulGather;
unsigned char *pucGather; unsigned char *pucGather;
unsigned long ulTemp; unsigned long ulTemp;
/* lock tx operation */ /* lock tx operation */
rt_sem_take(&tx_sem, RT_WAITING_FOREVER); rt_sem_take(&tx_sem, RT_WAITING_FOREVER);
// //
// Wait for space available in the TX FIFO. // Wait for space available in the TX FIFO.
// //
@ -275,7 +275,7 @@ rt_err_t luminaryif_tx(rt_device_t dev, struct pbuf *p)
ulTemp = (pucBuf[iBuf++] << 0); ulTemp = (pucBuf[iBuf++] << 0);
ulTemp |= (pucBuf[iBuf++] << 8); ulTemp |= (pucBuf[iBuf++] << 8);
ulTemp |= (pucBuf[iBuf++] << 16); ulTemp |= (pucBuf[iBuf++] << 16);
ulTemp |= (pucBuf[iBuf++] << 24); ulTemp |= (pucBuf[iBuf++] << 24);
HWREG(ETH_BASE + MAC_O_DATA) = ulTemp; HWREG(ETH_BASE + MAC_O_DATA) = ulTemp;
} }
} }
@ -343,14 +343,14 @@ struct pbuf * luminaryif_rx(rt_device_t dev)
if(!EthernetPacketAvail(ETH_BASE)) if(!EthernetPacketAvail(ETH_BASE))
{ {
// //
// Enable Ethernet RX Interrupt. // Enable Ethernet RX Interrupt.
// //
EthernetIntEnable(ETH_BASE, ETH_INT_RX); EthernetIntEnable(ETH_BASE, ETH_INT_RX);
return(NULL); return(NULL);
} }
// //
// Obtain the size of the packet and put it into the "len" variable. // Obtain the size of the packet and put it into the "len" variable.
// Note: The length returned in the FIFO length position includes the // Note: The length returned in the FIFO length position includes the
@ -424,7 +424,7 @@ struct pbuf * luminaryif_rx(rt_device_t dev)
lwip_stats.link.drop++; lwip_stats.link.drop++;
#endif #endif
} }
return(p); return(p);
} }
@ -437,7 +437,7 @@ int rt_hw_luminaryif_init(void)
SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH); SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
SysCtlPeripheralReset(SYSCTL_PERIPH_ETH); SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
/* /*
Enable Port F for Ethernet LEDs. Enable Port F for Ethernet LEDs.
LED0 Bit 3 Output LED0 Bit 3 Output
LED1 Bit 2 Output LED1 Bit 2 Output
@ -446,6 +446,10 @@ int rt_hw_luminaryif_init(void)
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_HW); GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_HW);
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3,
GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
/* GPIODirModeSet and GPIOPadConfigSet */
GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinConfigure(GPIO_PF2_LED1);
GPIOPinConfigure(GPIO_PF3_LED0);
FlashUserSet(0x12345678, 0x12345678); FlashUserSet(0x12345678, 0x12345678);
/* Configure the hardware MAC address */ /* Configure the hardware MAC address */
@ -464,11 +468,11 @@ int rt_hw_luminaryif_init(void)
luminaryif_dev_entry.parent.parent.control = luminaryif_control; luminaryif_dev_entry.parent.parent.control = luminaryif_control;
luminaryif_dev_entry.parent.eth_rx = luminaryif_rx; luminaryif_dev_entry.parent.eth_rx = luminaryif_rx;
luminaryif_dev_entry.parent.eth_tx = luminaryif_tx; luminaryif_dev_entry.parent.eth_tx = luminaryif_tx;
/* /*
Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC
address needed to program the hardware registers, then program the MAC address needed to program the hardware registers, then program the MAC
address into the Ethernet Controller registers. address into the Ethernet Controller registers.
*/ */
luminaryif_dev_entry.dev_addr[0] = ((ulUser0 >> 0) & 0xff); luminaryif_dev_entry.dev_addr[0] = ((ulUser0 >> 0) & 0xff);
luminaryif_dev_entry.dev_addr[1] = ((ulUser0 >> 8) & 0xff); luminaryif_dev_entry.dev_addr[1] = ((ulUser0 >> 8) & 0xff);
@ -478,12 +482,12 @@ int rt_hw_luminaryif_init(void)
luminaryif_dev_entry.dev_addr[5] = ((ulUser1 >> 16) & 0xff); luminaryif_dev_entry.dev_addr[5] = ((ulUser1 >> 16) & 0xff);
/* Program the hardware with it's MAC address (for filtering). */ /* Program the hardware with it's MAC address (for filtering). */
EthernetMACAddrSet(ETH_BASE, luminaryif_dev_entry.dev_addr); EthernetMACAddrSet(ETH_BASE, luminaryif_dev_entry.dev_addr);
rt_sem_init(&tx_sem, "emac", 1, RT_IPC_FLAG_FIFO); rt_sem_init(&tx_sem, "emac", 1, RT_IPC_FLAG_FIFO);
result = eth_device_init(&(luminaryif_dev->parent), "E0"); result = eth_device_init(&(luminaryif_dev->parent), "E0");
return result; return result;
} }