RTC实时时钟之读取时间

1. RTC 基本介绍

RTC(Real Time Clock) 即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电

2. RTC 控制器

2.1 RTC的特点是:

1. RTC中存储的时间信息,都是以BCD码的形式存储的(用四位二进制表示一位十进制) 支持秒、分、小时、星期、星期、月、年。

2支持闰年生成器

3支持告警功能,即告警中断或下电唤醒。下电模式有:空闲、深度空闲、停止、深度停止和休眠。

4支持计时计数器功能,即从下电模式(空闲、深度空闲、停止、深度停止和睡眠)中进行计时中断或唤醒。

5支持独立电源引脚(RTCVDD)

6支持毫秒滴答时定时器中断,支持RTOS工作

2.2 RTC内部工作逻辑

2.3 RTC时钟频率

36.728khz

3. 实验:读取RTC 时间

注意我们的4412芯片RTC是没有独立电源的,所以读取RTC之前需要校验时钟

3.1 寄存器

3.2 配置寄存器

RTCCON RTC控制寄存器

[0]  使能RTC控制    =1 使能  =0 不使能

BCDYEAR 年

注意存储是以BCD吗存储的

[11:8] 百位

[7:4]  十位

[3:0]  个位

 比如2023年  BCD码表示就是  0000 0010 0011  可以看到千位没有,其实千位几乎不用动,我们默认为 2 就行了

 BCDMON 月

[4] 十位  注意这里只用了一bit表示十位的数 因为 01 02 03.....09 10 11 12 可以看到月的十位不是0就是1 所以1 bit足够了

[3:0] 个位

BCDDAY 日

[5:4] 十位 注意十位 只用了2bit 因为 十位上的数 不是 0 1 2 3 所以2bit足够了

[3:0] 个位

红色警告 三星的这个芯片手册把星期和日的这个地址写反了 注意

BCDDAYWEEK 星期

[2:0] 个位  用了3bit   1 2 3 4 5 6 7 3bit足够了

BCDHOUR 小时 

[5:4] 十位  注意 小时取 0 1 2  所以2bit够用了

[3:0] 个位

BCDMIN  分钟

[6:4] 十位  分钟的十位取值  0 1 2 3 4 5   3bit足够了

[3:0] 个位

BCDSEC  秒

[6:4] 十位 秒的十位取值  0 1 2 3 4 5   3bit足够了

[3:0] 个位

3.3 写代码

rtc_test----main.c

#include"exynos_4412.h"
#include"uart.h"
//读取RTC实时时钟

//延时
void delay(unsigned int msec)
{
    unsigned int i,j;
    while(msec --)
    {
        for(i=0;i<5;i++)
            for(j=0;j<512;j++);
    }
}
//初始化RTC
void rtc_init(unsigned int bcdyear,unsigned char bcdmon, 
              unsigned char bcdday,unsigned char bcdhour,
              unsigned char bcdmin,unsigned char bcdsec,
              unsigned char bcdweek){
    //使能RTC控制器
    RTCCON |= 0x1;
    
    //设置年月日,时分秒
    RTC.BCDSEC = bcdsec;
    RTC.BCDMIN = bcdmin;
    RTC.BCDHOUR = bcdhour;

    //注意芯片手册的星期和地址是反的,它写错了,所以我们只好反着写
    RTC.BCDWEEK = bcdday; //设置日
    RTC.BCDDAY = bcdweek;//设置星期

    RTC.BCDMON = bcdmon;
    RTC.BCDYEAR = bcdyear;

    RTCCON &= ~(1);// 关闭RTC控制器使能

}

typedef struct
{  //均是用BCD码表示
    unsigned int bcdyear;  // 3位十进制数有效
    unsigned char bcdmon;  // 1-12
    unsigned char bcdday;  // 1-31
    unsigned char bcdhour; // 0-23
    unsigned char bcdmin;  // 0-59
    unsigned char bcdsec;  // 0-59
    unsigned char bcdweek; // 1-7
}bcd_time_struct;

