嵌入式学习小组
直播中

乐骞添

7年用户 1008经验值
私信 关注

Timer0_Delay低频LIRC下无法使用怎么解决?

timer0_Delay(38400,1,1000); 定时器零在38.4Khz主频下延时1毫秒,是这样吗?有详细的中文库函数说明吗?

回帖(1)

小黑羊

2024-1-18 16:07:33
如果在低频LIRC下无法使用Timer0_Delay函数,可能是因为LIRC的频率过低,无法提供稳定的时钟信号。解决方法可以尝试使用其他定时器来代替Timer0_Delay函数,或者修改代码使用延时的方式来实现。

关于Timer0_Delay函数的详细说明,可以参考下面的代码:

void Timer0_Delay(uint32_t freq, uint32_t prescaler, uint32_t delay_ms)
{
    uint32_t ticks = freq / (prescaler * 1000);
   
    TCCR0A = 0; //使用CTC 模式
    TCNT0 = 0;
    OCR0A = ticks - 1;
    TIMSK0 = (1 << OCIE0A);

    sei();

    while (delay_ms > 0) {
        delay_ms--;
        _delay_ms(1);
    }

    TIMSK0 = 0;
}

上述代码中,freq代表要使用的主时钟频率,prescaler代表分频系数,delay_ms代表需要延时的毫秒数。在函数内部,首先计算出每个tick需要的时间,然后将Timer0配置成CTC模式,设置计时器中断比较值为需要的ticks数,然后等待需要的毫秒数,最后关闭Timer0中断。

需要注意的是,在使用Timer0_Delay函数的时候,需要先开启中断使能函数sei()。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分