一、初始化Si5341
Si5341芯片有诸多寄存器需要配置,为简化开发流程所以厂商提供了《ClockBuilder Pro》软件帮助快速配置该芯片的各个寄存器。
该软件的使用参见《si5341工具使用方法》。
需要注意的是,si5341虽然有10路输出引脚,但是并不能10路全部都输出不一样的频率,实际上只能输出5路(上图中N0-N4),多路可共用一个N
二、时钟动态可调
参照《si5341工具使用方法》文档即可生成配置si5341芯片各个寄存器的二维数组,通过IIC/SPI配置好以后指定引脚就会输出目标频率。
如果需要动态配置引脚时钟,需要配置0x302-0x337寄存器中对应路的N和M。
算法思路
设置时钟 = 总时钟 /(N * R)
1、输入时钟是25MHz
M=576, 0x12000000000 / 0x80000000
0x12000000000 - 对应寄存器0x0235-0x023A,是M的分母的值
0x80000000 - 对应寄存器0x023B-0x023E,是M的分子的值
2、总时钟 = 输入时钟*M
输入时钟25MHz
M=576(该值由配置软件生成,不同的配置M值不一样)
总时钟=14400MHz = 25MHz * 576
3、R的值由软件
- 对应寄存器0x024A-0x026A,是R的值,R=(R_REG+1)*2
R_REG是0时,则R=2
4、N的值由配置软件生成,N0-N4对应的R可能不一样
N的值 - 对应寄存器0x0302-0x0337(也分为分母寄存器 和 分子寄存器)
目前就是要设置N的值,N的值是一个小数
N = 总时钟 / (设置的时钟 * R)
N=14400MHz/(freq * 2)
N=14400*100000 /(freq * 2 * 100000)
N=分母寄存器的值 / 分子寄存器的值
所以最终只需要更新N0、N1、N2、N3、N4对应的分母和分子寄存器即可
5、还要注意 N div 的使能状态
N div enable - 对应的寄存器0x0A03-0x0A05 0x0B4A
int32 SetLVDSFreq(float freq, uint32 channel)
{
uint32 N0_den, N0_num ,R ,N;
uint32 i;
uint32 reg;
if ((freq > FREQ_MAX ) || (freq < FREQ_MIN))
{
return 1;
}
R = (channel == 1) ? 4 : 2; // R6 R7 = 4
N = (channel == 1) ? SI5341_OUT_N1 :SI5341_OUT_N3;
N0_num = 14040 *100000; //0x0302 - 0307cli
N0_den = (uint32)(freq *R *100000); //0x0308 - 030b
si5341_revd_register_t si5341_output[] =
{
{ 0x0302, (N0_num)&0xff }, //N0_num
{ 0x0303, (N0_num>>8)&0xff },
{ 0x0304, (N0_num>>16)&0xff },
{ 0x0305, (N0_num>>24)&0xff },
{ 0x0306, 0x00 },
{ 0x0307, 0x00 },
{ 0x0308, (N0_den)&0xff }, //N0_den
{ 0x0309, (N0_den>>8)&0xff },
{ 0x030a, (N0_den>>16)&0xff },
{ 0x030b, (N0_den>>24)&0xff },
{ 0x030c, 0x01 }, //update N0
};
for (i = 0; i < sizeof(si5341_output)/sizeof(si5341_revd_register_t); i++)
{
reg = si5341_output[i].address + N * SI5341_OUT_REG_CNT;
usrSi5341I2cWrite(0x1, (reg >> 8)&0xff);
usrSi5341I2cWrite(reg&0xff, si5341_output[i].value);
}
return 0;
}
三、si5341工具使用方法
1、打开si5341工具ClockBuilder Pro
选择open project
2、打开已有的.slabtimeproj
打开之后如下图
3、检查并修改输入时钟
点击input clocks & ZDM
检查并修改输入时钟是和外部晶振一致
4、点击next,切换到输出配置界面
修改输出时钟跟我们需求的一致,之后可以点击next查看时钟配置
如下图示,三个100MHz受N0控制,两个135MHz受N1控制,还有输出时钟的算法公式在右侧
也可点击back和next检查每个页面的配置
5、完成并生成头文件
点击finish
之后回到主界面,点击export
在弹出的界面选择Register File
确保选定c code head file,再点击save to file
输入要保持的文件路径和文件名,点击保存
点击ok
找到保存的路径下的文件