//读取RTC 时钟
void rtc_get_time(bcd_time_struct *bcd_struct)
{
    if(bcd_struct != (void *)0)
    {
        bcd_struct->bcdyear = RTC.BCDYEAR;
        bcd_struct->bcdmon  = RTC.BCDMON;

        bcd_struct->bcdday = RTC.BCDWEEK;//这里读出来的是日
        
        bcd_struct->bcdhour = RTC.BCDHOUR;
        bcd_struct->bcdmin  = RTC.BCDMIN;
        bcd_struct->bcdsec  = RTC.BCDSEC;

        bcd_struct->bcdweek = RTC.BCDDAY; //这里读出来的是星期
    }
}

int main()
{
    int a = 100;
    uart_init();
    printf("hello!a=%d\r\n",a);

    //初始化RTC时钟
    rtc_init(0x0233,0x12,0x13,0x18,0x34,0x12,0x3);
    bcd_time_struct tm;

    while(1){
        rtc_get_time(&tm);
        //打印实时时钟
        //%03x  保留3位  如果不足三位用0来补充
        printf("time:2%03x/%x/%x,%x:%x:%x,week:%x  \r\n",tm.bcdyear,tm.bcdmon,
               tm.bcdday,tm.bcdhour,tm.bcdmin,tm.bcdsec,tm.bcdweek);
        delay(1000);
    }
    return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/360481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NC248:左叶子之和(C++)

1.题目描述 2.题目分析 我们以一个二叉树为例 左叶子的特点是什么&#xff1f; 是左节点并且没有左右孩子节点 所以我们用leftnode保存root->lefe节点&#xff0c;判断条件为leftnode存在&#xff0c;并且不存在leftnode->left和leftnode->right&#xff0c;如果满…

[力扣 Hot100]Day18 矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 出处 思路 在原数组上直接操作势必会出现“冗余”的0&#xff0c;即原本[i,j]处不是0&#xff0c;例如由于i行的其他位置有0导致[i,j]…

Kali Linux初识

Kali Linux&#xff08;以前称为 BackTrack Linux&#xff09;是一个开源的、基于 Debian 的 Linux 发行版&#xff0c;旨在进行高级渗透测试和安全审计。它通过提供通用工具、配置和自动化来做到这一点&#xff0c;使用户能够专注于需要完成的任务。 包括 600 多种渗透测试工…

LeetCode 使循环数组所有元素相等的最少秒数

地址&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 难度&#xff1a;中等 题目描述&#xff1a;给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒&#xff0c;你可以对数组执行以下操作&#xff1a; 对于范围在 [0, n - 1] 内的每…

【中关村开源生态论坛暨大模型智能应用技术大会】—— 探索AI和开源在未来的应用

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-9ttR7rpX3BzyF2C4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

任务悬赏系统搭建开发定制,任务分销系统

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、任务悬赏系统功能和运营方式 总结 前言 任务悬赏系统就是在小程序内可以做任务赚取佣金&#xff0c;这款系统主要针对手上有达人资源的用户可以冲一下这个项目…

(自用)learnOpenGL学习总结-高级OpenGL-几何着色器

在顶点着色器和片段着色器中间还有一个几何着色器。 几何着色器的输入是一个图元的一组顶点&#xff0c;在几何着色器中进行任意变换之后再给片段着色器&#xff0c;可以变成完全不一样的图元、可以生成更多的顶点。 #version 330 core layout (points) in; layout (line_str…

MySql 慢SQL配置,查询,处理

一.慢SQL配置相关 1.查看慢SQL是否开启 执行下面命令查看是否开启慢SQL show variables like %slow_query_log; 复制代码 OFF: 未开启ON: 2.打开慢SQL配置 执行下面的命令开启慢查询日志 set global slow_query_logON; 复制代码 3.修改慢查询阈值 前面介绍了SQL执行到达了…

Elasticsearch Windows版安装配置

Elasticsearch简介 Elasticsearch是一个开源的搜索文献的引擎&#xff0c;大概含义就是你通过Rest请求告诉它关键字&#xff0c;他给你返回对应的内容&#xff0c;就这么简单。 Elasticsearch封装了Lucene&#xff0c;Lucene是apache软件基金会一个开放源代码的全文检索引擎工…

已解决,引入外部文件,element-plus中的分页组件,当其位置在页面底部时,layout中的sizes(下拉框)始终向下弹出,且显示不完整,期望向上弹出

已解决&#xff1a;由于引入了外部样式&#xff0c;定位的问题导致的 解决办法&#xff1a; .el-select-dropdown {position: initial;margin: 0px;}排查问题的方法&#xff1a; 注释引入的外部文件&#xff0c;逐级排查问题所在&#xff0c;再新的css文件中重写样式&#xff…

第5章 python深度学习——波斯美女

第5章 深度学习用于计算机视觉 本章包括以下内容&#xff1a; 理解卷积神经网络&#xff08;convnet&#xff09; 使用数据增强来降低过拟合 使用预训练的卷积神经网络进行特征提取 微调预训练的卷积神经网络 将卷积神经网络学到的内容及其如何做出分类决策可视化 本章将…

用 CanvasKit 实现超级丝滑的原神地图(已开源)!!!

首先给大家送上预览地址&#xff1a; 官网地址&#xff1a;https://webstatic.mihoyo.com/ys/app/interactive-map/index.html canvaskit地址&#xff1a;http://106.55.55.247/ky-genshin-map/ 为什么 canvaskit 有如此高的性能&#xff1f; 第一个问题&#xff0c;官方网页…

【数据结构 07】AVL树

目录 一、二叉搜索树 二、AVL树 2.1 左单旋 2.2 右单旋 2.3 左右双旋 2.4 右左双旋 三、AVL.h 四、test.cpp 一、二叉搜索树 二叉搜索树&#xff0c;又称二叉排序树&#xff08;Binary Search Tree&#xff09;&#xff0c;相比于普通二叉树&#xff0c;BST的特性有&a…

Python学习--一个逻辑推理的猜数字的游戏

修订Pico Fermi Bagels猜数字游戏代码&#xff0c;仅用于学习Python。 运行界面如下&#xff1a; 修订的代码如下&#xff1a; # // # 提升逻辑思维猜数字小游戏 # BY&#xff1a;Al Sweigart alinventwithpython.com # 翻译&#xff1a;诚外无物 # 说明&#xff1a;一个逻辑…

rust学习基于tokio_actor聊天服务器实战(一 )

前言 tokio是Rust中使用最广泛的异步Runtime&#xff0c;它性能高、功能丰富、便于使用&#xff0c;是使用Rust实现高并发不可不学的一个框架 Actor 背后的基本思想是产生一个独立的任务&#xff0c;该任务独立于程序的其他部分执行某些工作。 通常&#xff0c;这些参与者通过使…

如何使用postman进行接口自动化测试?

1、什么是自动化测试&#xff1f; 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来&#xff0c;本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&a…

TRIZ:打破便携与功能矛盾,卫星通信领域的新曙光!

在当今的卫星通信领域&#xff0c;便携性与功能性的矛盾一直是困扰着研发人员的一大难题。如何在保持设备便携的同时&#xff0c;确保其功能的完善和稳定&#xff0c;成为了业界关注的焦点。而解决这一问题的关键&#xff0c;或许正隐藏在TRIZ这一强大的创新方法论之中。 TRIZ&…

【PyCharm教程】PyCharm 安装、卸载和升级包

PyCharm 为特定的 Python 解释器提供了安装、卸载和升级 Python 包的方法。默认情况下&#xff0c;PyCharm 使用 pip 来管理项目包。对于 Conda 环境&#xff0c;您可以使用conda 包管理器。 在 PyCharm 中&#xff0c;您可以在Python 包工具窗口和 Python 解释器Settings/Pre…

暴雨受邀出席太原市人工智能行业协会年度大会

2024年1月26日&#xff0c;太原市人工智能行业协会第二届二次会员大会暨2024年年会成功召开。太原市委、市工商联、市大数据应用中心、市政协经济委员会以及太原市科技局的专家领导&#xff0c;与三百多名来自各行业的人工智能企业家和协会会员一同参加了本次盛会&#xff0c;共…

(十一)springboot实战——springboot3下关于WebFlux项目的一些常用功能整合

前言 本节内容主要是对webflux项目一些常用功能的介绍&#xff0c;例如系统集成swagger接口文档&#xff0c;方便接口测试以及前后端项目联调测试&#xff1b;使用actuator完成系统各种指标的监控功能&#xff1b;系统使用logback日志框架完成项目日志的收集&#xff1b;使用过…