[PIC®/AVR®/dsPIC®产品]ATMEGA4809的RTC定时器使用方法

ATmega4809 的 RTC(实时时钟)模块是其外设的一部分,专为实现低功耗时间管理设计。RTC 模块可以用于计时、事件管理和闹钟功能,特别适合需要时间跟踪的嵌入式应用。
RTC 模块具有以下特点
1.独立时钟源
RTC 可以使用内部或外部时钟源,与主系统时钟无关。
支持以下时钟源:
内部 32.768 kHz 振荡器(OSCULP32K,超低功耗)。
外部 32.768 kHz 晶振(通过 XOSC32K 接口连接)。
系统时钟的 1.024 kHz 分频信号。

2.低功耗
RTC 模块在低功耗模式(例如 Standby 模式)下仍然可以正常工作。
适合电池供电的长时间运行应用。

3.灵活的时间单位
支持秒、分钟、小时等时间单位。
可配置为周期性中断(如每秒中断一次)。

4.事件系统支持
支持与其他外设通过事件系统交互,无需 CPU 参与。例如,RTC 事件可以触发 ADC 采样或计数器操作。

5.报警和溢出中断
支持定时触发的报警功能,用于唤醒系统或执行特定任务。
可配置溢出中断,用于周期性任务或计时器功能。

6.Counter 模式
RTC 以计数器形式运行,可进行简单的时间累计。


RTC定时器可以精确的提供用于钟表计时的周期信号
该芯片也具备内部的RTC时钟模块,可以用来实现精确的低速计时器功能
本贴将演示如何使用内部的低速时钟为RTC提供时钟源,设置为0.5s的定时溢出中断,在中断里翻转LED的IO,实现LED的1Hz周期的闪烁。
 


注意配置RTC计时器周期有2个选项,第一个是比较器的,第二个是周期的,这里使能的溢出中断对应的是周期信号的,所以是第二个
若配置如下为0.1s周期,则执行LED切换电平的频率为5Hz.
 


#include "mcc_generated_files/system/system.h"
#include"mcc_generated_files/timer/delay.h"
/*
    Main application
*/
void rtc_handler(void)
{
    YELLOW_LED_Toggle();
}
int main(void)
{
    SYSTEM_Initialize();
    RTC_SetOVFIsrCallback(rtc_handler);
    Enable_global_interrupt();

    while(1)
    {
        if(SW_GetValue())
        {            
//            DELAY_milliseconds(500);
        }
        else
        {
            YELLOW_LED_SetHigh();
        }
    }   
}
接下来讲解Periodic Interrupt Timer使用方法
 


配置如上所示,使能,设置计数周期,使能周期中断。
然后代码这么写
void rtc_handler(void)
{
    YELLOW_LED_Toggle();
}
int main(void)
{
    SYSTEM_Initialize();
   
    Enable_global_interrupt();
    RTC_SetPITIsrCallback(rtc_handler);   

    while(1)
    {
        if(SW_GetValue())
        {            
        }
        else
        {
            YELLOW_LED_SetHigh();
        }
    }   
}即可让PIT中断生效。

那么问题来了,我使用比较器中断,为何没发生中断呢?
MCC中显示应该有3种中断的,为何只有2种生效呢?

在官方的存档中也只展示了其中两种,那么Compare Match Interrupt Enable存在吗?
该如何使用,这是个问题。

请注意,比较是要发生在溢出中断前才可以生效,这个是至关重要的。
因此设置的比较中断时间要发生在溢出中断之前。
另外比较中断的执行周期是跟PERIOD计数器周期是一致的。

例如,该设置在250ms时候发生了比较器中断,执行比较器中断函数,而下次执行的时候要等到计数器溢出后,重新再计时到250ms时候才发生第二次。

 

评论

作者: gaoyang9992006 时间:2025-1-18 08:24
@21小跑堂 :已将后面几层楼的内容合并进来,字数够了。 
作者: 21小跑堂 时间:2025-1-16 17:27
未达原创文章字数不予审核~~ 

作者: gaoyang9992006    时间: 2025-1-11 16:56
那么问题来了,我使用比较器中断,为何没发生中断呢?
MCC中显示应该有3种中断的,为何只有2种生效呢?
 


在官方的存档中也只展示了其中两种,那么[size=13.008px]Compare Match Interrupt Enable存在吗?
[size=13.008px]该如何使用,这是个问题。
 

评论

作者: 21小跑堂 时间:2025-1-20 16:53
RTC时钟特点描述,以及在ATMEGA4809中如何实现RTC的计时和中断响应 
作者: gaoyang9992006 时间:2025-1-13 16:10
该问题已在地板揭晓,RTC的比较器中断要发生在周期溢出中断之前,所以这里不能配置的超过周期中断时间。 

作者: 598330983    时间: 2025-1-12 17:56
难道一个定时器可以实现两个不同的中断?坐等最后一个比较中断如何实现


作者: gaoyang9992006    时间: 2025-1-13 16:06
续集:昨天留下了一个问题,为什么比较器中断没生效?
请注意,比较是要发生在溢出中断前才可以生效,这个是至关重要的。
因此设置的比较中断时间要发生在溢出中断之前。
另外比较中断的执行周期是跟PERIOD计数器周期是一致的。
 


例如,该设置在250ms时候发生了比较器中断,执行比较器中断函数,而下次执行的时候要等到计数器溢出后,重新再计时到250ms时候才发生第二次。
---------------------
作者:gaoyang9992006
链接:https://bbs.21ic.com/icview-3426958-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值