我正在我的atmega 328p上实施计时器。我看了arduino millis函数的实现,我有点困惑,为什么他们使用定时器溢出中断,每1.024 ms执行一次(freg = 16MHz,64预分频),当他们可以使用输出比较匹配中断时可以设置为每1ms触发一次(OCR0A = 249)。使用定时器溢出中断是否有任何优势,并对输出比较匹配中断的计数ms进行一些校正,每隔1ms执行一次?或者他们为什么要使用它?
答案 0 :(得分:1)
计数器值TCNT用于计算超出中断的微秒。使用比较匹配来定义TOP值会产生精确的中断,但是当TCNT复位时,会使更精细的微计算复杂化。对非TOP值使用比较匹配(用于PWM生成)不会产生周期性的1ms中断。
我个人使用第二个定时器来对OCRxA寄存器定义的TOP值进行采样。