基于很多朋友问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);
参数prescalar_Clock的计算方法如下,其中[]的意思是取最近的整数
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]
所以此处的CSL API应该如下:
CSL_SRIO_SetLLMPortIPPrescalar(hSrio, 0x19);
预分频:223.7 - 447.4MHz
相关寄存器:Peripheral Settings Control Register (RIO_PER_SET_CNTL)(0x02900014)
由于输入时钟为250MHz,根据文档sprugw1b.pdf中的Table3-19,得出预分频设置为223.7-447.4最恰当。使用以下CSL API完成:
CSL_SRIO_SetPrescalarSelect (hSrio, 4);
! 注意:预分频对时钟影响不大,一般都可以将该参数默认设置为0
PLL倍频
相关寄存器:SerDes Macro Configuration Register (SRIO_SERDES_CFGPLL — 0x02620360)
srio波特率(Line Rate)设置遵循以下公式:
s r i o B a u n d = r e f C l k ∗ M P Y ∗ R a t e srioBaund = refClk*MPY*Rate srioBaund=refClk∗MPY∗Rate
其中$srioBaund 为 波 特 率 , 本 工 程 中 为 3.125 G b p s , 为波特率,本工程中为3.125Gbps,