请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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®6);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!=上下文); }
我所做的哪一步是错误的?