RTC闹钟的中断处理方法以及程序设计

本文介绍如何在RTC时钟系统中设置闹钟中断,并通过编程实现每分钟的第14秒触发一次中断。通过使能alarm函数并配置RTCALM寄存器,可以指定闹钟发生的时间点。此外,还介绍了中断服务例程isr_rtc_alarm的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rtc时钟系统里还有闹钟发生器,通过程序员自己设置,每隔一段时间就产生中断程序一次。
本章使用的寄存器地址在上一章已经说明过(基地址加偏移量)
RTC时钟的闹钟需要借助中断的方法来完成,中断的使用方面以及相应的函数设置我们在以前的文章中已经详细地说过,这里不再赘述。


//alarm使能函数,使能alarm
void rtc_set_alarm(void)
{
(*((volatile unsigned long *)(RTC_BASE + 0x54))) = num_to_bcd(14);


   //RTCALM有很多使能位,可以使能年月日时分秒等情况
   //bit6是全局使能位 bit1是“分”使能位
   //设置RTCALM的各个位。   
(*((volatile unsigned long *)(RTC_BASE + 0x50))) |= 1<<0;
(*((volatile unsigned long *)(RTC_BASE + 0x50))) |= 1<<6;
}


void isr_rtc_alarm(void)
{
static int a = 0; 
printf("rtc alarm, a = %d...", a++);

(*((volatile unsigned long *)(RTC_BASE + 0x30))) |= (1<<1);


//清除中断处理函数的地址
    VIC0ADDR = 0;
    VIC1ADDR = 0;
    VIC2ADDR = 0;
    VIC3ADDR = 0;
}


int main(void)
{
uart_init();
system_init_exception();
rtc_set_alarm();

intc_setvectaddr(NUM_RTC_ALARM, isr_rtc_alarm);
intc_enable(NUM_RTC_ALARM);

struct rtc_time aa;

while (1)
{
rtc_get_time(&aa);
printf("The time is: %d.",aa.second);

volatile int i, j;
for (i=0; i<10000; i++)
for (j=0; j<1000; j++);
printf("-------");
}
}


这个时间设定的意义是,在每分钟的第14秒产生一次闹钟中断,只借助硬件的话,只能设置一个闹钟,如果想设置多个闹钟,也可以通过软件的方式来设置。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dezeming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值