工具/软件:Code Composer Studio
我使用我们自己设计的电路板。 NDK 的问题。 板已初始化、但数据不会发送。 计算机上的 TCP 客户端未连接。
我认为中断不起作用。
软:
Code Composer Studio 7.3
BIOS_6_42_03_35
MCSDK 1.0.0.8 (CSL)
NDK_2_23_02_03
xdctools_3_32_02_25
编译器 7.4.18
日志初始化
从 EFUSE 读取的 MAC 地址:3C-2D-B7-D9-35-8e
EFUSED MAC 地址= 3c-2D-B7-D9-35-8e
SGMII 重置成功。。
SGMII 配置成功。。
SerDes 应该正常运行...
EMAC 已成功启动
EMAC 注册成功
网络已添加:if-1 192.168.2.133
代码 HwPtOpen
UINT HwPtOpen( PDINFO *PI ) { uint32. i、j、stat; PBM_Handle hPKT; EMAC_Config ecfg; EMAC_AddrConfig * addrCfg; SGMII_Config SgmiiCfg; 无符号短 tmp; pPDI = PI; /*初始化 EMAC 设置*/ mmZeroInit(&RxQueue,sizeof (PKT_queue)); mmZeroInit(&TxQueue,sizeof (PKT_Queue))); mmZeroInit(&ecfg,sizeof (EMAC_Config)); ecfg.EMACCommonConfig.UseMidio = 1; ecfg.EMACCommonConfig.CoreNum = 0; ecfg.EMACCommonConfig.MdioPhyAddr = 0; ecfg.EMACCommonConfig.PktMTU = 1514; ecfg.EMACCoreConfig.NumOfMacAddrs = 2; //我们使用两个通道,所以让我们配置两个 MAC 地址*/ ecfg.EMACCoreConfig.DescBase = EMAC_DESC_BASE_L2;//EMAC_DESC_BASE_CPPI; PktMTU = ecfg.EMACCommonConfig.pktMTU; /*排队等待一些已初始化的接收缓冲区*/ for (i=0;i ChannelNum = 0; if (j =1) addrCfg->ChannelNum = 1; if (j ==2) addrCfg->Channelfg = 2; if (j =3) addrCfg->ChannelNum = 3; if (j =4) addrCfg->Channelfg = 5;if (channelNum =4) if (j ==6) addrCfg->ChannelNum =6; if (j ==7) addrCfg->ChannelNum =7; for (i=0;i<6;i++) { addrCfg->Addr[i]= j * 0x10 + I; } addrCfg = ecfg.EMACCoreConfig.macaddr[0]; /*检查 EMAC_getconfig 是否返回了要使用的有效 MAC 地址。 如果不是、 *使用上面生成的默认值。 * for (i=0;(i<6)&&(!(bMacAddr[i]));i++); if (i==6) { /*将 MAC 地址复制到 PDI 结构中*/ mmCopy ((void *)&pPDI->bMacAddr[0]、(void *)&addrCfg->Addr[0]、6); PutMes ("由于 EFUSE MAC 地址为零、我们使用 MAC 地址=%02x-%02x"、 pPDI->bMacAddr[0]、pPDI->bMacAddr[1]); PutMes ("由于 EFUSE MAC 地址为零、我们使用 MAC 地址=%02x-%02x"、 pPDI->bMacAddr[2]、pPDI->bMacAddr[3]); PutMes ("由于 EFUSE MAC 地址为零、我们使用 MAC 地址=%02x-%02x"、 pPDI->bMacAddr[4]、pPDI->bMacAddr[5]); } 其他 { mmCopy (((void *)&addrCfg->Addr[0]、(void *)&bMacAddr[0]、6); //将 MAC 地址复制到 PDI 结构中*/ mmCopy ((void *)&pPDI->bMacAddr[0]、(void *)&addrCfg->Addr[0]、 PutMes ("EFUSED MAC 地址=%02x-%02x"、 pPDI->bMacAddr[0]、pPDI->bMacAddr[1]); PutMes ("EFUSED MAC 地址=%02x-%02x"、 pPDI->bMacAddr[2]、pPDI->bMacAddr[3]); PutMes ("EFUSED MAC 地址=%02x-%02x"、 pPDI->bMacAddr[4]、pPDI->bMacAddr[5]); } hEMAC =(句柄)&EMCObj; memset (&EMACCore、0、sizeof (EMAC_Core)); memset (&EMACObj、0、sizeof (EMAC_Device)); I = EMAC_OPEN (0、(句柄) 0x12345678、&ecfg、hEMAC、&EMACCore); if (i) { PutMes ("EMAC open return error %d"、I、0); CSL_errors++; return i; } interrupt_init(); ((EMAC_Device *) hEMAC)->MdioDev.phyAddr = 0; ((EMAC_Device *) hEMAC)->MdioDev.regId = 0; (((EMAC_Device *) hEMAC)->MdioDev.ModeFlags = MDIO_MODEFLG_AutoNeg | MDIO_MODEFLG_SPECPHYADDR; hMDIO =(&((EMAC_Device *) hEMAC)->MdioDev); /*等待链接出现*/ PI->TxFree = 0; I = SGMII_RESET (); 如果(i =0) PutMes (“SGMII 重置成功…… "、0、0); 其他 { CSL_ERROS++; PutMes (“SGMII 重置不成功… "、0、0); } /*设置 SGMII 锁定模式*/ *(volatile UINT32 *)(CSL_ECTL_0_regs + 0x88)= 1; sgmiiCfg.masterEn = 0x1; //禁用 SGMII 主设备 sgmiiCfg.loopbackEn = 0x0; //禁用 SGMII 环回 SgmiiCfg.txConfig = 0x00000a21;//启用 TX sgmiiCfg.rxConfig = 0x00081021;//启用 Rx //设置125MHz 参考时钟 SgmiiCfg.auxConfig = 0x0000000B;//启用 PLL SgmiiCfg.modeOfOperation = SGMII_MODE_OF_OPERAING_OF_AN;//自动协商打开 I = SGMII_CONFIG (&SgmiiCfg); if (i ==0) PutMes (“SGMII 配置成功…… "、0、0); 其他 { CSL_ERROS++; PutMes (“SGMII 配置不成功… "、0、0); 返回 i; } /*等待 SGMII 锁定*/ 操作 { STAT = SGMII_regs->STATUS; STAT = stat & 0x10; } while (stat!= 0x10); /*等待链接出现*/ 操作 { STAT = SGMII_regs->STATUS; STAT = stat & 0x5; } while (stat!= 0x5); PutMes ("SerDes 应该已启动并正在运行..."、0、0); /*返回成功*/ 返回0; }