123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #include "gd32f30x_enet.h"
- #include "hd_eth.h"
- #include "main.h"
- #include "lwip/netif.h"
- #include "lwip/dhcp.h"
- #include "tcpip.h"
- #include "lwip/netif.h"
- volatile uint32_t EthStatus = 0;
- static void enet_gpio_config(void);
- static void enet_mac_dma_config(void);
- static void nvic_configuration(void);
- void eth_link_callback(struct netif *netif);
- /*!
- \brief setup ethernet system(GPIOs, clocks, MAC, DMA, systick)
- \param[in] none
- \param[out] none
- \retval none
- */
- void enet_system_setup(void)
- {
- nvic_configuration();
-
- /* configure the GPIO ports for ethernet pins */
- enet_gpio_config();
-
- /* configure the ethernet MAC/DMA */
- enet_mac_dma_config();
-
- enet_interrupt_enable(ENET_DMA_INT_NIE);
- enet_interrupt_enable(ENET_DMA_INT_RIE);
- }
- /*!
- \brief configures the ethernet interface
- \param[in] none
- \param[out] none
- \retval none
- */
- static void enet_mac_dma_config(void)
- {
- ErrStatus reval_state = ERROR;
-
- /* enable ethernet clock */
- rcu_periph_clock_enable(RCU_ENET);
- rcu_periph_clock_enable(RCU_ENETTX);
- rcu_periph_clock_enable(RCU_ENETRX);
-
- /* reset ethernet on AHB bus */
- enet_deinit();
- reval_state = enet_software_reset();
- if(ERROR == reval_state){
- while(1){
- }
- }
- /* configure the parameters which are usually less cared for enet initialization */
- // enet_initpara_config(HALFDUPLEX_OPTION, ENET_CARRIERSENSE_ENABLE|ENET_RECEIVEOWN_ENABLE|ENET_RETRYTRANSMISSION_DISABLE|ENET_BACKOFFLIMIT_10|ENET_DEFERRALCHECK_DISABLE);
- enet_initpara_config(DMA_OPTION, ENET_FLUSH_RXFRAME_ENABLE|ENET_SECONDFRAME_OPT_ENABLE|ENET_NORMAL_DESCRIPTOR);
- #ifdef CHECKSUM_BY_HARDWARE
- if( enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_BROADCAST_FRAMES_PASS))
- {
- EthStatus = ETH_INIT_FLAG;
- }
- else
- {
- EthStatus = 0;
- }
- #else
- if( enet_init(ENET_AUTO_NEGOTIATION, ENET_NO_AUTOCHECKSUM, ENET_BROADCAST_FRAMES_PASS))EthStatus = ETH_INIT_FLAG;
- esle EthStatus = 0;
- #endif /* CHECKSUM_BY_HARDWARE */
-
- }
- /*!
- \brief configures the nested vectored interrupt controller
- \param[in] none
- \param[out] none
- \retval none
- */
- static void nvic_configuration(void)
- {
- nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x0);
- nvic_irq_enable(ENET_IRQn, 2, 0);
- }
- /*!
- \brief configures the different GPIO ports
- \param[in] none
- \param[out] none
- \retval none
- */
- static void enet_gpio_config(void)
- {
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_GPIOC);
- rcu_periph_clock_enable(RCU_AF);
-
- gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_8);
-
- #ifdef MII_MODE
-
- #ifdef PHY_CLOCK_MCO
- /* output HXTAL clock (25MHz) on CKOUT0 pin(PA8) to clock the PHY */
- rcu_ckout0_config(RCU_CKOUT0SRC_HXTAL);
- #endif /* PHY_CLOCK_MCO */
- gpio_ethernet_phy_select(GPIO_ENET_PHY_MII);
- #elif defined RMII_MODE
- /* choose PLL2 to get 50MHz from 25/5*10 on CKOUT0 pin (PA8) to clock the PHY */
- rcu_pll2_config(RCU_PLL2_MUL10);
- rcu_osci_on(RCU_PLL2_CK);
- rcu_osci_stab_wait(RCU_PLL2_CK);
- rcu_ckout0_config(RCU_CKOUT0SRC_CKPLL2);
- gpio_ethernet_phy_select(GPIO_ENET_PHY_RMII);
- #endif /* MII_MODE */
- #ifdef MII_MODE
- /* PA0: ETH_MII_CRS */
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_0);
- /* PA1: ETH_MII_RX_CLK */
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_1);
- /* PA2: ETH_MDIO */
- gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_2);
- /* PA3: ETH_MII_COL */
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_3);
- /* PA7: ETH_MII_RX_DV */
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_7);
- /* PB0: ETH_MII_RXD2 */
- gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_0);
- /* PB1: ETH_MII_RXD3 */
- gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_1);
- /* PB8: ETH_MII_TXD3 */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_8);
- /* PB10: ETH_MII_RX_ER */
- gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_10);
- /* PB11: ETH_MII_TX_EN */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_11);
- /* PB12: ETH_MII_TXD0 */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_12);
- /* PB13: ETH_MII_TXD1 */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_13);
- /* PC1: ETH_MDC */
- gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_1);
- /* PC2: ETH_MII_TXD2 */
- gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_2);
- /* PC3: ETH_MII_TX_CLK */
- gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_3);
- /* PC4: ETH_MII_RXD0 */
- gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_4);
- /* PC5: ETH_MII_RXD1 */
- gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_5);
-
- #elif defined RMII_MODE
- /* PA1: ETH_RMII_REF_CLK */
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_1);
- /* PA2: ETH_MDIO */
- gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_2);
- /* PA7: ETH_RMII_CRS_DV */
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_7);
-
- /* PB11: ETH_RMII_TX_EN */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_11);
- /* PB12: ETH_RMII_TXD0 */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_12);
- /* PB13: ETH_RMII_TXD1 */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_13);
-
- /* PC1: ETH_MDC */
- gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_MAX, GPIO_PIN_1);
- /* PC4: ETH_RMII_RXD0 */
- gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_4);
- /* PC5: ETH_RMII_RXD1 */
- gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_MAX, GPIO_PIN_5);
- #endif /* MII_MODE */
- }
|