您好!
我们已使用 数据表中的 eq1、eq2在我的器件上提供各种时钟速率(156-170MHz)。 (1) FVCO = FREF x D x [(INT + NUM/DEN)]、(2) OUTDIV = Fvco / Fout。
为了实现特定频率、我们每次都使用 FVCO 的硬编码值并对器件进行编程。您可以在下面找到我用于156.25MHz 频率的示例代码(此处为 fout)
void enable_clock_modes (float freq、index i、bool 状态)
{
/*切换大小写以处理各种频率,在结束时返回成功*/
开关(I)
{
情况0:
float FVCO = 5000.000;
unsigned int outDIV =(int)(FVCO/freq);
浮点分频器= FVCO/REF;
unsigned int INT =(int)分频器;
浮点 REST =分频器- INT;
unsigned int NUM =(int)(REST * 100000);//理想情况下乘法器应为10^5,以获得精确的输出频率/时钟速率*/
unsigned int den = 100000;
// 9位输出分频器、8位来自 R23 (十六进制17)寄存器和1位(Bit0)来自 R22 (十六进制16)寄存器
REG[0x16]=(OUTDIV & 0x100)>> 8;
REG[0x17]=(OUTDIV & 0x0FF);
我们正在消除代码中的硬编码值(FVCO), 这样、客户就可以选择外壳中的任何可用频率来启用特定的时钟频率。为此、我们需要一种替代方法或方法来找到 OUTDIV 值或 FVCO 值、以便能够轻松找到另一个值。 我的假设是在提供输出频率时找到 OUTDIV 值的方法、以便可以计算 FVCO、程序的其余部分将处理时钟速率的提供。 我希望您满足我的要求。
谢谢、Harish