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


}

相关文章
|
存储 数据库 Python
怎么解决字符乱码的问题
怎么解决字符乱码的问题
389 0
|
机器学习/深度学习 算法 计算机视觉
深度学习目标检测系列:一文弄懂YOLO算法|附Python源码
本文是目标检测系列文章——YOLO算法,介绍其基本原理及实现细节,并用python实现,方便读者上手体验目标检测的乐趣。
53364 0
STM32学习笔记(4) 高级定时器-两路互补的PWM输出(带死区和刹车控制)
原理:当捕捉到信号的跳变沿时,将CNT的值所存到捕获寄存器CCR中,然后把两次的值相减,就可以得到脉宽或者频率。
2975 0
|
机器学习/深度学习
神经网络与深度学习---验证集(测试集)准确率高于训练集准确率的原因
本文分析了神经网络中验证集(测试集)准确率高于训练集准确率的四个可能原因,包括数据集大小和分布不均、模型正则化过度、批处理后准确率计算时机不同,以及训练集预处理过度导致分布变化。
|
编解码 开发工具 git
技术心得记录:小波变换(wavelettransform)的通俗解释(一)
技术心得记录:小波变换(wavelettransform)的通俗解释(一)
1036 0
|
数据采集 数据可视化 关系型数据库
基于Python flask MySQL的穷游网酒店数据采集与可视化大屏
本文介绍了一个基于Python Flask和MySQL的穷游网酒店数据采集与可视化大屏项目,该项目实现了酒店数据的采集、存储和前端可视化展示,使用户能够直观了解酒店数据分布和价格趋势。
246 1
|
数据可视化 算法 Python
【数字通信革命】深入剖析Python实现BPSK、QPSK到QAM信号调制的奥秘,解锁高速数据传输的密钥!
【8月更文挑战第2天】在通信系统中,信号调制至关重要,它将信息嵌入载波信号中以便传输。本文通过Python实现三种基本调制技术:BPSK、QPSK和16-QAM,并提供示例代码。首先需安装NumPy、SciPy和Matplotlib库。BPSK是最简单的相位调制,每个符号携带一位信息;QPSK则每个符号携带两位信息,通过四种相位表示;16-QAM结合幅度和相位调制,每个符号携带更多比特信息。本文提供的代码演示了这些调制方式的实现过程,并利用Matplotlib可视化结果。了解这些调制技术有助于深入探索信号处理领域。
716 18
|
数据处理 C# UED
42.c#:progressbar控件
42.c#:progressbar控件
330 1