裸机——RTC
1. 首先晓得RTC的基本知识
RTC被划分到timer,但RTC是面向时间点的。
如果按照定时器的思路去思考,那么应该考虑 时间周期 和 计数值。
RTC 不是面向时间点的,所以略有不同,
时间周期,RTC通过自己独立的晶振提供,并且晶振的频率都为 32.768KHZ
计数值,RTC的计数值不是用来定时,而是用来计时,RTC记录 年 月 日 时 分 秒 星期。(其中年是有一个基准值,如2000)
此外,RTC一般有独立的电池,保证掉电后继续计时。
整理下思路:
我们知道对于timer,我们需要设置时间周期和计数值,
但是对于RTC,时间周期已经设置好了,所以只需要考虑计数值。
2.对RTC计数值的设置
在数据手册可以找到这张图
可以看出
RTC计数值分为 年 月 日 时 分 秒 星期,每个都是用独立的寄存器保存。
所以对RTC计数值的设置就是通过 Control Register 设置那几个寄存器。
此外还需要知道 RTC 的时间使用 BCD 码表示,所以涉及 十进制和BCD码的转换
BCD码就是对数字编码,使用类似字符串的方式表示数字,如 0x56 的BCD码意义是 56.
转换方式:
static unsigned int num_2_bcd(unsigned int num) { )<<) | (num % )); } static unsigned int bcd_2_num(unsigned int bcd) { )* + (bcd & (0x0f))); }
有了思路后,开始完成 读写RTC 时间的实验
#define RTC_BASE (0xE2800000) #define rINTP (*((volatile unsigned long *)(RTC_BASE + 0x30))) #define rRTCCON (*((volatile unsigned long *)(RTC_BASE + 0x40))) #define rTICCNT (*((volatile unsigned long *)(RTC_BASE + 0x44))) #define rRTCALM (*((volatile unsigned long *)(RTC_BASE + 0x50))) #define rALMSEC (*((volatile unsigned long *)(RTC_BASE + 0x54))) #define rALMMIN (*((volatile unsigned long *)(RTC_BASE + 0x58))) #define rALMHOUR (*((volatile unsigned long *)(RTC_BASE + 0x5c))) #define rALMDATE (*((volatile unsigned long *)(RTC_BASE + 0x60))) #define rALMMON (*((volatile unsigned long *)(RTC_BASE + 0x64))) #define rALMYEAR (*((volatile unsigned long *)(RTC_BASE + 0x68))) #define rRTCRST (*((volatile unsigned long *)(RTC_BASE + 0x6c))) #define rBCDSEC (*((volatile unsigned long *)(RTC_BASE + 0x70))) #define rBCDMIN (*((volatile unsigned long *)(RTC_BASE + 0x74))) #define rBCDHOUR (*((volatile unsigned long *)(RTC_BASE + 0x78))) #define rBCDDATE (*((volatile unsigned long *)(RTC_BASE + 0x7c))) #define rBCDDAY (*((volatile unsigned long *)(RTC_BASE + 0x80))) #define rBCDMON (*((volatile unsigned long *)(RTC_BASE + 0x84))) #define rBCDYEAR (*((volatile unsigned long *)(RTC_BASE + 0x88))) #define rCURTICCNT (*((volatile unsigned long *)(RTC_BASE + 0x90))) #define rRTCLVD (*((volatile unsigned long *)(RTC_BASE + 0x94))) typedef struct rtc_time{ unsigned int year; unsigned int mon; unsigned int day; unsigned int hour; unsigned int min; unsigned int sec; unsigned int date; }rtc_time; static unsigned int num_2_bcd(unsigned int num) { ) << ) | (num % ); } static unsigned int bcd_2_num(unsigned int bcd) { ) * ) + (bcd & 0x0f); } void rtc_set_time(rtc_time t) { // 开启RTC设置 rRTCCON |= << ; rBCDSEC = num_2_bcd(t.sec); rBCDMIN = num_2_bcd(t.min); rBCDHOUR = num_2_bcd(t.hour); rBCDDAY = num_2_bcd(t.day); rBCDDATE = num_2_bcd(t.date); rBCDMON = num_2_bcd(t.mon); rBCDYEAR = num_2_bcd(t.year); // 关闭RTC设置 rRTCCON &= ~( << ); } void rtc_get_time(rtc_time *t) { // 开启RTC设置 rRTCCON |= << ; t->sec = bcd_2_num(rBCDSEC); t->min = bcd_2_num(rBCDMIN); t->hour = bcd_2_num(rBCDHOUR); t->day = bcd_2_num(rBCDDAY); t->date = bcd_2_num(rBCDDATE); t->mon = bcd_2_num(rBCDMON); t->year = bcd_2_num(rBCDYEAR); // 关闭RTC设置 rRTCCON &= ~( << ); }
从下面这张图中,还可以看出,RTC带有闹钟功能,能产生闹钟中断,现在来使用RTC闹钟功能
void rtc_sec_alarm() { rALMSEC = num_2_bcd(); // 这样在每分钟的 13 秒都会发出ALRM中断 rRTCALM |= ( << ) | ( << ); } void isr_rtc_sec() { printf("isr_rtc_sec\n"); intc_clearvectaddr(); rINTP |= ( << ); }
裸机——RTC的更多相关文章
- nrf51822裸机教程-RTC
RTC0被协议栈使用了.所以在跑蓝牙程序的情况下.RTC0不能使用. RTC相关寄存器如下: EVTEN,EVTENSET,EVTENCLR. 这三个寄存器用来设置是否使能某个事件.(TICK,OVR ...
- 【ARM】2440裸机系列-RTC数字时钟
功能 裸机程序,实现LCD显示数字时钟 主要代码 1)背景绘制 void Brush_ U32 c) { int x,y ; for ( y = 0 ; y < LCD_HEIGHT ; y ...
- mini2440裸机试炼之—RTC闹钟中断,节拍中断
版权声明:博客地址:http://blog.csdn.net/muyang_ren.源代码能够在我的github上找看看 https://blog.csdn.net/muyang_ren/articl ...
- 13. 从0学ARM-Cortex-A9 RTC裸机程序编写
一.RTC RTC(Real-Time Clock) 实时时钟. RTC是集成电路,通常称为时钟芯片.在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关 ...
- linux之I2C裸机驱动解析(转)
1 硬件特性 1.1 概述 I2C总线是由Philips公司开发的两线式串行总线,这两根线为时钟线(SCL)和双向数据线(SDA).由于I2C总线仅需要两根线,因此在电路板上占用的空间更少, ...
- S3C2416裸机开发系列19_Fatfs播放录像wav音频文件
S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩 1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...
- 树莓派开发笔记(十四):入手研华ADVANTECH工控树莓派UNO-220套件(三):使用研发自带系统测试rtc、gpio、232和485套件接口
前言 上一篇说明了必须要使用研华自带的8G卡的系统,通过沟通拿到了相关的系统,购买的时候会带8GB的卡,请自行备份一份镜像.本篇对uno-220套件的相关研华配套的额外接口做测试,篇幅较长,重点讲 ...
- STM32F746的RTC使用
1.RTC模块采用低速晶振外接始终:32.768KHz,如下图所示 2.配置RTC模块: 其中,Fck_apre.Fck_spre始终上配置不容易理解, 如果想得到1Hz的始终频率,则需要将PERDI ...
- [nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC
一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻 ...
随机推荐
- JavaScript 原型链 OOP(二)
原型对象 `prototype` - 原型对象的所有属性和方法,都能被实例对象共享; JavaScript 通过构造函数生成新对象,因此构造函数可以视为对象的模板.实例对象的属性和方法,可以定义 ...
- Wallet address
BCX XZVYYwXFAJwv6x4KTssQxJb4EReVdCBnpb BCD 1DNSFUD7LURZdmbckkQcxMvinNJ26mVcNH
- html5 chrome 摄像头 &&bootstrap
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- JDK、JRE、javac和JVM的关系
.java为Java的源文件后缀,编写的代码需要写在.java文件中. Javac编译器,用于读取Java源代码,并将其编译成字节代码.经过javac编译后形成.class,是字节码文件. ...
- Element-ui(el-table、el-pagination)实现表格分页
HTML代码:(重点关注el-table中:data数据的绑定) el-pagination中: layout代表组件布局,子组件名用逗号分隔 属性: total代表总条目数 事件: current- ...
- 用iSee图片专家制作淘宝店标教程
普通的淘宝店铺都会有店标.店标都显示在店铺首页的显现位置,买家在逛淘宝店的时候,一眼都会瞄到店标.因此,如果可以制作一个专属于自己店铺的店标,可以吸引买家的眼光,也更好地宣传了店铺. 下面就用iSee ...
- simotion ST编程,变量和程序的模块化
通过这几年的实践,对simotion的程序结构规划有了一些新的理解.工程师在面对项目时,经常有几个问题比较困惑. 目前面对的问题 1)如何理解其他人编写的程序 2)如何从程序中找到可以移植的部分 传统 ...
- 【js基础修炼之路】— 我理解的原型链
提起原型链,大家并不陌生,但是对于新人来说一提到原型方面的东西就会比较懵.在我自一次面试的时候,面试官也给我提了这样的问题,当时就按照我的理解说了一些,但是很肤浅,在此我希望给刚入门的前端小伙伴聊一下 ...
- ZOJ - 2112 Dynamic Rankings(BIT套主席树)
纠结了好久的一道题,以前是用线段树套平衡树二分做的,感觉时间复杂度和分块差不多了... 终于用BIT套函数式线段树了过了,120ms就是快,此题主要是卡内存. 假设离散后有ns个不同的值,递归层数是l ...
- Pj Immediate Decodability
判断一个串是否是其他的前缀 我们需要建立一颗tire树 在插入边的时候,如果遇到一个其他串的结尾,那么就说明至少有一个串,是插入串的前缀.如果在插入完后没有新增的节点,那么插入的串就是其他串的前缀 # ...