TMS320C6678:多核DSP间SRIO门铃收发问题

项目场景:

       应用于两个多核DSP进行SRIO通信,其中一块DSP向另一个DSP发送DOORBELL进行SRIO传输通知


问题描述:

        一块DSP的核0向另一块DSP的核7发送数据和门铃中断,对方能够成功接收数据,但收不到门铃。

        门铃发送函数代码如下:

//Send SRIO DoorBell packet
Int32 Keystone_SRIO_DoorBell(Uint32 uiPort, Uint32 uiLSU_No,
	Uint32 uiDestID, Uint32 uiDoorBellInfo)
{
	SRIO_LSU_Transfer lsuTransfer;
    lsuTransfer.rioAddressMSB=0;
    lsuTransfer.rioAddressLSB_ConfigOffset= 0;
    lsuTransfer.localDspAddress= 0;
    lsuTransfer.bytecount= 4; 	
    lsuTransfer.packetType= SRIO_PKT_TYPE_DOORBELL;
    lsuTransfer.dstID= uiDestID;
    lsuTransfer.doorbellInfo= uiDoorBellInfo;
    lsuTransfer.waitLsuReady= 1;
    lsuTransfer.lsuNum= uiLSU_No;
    lsuTransfer.doorbellValid = 1;
    lsuTransfer.intrRequest = 0;
    lsuTransfer.supGoodInt = 0;
    lsuTransfer.priority = 0;
    lsuTransfer.outPortID = uiPort;
    lsuTransfer.idSize = 0;
    lsuTransfer.srcIDMap = 0;
    lsuTransfer.hopCount = 0;

	Keystone_SRIO_LSU_transfer(&lsuTransfer);

	return Keystone_SRIO_wait_LSU_completion(uiLSU_No,
		lsuTransfer.transactionID, lsuTransfer.contextBit);

}


原因分析:

     SRIO数据能够正常进行传输,那我们着重分析门铃无法接收到的问题。结合TMS320C6678手册中Table7-38,可以看到:SRIO的中断映射应该对应INTDST(n+16),即:核0对应INTDST16,核7对应INTDST23。

 

解决方案:

①检查将SRIO放在核7的DSP的配置。在其SRIO_Interrupts_Init():

核0对应16,核1对应17…,核7对应23

故应将INTDAT_16修改为INTDAT_17。

②发送方DSP应将门铃发送函数Keystone_SRIO_DoorBell(0,0,8,0)修改为(0,7,8,0)。

③关于Keystone_SRIO_DoorBell函数的分析

Keystone_SRIO_DoorBell(Uint32 uiPort, Uint32 uiLSU_No, Uint32 uiDestID, Uint32 uiDoorBellInfo)有四个参数:

      uiPort(端口)、uiLSU_No(寄存器号)、uiDestID(目的ID)、uiDoorBellInfo(门铃信息)

A.这里的目的ID由交换机的路由表决定,此例中的目的ID为8;

B.当存在多个DSP同时给同一个DSP发送门铃中断时,利用不同的uiDoorBellInfo帮助接收中断的DSP分辨门铃中断来自哪一个DSP芯片。以我使用的门铃信息为例:

发送(0,7,8,0),接收端(doorbell&1)==1;

发送(0,7,8,1),接收端(doorbell&2)==1;

发送(0,7,8,2),接收端(doorbell&4)==1;

接收端门铃信息判别的具体实现代码如下:

 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xilinx SRIO(SerDes和寄存器输入/输出)是一种高性能、低延迟的串行高速通信接口技术,用于在片外设备之传输数据。SRIO主要用于高性能计算、数据中心、通信和嵌入式系统中。 SRIO提供了高达10 Gbps的吞吐量,可以在多个设备之进行快速、可靠的数据传输。它使用串行连接,可以在长距离范围内传输数据,并且具有很低的延迟。这种低延迟非常关键,特别是对于需要高速数据传输的应用程序。 Xilinx SRIO的一大特点是其可扩展性。它可以支持多个数据通道,并且可以通过添加更多的串行链接来增加总带宽。这使得SRIO非常适合在需要高带宽和低延迟的应用中使用,例如通信系统、雷达系统、高性能计算等。 此外,SRIO还支持热插拔、错误检测和纠正等功能,以实现可靠的数据传输。它还具有灵活的延时均衡和时钟管理功能,可以适应不同的系统配置和需求。 在使用Xilinx SRIO时,我们可以使用Xilinx提供的IP核或现有的软硬件设计工具集成SRIO功能。这使得在FPGA和SoC中实现SRIO变得更加简单和高效。 总之,Xilinx SRIO是一种高性能、低延迟、可扩展的串行高速通信接口技术,广泛应用于高性能计算、数据中心、通信和嵌入式系统中。它提供了快速、可靠的数据传输,并具有热插拔、错误检测和纠正等功能,适用于需要高带宽和低延迟的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值