实时时钟(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();
-
- }
分享到:
相关推荐
在本文中,我们将深入探讨如何在S3C2440上实现RTC功能,并通过具体的代码实例进行讲解。 首先,了解S3C2440的RTC接口。在S3C2440的数据手册中,RTC相关的寄存器分布在地址空间的0x5A000000到0x5A00003C之间。这些...
总结来说,"RTC.rar_S3C2440 RTC_arm9 rtc"提供的示例可能帮助开发者理解如何在基于S3C2440的ARM9平台上有效地利用RTC功能,包括初始化、读写时间、处理中断以及进行相关的测试。这对于开发需要精确时间管理的嵌入式...
在深入学习和实践这个项目时,开发者需要具备嵌入式系统、ARM架构、C语言编程以及中断服务程序等相关知识。通过此项目,可以提升对实时操作系统和硬件交互的理解,对于从事嵌入式开发的工程师来说是一次宝贵的学习...
【ARM6410学习资料】是针对ARM架构处理器的学习资源,特别关注的是Sumsung S3C6410型号。S3C6410是一款基于ARM11核心的嵌入式处理器,它的主频最高可达667MHz,具备高性能处理能力。处理器的扩展总线最大频率为133...
《S3C2440中文手册》是嵌入式系统开发者的重要参考资料,它全面而深入地介绍了三星基于ARM9架构的S3C2440处理器。这本手册不仅适用于初学者,也对有经验的工程师有很高的参考价值。在深入探讨其内容之前,我们先来...
本文将深入探讨嵌入式系统的硬件设计,特别是以ARM处理器S3C4510为例的设计实例。 S3C4510是三星公司生产的一款基于ARM7TDMI内核的微处理器,常用于嵌入式应用中。这个设计实例是中南大学信息科学与工程学院的教学...
《S3C2440芯片中文手册》是学习ARM9处理器体系结构和技术的重要参考资料,尤其对于嵌入式系统开发者来说,它具有极高的实用价值。S3C2440是一款由Samsung公司推出的基于ARM920T内核的微处理器,广泛应用于各种嵌入式...
总的来说,《三星S3C2440中文手册》是开发者深入理解S3C2440处理器、进行系统设计和软件开发的重要参考资料。通过学习这份手册,用户不仅可以掌握S3C2440的基本特性和操作,还能提升在嵌入式领域的专业技能。
- **背景介绍**:该部分内容深入讲解了如何在S3C2440处理器上开发各种类型的驱动程序。 - **具体包括**: - IO静态映射分析。 - 内核访问外设I/O资源的方式。 - DM9000驱动开发实例。 - LCD背光驱动实例。 - ...
通过阅读《S3C44B0X_中文数据手册》,工程师能深入理解S3C44B0X的硬件特性和软件开发流程,从而有效地设计和优化基于该处理器的系统。无论你是初学者还是经验丰富的开发者,这个数据手册都将是你不可或缺的参考资料...
这份详尽的手册对每个主题都进行了深入的探讨,不仅介绍了硬件特性,还提供了大量实例和编程指南,是开发者进行S3C2440平台开发的宝贵资料。通过学习这份手册,开发者能够掌握S3C2440的使用,设计出满足需求的嵌入式...
S3C44B0X是由Samsung公司推出的基于ARM7TDMI架构的微处理器,采用先进的0.25μm CMOS工艺制造,适合低成本的嵌入式系统设计。该处理器集成了众多外围功能模块,包括8KB的Cache、外部存储器控制器、LCD控制器、多个...
这份手册深入浅出地介绍了该处理器的各项特性和功能,是理解和开发基于S3C2440系统的重要参考资料。 S3C2440是一款高性能、低功耗的ARM920T内核微处理器,广泛应用于嵌入式系统设计,如PDA、手机、数字相机和各种...
S3C44B0X是一款由Samsung公司生产的微处理器,它基于ARM7TDMI架构,广泛应用于嵌入式系统设计。这款处理器采用0.25微米CMOS工艺制造,具有高度集成的特性,包括内置8KB的Cache、外部存储器控制器、LCD控制器、多个...
例如,在`arch/arm/plat-s3c24xx/devs.c`中定义了一个RTC实时时钟的平台设备: ```c struct platform_device s3c_device_rtc = { .name = "s3c2410-rtc", .id = -1, .num_resources = ARRAY_SIZE(s3c_rtc_...
- **硬件平台**:MagicARM2440硬件仿真平台,该平台基于三星S3C2440处理器,是一款广泛应用于嵌入式系统的ARM9架构处理器。 - **项目创建**:首先打开ADS,通过`File -> New`创建一个新的项目,命名为`Test`或根据...
RTC实时时钟的介绍、S3C2440内部RTC模块结构框架分析、S3C2440处理器的RTC工作原理、RTC硬件原理及程序实现等。 11. 触摸屏接口 触摸屏接口的介绍、四线电阻式触摸屏的工作原理、触摸屏程序设计及实现等。 12. LCD...
S3C2440是一款由Samsung制造的ARM9处理器,常用于嵌入式系统设计,如开发板和工业设备。Linux内核2.6是Linux操作系统的一个早期稳定版本,支持多种硬件平台,包括S3C2440。 描述中提到这些驱动已在"GEC2440上调试...