Post Go back to editing

AD9361中RFPLL时钟设置

在noOS例程中,设定RFPLL时钟频率时,调用函数

int32_t ad9361_rfpll_int_set_rate(struct refclk_scale *clk_priv, uint32_t rate,uint32_t parent_rate)

在这个函数中,计算分频系数前,调用了一个函数ad9361_from_clk()

这个函数是把频率扩大成2倍,这是个什么原因啊?

Parents
  • AD9361 的实际本振频率由 RFPLL VCO 经过内部 LO Divider 分频后得到,因此在计算 PLL 的整数分频值和小数分频值之前,驱动需要先将用户设置的 LO 频率转换到对应的 VCO 工作频率域。

    ad9361_from_clk() 的作用实际上是完成时钟树节点之间的频率换算,将用户配置的 LO 频率映射到 RFPLL 内部用于计算的频率。例如,当内部时钟树存在 RFPLL → RFPLL/2 → LO 的关系时,驱动在进行 PLL 参数计算时需要恢复到上一级时钟节点的频率,因此会看到频率乘以 2 的处理。

    因此,这里的 ×2 操作属于驱动内部时钟树和 PLL 配置过程的一部分,用于计算正确的 RFPLL 参数,并不代表最终输出频率会变为用户设定值的两倍。最终输出的 LO 频率仍然是用户配置的目标频率。

    ...

Reply
  • AD9361 的实际本振频率由 RFPLL VCO 经过内部 LO Divider 分频后得到,因此在计算 PLL 的整数分频值和小数分频值之前,驱动需要先将用户设置的 LO 频率转换到对应的 VCO 工作频率域。

    ad9361_from_clk() 的作用实际上是完成时钟树节点之间的频率换算,将用户配置的 LO 频率映射到 RFPLL 内部用于计算的频率。例如,当内部时钟树存在 RFPLL → RFPLL/2 → LO 的关系时,驱动在进行 PLL 参数计算时需要恢复到上一级时钟节点的频率,因此会看到频率乘以 2 的处理。

    因此,这里的 ×2 操作属于驱动内部时钟树和 PLL 配置过程的一部分,用于计算正确的 RFPLL 参数,并不代表最终输出频率会变为用户设定值的两倍。最终输出的 LO 频率仍然是用户配置的目标频率。

    ...

Children
No Data