1,上TI官网下载CDCE913的datasheet和配置软件clock Pro。如果只需要配置CDCE913成某一个固定频率,那么用clock Pro可以很方便快捷。http://www.ti.com.cn/general/cn/docs/lit/getliterature.tsp?baseLiteratureNumber=scac119&fileType=zip

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)
{
{
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);
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");
}
												

CDCE913产生任意频率的更多相关文章

  1. 基于FPGA的DDS任意波形发生器设计

    一.简介       DDS技术最初是作为频率合成技术提出的,由于其易于控制,相位连续,输出频率稳定度高,分辨率高, 频率转换速度快等优点,现在被广泛应用于任意波形发生器(AWG).基于DDS技术的任 ...

  2. 前端学HTTP之缓存

    前面的话 Web缓存是可以自动保存常见文档副本的HTTP设备.当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档.本文将详细介绍缓存的相关内容 功能 ...

  3. angular js 在ie11 下的get请求缓存问题的解决办法

    使用angularjs 1.x开发的应用在ie11 下回碰到各种怪异的情况:一般表现在:卡,慢,丑. 还有另外一种情况,就是:get请求被缓存,导致页面数据没有刷新.今天我们就来解决这个问题. 几行代 ...

  4. HTTP缓存

    本文是<HTTP权威指南>读书笔记 Web缓存是可以自动保存常见文档副本的设备.当Web请求抵达缓存时,如果本地在“已缓存”的的副本,就可以从本地存储设备而不是原始服务器中提取这个文档.使 ...

  5. AVR/Arduino定时/计数器、中断入门

    在Arduino中,可以使用AnalogWrite来使用硬件产生490Hz/980Hz的pwm波,并可根据参数来设定占空比.不了解这个的同学可以去AnalogWrite学习下,SecretsOfArd ...

  6. 用verilog模拟DDS产生正弦波信号

    前言: DDS:直接数字频率合成,正弦波0-2pi周期内,相位到幅度是一一对应的(这里我们使用放大后的整数幅度). 主要思路: 个人理解,FPGA不擅长直接做数字信号计算,那样太占用片上逻辑资源,所以 ...

  7. LDO稳压器工作原理

    LDO稳压器工作原理 随着便携式设备(电池供电)在过去十年间的快速增长,像原来的业界标准 LM340 和LM317 这样的稳压器件已经无法满足新的需要.这些稳压器使用NPN 达林顿管,在本文中称其为N ...

  8. PCM EQ DRC 音频处理

    PCM Pulse-code modulation的缩写,中文译名是脉冲编码调制.(I2S仅仅是PCM的一个分支,接口定义都是一样的, I2S的采样频率一般为44.1KHZ和48KHZ做,PCM采样频 ...

  9. 详解HTTP缓存

    HTTP缓存是个大公司面试几乎必考的问题,写篇随笔说一下HTTP缓存. 1. HTTP报文首部中有关缓存的字段 在HTTP报文中,与缓存相关的信息都存在首部里,简单说一下首部. 首部 HTTP首部字段 ...

随机推荐

  1. Hibernate 系列 08 - 对象识别机制

    目录导读: Hibernate 系列 学习笔记 目录 本篇目录: 为了区别不同的对象,有两种识别方法: 1. 内存地址识别(“==”号识别) 2. equals()和hashCode()识别 1. 以 ...

  2. nfs挂载配置

    nfs挂载步骤 服务器端 1.安装nfs-utils rpcbind $sudo yum –y install nfs-utils rpcbind 2.文件开放出去配置/etc/exports 例子: ...

  3. Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表

    1 三者的字典表 1.1 用户 select * from dba_users; select * from all_users; select * from user_users; 1.2 角色 s ...

  4. 【MSSQL】MSSQL还原单mdf文件报1813错误

    序: MS SQL Server 2008 r2附加无ldf日志的mdf数据库时报1813错误.提示数据库被强制分离,无日志不能还原之类的话. 可能的原因: 原因系统正在执行定时作业,没有主要到多次强 ...

  5. [笔记]linux磁盘管理

    sudo mount -r /dev/sda3 /mnt/vista 只读挂载 sudo umount sudo umount -r 无法卸载时只读重新挂载 mount -t(指明设备类型) 可用参数 ...

  6. 《饥荒游戏》SW BUG 刷猴子 & 刷淘气值 办法

    简介 该办法利用刷猴子的方式,通过杀猴子获取淘气值,从而刷出坎普斯,继而刷坎普斯背包 物品准备 灭火器x1 箱子x1 逗猴球x1 猴窝xN 帽贝岩x2 避雷针x1 操作步骤 1.灭火器建造在2个帽贝岩 ...

  7. Go语言开发第一个Hello,World

    在网上看到go语言的各种评价,也是闻名已久,但是没有自己实践过,也不知道它的好,它的坏,今天就来试试第一个小程序 第一步.如何下载 1)下载go安装程序 下载地址:https://golang.org ...

  8. [LeetCode] Non-overlapping Intervals 非重叠区间

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  9. 【BZOJ 1061】【Vijos 1825】【NOI 2008】志愿者招募

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://vijos.org/p/1825 直接上姜爷论文... #include< ...

  10. HTML5射击类游戏----【地球保卫战】

    在线DEMO地址:打开: 游戏截图:      就不贴代码了, 因为代码太多了, 大概写一下这个游戏实现思路和一些实现: 游戏一共有三关, 每一关都有一个大Boss, Boss比较好杀,主要各种外星飞 ...