是否可以在dspic30f4011中使用timer5获得24小时定时器中断?

kb5ga3dv  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(98)

我试图触发报警后24小时使用dspic30f4011的timer5使用1:256作为预缩放。
使用计时器的最大值(0xFFFF)我尝试迭代计数器125和250,对于这个值它工作,但如果我输入250之后的任何值,我的计时器似乎卡住了,它不触发警报。

5rgfhyps

5rgfhyps1#

正如我在前面的评论中提到的,我们想要一个MRE。
但是,24小时对于间隔计时器来说是一个很长的时间。因此,我不认为这可以完全通过定时器硬件来完成,因为定时器比较寄存器[AFAICT]限制为16位。即使在一个中断/秒的情况下,这也是86400(0x 15180)个中断,超过16位
我们将不得不在S/W [用一个“滴答”计数器]中这样做。大多数系统都是这样做的。
这里有一个例子。它假设每毫秒调用一次计时器ISR [调整以适应]:

#define TICKS_PER_SECOND    1000LL

uint64_t tick_count = 0;                // monotonic tick counter
uint64_t tick_interval = TICKS_PER_SECOND * 24 * 60 * 60; // ticks for 1 day
uint64_t tick_fire = tick_interval;     // time of next callback

void
timer_ISR(void)
{

    // advance tick counter
    tick_count += 1;

    // have we hit the required interval?
    if (tick_count >= tick_fire) {
        // advance to next interval
        tick_fire = tick_count + tick_interval;

        // NOTE: doing that first allows the callback function to adjust the
        // firing time of the next event

        // called once every 24 hours ...
        timer_24_hours();
    }
}

相关问题