实时时钟(RTC)的主要功能是在系统掉电的情况下,利用后备电源使时钟继续运行,从而不会丢失时间信息。s3c6410内部集成了RTC模块,其内部的寄存器BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON和BCDYEAR分别存储了当前的秒,分,小时,星期,日,月和年,表示时间的数值都是BCD码。
S2C6410中的闰年问题:
闰年产生器基于BCDDAY,BCDMOD,BCDYEAR从而能决定每月最后的日期是28,29,30,还是31。一个8位的计数器只能表示2个BCD数据,因此不能判断“00”结尾的年份是不是闰年。例如它不能判断1900和2000是不是闰年。为了解决这个问题,S3C6410中有一硬件逻辑来支持2000的闰年问题。因此S3C6410支持1901到2099年的范围。
读写操作:
在读BCD寄存器时,RTCCON寄存器0位必须至1,为了显示秒,分,小时,日,月,年,cpu必须从其对应的寄存器中取值(BCDSEC, BCDMIN, BCDHOUR,BCDDATE, BCDDAY, BCDMON, BCDYEAR)。多寄存器同时读取可能会产生1秒误差。例如用户从BCDMIN到BCDYEAR都进行了读,得到的结果为2059年12月31日23时59分,当读取这个结果时BCDSEC的数值在1~59之间,读到的2059年12月31日23时59分是没有问题的,但是当读取这个结果时BCDSEC的值为0,实际结果可能是2059年12月31日23时59分也可能是2060年1月1日0时0分。所以此时应重读这些寄存器,从而得到正确的数值。
后备电源操作:
实时时钟逻辑能被后备电源驱动,通过RTCVDD向RTC模块供电。当系统关闭时,cpu和RTC接口是封闭的,这时后备电源只驱动振荡电路和BCD计数器,从而把功耗降到最低。
逻辑图:
接口:
以下程序完成了时间设置获取,在lcd上显示功能,
源码如下
头文件:
-
- #define RTC_BASE (0x7E005040)
- #define rRTCCON (*(volatile unsigned *)RTC_BASE)
- #define rTICNT (*(volatile unsigned *)(RTC_BASE + 0x4))
- #define rRTCALM (*(volatile unsigned *)(RTC_BASE + 0x10))
- #define rALMSEC (*(volatile unsigned *)(RTC_BASE + 0x14))
- #define rALMMIN (*(volatile unsigned *)(RTC_BASE + 0x18))
- #define rALMHOUR (*(volatile unsigned *)(RTC_BASE + 0x1c))
- #define rALMDATE (*(volatile unsigned *)(RTC_BASE + 0x20))
- #define rALMMON (*(volatile unsigned *)(RTC_BASE + 0x24))
- #define rALMYEAR (*(volatile unsigned *)(RTC_BASE + 0x28))
- #define rBCDSEC (*(volatile unsigned *)(RTC_BASE + 0x30))
- #define rBCDMIN (*(volatile unsigned *)(RTC_BASE + 0x34))
- #define rBCDHOUR (*(volatile unsigned *)(RTC_BASE + 0x38))
- #define rBCDDATE (*(volatile unsigned *)(RTC_BASE + 0x3c))
- #define rBCDDAY (*(volatile unsigned *)(RTC_BASE + 0x40))
- #define rBCDMON (*(volatile unsigned *)(RTC_BASE + 0x44))
- #define rBCDYEAR (*(volatile unsigned *)(RTC_BASE + 0x48))
- #define rCURTICNT (*(volatile unsigned *)(RTC_BASE + 0x50))
- #define rINTP (*(volatile unsigned *)(RTC_BASE - 0x10))
初始化rtc:
- void init_rtc()
- {
- rRTCCON = 0x85;
- }
设置实时数据:
- void set_rtc()
- {
-
- rRTCCON |= 0x01;
- rBCDSEC = 5*16 +1;
- rBCDMIN = 6;
- rBCDHOUR = 1*16 +3;
- rBCDDATE = 1*16+4;
- rBCDMON =4;
- rBCDYEAR = 1*16+2;
- rRTCCON &= ~(0x01);
- }
获取实时数据:
- void get_rtc(unsigned char rtc_data[6])
- {
-
- rRTCCON |= 0x01;
- rtc_data[0] =rBCDSEC;
- rtc_data[1] = rBCDMIN;
- rtc_data[2] = rBCDHOUR;
- rtc_data[3] = rBCDDATE;
- rtc_data[4] = rBCDMON;
- rtc_data[5] = rBCDYEAR;
-
- rRTCCON &= ~(0x01);
-
- if(rtc_data[0] == 0)
- {
- rRTCCON |= 0x01;
- rtc_data[0] =rBCDSEC;
- rtc_data[1] = rBCDMIN;
- rtc_data[2] = rBCDHOUR;
- rtc_data[3] = rBCDDATE;
- rtc_data[4] = rBCDMON;
- rtc_data[5] = rBCDYEAR;
- rRTCCON &= ~(0x01);
- }
-
- }
mian:
更多信息请查看 java进阶网 http://www.javady.com
- init_rtc();
- LCD_Init();
- Paint_background(0xffffff,0,0,480,272);
- set_rtc();
-
- while(1)
- {
-
- get_rtc(tmp_rtc);
- rtc_data_tmp[13] = tmp_rtc[0]%16;
- rtc_data_tmp[12] = tmp_rtc[0]/16;
-
- rtc_data_tmp[11] = tmp_rtc[1]%16;
- rtc_data_tmp[10] = tmp_rtc[1]/16;
-
- rtc_data_tmp[9] = tmp_rtc[2]%16;
- rtc_data_tmp[8] = tmp_rtc[2]/16;
-
- rtc_data_tmp[7] = tmp_rtc[3]%16;
- rtc_data_tmp[6] = tmp_rtc[3]/16;
-
- rtc_data_tmp[5] = tmp_rtc[4]%16;
- rtc_data_tmp[4] = tmp_rtc[4]/16;
-
- rtc_data_tmp[3] = tmp_rtc[5]%16;
- rtc_data_tmp[2] = tmp_rtc[5]/16;
-
- rtc_data_tmp[1] = tmp_rtc[6]%16;
- rtc_data_tmp[0] = tmp_rtc[6]/16;
-
- for(jj=0;jj<14;jj++)
- {
- Paint_text(124+8*jj, 20, 0x0,charnum[rtc_data_tmp[jj]],8, 16);
- }
- delay_rtc();
-
- }
分享到:
相关推荐
C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-220311kw)C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-220311kw)C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-220311kw)C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-...
单片机C语言实例--260-RTC实时时钟DS1302液晶显示.zip
6410裸机学习程序,Arm为三星公司出的S3C6410(ARM11),适用于OK6410 飞凌6410 Tiny6410 的裸机程序开发。 编译环境:XP SP3,RVDS2.2编译器 功能模块: 串口 、LED、beep(蜂鸣器)、key(查询和中断模式)、PWM、...
面向开发者的libagora-rtc-sdk-jni.so资源文件,方便各位下载使用libagora-rtc-sdk-jni.so
单片机C语言实例-RTC实时时钟DS1302液晶显示.zip
260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-...
S3c6410的RTC裸板编程文档和代码
S3C6410 外围功能测试程序 ----------------------- 包括USB, ADC, IO, TIMER, RTC, SDHC, EINT,LCD,2D,DMA,MMU测试
标准linux 2.4.20 针对ds1302 的RTC 源码,具有充电功能!
S3C2440 arm9芯片上RTC的测试程序,可以测试RTC是否正确运行,以及能对RTC进行时间设置。
sinch-android-rtc-3.12.3源码,是一个很不错的Android源码,有兴趣的伙伴们抽时间可以看一下把。
七牛云---> 实时音视频云 html 的pili-rtc-web.js的下载
ARM9 S3C2440 测试实例程序 本程序测试ARM9自带的RTC
Simple RTC Android app 간단한 WebRTC 안드로이드용 앱 서버 : simple-rtc-signaling-server setting 서버 주소를 G.kt파일에서 수정. val SIGNAL_SERVER_ADDR = "ws://192.168.35.192:12345" MVVM Notify 방법은...
ARM代码,IIC,PWM,UART,GPIO,INTERRUPT、RTC,NAND等ARM裸机下运行的代码。
基于S3C2440开发板做的一个RTC时钟代码
linux下的rtc35390驱动程序,该RTC采用I2C接口,工作电 压为1.3 ~ 5.5 V、可适用于从主电源电压到备用电池电压的宽幅电源电压。
Anroid实时时钟和闹钟系统--RTC-ALARM.pdf Anroid实时时钟和闹钟系统--RTC-ALARM.pdf
linux系统驱动-RTC驱动-rv-8263-c7,自己写的rtc驱动源码,参考内核rtc-pcf85063源码移植
STM32F10x-RTC 万年历