GPIO用作时钟分频 M/N:D解析

818次阅读
没有评论

共计 848 个字符,预计需要花费 3 分钟才能阅读完成。

0. GPIO作为时钟的用途

当我们需要GPIO输出一个特定的时钟波形,或者PWM信号控制时,使用芯片GPIO的硬件时钟功能就很方便,避免了软件控制GPIO带来的不准确性及其他的意外,使我们输出的时钟信号更加稳定、可靠。

1. 如何配置GPIO作为时钟

当我们选择使用GPIO来作为时钟输出,那就有几个问题我们要考虑

  1. 应该选择什么样的GPIO?
  2. 应该如何选择分频的时钟源?
  3. 应该如何配置时钟分频?

1.1 如何选择GPIO

SoC并不是所有的GPIO都是支持作为时钟来输出的,我们在配置前要检查GPIO所支持的功能,查看是否包含了我们需要的时钟输出功能,一般这样的GPIO都比较少一些,要注意挑选。

1.2 应该如何选择分频的时钟源

挑选时钟源要针对我们目标的时钟来挑选,避免相差过大,平台可能会有几个可以挑选的时钟源供选择。尽量选择比较接近的,避免相差过大导致后期计算复杂。

1.3 如何配置分频

配置之前我们要先了解配置的一个公式

M/N:D

这个公式与我们配置息息相关,原始论文链接

https://patents.google.com/patent/KR100742142B1/en

大致解释如下:

当我们需要从一个高频率时钟转化输出一个低频率时钟时,使用一个简单的M/N:D计数器来完成,这个计数器需要的参数如下

M:目标时钟占比

N:源时钟占比

D:预分频

计数器是一个上升边计数器,M / N 计数器计算参考时钟的 N 个上升沿脉冲,然后输出 M 脉冲。比如收到30个源时钟,然后输出一个目标时钟,那N就是30,M就是1。

所以通过以上描述,我们就可以通过配置M/N:D的数值来输出我们需要的频率。

比如,我们源时钟时32KHz,现在我们需要使用这个时钟来输出一个60Hz的时钟,

那就是
((32000 / D)*(M / N)= 60
其中我们要遵循一个原则
M<=N/2 和 M<= D <=(M-N)
那我们就可以计算出一个可选配置
(32000Hz /16) * (1 / 67) = 59.7Hz
M:1 N:67 D:16

通过这样的配置,我们就可以得到一个硬件输出的稳定的60Hz时钟了。

正文完
 
评论(没有评论)
验证码