`

深入理解ARM体系架构(S3C6410)---rtc实例

arm 
阅读更多

 

实时时钟(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上显示功能,

源码如下

头文件:

 

  1. //RTC  
  2. #define RTC_BASE    (0x7E005040)  
  3. #define rRTCCON     (*(volatile unsigned *)RTC_BASE)  
  4. #define rTICNT      (*(volatile unsigned *)(RTC_BASE + 0x4))  
  5. #define rRTCALM     (*(volatile unsigned *)(RTC_BASE + 0x10))  
  6. #define rALMSEC     (*(volatile unsigned *)(RTC_BASE + 0x14))  
  7. #define rALMMIN     (*(volatile unsigned *)(RTC_BASE + 0x18))  
  8. #define rALMHOUR    (*(volatile unsigned *)(RTC_BASE + 0x1c))  
  9. #define rALMDATE    (*(volatile unsigned *)(RTC_BASE + 0x20))  
  10. #define rALMMON     (*(volatile unsigned *)(RTC_BASE + 0x24))  
  11. #define rALMYEAR    (*(volatile unsigned *)(RTC_BASE + 0x28))  
  12. #define rBCDSEC     (*(volatile unsigned *)(RTC_BASE + 0x30))  
  13. #define rBCDMIN     (*(volatile unsigned *)(RTC_BASE + 0x34))  
  14. #define rBCDHOUR    (*(volatile unsigned *)(RTC_BASE + 0x38))  
  15. #define rBCDDATE    (*(volatile unsigned *)(RTC_BASE + 0x3c))  
  16. #define rBCDDAY     (*(volatile unsigned *)(RTC_BASE + 0x40))  
  17. #define rBCDMON     (*(volatile unsigned *)(RTC_BASE + 0x44))  
  18. #define rBCDYEAR    (*(volatile unsigned *)(RTC_BASE + 0x48))  
  19. #define rCURTICNT   (*(volatile unsigned *)(RTC_BASE + 0x50))  
  20. #define rINTP       (*(volatile unsigned *)(RTC_BASE - 0x10))  

 

 

 

初始化rtc:

 

  1. void init_rtc()  
  2. {  
  3.     rRTCCON = 0x85;  
  4. }  


设置实时数据:

 

 

  1. void set_rtc()  
  2. {  
  3. //2012,04.14.13,06  
  4.     rRTCCON |= 0x01;  
  5.     rBCDSEC = 5*16 +1;  
  6.     rBCDMIN = 6;  
  7.     rBCDHOUR = 1*16 +3;  
  8.     rBCDDATE = 1*16+4;  
  9.     rBCDMON =4;  
  10.     rBCDYEAR = 1*16+2;  
  11.     rRTCCON &= ~(0x01);  
  12. }  


获取实时数据:

 

 

  1. void get_rtc(unsigned char rtc_data[6])  
  2. {  
  3.   
  4.     rRTCCON |= 0x01;  
  5.     rtc_data[0] =rBCDSEC;  
  6.     rtc_data[1] = rBCDMIN;  
  7.     rtc_data[2] = rBCDHOUR;  
  8.     rtc_data[3] = rBCDDATE;  
  9.     rtc_data[4] = rBCDMON;  
  10.     rtc_data[5] = rBCDYEAR;  
  11.       
  12.     rRTCCON &= ~(0x01);   
  13.   
  14.     if(rtc_data[0] == 0)  
  15.     {  
  16.     rRTCCON |= 0x01;  
  17.     rtc_data[0] =rBCDSEC;  
  18.     rtc_data[1] = rBCDMIN;  
  19.     rtc_data[2] = rBCDHOUR;  
  20.     rtc_data[3] = rBCDDATE;  
  21.     rtc_data[4] = rBCDMON;  
  22.     rtc_data[5] = rBCDYEAR;   
  23.     rRTCCON &= ~(0x01);   
  24.     }  
  25.   
  26. }  




mian:

 

更多信息请查看 java进阶网 http://www.javady.com

  1. init_rtc();   
  2. LCD_Init();  
  3. Paint_background(0xffffff,0,0,480,272);  
  4. set_rtc();  
  5.   
  6. while(1)  
  7. {  
  8.   
  9. get_rtc(tmp_rtc);  
  10. rtc_data_tmp[13] = tmp_rtc[0]%16;  
  11. rtc_data_tmp[12] = tmp_rtc[0]/16;  
  12.   
  13. rtc_data_tmp[11] = tmp_rtc[1]%16;  
  14. rtc_data_tmp[10] = tmp_rtc[1]/16;  
  15.       
  16. rtc_data_tmp[9] = tmp_rtc[2]%16;  
  17. rtc_data_tmp[8] = tmp_rtc[2]/16;  
  18.   
  19. rtc_data_tmp[7] = tmp_rtc[3]%16;  
  20. rtc_data_tmp[6] = tmp_rtc[3]/16;  
  21.   
  22. rtc_data_tmp[5] = tmp_rtc[4]%16;  
  23. rtc_data_tmp[4] = tmp_rtc[4]/16;  
  24.       
  25. rtc_data_tmp[3] = tmp_rtc[5]%16;  
  26. rtc_data_tmp[2] = tmp_rtc[5]/16;  
  27.   
  28. rtc_data_tmp[1] = tmp_rtc[6]%16;  
  29. rtc_data_tmp[0] = tmp_rtc[6]/16;  
  30.   
  31. for(jj=0;jj<14;jj++)       
  32. {  
  33.     Paint_text(124+8*jj, 20, 0x0,charnum[rtc_data_tmp[jj]],8, 16);  
  34. }  
  35. delay_rtc();  
  36.   
  37. }  
分享到:
评论

相关推荐

    S3C2440 ARM9中RTC实例

    在本文中,我们将深入探讨如何在S3C2440上实现RTC功能,并通过具体的代码实例进行讲解。 首先,了解S3C2440的RTC接口。在S3C2440的数据手册中,RTC相关的寄存器分布在地址空间的0x5A000000到0x5A00003C之间。这些...

    RTC.rar_S3C2440 RTC_arm9 rtc

    总结来说,"RTC.rar_S3C2440 RTC_arm9 rtc"提供的示例可能帮助开发者理解如何在基于S3C2440的ARM9平台上有效地利用RTC功能,包括初始化、读写时间、处理中断以及进行相关的测试。这对于开发需要精确时间管理的嵌入式...

    RTC.rar_RTC_S3C44B0X

    在深入学习和实践这个项目时,开发者需要具备嵌入式系统、ARM架构、C语言编程以及中断服务程序等相关知识。通过此项目,可以提升对实时操作系统和硬件交互的理解,对于从事嵌入式开发的工程师来说是一次宝贵的学习...

    ARM6410学习资料

    【ARM6410学习资料】是针对ARM架构处理器的学习资源,特别关注的是Sumsung S3C6410型号。S3C6410是一款基于ARM11核心的嵌入式处理器,它的主频最高可达667MHz,具备高性能处理能力。处理器的扩展总线最大频率为133...

    S3C2440中文手册

    《S3C2440中文手册》是嵌入式系统开发者的重要参考资料,它全面而深入地介绍了三星基于ARM9架构的S3C2440处理器。这本手册不仅适用于初学者,也对有经验的工程师有很高的参考价值。在深入探讨其内容之前,我们先来...

    嵌入式系统导论(3、硬件设计-arm设计实例)

    本文将深入探讨嵌入式系统的硬件设计,特别是以ARM处理器S3C4510为例的设计实例。 S3C4510是三星公司生产的一款基于ARM7TDMI内核的微处理器,常用于嵌入式应用中。这个设计实例是中南大学信息科学与工程学院的教学...

    s3c2440芯片中文手册

    《S3C2440芯片中文手册》是学习ARM9处理器体系结构和技术的重要参考资料,尤其对于嵌入式系统开发者来说,它具有极高的实用价值。S3C2440是一款由Samsung公司推出的基于ARM920T内核的微处理器,广泛应用于各种嵌入式...

    s3c2440中文手册

    总的来说,《三星S3C2440中文手册》是开发者深入理解S3C2440处理器、进行系统设计和软件开发的重要参考资料。通过学习这份手册,用户不仅可以掌握S3C2440的基本特性和操作,还能提升在嵌入式领域的专业技能。

    嵌入式Linux之我行系列

    - **背景介绍**:该部分内容深入讲解了如何在S3C2440处理器上开发各种类型的驱动程序。 - **具体包括**: - IO静态映射分析。 - 内核访问外设I/O资源的方式。 - DM9000驱动开发实例。 - LCD背光驱动实例。 - ...

    S3C44B0X_中文数据手册

    通过阅读《S3C44B0X_中文数据手册》,工程师能深入理解S3C44B0X的硬件特性和软件开发流程,从而有效地设计和优化基于该处理器的系统。无论你是初学者还是经验丰富的开发者,这个数据手册都将是你不可或缺的参考资料...

    s3c2440芯片中文手册(全)

    这份详尽的手册对每个主题都进行了深入的探讨,不仅介绍了硬件特性,还提供了大量实例和编程指南,是开发者进行S3C2440平台开发的宝贵资料。通过学习这份手册,开发者能够掌握S3C2440的使用,设计出满足需求的嵌入式...

    基于S3C44B0X嵌入式系统的应用开发实例.ppt

    S3C44B0X是由Samsung公司推出的基于ARM7TDMI架构的微处理器,采用先进的0.25μm CMOS工艺制造,适合低成本的嵌入式系统设计。该处理器集成了众多外围功能模块,包括8KB的Cache、外部存储器控制器、LCD控制器、多个...

    S3C2440全套中文手册(1-27章)

    这份手册深入浅出地介绍了该处理器的各项特性和功能,是理解和开发基于S3C2440系统的重要参考资料。 S3C2440是一款高性能、低功耗的ARM920T内核微处理器,广泛应用于嵌入式系统设计,如PDA、手机、数字相机和各种...

    基于S3C44B0X嵌入式系统应用开发实例.ppt

    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_...

    ARM裸机驱动开发说明书.pdf

    - **硬件平台**:MagicARM2440硬件仿真平台,该平台基于三星S3C2440处理器,是一款广泛应用于嵌入式系统的ARM9架构处理器。 - **项目创建**:首先打开ADS,通过`File -&gt; New`创建一个新的项目,命名为`Test`或根据...

    《ARM接口编程》读书笔记模板.pptx

    RTC实时时钟的介绍、S3C2440内部RTC模块结构框架分析、S3C2440处理器的RTC工作原理、RTC硬件原理及程序实现等。 11. 触摸屏接口 触摸屏接口的介绍、四线电阻式触摸屏的工作原理、触摸屏程序设计及实现等。 12. LCD...

    S3C2440 + Linux2.6的几个驱动小例子(已在GEC2440上调试通过)

    S3C2440是一款由Samsung制造的ARM9处理器,常用于嵌入式系统设计,如开发板和工业设备。Linux内核2.6是Linux操作系统的一个早期稳定版本,支持多种硬件平台,包括S3C2440。 描述中提到这些驱动已在"GEC2440上调试...

Global site tag (gtag.js) - Google Analytics