This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320C6457:TMS320C6457 NDK 不起作用

Guru**** 1455700 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633851/ccs-tms320c6457-tms320c6457-ndk-not-work

器件型号:TMS320C6457

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

 


 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已通知 RTOS 团队。 在平均时间内、请查看常见问题解答 wiki、了解您是否会找到一些有用的信息:
    processors.wiki.ti.com/.../Processor_SDK_RTOS_FAQ

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我修复了。

    MDIO 配置不正确。  

    现在一切都在正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在有另一个问题。

    int consoleThread (socket s、uint32 param)
    {
    #define N 2048
    unsigned char* buf;
    int recbyte;
    unsigned int sockCfg;
    struct timeval sockTo;
    
    
    buf = Memory_alloc (NULL、N、8、NULL);
    
    sockTo.tv_sec = 500;
    sockTo.tv_usec = 0;
    setsockopt (s、SOL_socket、SO_SNDTIMEO、等距、sizeof (sockTo));
    setsockopt (s、SOL_Socket、SO_RCVTIMEO、等距、sizeof (sockTo));
    sockCfg = 1;
    setsockopt (s、IPPROTO_TCP、tcp_NODELAY、等位配置、4);
    sockCfg = 1;
    setsockopt (s、SOL_socket、SO_blocking、等 Cfg、4);
    
    recbyte = recv (s、buf、N、0);
    while (recbyte!= 0)
    {
    recbyte = recv (s、buf、N、0);
    }
    fdClose (s);
    MEMORY_FREE (NULL、buf、N);
    返回0;
    } 

    此任务代码服务器接收到数据。 我从客户端发送第一条消息。 这不会来。 从客户端发送第二条消息。 第一条消息。 断开连接。 接收第二条消息并立即断开连接。  即一个缓冲器的延迟。 Nagle 关闭。  为什么卡在单个缓冲器上?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。 我在计划中犯了一个错误。