ARM之实时时钟——RTC

实时时钟的介绍

实时时钟(Real Time Clock, RTC)可在系统断电时使用备用电池进行工作。即使断电,备用电池也可存储秒、分、小时、周、日、月、年的时间数据。RTC单元外接32.768 kHz晶片,具有报警功能。

实时时钟的实现

首先打开中断,并将他的中断注册,并打开实时时钟

    irq_request_cpu0(RTCTIC_IRQID, do_ticalarm, 0);
    RTCCON |= 1<<8; //enable tic timer
    RTCCON &= ~(0XF<<4);//32.768KHZ
    TICCNT = (32768>>1 -1); //配置响应时间

时间的获取,由于他是bnd码,所以我们想要看懂所以需要转化
二进码十进数(英语bai:Binary-Coded Decimal,简称BCD,大陆称duBCD码或二-十进制zhi编码)是一种十进制的数字编码形式

u16 bcd2bin(u16 n)
{
    return (n&0xf) + ((n>>4)&0xf)*10;
}
u16 bin2bcd(u16 n)
{
    return ((n%10) | ((n/10) <<4));
}

写一个读的函数,一个写的函数

void rtc_gettime(rtctime_t *t)
{
    t->year = bcd2bin(BCDYEAR);
    t->mon = bcd2bin(BCDMON);
    t->mday = bcd2bin(BCDDAY);
    t->hour = bcd2bin(BCDHOUR);
    t->min = bcd2bin(BCDMIN);
    t->sec = bcd2bin(BCDSEC);
    t->wday = bcd2bin(BCDDAYWEEK);
}

void rtc_settime(rtctime_t *t)
{
    RTCCON |= 0X1;//允许写值

    BCDYEAR =  bin2bcd(t->year);
    BCDMON = bin2bcd(t->mon);
    BCDDAY = bin2bcd(t->mday);
    BCDHOUR = bin2bcd(t->hour);
    BCDMIN = bin2bcd(t->min);
    BCDSEC = bin2bcd(t->sec);
    BCDDAYWEEK = bin2bcd(t->wday);

    RTCCON &= ~0X1;//禁止写值
}

在这里插入图片描述

void do_ticalarm(void)
{
    if (INTP & 0X2)
    {
        printf("ALARM INT \n");
    }
    else if (INTP & 0X1)
    {
        rtctime_t t;
        rtc_gettime(&t); 

        printf("\r20%2d--%2d--%2d   %2d:%2d:%2d  weekday:%d\r",
        t.year, t.mon, t.mday, t.hour, t.min, t.sec, t.wday);

        INTP |= 0X1;
    }
       
}

再编写main函数来测试

int main(void)
{

	rtctime_t t = {
		.year = 20,
		.mon = 8,
		.mday = 29,
		.hour = 18,
		.min = 5,
		.sec = 35,
		.wday = 6
	};


	rebuild_vectors_table();

	rtc_tic_irq_init();
	rtc_settime(&t);

	printf("come back to main...\n");

	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值