工具/软件:
尊敬的 TI 专家:
SDK:9.2
Linux:9.2
HW:我们自己的电路板
我们 现在使用 timer16 (0x2500000UL)、当前外部晶体振荡器为 19.2m、因此一次节拍时间的计算结果为 1/19200000。我们通过设置 TIMER_TMAR 寄存器的值来实现不同的计时器时钟精度、但实际结果不符合预期
1.软件的第一个版本将该计数值设置为 19200、* 1/19200000=1000US=1ms、而软件将 fsync 周期设置为 33 * 1ms。 在本例中、fsync 脉冲周期约为 33.1ms 或 33.2ms、精度为 1ms;
2.软件的第二个版本将该计数值设置为 1920、* 1/19200000=100us、软件将 fsync 周期设置为 333 * 100us。 在本例中、fsync 脉冲周期为 33.2ms-33.4ms、在 100us 时精度不准确;
3.第三个版本将此计数设置为 192、* 1/19200000=10us、软件将 fsync 周期设置为 3333 * 10us。 在这种情况下、fsync 脉冲周期为几毫秒、误差为毫秒、精度为 10us、该值不准确。
4、最终版本是服务器上当前的版本,不能向下调整精度。 我们改变了方法并向上调整了精确度。 根据原始 1ms 计数值、我们计算得出为 1.11、相当于 19200 * 1.11=21312。 软件已将脉冲周期设置为 30 * 1.11ms=33.3ms。 目前、精度已经过测试、符合其应用的要求;
当前问题是:
1.为什么将 TIMER_TMAR 值设置为 1920 和 21312 会在时钟精度调整为 33.3ms 时产生不同的结果?
2.计时器的最低时钟精度可以是 1ms 吗? 是否有办法提高时钟精度?
3、此外、我们发现、即使 TIMER_TMAR 寄存器值设置为 21312、也可以实现正常的 33.3ms 脉冲周期。 但是、在资源负载较高的某些情况下、这个 33.3ms 周期可能会波动、有时会达到 35ms。 是否有办法将脉冲周期稳定在 33.3ms?
BR。
