- refactored network
- fixed gpio_clr() git-svn-id: http://moon:8086/svn/mips@206 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
+67
-54
@@ -5,21 +5,33 @@
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include "libsys.h"
|
||||
#include "fifo.h"
|
||||
#include "emac.h"
|
||||
#include "ethernet.h"
|
||||
#include "arp.h"
|
||||
#include "icmp.h"
|
||||
#include "ipv4.h"
|
||||
#include "udp.h"
|
||||
#include "dhcp.h"
|
||||
#include "gpio.h"
|
||||
#include "mii-bitbang.h"
|
||||
#include "marvell_88e1111.h"
|
||||
|
||||
gpio_if_t gpio;
|
||||
gpio_if_t mii_gpio;
|
||||
#include <libsys/libsys.h>
|
||||
#include <libsys/gpio.h>
|
||||
#include <libsys/irq.h>
|
||||
|
||||
#include <network/ethernet.h>
|
||||
#include <network/emac.h>
|
||||
#include <network/arp.h>
|
||||
#include <network/icmp.h>
|
||||
#include <network/ipv4.h>
|
||||
#include <network/udp.h>
|
||||
#include <network/dhcp.h>
|
||||
#include <network/mii-bitbang.h>
|
||||
#include <network/marvell_88e1111.h>
|
||||
#include <network/fifo.h>
|
||||
|
||||
#include "board.h"
|
||||
|
||||
gpio_if_t gpio_led_data;
|
||||
gpio_if_t gpio_led_dir;
|
||||
|
||||
gpio_if_t gpio_btn_data;
|
||||
gpio_if_t gpio_btn_dir;
|
||||
|
||||
gpio_if_t gpio_mdio_data;
|
||||
|
||||
Mii_t mii;
|
||||
|
||||
#define BUFFER_SIZE (32*1024*1024)
|
||||
|
||||
@@ -40,8 +52,6 @@ typedef struct _srx_descr_t
|
||||
#define PHY_IDO_REG 2
|
||||
#define PHY_ID1_REG 3
|
||||
|
||||
#define NOT_SIM 1
|
||||
|
||||
void Time_print(void)
|
||||
{
|
||||
time_t curr_date;
|
||||
@@ -91,7 +101,7 @@ void handler6(void)
|
||||
}
|
||||
}
|
||||
|
||||
void mii_loopback_enable(gpio_if_t *pObj, uint16_t phy_id, uint32_t speed)
|
||||
void mii_loopback_enable(Mii_t *pMii, uint16_t phy_id, uint32_t speed)
|
||||
{
|
||||
uint16_t val;
|
||||
|
||||
@@ -99,17 +109,17 @@ void mii_loopback_enable(gpio_if_t *pObj, uint16_t phy_id, uint32_t speed)
|
||||
{
|
||||
case MPHY_CONTROL_SPD_SEL_10:
|
||||
val = MPHY_CONTROL_DUPLEX;
|
||||
MiiGpio_PhyWrite(pObj, phy_id, MPHY_CONTROL_REG, val);
|
||||
MiiGpio_PhyWrite(pMii, phy_id, MPHY_CONTROL_REG, val);
|
||||
break;
|
||||
|
||||
case MPHY_CONTROL_SPD_SEL_100:
|
||||
val = MPHY_CONTROL_SPD_SEL_LSB | MPHY_CONTROL_DUPLEX;
|
||||
MiiGpio_PhyWrite(pObj, phy_id, MPHY_CONTROL_REG, val);
|
||||
MiiGpio_PhyWrite(pMii, phy_id, MPHY_CONTROL_REG, val);
|
||||
break;
|
||||
|
||||
case MPHY_CONTROL_SPD_SEL_1000:
|
||||
val = MPHY_CONTROL_SPD_SEL_MSB | MPHY_CONTROL_DUPLEX;
|
||||
MiiGpio_PhyWrite(pObj, phy_id, MPHY_CONTROL_REG, val);
|
||||
MiiGpio_PhyWrite(pMii, phy_id, MPHY_CONTROL_REG, val);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -117,17 +127,17 @@ void mii_loopback_enable(gpio_if_t *pObj, uint16_t phy_id, uint32_t speed)
|
||||
}
|
||||
|
||||
|
||||
val = MiiGpio_PhyRead(&mii_gpio, phy_id, MPHY_CONTROL_REG);
|
||||
val = MiiGpio_PhyRead(pMii, phy_id, MPHY_CONTROL_REG);
|
||||
val |= MPHY_CONTROL_RESET;
|
||||
MiiGpio_PhyWrite(&mii_gpio, phy_id, MPHY_CONTROL_REG, val);
|
||||
MiiGpio_PhyWrite(pMii, phy_id, MPHY_CONTROL_REG, val);
|
||||
|
||||
val = MiiGpio_PhyRead(&mii_gpio, phy_id, MPHY_CONTROL_REG);
|
||||
val = MiiGpio_PhyRead(pMii, phy_id, MPHY_CONTROL_REG);
|
||||
val |= MPHY_CONTROL_LOOPBACK;
|
||||
MiiGpio_PhyWrite(&mii_gpio, phy_id, MPHY_CONTROL_REG, val);
|
||||
MiiGpio_PhyWrite(pMii, phy_id, MPHY_CONTROL_REG, val);
|
||||
|
||||
}
|
||||
|
||||
void Phy_print_regs(gpio_if_t *pObj, uint16_t phy_id)
|
||||
void Phy_print_regs(Mii_t *pMii, uint16_t phy_id)
|
||||
{
|
||||
uint16_t i, j, val;
|
||||
|
||||
@@ -136,7 +146,7 @@ void Phy_print_regs(gpio_if_t *pObj, uint16_t phy_id)
|
||||
{
|
||||
for (j=0; j < 8; j++)
|
||||
{
|
||||
printf("%02X: %04X ", i+j, MiiGpio_PhyRead(&mii_gpio, phy_id, i+j));
|
||||
printf("%02X: %04X ", i+j, MiiGpio_PhyRead(pMii, phy_id, i+j));
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
@@ -211,7 +221,15 @@ int main()
|
||||
|
||||
setbuf(stdout, NULL);
|
||||
|
||||
gpio_init(&gpio, SYS_GPIO_0_BASE);
|
||||
// Init GPIO BTN
|
||||
gpio_init(&gpio_btn_data, SYS_GPIO_0_DATA, GPIO_0_MASK_BTN, GPIO_0_ALIGN_BTN);
|
||||
gpio_init(&gpio_btn_dir, SYS_GPIO_0_DIR, GPIO_0_MASK_BTN, GPIO_0_ALIGN_BTN);
|
||||
gpio_clr(&gpio_btn_dir, GPIO_0_MASK_BTN);
|
||||
|
||||
// Init GPIO LED
|
||||
gpio_init(&gpio_led_data, SYS_GPIO_0_DATA, GPIO_0_MASK_LED, GPIO_0_ALIGN_LED);
|
||||
gpio_init(&gpio_led_dir, SYS_GPIO_0_DIR, GPIO_0_MASK_LED, GPIO_0_ALIGN_LED);
|
||||
gpio_set(&gpio_led_dir, GPIO_0_MASK_LED);
|
||||
|
||||
g_buf_start = (uint32_t*)malloc(BUFFER_SIZE);
|
||||
g_pBuf_end = g_buf_start + BUFFER_SIZE/sizeof(uint32_t);
|
||||
@@ -220,57 +238,52 @@ int main()
|
||||
fifo_alloc(&rx_descr_fifo, sizeof(rx_descr_t)*BUFFER_SIZE/64);
|
||||
|
||||
// LED
|
||||
gpio_write(&gpio, GPIO_0_MASK_LED, GPIO_0_ALIGN_LED, GPIO_DIR_OFFSET, GPIO_0_MASK_LED);
|
||||
gpio_write(&gpio, GPIO_0_MASK_LED, GPIO_0_ALIGN_LED, GPIO_DATA_OFFSET, 0);
|
||||
|
||||
// MDIO
|
||||
gpio_write(&gpio, GPIO_0_MASK_MDIO, GPIO_0_ALIGN_MDIO, GPIO_DIR_OFFSET, GPIO_0_MDIO_RST | GPIO_0_MDIO_MDC);
|
||||
gpio_write(&gpio_led_data, 0);
|
||||
|
||||
// Create PHY interface
|
||||
MiiGpio_Init(&mii);
|
||||
|
||||
// Reset PHY
|
||||
gpio_write(&gpio, GPIO_0_MDIO_RST, GPIO_0_ALIGN_MDIO, GPIO_DATA_OFFSET, 1);
|
||||
#if NOT_SIM
|
||||
sleep(1);
|
||||
gpio_write(&gpio, GPIO_0_MDIO_RST, GPIO_0_ALIGN_MDIO, GPIO_DATA_OFFSET, 0);
|
||||
sleep(100);
|
||||
|
||||
gpio_read(&gpio, ~0, 0, GPIO_DIR_OFFSET, &res);
|
||||
|
||||
MiiGpio_Reset(&mii);
|
||||
|
||||
res = gpio_read(&gpio_led_dir);
|
||||
printf("Dir = %08X\n", res);
|
||||
|
||||
// while(1)
|
||||
{
|
||||
gpio_read(&gpio, GPIO_0_MASK_LED, GPIO_0_ALIGN_LED, GPIO_DATA_OFFSET, &res);
|
||||
res = gpio_read(&gpio_led_data);
|
||||
printf("LED-Data = %08X\n", res);
|
||||
gpio_write(&gpio, GPIO_0_MASK_LED, GPIO_0_ALIGN_LED, GPIO_DATA_OFFSET, res + 1);
|
||||
gpio_read(&gpio, GPIO_0_MASK_BTN, GPIO_0_ALIGN_BTN, GPIO_DATA_OFFSET, &res);
|
||||
gpio_write(&gpio_led_data, res + 1);
|
||||
|
||||
res = gpio_read(&gpio_btn_data);
|
||||
printf("Btn-Data = %08X\n", res);
|
||||
gpio_read(&gpio, GPIO_0_MASK_MDIO, GPIO_0_ALIGN_MDIO, GPIO_DATA_OFFSET, &res);
|
||||
|
||||
res = gpio_read(&gpio_mdio_data);
|
||||
printf("MDIO-Data = %08X\n", res);
|
||||
sleep(100);
|
||||
}
|
||||
#endif
|
||||
|
||||
MiiGpio_Init(&mii_gpio);
|
||||
// Phy_loopback_enable(&mii_gpio, PHY_ADDR, MPHY_CONTROL_SPD_SEL_100);
|
||||
// Phy_loopback_enable(&mii, PHY_ADDR, MPHY_CONTROL_SPD_SEL_100);
|
||||
// printf("Set loopback mode.\n\r");
|
||||
|
||||
/* set 100mbps and reset PHY */
|
||||
phy_reg = 0x3300;
|
||||
MiiGpio_PhyWrite(&mii_gpio, PHY_ADDR, 0, phy_reg | 0x8000);
|
||||
MiiGpio_PhyWrite(&mii, PHY_ADDR, 0, phy_reg | 0x8000);
|
||||
|
||||
/* wait for reset to complete */
|
||||
while (MiiGpio_PhyRead(&mii_gpio, PHY_ADDR, 0) & 0x8000);
|
||||
while (MiiGpio_PhyRead(&mii, PHY_ADDR, 0) & 0x8000);
|
||||
|
||||
/* set auto negotiation */
|
||||
phy_reg = MiiGpio_PhyRead(&mii_gpio, PHY_ADDR, 0);
|
||||
MiiGpio_PhyWrite(&mii_gpio, PHY_ADDR, 0, phy_reg | 0x0200);
|
||||
phy_reg = MiiGpio_PhyRead(&mii, PHY_ADDR, 0);
|
||||
MiiGpio_PhyWrite(&mii, PHY_ADDR, 0, phy_reg | 0x0200);
|
||||
|
||||
/* wait for auto negotiation to complete */
|
||||
while (!(MiiGpio_PhyRead(&mii_gpio, PHY_ADDR, 1) & 0x0024))
|
||||
while (!(MiiGpio_PhyRead(&mii, PHY_ADDR, 1) & 0x0024))
|
||||
{
|
||||
usleep(10000);
|
||||
}
|
||||
|
||||
Phy_print_regs(&mii_gpio, PHY_ADDR);
|
||||
Phy_print_regs(&mii, PHY_ADDR);
|
||||
|
||||
EMAC_RX_reset();
|
||||
EMAC_TX_reset();
|
||||
@@ -335,7 +348,7 @@ int main()
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
gpio_read(&gpio, GPIO_0_MASK_BTN, GPIO_0_ALIGN_BTN, GPIO_DATA_OFFSET, &res);
|
||||
res = gpio_read(&gpio_btn_data);
|
||||
|
||||
if (!res)
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user