提交 40210245 编写于 作者: wuyangyong's avatar wuyangyong

update lm3s9b9x eth driver

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1750 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 6ab04c67
...@@ -99,7 +99,7 @@ rt_err_t luminaryif_init(rt_device_t dev) ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册