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/TMS320C6678:如何将6678#39的 SRIO 配置为1x 模式,而此1x 端口使用 LaneC?

Guru**** 2581345 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/632389/ccs-tms320c6678-how-to-configure-6678-s-srio-as-1x-mode-and-this-1x-port-uses-lanec

器件型号:TMS320C6678

工具/软件:Code Composer Studio

更多详细信息:

出于某种设计原因、我只能使用全部四个通道(LaneA、LaneB、LaneC、laned)的 LaneC 和 Lane D。

问题详细信息:


我想将6678的 SRIO 配置为1x 模式、此1x 端口使用 LaneC。如下图:

以及我对 DEVICE_SRIO_LOOPM.c (路径:C:\ti\pdk_C6678_1_2_6\packages/ti\drv\SRIO\device_SRIO_LOOPM.c)的更改

如下所示:

//将端口2设置为正常模式
CSL_SRIO_SetNormalMode (hSrio、2);

//配置 cfgPLL 和 Rx&TX
CSL_BootCfgSetSRIOSERDESConfigPLL (0x229);
CSL_BootCfgSetSRIOSERDESRxConfig (2、0x00440495);
CSL_BootCESD95 (0x00xSRESD95);

// TLM 端口基本路由配置

CSL_SRIO_SetTLMPortBaseRoutingInfo (hSrio、2、1、1、1、1、 0);
CSL_SRIO_SetLMPortBaseRoutingInfo (hSrio、2、1、 1、0);
CSL_SRIO_SetLMPortBaseRoutingInfo (hSrio、2、3、 1、1、0);
CSL_SRIO_SetLMPortBaseRoutingInfo (hSrio、3、 0、1、1、0);

CSL_SRIO_SetLMPortBaseRoutingPatternMatch (hSrio、 2、1、DEVICE_ID2_16BIT、0xFFFF);
CSL_SRIO_SetTLMPortBaseRoutingPatternMatch (hSrio、 2、2、DEVICE_ID3_16BIT、0xFFFF);
CSL_SRIO_SetTLMPortBaseRoutingPatternMatch (hSrio、 2、3、DEVICE_ID4_16BIT、0xFFFF);
CSL_SRIO_SetTLMPortBaseRoutingPatternMatch (hSrio、 3、0、DEVICE_ID2_8BIT、0xFF);

//设置 PLM 端口静音计时器。 //
CSL_SRIO_SetPLMPortSilenceTimer (hSrio、2、0x2);

//* TODO:我们需要确保端口0配置为同时支持
* 2x 和4x 模式。 端口宽度字段为只读。 因此、我们只
需*确保输入和输出端口已启用。 //
CSL_SRIO_EnableInputPort (hSrio、2);
CSL_SRIO_EnableOutputPort (hSrio、2);

//设置 PLM 端口发现计时器。 //
CSL_SRIO_SetPLMPortDiscoveryTimer (hSrio、2、0x2);

//重置端口写入接收捕获。 //
CSL_SRIO_SetPortWriteRecepCapture (hSrio、2、0x0);

//将路径模式配置为模式0
CSL_SRIO_SetPLMPortPathControlMode (hSrio、2、0);

//检查端口状态
while (CSL_SRIO_IsPortOk (hSrio、2、true);//检查端口状态 while (CSL_SRIO_IsPortOk) 

在上述所有这些之后、我可以看到端口2正常、但如果我使用函数 bow 对 FPGA 进行读取或写入(nread、NWRITE)、将会出现这种情况
什么也不会发生。



读取函数:
// LSUtransfer 结构
lsuTransfer0.rapidIOMSB = 0x0;
lsuTransfer0.DoorbellValid = 0;
lsuTransfer0.intrRequest = 1;//0b1-命令
lsuTransfer0.supInt 完成后请求中断 = 0;// n0o 中断将在良好完成以及
lsuTransfer0.xambs 时生成 = 0;
lsuTransfer0.priority = 0;
lsuTransfer0.outPortID = 0;
lsuTransfer0.idSize = 1;
lsuTransfer0.srcIDMap = 0;//0b0000 j 使用 RIO_DEVICEID_REG0寄存器
lsuTransfer0.dstID 的内容 = 0x0077;
lsuTransfer0.ttype = 4;
lsuTransfer0.ftype = 2;
lsuTransfer0.hopCount = 0;
lsuTransfer0.DoorbellInfo = 0;

//使用 LSU2进行发送
void SRIO_read (unsigned int dsp_addr、unsigned int byte_cnt、unsigned int rpio_addr)
{
int print = 0;
unsigned char 上下文;
无符号字符 transID;
unsigned charcount;
unsigned charcompCode = 1;
unsigned charcontextBit = 0;
unsigned intlsu2_reg6;
//CSL_SRIO_GetLSUShadowRegs (hSrio、0、&count);//փսShadowRegsքcount、Ȼ۳ҢûԐŃ4ԃС CSL_SRIO_GetLhadowRegs
(hSrio、SUSHONO、 2、&count);
do{
lsus2_reg6=*(volatile unsigned int*) 0x02900D50;//lSU2_REG6、在datasheet里是LSU3 _REG6
while ((lsu2_reg6 & 0xC0000000)!= 0);
//CSL_SRIO_GetLSUextTransaction (hSrio、S&REG6);getrio、S&SID、GetContro、L0 (LCL_SRID);getRIO、&RIO)
上下文、&truID);
lsuTransfer0.dspAddress = DSP_addr;
lsuTransfer0.bytecount = byte_cnt;
lsuTransfer0.rapidIOLSB = rpio_addr;
CSL_SRIO_SetLSUTransfer (hSrio、2、&lsulTransfer0);
执行
{
CSL_SRIO_GetLSUComppleCode (hSrio、2、transID、&compCode、&contextBit);
}while (compCode!=0 && contextBit!=上下文);
} 



我所做的哪一步是错误的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将对此进行研究。 反馈将发布在此处。

    您能否分享您使用的 CCS 版本?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan、您好!
    感谢您的信赖。
    我的 CCS 版本:5.5.0.00077
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉我弄错了。
    最后、我确保问题出现在 LSUTransfer 结构分配中。
    "lsuTransfer0.outPortID" = 0;"这句话应该是:
    "lsuTransfer0.outPortID" = 2;"、因为我选择 LaneC 作为传输端口。

    -------- 来自一个愚蠢的家伙