Si5341时钟芯片使用说明

一、初始化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
在这里插入图片描述
找到保存的路径下的文件
在这里插入图片描述

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值