程序与技术分享:CDCE913产生任意频率

简介: 程序与技术分享:CDCE913产生任意频率

1,上TI官网下载CDCE913的datasheet和配置软件clock Pro。如果只需要配//代码效果参考:http://www.lyjsj.net.cn/wx/art_24201.html

置CDCE913成某一个固定频率,那么用clock Pro可以很方便快捷。

TI的初衷应该就是通过I2C配置几个频率,然后写入到EEPROM中,不然没有必要设计EEPROM和频率选择PIN(S1,S2)。


该软件产生的配置文件是二进制的csv或者txt文档,导入到Excel中处理成16进制即可。或者直接手动填写,反正也就20来个寄存器。


2,如需要在程序运行过程中动态的配置成不同的频率,那么你需要通过I2C接口配置。CDCE913的器件地址如下:


#define CDCE_ADDRESS 0x65


#define SLAVE_WRITE CDCE_ADDRESS[1


#define SLAVE_READ ((CDCE_ADDRESS[1) | 0x01)


3,了解一下配置原理


可以看到Y1,Y2,Y3都可以从PLL1配置,然后进过M(M1,M2,M3),Pdiv出来。寄存器配置完成后,需要拉高S0,才能使能输出。


4,查看datasheet,配置PLL需要配置以下参数


计算方法如下:


公式略微有点复杂。下面代码以配置Y1输出为例(输入晶振频率为8MHz,平台为STM32,I2C为软件模拟)。


#define CLK_IN 8


void CDCE_Init(uint16_t f_out)


{


uint8_t read_back;


uint8_t i = 1;


AckTypeDef ack;


uint32_t M, N, Pdiv, Q, R;


uint8_t reg18, reg19, reg1A, reg1B;


int P;


uint16_t f_vco = f_out;


bool result = false;


uint8_t f_range;


while (f_vco < 80)


{


i++;


f_vco = f_out i;


}


while (f_vco < 231)


{


for (N = 4095; N > 0; N--)


{


for (M = 511; M > 0; M--)


{


if ((N CLK_IN / M) == f_vco)


//代码效果参考:http://www.lyjsj.net.cn/wz/art_24199.html

{

{


result = true;


break;


}


}


}


if (result)


{


break;


}


}


if (result)


{


break;


}


else


{


i++;


f_vco = f_out i;


}


}


if (!result)


{


UserPrintf("Error:unsupport pclk\n");


return;


}


P = 4 - (int)((log((double)N / (double)M))/log(2));


if (P < 0)


{


P = 0;


}


Q = (int)((double)N pow(2, (double)P) / (double)M);


R = (double)N pow(2, (double)P) - M Q;


if (f_vco < 125)


{


f_range = 0;


}


else if ((f_vco >= 125) && (f_vco < 150))


{


f_range = 1;


}


else if ((f_vco >= 150) && (f_vco < 175))


{


f_range = 2;


}


else


{


f_range = 3;


}


S0 = 0;


ack = CDCE_Read8bit(0x00, 1, &read_back);


if (ack != I2C_ACK)


{


UserPrintf("Error:clk configuration failed , maybe no pullup res\n");


return;


}


if (read_back != CDCE_ID)


{


UserPrintf("Error:clk device ID error\n");


return;


}


Pdiv = f_vco / f_out;


UserPrintf("M:%d,N:%d,Pdiv:%d,f_vco:%d,P:%d,Q:%d,R:%d\n", M, N, Pdiv,f_vco,P,Q, R);


CDCE_WriteByte(0x02, 0xB4);


CDCE_WriteByte(0x03, (uint8_t)Pdiv);


CDCE_WriteByte(0x04, 0x02);


CDCE_WriteByte(0x05, 0x00);


CDCE_WriteByte(0x06, 0x40);


CDCE_WriteByte(0x12, 0x00);


CDCE_WriteByte(0x13, 0x01);


CDCE_WriteByte(0x14, 0x6D);


CDCE_WriteByte(0x15, 0x02);


CDCE_WriteByte(0x16, 0);


CDCE_WriteByte(0x17, 0);


reg18 = (N ] 4) & 0xFFF;


reg19 = (N & 0xf) [ 4 | (R & 0xf0) ] 5;


reg1A = (R & 0x1f) [ 3 | ((Q ] 3) & 0x7);


//代码效果参考:http://www.lyjsj.net.cn/wx/art_24197.html

reg1B = (Q & 0x7) [ 5 | (P & 0x07) [ 2 | (f_range & 0x03);

CDCE_WriteByte(0x18, reg18);


CDCE_WriteByte(0x19, reg19);


CDCE_WriteByte(0x1A, reg1A);


CDCE_WriteByte(0x1B, reg1B);


CDCE_WriteByte(0x1C, N);


CDCE_WriteByte(0x1D, ((N & 0xf) [ 4) | (R & 0xf0));


CDCE_WriteByte(0x1E, (R & 0x0f) | (Q & 0xf0));


CDCE_WriteByte(0x1F, ((Q & 0x07) [ 5) | ((P & 0x07) [ 2) | (f_range & 0x03));


S0 = 1;


UserPrintf("Info:clk well configured\n");


}

相关文章
文本,学习方法,必须做,快的学习方法,统计汇总写法,比如你要构思一个数学库,需要写一个汇总,主动获取标题统计,主动生成文章跳转链接,然后将它打入文章资料当中:
文本,学习方法,必须做,快的学习方法,统计汇总写法,比如你要构思一个数学库,需要写一个汇总,主动获取标题统计,主动生成文章跳转链接,然后将它打入文章资料当中:
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
|
2月前
|
Java
十二时辰与现代时间的互转(精确版)
十二时辰与现代时间的互转(精确版)
35 0
|
2月前
|
算法
算法编程(二十九):统计一致字符串的数目
算法编程(二十九):统计一致字符串的数目
59 0
|
2月前
|
算法 Java API
算法编程(二十四):日期之间隔几天
算法编程(二十四):日期之间隔几天
49 0
|
9月前
|
前端开发 芯片
【芯片前端】“异步FIFO全解析”的BUG——格雷码连续性
【芯片前端】“异步FIFO全解析”的BUG——格雷码连续性
|
存储 监控 Oracle
定位任意时刻性能问题,持续性能分析实践解析
定位任意时刻性能问题,持续性能分析实践解析
定位任意时刻性能问题,持续性能分析实践解析
|
存储 运维 监控
一个开关就让服务网格变快 —— 概述篇
作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月
一个开关就让服务网格变快 —— 概述篇
|
安全 C++
CSDN三道简单题:合并检测、星期一、特别数的和
CSDN三道简单题:合并检测、星期一、特别数的和
115 0
CSDN三道简单题:合并检测、星期一、特别数的和
【数字IC手撕代码】Verilog单bit跨时钟域快到慢,慢到快,(打两拍,边沿同步,脉冲同步)|题目|原理|设计|仿真
【数字IC手撕代码】Verilog单bit跨时钟域快到慢,慢到快,(打两拍,边沿同步,脉冲同步)|题目|原理|设计|仿真
【数字IC手撕代码】Verilog单bit跨时钟域快到慢,慢到快,(打两拍,边沿同步,脉冲同步)|题目|原理|设计|仿真