打印
[学习笔记]

寄存器学习之rtc

[复制链接]
856|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
JasonLee27|  楼主 | 2020-10-16 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件环境:AC7801x 通用开发板  ATC-LINK
软件环境:keil 5.23


最近都比较忙,所以先挑了几个简单的模块,AC7801x的RTC模块其实就有由一个预分频器+一个计数器组成,再简单点说,可以理解为两个定时器级联组成,预分频器的计数溢出作为计数器的计数时钟源,同时也可以产生预分频器溢出中断。

RTC相比普通的Timer还有的一个区别就是,RTC可以选择时钟源,可以选择外部晶振,系统时钟,内部32K时钟,或者外部RTCIN的输入时钟。在选择后两者时,RTC模块可以在stop以及standby模式下继续工作,产生的中断可以作为唤醒源唤醒芯片。

我们设置RTC选择内部32K时钟源,预分频器设置31999,这样预分频器便1s产生一次中断,同时设置计数器为5,即5s产生一次中断,在中断中设置两个标志位,main函数中设置LED在1s的flag中翻转,CAN报文在5s flasg中发送。

void RTC_IRQHandler(void)
{
    uint32_t value;
    value = RTC->SC;
    if (value & (1 << 7))    ///<P interrupt
    {
        g_rtc5sFlag = 1;
    }
    if (value & (1 << 17))    ///<P interrupt
    {
        g_rtc1sFlag = 1;
    }
    RTC->SC = value;    ///<clear flag
}

void Rtc_Init(void)
{
    CKGEN->PERI_CLK_EN_0 |= CKGEN_PERI_CLK_EN_0_RTC_EN_Msk;    ///<RTC clock en
    CKGEN->PERI_SFT_RST0 |= CKGEN_PERI_SFT_RST0_SRST_RTC_Msk;
   
    RTC->MOD = 5;       ///<Set 5s triger a interrupt
   
    RTC->PS = 31999;    ///<count 1 per second
   
    RTC->SC = 1 << 16 | 1 << 14 | 1 << 6;  ///<internal 32K RC as clock source , enable interrupt
   
    NVIC_EnableIRQ(RTC_IRQn);
}



rtc.rar (695.5 KB)

使用特权

评论回复

相关帖子

沙发
BettyBerry| | 2020-10-18 21:24 | 只看该作者
谢谢分享 RTC的使用确实会比timer来得更加有效率且方便课读

使用特权

评论回复
板凳
喷水壶| | 2020-10-22 11:12 | 只看该作者
谢谢分享【寄存器学习之rtc】

使用特权

评论回复
地板
向日葵的武士| | 2020-10-27 16:41 | 只看该作者
谢谢楼主分享

使用特权

评论回复
5
ADZ2016| | 2020-10-28 10:13 | 只看该作者
谢谢楼主分享

使用特权

评论回复
6
powermaker2568| | 2020-10-28 10:14 | 只看该作者
学习学习

使用特权

评论回复
7
carefull3357dc| | 2020-10-28 10:19 | 只看该作者
学习学习!感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

415

帖子

10

粉丝