| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- /*
- * nim_ethernet.c
- * 配置以太网
- * Created on: 2025年7月25日
- * Author: wulianwei
- */
- #include "nim_config.h"
- #include "hw_emac.h"
- #include "emac.h"
- #include "lwiplib.h"
- #define PINMUX4_MDIO_ENABLE (SYSCFG_PINMUX4_PINMUX4_7_4_MDIO_D << \
- SYSCFG_PINMUX4_PINMUX4_7_4_SHIFT) | \
- (SYSCFG_PINMUX4_PINMUX4_3_0_MDIO_CLK << \
- SYSCFG_PINMUX4_PINMUX4_3_0_SHIFT)
- #define PINMUX2_EMAC_ENABLE (SYSCFG_PINMUX2_PINMUX2_31_28_MII_TXD0 << \
- SYSCFG_PINMUX2_PINMUX2_31_28_SHIFT) | \
- (SYSCFG_PINMUX2_PINMUX2_27_24_MII_TXD1 << \
- SYSCFG_PINMUX2_PINMUX2_27_24_SHIFT) | \
- (SYSCFG_PINMUX2_PINMUX2_23_20_MII_TXD2 << \
- SYSCFG_PINMUX2_PINMUX2_23_20_SHIFT) | \
- (SYSCFG_PINMUX2_PINMUX2_19_16_MII_TXD3 << \
- SYSCFG_PINMUX2_PINMUX2_19_16_SHIFT) | \
- (SYSCFG_PINMUX2_PINMUX2_15_12_MII_COL << \
- SYSCFG_PINMUX2_PINMUX2_15_12_SHIFT) | \
- (SYSCFG_PINMUX2_PINMUX2_11_8_MII_TXCLK << \
- SYSCFG_PINMUX2_PINMUX2_11_8_SHIFT) | \
- (SYSCFG_PINMUX2_PINMUX2_7_4_MII_TXEN << \
- SYSCFG_PINMUX2_PINMUX2_7_4_SHIFT)
- #define PINMUX3_EMAC_ENABLE (SYSCFG_PINMUX3_PINMUX3_31_28_MII_RXD0 << \
- SYSCFG_PINMUX3_PINMUX3_31_28_SHIFT) | \
- (SYSCFG_PINMUX3_PINMUX3_27_24_MII_RXD1 << \
- SYSCFG_PINMUX3_PINMUX3_27_24_SHIFT) | \
- (SYSCFG_PINMUX3_PINMUX3_23_20_MII_RXD2 << \
- SYSCFG_PINMUX3_PINMUX3_23_20_SHIFT) | \
- (SYSCFG_PINMUX3_PINMUX3_19_16_MII_RXD3 << \
- SYSCFG_PINMUX3_PINMUX3_19_16_SHIFT) | \
- (SYSCFG_PINMUX3_PINMUX3_15_12_MII_CRS << \
- SYSCFG_PINMUX3_PINMUX3_15_12_SHIFT) | \
- (SYSCFG_PINMUX3_PINMUX3_11_8_MII_RXER << \
- SYSCFG_PINMUX3_PINMUX3_11_8_SHIFT) | \
- (SYSCFG_PINMUX3_PINMUX3_7_4_MII_RXDV << \
- SYSCFG_PINMUX3_PINMUX3_7_4_SHIFT) | \
- (SYSCFG_PINMUX3_PINMUX3_3_0_MII_RXCLK << \
- SYSCFG_PINMUX3_PINMUX3_3_0_SHIFT)
- static void EMACPinMuxSetup(void);
- static void EMACInterruptInit(void);
- /**
- * 以太网模块初始化
- */
- void EthernetInit()
- {
- PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EMAC, PSC_POWERDOMAIN_ALWAYS_ON,PSC_MDCTL_NEXT_ENABLE);//模块上电
- EMACPinMuxSetup();//配置管脚
- EMACInterruptInit();
- }
- /****************************************************************************/
- /* */
- /* 管脚复用配置,使用MII接口 */
- /* */
- /****************************************************************************/
- static void EMACPinMuxSetup(void)
- {
- unsigned int savePinMux = 0;
- savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) & \
- ~(SYSCFG_PINMUX4_PINMUX4_3_0 | \
- SYSCFG_PINMUX4_PINMUX4_7_4);
- HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = \
- (PINMUX4_MDIO_ENABLE | savePinMux);
- savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(2)) & \
- ~(SYSCFG_PINMUX2_PINMUX2_31_28 | \
- SYSCFG_PINMUX2_PINMUX2_27_24 | \
- SYSCFG_PINMUX2_PINMUX2_23_20 | \
- SYSCFG_PINMUX2_PINMUX2_19_16 | \
- SYSCFG_PINMUX2_PINMUX2_15_12 | \
- SYSCFG_PINMUX2_PINMUX2_11_8 | \
- SYSCFG_PINMUX2_PINMUX2_7_4);
- HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(2)) = \
- (PINMUX2_EMAC_ENABLE | savePinMux);
- savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(3)) & \
- ~(SYSCFG_PINMUX3_PINMUX3_31_28 | \
- SYSCFG_PINMUX3_PINMUX3_27_24 | \
- SYSCFG_PINMUX3_PINMUX3_23_20 | \
- SYSCFG_PINMUX3_PINMUX3_19_16 | \
- SYSCFG_PINMUX3_PINMUX3_15_12 | \
- SYSCFG_PINMUX3_PINMUX3_11_8 | \
- SYSCFG_PINMUX3_PINMUX3_7_4 | \
- SYSCFG_PINMUX3_PINMUX3_3_0);
- HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(3)) = \
- (PINMUX3_EMAC_ENABLE | savePinMux);
- // 使能 MII 模式
- HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_CFGCHIP3) &= ~(SYSCFG_CFGCHIP3_RMII_SEL);
- }
- /****************************************************************************/
- /* */
- /* EMAC中断设置 */
- /* */
- /****************************************************************************/
- /****************************************************************************/
- /* */
- /* EMAC接收中断 */
- /* */
- /****************************************************************************/
- static void EMACCore0RxIsr(void)
- {
- IntEventClear(SYS_INT_EMAC_C0RX);
- lwIPRxIntHandler(0);
- }
- /****************************************************************************/
- /* */
- /* EMAC发送中断 */
- /* */
- /****************************************************************************/
- static void EMACCore0TxIsr(void)
- {
- IntEventClear(SYS_INT_EMAC_C0TX);
- lwIPTxIntHandler(0);
- }
- static void EMACInterruptInit(void)
- {
- // Register the ISR in the Interrupt Vector Table
- IntRegister(C674X_MASK_INT6, EMACCore0RxIsr);
- IntRegister(C674X_MASK_INT7, EMACCore0TxIsr);
- // Map the system interrupt to the DSP maskable interrupt
- IntEventMap(C674X_MASK_INT6, SYS_INT_EMAC_C0RX);
- IntEventMap(C674X_MASK_INT7, SYS_INT_EMAC_C0TX);
- // Enable DSP maskable interrupt
- IntEnable(C674X_MASK_INT6);
- IntEnable(C674X_MASK_INT7);
- }
|