Exynos4412裸机开发 —— RTC 实时时钟单元
RTC(Real-Time Clock) 实时时钟。RTC是集成电路,通常称为时钟芯片。在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz 晶体和电阻电容等。
一、RTC 控制器
实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC可以通过STRB/LDRB 指令将8位BCD码数据送至CPU。这些BCD数据包括秒、分、时、日期、星期、月和年。RTC单元通过一个外部的32.768kHz 晶振提供时钟。RTC具有定时报警的功能。
其功能说明如下:
1 -- 时钟数据采用BCD编码。
2 -- 能够对闰年的年月日进行自动处理。
3 -- 具有告警功能,当系统处于关机状态时,能产生警告中断。
4 -- 具有独立的电源输入。
5 -- 提供毫秒级时钟中断,该中断可以用于作为嵌入式操作系统的内核时钟。
二、RTC 控制器寄存器详解
1 、Time Tick Generator
下面是示例程序:
头文件定义:
![](https://code.csdn.net/assets/CODE_ico.png)
- /**********************************RTC independ register********************************/
- #define RTCINTP __REG(0X10070030)
- #define RTCCON __REG(0X10070040)
- #define TICCNT __REG(0X10070044)
- #define CURTICCNT __REG(0X10070090)
- typedef struct {
- unsigned int ALM;
- unsigned int SEC;
- unsigned int MIN;
- unsigned int HOUR;
- unsigned int DAY;
- unsigned int MON;
- unsigned int YEAR;
- }rtclam;
- #define RTCALM (* (volatile rtclam *)0X10070050)
- typedef struct {
- unsigned int BCDSEC;
- unsigned int BCDMIN;
- unsigned int BCDHOUR;
- unsigned int BCDWEEK;
- unsigned int BCDDAY;
- unsigned int BCDMON;
- unsigned int BCDYEAR;
- }rtcbcd;
- #define RTC (* (volatile rtcbcd *)0X10070070)
C程序如下:
![](https://code.csdn.net/assets/CODE_ico.png)
- #include "exynos_4412.h"
- void mydelay_ms(int time)
- {
- int i, j;
- while(time--)
- {
- for (i = 0; i < 5; i++)
- for (j = 0; j < 514; j++);
- }
- }
- //*(volatile unsigned int *)(0x11000c20) = 0;
- /*
- * 裸机代码,不同于LINUX 应用层, 一定加循环控制
- */
- void do_irq(void)
- {
- static int a = 1;
- int irq_num;
- irq_num = CPU0.ICCIAR&0x3ff; //获取中断号
- switch(irq_num)
- {
- case 57:
- printf("in the irq_handler\n");
- EXT_INT41_PEND = EXT_INT41_PEND |((0x1 << 1)); //清GPIO中断标志位
- ICDICPR.ICDICPR1 = ICDICPR.ICDICPR1 | (0x1 << 25); //清GIC中断标志位
- break;
- case 76:
- printf("in the alarm interrupt!\n");
- RTCINTP = RTCINTP | (1 << 1);
- ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 12); //清GIC中断标志位
- break;
- case 77:
- printf("in the tic interrupt!\n");
- RTCINTP = RTCINTP | (1 << 0);
- ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 13); //清GIC中断标志位
- break;
- }
- CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num; //清cpu中断标志位
- }
- void rtc_init(void)
- {
- RTCCON = 1;
- RTC.BCDYEAR = 0x16;
- RTC.BCDMON = 0x2;
- RTC.BCDDAY = 0x25;
- RTC.BCDHOUR = 0x15;
- RTC.BCDMIN = 0x24;
- RTC.BCDSEC = 0x50;
- RTCCON = 0;
- }
- void rtc_tic(void)
- {
- RTCCON = RTCCON & (~(0xf << 4)) | (1 << 8);
- TICCNT = 32768;
- ICDDCR = 1; //使能分配器
- ICDISER.ICDISER2 = ICDISER.ICDISER2 | (0x1 << 13); //使能相应中断到分配器
- ICDIPTR.ICDIPTR19 = ICDIPTR.ICDIPTR19 & (~(0xff << 8))|(0x1 << 8); //选择CPU接口
- CPU0.ICCPMR = 255; //中断屏蔽优先级
- CPU0.ICCICR = 1; //使能中断到CPU
- }
- void rtc_alarm(void)
- {
- RTCALM.ALM = (1 << 6)|(1 << 0);
- RTCALM.SEC = 0x58;
- ICDDCR = 1; //使能分配器
- ICDISER.ICDISER2 = ICDISER.ICDISER2 | (0x1 << 12); //使能相应中断到分配器
- ICDIPTR.ICDIPTR19 = ICDIPTR.ICDIPTR19 & (~(0xff << 0))|(0x1 << 0); //选择CPU接口
- CPU0.ICCPMR = 255; //中断屏蔽优先级
- CPU0.ICCICR = 1; //使能中断到CPU
- }
- int main (void)
- {
- rtc_init();
- rtc_alarm();
- rtc_tic();
- while(1)
- {
- printf("%x %x %x %x %x BCDSEC = %x\n",RTC.BCDYEAR,
- RTC.BCDMON,
- RTC.BCDDAY,
- RTC.BCDHOUR,
- RTC.BCDMIN,RTC.BCDSEC);
- mydelay_ms(1000);
- }
- return 0;
- }
执行结果如下:
![](https://code.csdn.net/assets/CODE_ico.png)
- 16 2 5 15 24 BCDSEC = 50
- in the tic interrupt!
- 16 2 5 15 24 BCDSEC = 51
- in the tic interrupt!
- 16 2 5 15 24 BCDSEC = 52
- in the tic interrupt!
- 16 2 5 15 24 BCDSEC = 53
- 16 2 5 15 24 BCDSEC = 53
- 16 2 5 15 24 BCDSEC = 54
- in the tic interrupt!
- 16 2 5 15 24 BCDSEC = 55
- in the tic interrupt!
- 16 2 5 15 24 BCDSEC = 56
- in the tic interrupt!
- in the alarm interrupt!
- 16 2 5 15 24 BCDSEC = 58
- in the tic interrupt!
- 16 2 5 15 24 BCDSEC = 59
- in the tic interrupt!
- 16 2 5 15 25 BCDSEC = 0
- in the tic interrupt!
- 16 2 5 15 25 BCDSEC = 1
- in the tic interrupt!
- 16 2 5 15 25 BCDSEC = 2
- in the tic interrupt!
- 16 2 5 15 25 BCDSEC = 3
- in the tic interrupt!
- 16 2 5 15 25 BCDSEC = 4
- in the tic interrupt!
- 16 2 5 15 25 BCDSEC = 5
- in the tic interrupt!
Exynos4412裸机开发 —— RTC 实时时钟单元相关推荐
- 【正点原子STM32连载】 第二十七章 RTC实时时钟实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 【正点原子FPGA连载】第三十一章RTC实时时钟数码管显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- 【正点原子FPGA连载】 第二十四章 RTC实时时钟LCD显示实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【正点原子FPGA连载】第三十二章RTC实时时钟LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- Linux驱动开发: Linux下RTC实时时钟驱动
Linux内核版本: 3.5 1.1 Linux下RTC时间的读写分析 1.1.1 系统时间与RTC实时时钟时间 Linux系统下包含两个时间:系统时间和RTC时间. 系统时间:是由主芯片的定时器进行 ...
- 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...
- (实验15)单片机,STM32F4学习笔记,代码讲解【RTC实时时钟实验】【正点原子】【原创】
文章目录 其它文章链接,独家吐血整理 实验现象 主程序 RTC初始化程序 代码讲解 其它文章链接,独家吐血整理 (实验3)单片机,STM32F4学习笔记,代码讲解[按键输入实验][正点原子][原创] ...
- 十九、RTC实时时钟
一..RTC实时时钟工作框图 RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连.此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作.APB1 接口 ...
- STM32——RTC实时时钟原理+BKP寄存器原理
一.RTC实时时钟特征与原理 1.RTC(Real Time Clock):实时时钟 2.RTC是个独立的BCD定时器/计数器.RTC提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性 ...
最新文章
- Python3中None用法
- Java项目:仓库管理系统设计和实现(java+ssm+springboot+layui)
- adaboost算法java_Adaboost 算法实例解析
- 怎么删除顽固的服务器文件夹,实用技巧:删除Windows XP下顽固文件方法
- DeleteDC() 与 ReleaseDC() 的区别 [转]
- 用户态和核心态的转换
- CreateThread、_beginthread与AfxBeginThread的区别及其注意事项
- 宅家办公不宅心,送3本技术好书
- 无法执行任何java命令,报错OutOfMemoryError: Cannot create GC thread. Out of system resources
- PulseAudio VS AudioFlinger(七)
- 同比和环比分别是什么,一分钟告诉你。
- NOI2021 D类打铁记
- 华为RH2288V3服务器硬盘大于2T的处理办法
- java遗传算法编程_遗传算法示例程序
- Deepspeed:让大规模深度学习更快更省资源的神器
- 算法小课堂(十)随机化算法
- 集成友盟的意见反馈功能
- 史上最全的各类奖学金、各种称号、各种职位中英文对照
- RequireJS 教程详解
- 电子设计教程43:流水灯电路-非对称式多谐振荡器
热门文章
- CountDownLatch线程同步辅助
- 转载:ASP.NET在后台代码实现个功能,根据选择提示用户是否继续执行操作
- Direct3D提高篇:HLSL编程实现PhotoShop滤镜效果 - 伪 HDR/Blow
- leetcode1353. 最多可以参加的会议数目(贪心算法)
- JavaScript中的基本表单验证
- 微服务 边界服务_遵循这些实用原则以获取精心设计的微服务边界
- 前馈神经网络中的前馈_前馈神经网络在基于趋势的交易中的有效性(1)
- pandas之groupby分组与pivot_table透视
- 浏览器中插入富文本编辑器
- 技术管理:技术负责人所需的四个核心能力