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-12unsigned char bcdday;  // 1-31unsigned char bcdhour; // 0-23unsigned char bcdmin;  // 0-59unsigned char bcdsec;  // 0-59unsigned 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识点积累系列(四)Kubernetes篇【持续更新】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 知识点积累 系列文章的第四篇&#xff0c;记录日常学习中遇到的 Kubernetes 相关的知识点 1.Kubernetes琐碎知识点 1.1.为什么要有annotations annotation中除了能够记录一些额外信息&#xff0c;还可以解决k…

[BUUCTF]-PWN:cmcc_pwnme2解析

保护 ida 完整exp&#xff1a; from pwn import* context(log_leveldebug) #premote(node5.buuoj.cn,26964) pprocess(./pwnme2) addhome0x8048644 addflag0x8048682 getfile0x80485CB main0x80486F8 pop_ebp0x8048680 ret0x80483f2 pop_ebx0x8048409 pop_edi_ebp0x804867f st…

常见的网络安全威胁和防护方法

随着数字化转型和新兴技术在各行业广泛应用&#xff0c;网络安全威胁对现代企业的业务运营和生产活动也产生了日益深远的影响。常见的网络安全威胁通常有以下几种&#xff1a; 1. 钓鱼攻击 攻击者伪装成合法的实体&#xff08;如银行、电子邮件提供商、社交媒体平台等&#xf…

超越传统—Clean架构打造现代Android架构指南

超越传统—Clean架构打造现代Android架构指南 1. 引言 在过去几年里&#xff0c;Android应用开发经历了巨大的变革和发展。随着移动设备的普及和用户对应用的期望不断提高&#xff0c;开发人员面临着更多的挑战和需求。传统的Android架构在应对这些挑战和需求时显得有些力不从…

Java技术栈 —— Cookie和Session

在 Web 开发中&#xff0c;Cookie 和 Session 都是用于存储和管理用户状态信息的机制。 Cookie Cookie 是一小段文本数据&#xff0c;由服务器发送到用户的浏览器&#xff0c;并在浏览器中存储。 它包含了一些关于用户的信息&#xff0c;例如用户名、登录状态、购物车内容等。 …

WDM式驱动的基本结构3 - WDM驱动程序的AddDevice例程

AddDevice例程是WDM驱动所独有的&#xff0c;在NT驱动中没有该例程。在DriverEntry中&#xff0c;需要设置AddDevice例程的函数地址。设置的方式是驱动对象中有个 DriverExtension 子域&#xff0c;DriverExtension中有个AddDevice子域&#xff0c;将该子域指向AddDevice例程的…

笔记---中国剩余定理

全程学自y总 AcWing.204.表达整数的奇怪方式 给定 2 n 2n 2n 个整数 a a a1, a a a2,…, a a an 和 m m m1, m m m2,…, m m mn&#xff0c;求一个最小的非负整数 x x x&#xff0c;满足 ∀ i ∈ [ 1 , n ] , x ≡ m ∀i∈[1,n],x≡m ∀i∈[1,n],x≡mi ( m o d a (mod a (…

【大语言模型】大型语言模型的数据收集和预处理

前言 LLM(大型语言模型)是先进的人工智能模型,使用大量文本数据进行广泛的训练。 通过这种培训,他们学习语言结构和模式,并能够执行各种与语言相关的任务,例如摘要、翻译、情感分析等。 由于LLM具有执行以前机器难以完成的自然语言任务的卓越能力,近年来LLM受到了广泛关…

ES客户端接入方式

在 Elasticsearch (ES) 中&#xff0c;有两种常见的客户端接入方式&#xff1a;Transport Client&#xff08;传输客户端&#xff09;和 Node Client&#xff08;节点客户端&#xff09;。这两种客户端都可用于与 Elasticsearch 集群进行通信和执行操作&#xff0c;但它们在连接…

博科交换机常用配置命令

文章目录 1、光纤交换机IP地址查询2、什么是Zone3、创建 zone和cfg 3-1、使用 zonecreate 命令创建 zone 3-2、使用cfgcreate 命令创建cfg 3-3、使用 cfgenable 生效配置文件 3-4、使用cfgsave保存 配置文件 3-5、显示 zone 信息 4、常用后…

Backtrader 文档学习- Broker - Fillers

Backtrader 文档学习- Broker - Fillers 1. 概述 当使用交易量进行订单执行时&#xff0c;backtrader的模拟broker具有默认策略&#xff1a; 忽略交易量 &#xff08;默认策略是broker忽略成交量&#xff09; 基于两个前提条件&#xff1a;在流动性充裕的市场中进行交易&…

深度强化学习(王树森)笔记11

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

HTML5的新特性

目录 一&#xff0c;新增语义化标签 二&#xff0c;新增的多媒体标签 三&#xff0c;新增input表单 四&#xff0c;新增的表单属性 一&#xff0c;新增语义化标签 二&#xff0c;新增的多媒体标签 1&#xff0c;音频&#xff1a;<audio>.。。用MP3 <audio src…

带自执行安装脚本的ROS包的生成

带自执行安装脚本的ROS包的生成 在打包和安装ROS包时, 会有一些固定的配置需要去人为实现, 比如网络配置, 设备树的管理等, 比较麻烦, 不如一次性解决掉, 所以查了相关文档 过程: # 使用bloom-generate rosdebian生成debian文件夹 bloom-generate rosdebian # 进入debian文件…

ICV:signoff_check_drc脚本

更多学习内容请关注「拾陆楼」知识星球 拾陆楼知识星球入口 往期文章链接: ICV:metal fill insertion流程 ICV:metal fill insertion脚本

Windows XP x86 sp3 安装 Python3.4.4

1 下载 Python3.4.4&#xff0c;下载地址&#xff0c;点击红色部分。 Python Release Python 3.4.4 | Python.org 2 一路 Next&#xff0c;将 C:\Python34 和 C:\Python34\Scripts 加入环境变量。 3 python 查看版本&#xff0c;python -m pip list 查看安装的包。 4 其他(打…

【数据结构】链表的一些面试题

简单不先于复杂&#xff0c;而是在复杂之后。 链表面试题 删除链表中等于给定值 val 的所有结点。OJ链接 //1.常规方法struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* cur head, *prev NULL;while(cur){if(cur->val val){//1.头删/…

Python使用分治算法作归并排序

对于分治算法的一个较为常规的应用中&#xff0c;归并排序是一个使用分治算法的排序方式。给定一个随机排序的数组&#xff0c;我们要将其元素按照升序或者降序的方式进行排序&#xff0c;可以设想到这样的一种算法&#xff0c;如果一个数组的上半部分和下半部分已经排好序&…

聚观早报 | 360 AI搜索App上线;岚图汽车与京东达成合作

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月30日消息 360 AI搜索App上线 岚图汽车与京东达成合作 三星电子在硅谷新设实验室 小米平板7系列参数曝光 Spa…

【全csdn最前沿LVGL9】基础对象lv_obj

文章目录 前言一、LVGL9的下载二、基础对象lv_obj2.1 概述2.2 布局2.3 lv_obj的使用创建一个lv_obj设置大小设置位置设置对齐父对象与子对象事件 总结 前言 LVGL&#xff08;LittlevGL&#xff09;是一个开源的嵌入式图形库&#xff0c;用于在嵌入式系统中创建用户界面。LVGL提…