TMS320C6678DSP SRIO通道和频率设置

基于很多朋友问DSP的SRIO具体通道怎样配置为1X,2X,4X,并且怎样设置相应速率的情况,本文给出几个实际配置例子,大家可以根据相应例子对照自身需求进行修改,基础例程仍旧是我之前在SRIO系列博客中提到的srio_loopback.c。

6678 参考时钟是250M时,怎样将SRIO配置为4X,3.125G

详细参数:

参考时钟:250M

相关寄存器:PRESCALAR_SRV_CLK(0x0291BD30)
描述:通过该寄存器能够设置参考时钟,通过以下CSL API设置,

// Set the LLM Port IP Prescalar Clock to the default value
CSL_SRIO_SetLLMPortIPPrescalar(hSrio, prescalar_Clock);

  
  
  • 1
  • 2

参数prescalar_Clock的计算方法如下,其中[]的意思是取最近的整数

p r e s c a l a r C l o c k = [ r e f c l k ÷ 10 ] p r e s c a l a r C l o c k = [ r e f c l k ÷ 10 ] p r e s c a l a r C l o c k = [ r e f c l k ÷ 10 ] prescalarClock=[refclk÷10]prescalarClock=[refclk÷10] prescalarClock = [refclk÷10] prescalarClock=[refclk÷10]prescalarClock=[refclk÷10]prescalarClock=[refclk÷10]Rate使用以下CSL API配置为2:

// 2指的是LaneC(第3个Lane)
CSL_BootCfgSetSRIOSERDESRxConfig (2, 0x00440495);
CSL_BootCfgSetSRIOSERDESTxConfig (2, 0x00180795);

  
  
  • 1
  • 2
  • 3
通道数(1X 2X or 4X)

相关寄存器:PLM Port(n) Path Control Register (PLM_SP(n)_PATH_CTL) (0x0291B0B0)

该寄存器的PATH_MODE域负责配置1X,2X,4X。下图为不同mode的配置图:
在这里插入图片描述

使用以下CSL API完成通道数配置工作:

//此时配置为Mode0,port2,1x 
CSL_SRIO_SetPLMPortPathControlMode (hSrio, 2, 0);

  
  
  • 1
  • 2

LSU设置

LSU主要设置要发送的包的类型,如Nread,Nwrite,doorbell等,以下以Nread类型举例,说明如何使用LSU发送。

/* LSU结构体的赋值 */
SRIO_LSU_TRANSFER  LsuTransfer_read;
LsuTransfer_read.rapidIOMSB    = 0x0;
LsuTransfer_read.doorbellValid = 0;
LsuTransfer_read.intrRequest   = 1;
LsuTransfer_read.supInt        = 0;
LsuTransfer_read.xambs         = 0;
LsuTransfer_read.priority      = 0;
LsuTransfer_read.outPortID     = 2;// 注意将这个地方设置为2,才能从port2将数据发出
LsuTransfer_read.idSize        = 1;
LsuTransfer_read.srcIDMap      = 0;
LsuTransfer_read.dstID         = 0x0077;// 将要发送的目标device_id
LsuTransfer_read.ttype         = 4;
LsuTransfer_read.ftype         = 2;
LsuTransfer_read.hopCount      = 0;
LsuTransfer_read.doorbellInfo  = 0;

/* 实现LSU传送流程函数 */
void srio_read(unsigned int dsp_addr,unsigned int byte_cnt,unsigned int rpio_addr)
{
unsigned char context;
unsigned char transID;
unsigned char compCode;
unsigned char contextBit;

/* 以下函数中的2都表示LSU2,也可以设置为LSU3,LSU4… */
// Get the LSU Context and Transaction Information.
CSL_SRIO_GetLSUContextTransaction (hSrio, 2, &context, &transID);

LsuTransfer_read.dspAddress = dsp_addr;
LsuTransfer_read.bytecount = byte_cnt;
LsuTransfer_read.rapidIOLSB = rpio_addr;

// Send the transfer on LSU 2
CSL_SRIO_SetLSUTransfer (hSrio, 2, &LsuTransfer_read);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
// Wait around till the transfer is completed.
while (1)
{
    if (CSL_SRIO_IsLSUBusy (hSrio, 2) == FALSE)
        break;
}

// Get the completion code.
CSL_SRIO_GetLSUCompletionCode (hSrio, 2, transID, &compCode, &contextBit);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

关于port 2…

问题来了:既然使用的是LaneC,也就是只有一个port,那么为什么不使用port0,port1,port3,为什么单单使用port2呢。
回答来了:这是规定。请看下图,图中的蓝色数字就是应该使用的port number。
在这里插入图片描述

                                </div>
  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值