工具/软件: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;
}