一、前言
本篇使用华清远见的FS4412
开发板,进行RTC实验
,知识包括RTC知识原理、开发板RTC介绍与寄存器介绍、RTC编程,并通过开发板实验现象验证RTC实验。
二、准备工作
FS4412开发板
,我用的是华清远见的FS4412开发板- ubuntu下linux操作系统(包含交叉编译工具)
serial-com8
程序烧入执行工具- 开发板电路原理图、芯片手册
- 开发程序模板
开发板资料、交叉编译工具、程序烧入工具下载(包含教程)
开发板可选择到华清远见官网进行租赁。
工程模板文件下载
三、RTC简介
RTC(Real Time Clock)即实时时钟
,它是一个可以为系统提供精确的时间基准
的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电。
四、开发板的RTC
具有的功能:
- 支持“BCD编号”,支持“秒”、“分”、“小时”、“星期几”、“日”、“月”、“年”。
- 支持
闰年生成器
- 支持告警功能,即Alarm- interrupt或wake from power down模式。
- 关机模式有:闲,深闲,停,深停,和睡眠。
- 支持滴答计数器功能,即滴答中断或从电源下电模式(空闲,深度空闲,
停下,深停下,睡吧) - 支持
独立电源引脚
(RTCVDD) - 为RTOS内核
滴答定时
- 支持毫秒滴答定时中断。
RTC结构图:
五、RTC寄存器介绍
- 1:
定时提醒部分
是设置1个定时时间
,到时间
走到定时时间
时,RTC给CPU发出一个提醒。 - 2:
时间校准部分
,我们通常通过这部分寄存器获取时间,以及校准时间。
1、RTCCON寄存器
功能:RTC功能设置寄存器
其他位我们使用默认值,主要看第0位
- 该位置1时,允许校准时间
- 改位置0时,不允许校准时间
该位默认为0
,主要为防止程序意外而导致时间被修改。
2、时间寄存器
①
功能:秒单位设置寄存器
②
功能:分钟单位设置寄存器
③
功能:小时单位设置寄存器
④
功能:天单位设置寄存器
⑤
功能:月单位设置寄存器
⑥
功能:年单位设置寄存器
六、RTC编程
1、程序编写
#include "exynos_4412.h"
void RTC_Init()
{
/* 打开时间设置 */
RTCCON |= 1;
/* 时间设置,WEEK与DAY数据手册写反了,这里要相反写 */
RTC.BCDYEAR = 0x22;
RTC.BCDMON = 0x4;
RTC.BCDDAY = 0x1;
RTC.BCDWEEK = 0x25;
RTC.BCDHOUR = 0x11;
RTC.BCDMIN = 0x29;
RTC.BCDSEC = 0x1;
/* 关闭时间设置 */
RTCCON &= (~1);
}
int main()
{
unsigned int oldsec = 0, newsec = 0;
RTC_Init();
while(1)
{
/* 1秒打印1次 */
newsec = RTC.BCDSEC;
if(oldsec != newsec)
{
printf("%x-%x-%x,%x,%x:%x:%x\n", RTC.BCDYEAR, RTC.BCDMON,
RTC.BCDWEEK, RTC.BCDDAY, RTC.BCDHOUR, RTC.BCDMIN, RTC.BCDSEC);
oldsec = newsec;
}
}
return 0;
}
2、代码烧入
1.输入make
生成.bin文件
2.将.bin文件
复制到共享文件夹
①
②
③
输入:
cp ARM_LED.bin /mnt/hgfs/cca
将文件复制到cc文件夹
3.打开serial-com8
,连接开发板(COM2
接口),烧入程序
①查看端口
②打开serial-com8设置
③接通开发板电源,迅速按enter
键,使其快速进入裸机模式。
④烧入程序
输入:
loadb 40008000
选择可执行文件烧入
烧入成功:
⑤执行程序
输入:
go 40008000
七、RTC实验现象
到这里就结束啦!