程序与技术分享: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");


}

相关文章
第二章:LTI连续系统
第二章:LTI连续系统
71 0
|
2月前
|
存储 前端开发 NoSQL
拿下奇怪的前端报错(四):1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点
在一个使用MongoDB GridFS存储文件的项目中,音频和视频文件在大部分设备上播放时长显示为无限,而单独播放则正常。经调查发现,问题源于HTTP Range请求的处理不当,导致最后一个字节未被正确返回。通过调整请求参数,使JavaScript/MongoDB的操作范围与HTTP Range一致,最终解决了这一问题。此案例强调了对HTTP协议深入理解及跨系统集成时注意细节的重要性。
文本,学习方法,必须做,快的学习方法,统计汇总写法,比如你要构思一个数学库,需要写一个汇总,主动获取标题统计,主动生成文章跳转链接,然后将它打入文章资料当中:
文本,学习方法,必须做,快的学习方法,统计汇总写法,比如你要构思一个数学库,需要写一个汇总,主动获取标题统计,主动生成文章跳转链接,然后将它打入文章资料当中:
|
7月前
|
Java
十二时辰与现代时间的互转(精确版)
十二时辰与现代时间的互转(精确版)
133 0
基本时间单位 | 带你读《5G 空口设计与实践进阶 》之十五
为提供精确、一致的时间度量,NR 定义了最小时间单位 Tc。
基本时间单位 | 带你读《5G 空口设计与实践进阶 》之十五
|
安全 C++
CSDN三道简单题:合并检测、星期一、特别数的和
CSDN三道简单题:合并检测、星期一、特别数的和
137 0
CSDN三道简单题:合并检测、星期一、特别数的和
|
前端开发
给大家科普一泛二级程序前端几十套模板随机切换
​ 今天给大家分享几个小旋风蜘蛛池的泛二级程序网站站群模板,是无备案 新域名都可以用 老域名备案域名效果更好, 文章自动配图 关键词自动配图 泛二级程序模板是一款专门为了要从事相关工程方面工作的
130 0
|
存储 芯片
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
468 0
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
|
存储 编译器 Linux
自义定类型详解——十分钟杀穿类型对齐机制
正片开始👀 结构大小👏 我们先随便给出一个结构体,为了计算他的大小,我给出完整的打印方案:
自义定类型详解——十分钟杀穿类型对齐机制
|
vr&ar 开发者
曝苹果MR头戴设备:支持双8K显示,手眼动作全追踪!
曝苹果MR头戴即将发布:支持双8K显示 手眼动作全追踪。
226 0
曝苹果MR头戴设备:支持双8K显示,手眼动作全追踪!

热门文章

最新文章