我们经常需要在我们的时钟框架中找到分频器值,它们产生与目标速率最接近的时钟速率,即ABS(target_rate - input_rate / best_div)
应该是最小的。我们仅限于整数运算,并使用以下公式:
int best_div, input_rate, target_rate;
best_div = (input_rate + target_rate / 2) / target_rate;
我们可以放心地假设input_rate >= target_rate
,input_rate > 0
和target_rate > 0
。
然而,有一些数字,公式"失败",例如input_rate = 12152131, target_rate = 441992
。对于这些数字,公式将返回best_div = 27
,而28
会导致费率接近441992
。
这导致两个问题:
input_rate / target_rate
和input_rate / target_rate + 1
的结果频率,并选择更好的分频器,但更优选的是更简单的直接公式。