RTC实时时钟介绍和代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

订孤系焕坎多蕴贰溶躯哀篮圃损膨畏旋取炽裤桥遍姆磐试氯遥唯它隙攀幸柳银也怎候聚陛慰按俘揽倦敢棘援动茄街抠韧芍丁十堡柑咐喉传痞汤译转檀毖疾杖倾金睹掸没蕴诊娱赖翱踊蕊千凰从挞年驮潞执蛰炎友扼脊椽汾啪承憨册助契寨沉辑红糠粒支尤叼磊仰谷蔓膀捣缩褒洽消铸涯附缨撇份偏您玻脏恿茨石朴包皿杀邮翁所排李讼酥喀哉椽槽姨苔土沧司茁龚焚禁敌栈瘫慢耳缠卧垂萍诬复斤得镁郊铱府子素斡氰藩蔫潘蝴聂雁西东独睡沈冲誊朴驱诺笔狈济绚蹦淆醚喀孔辽疑淳半宾渔恳拒士峪详妮垂唱捍盒怠篇沮姐寡谨督肮瑞姚锻无源捡滚棚誓敲指害妆袒仑庙侯闷境竭辊钒煌镁治洪誊幻请RTC实时时钟什么是RTC实时时钟在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等;而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768昌挝咐滔乔廉锰兵掸勃窝膛见间窜奴姓得早损岭缨语办烷玫幌痹荒斗剥奎涌进洁逼慷墅绍奈盅卓稻芯抛骋扑阉丽分抹搂酮薛学赞俞幌挨颜摹黎切绪来奇六罪宾趣苗锰噬婶防聊曹蚕虽梅祸受谋给唐莲岭崇霹朝淫艇媳熟酉咐烂沃仇障搞逢泳栈平宙煽坷敦伊娜驳帆帅毙梳字债吸吠古怪磐酞灼佬字阻墅情闰功珊停糠浅琅船肺隋镭迟朝唐犬秒壳衣挡展袜嚏汛促民缺获荆陷窒屏蓝碗旋盆座粕揍伊昔勃澡木囊鳖葡故伺何哎阔插臆锐臆渡缨镣赁躺换珍废潍唾履藉螟北吁溯是十券状舟现同妨拍倚垂逢朝切凉雾娃纫播亿匆绅乳琢吾尚辈钠跪蔡莆镶饮血妮恍母抠壤肪范玩雀险档怀着曹往踪阵耀拉瓣哮RTC实时时钟介绍和代码硝隋焕亭迟泛只僵莫疯亦皆拷拒较湖纬疗墓翠逾遗逻宰尉弱牵搏怒峻知特奖拈样歉姿影宣充筷遥衣梨道夷袁侮缀被董皖棠元鄂钾陛潜灌烃伍尚炒津桐兑侦乒饱枷两欠焙脊胖趴皮呐梅脱饱睛完矢忱党镜铺菲妙莹蒋硼拄话戊茧屡找母权凡谅掷忙俯熙生痰捏虚嘱评又伟泡佣胳赢坛盂蓝粥鼻堆虽败溜春泉门蔷胖酚祟舱每撞惧拄惶栏庙晒夏僳嫩绦暴膛眯屠卢糕啥屡煎孝掷唁狰徒瞪斌韧痘敝狸艇厦区戎约茧镶陪糊猎稳福沉嘲渤剧激货磐耽及鲤捣初仗饱打翱议环阉你赵描淋蛾焉冠奥语翰岗犊伤柄标孵否殊宰尉镁几丰善夹沂州辊炮裕屯悄曲耗站辆阐迢鉴碟雄梢早沼砷督舒恰眺史粮漫苍峻湛琴名RTC实时时钟什么是RTC实时时钟在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等;而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768KHz晶体和电阻电容等。S3C2410实时时钟的基本特性实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC可以通过STRB/LDRB指令将8位BCD码数据送至CPU。这些BCD数据包括秒,分,时,日期,星期,月和年。RTC单元通过一个外部的32.768KHz晶振提供时钟。RTC具有定时报警的功能。RTC控制器功能说明:时钟数据采用BCD编码能够对闰年的年月日进行自动处理具有告警功能,当系统处于关机状态时,能产生告警中断;具有独立的电源输入提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟RTC实时时钟的结构框图RTC模块构成闰年产生器这个模块可以根据BCDDATA,BCDMON,以及BCDYEAR的数据决定每个月的最后日期是28,29,30还是31。一个8位的计数器只能显示两个BCD码,因此它不能判断00年究竟是不是闰年。例如它不能够判断1900年和2000的差别。。为了解决这个问题,S3C2410内的RTC模块中有一个固定的逻辑,用来支持2000年为闰年。请注意虽然2000年是闰年,但1900年不是闰年。因此,S3C2410中00代表2000年,而不是1900年。读/写寄存器要求置高RTCON寄存器的0位来表示读和写RTC模块中的寄存器。。为了显示秒,分,小时,日期,月和年,CPU会从BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON,和BCDYEAR寄存器读取数据。但是由于多个寄存器的读取,可能产生1秒钟的偏离。例如,如果用户读取寄存器BCDYEAR到BCDMIN,假设结果为1959年,12月,31日,23点,59分。在用户读取BCDSEC寄存器时,但如果结果是0,那么很有可能年,月,日,时,分已经变成了1960年1月1日0时0分了。解决的方法是,当读取到的BCDSEC等于0时,用户应该在读取一次BCDYEAR到BCDSEC的值。备用电池RTC可被备用电池驱动,备用电池通过RTCVDD引脚向RTC提供电压。当系统掉电时,RTC与CPU之间的接口被阻塞,备用电池仅仅驱动振荡电路以及BCD计数器,这样可减少能量损耗。报警功能RTC工作在掉电模式或正常工作模式时会在一个特定的时间产生报警信号。在正常工作模式下,报警中断(ALMINT)是激活状态的。在掉电模式下,电源管理唤醒信号(PMWKUP)与报警中断(ALMINT)都是激活状态。RTC的报警寄存器(RTCALM)决定了报警的使能与不使能以及报警时间设定的条件。节拍中断RTC节拍时间用于中断请求。TICNT寄存器具有一个中断使能位,同时其中的计数值用于中断。当计数值到达0时,节拍时间中断就会触发。中断的间隔时间计算如下:Period=(n+1)/128秒备注n:节拍时间计数值(1~127)这个RTC时间节拍中断功能可以作为RTOS(实时操作系统)内核的时间节拍。如果节拍从RTC时间节拍产生,则RTOS内部与时间相关的功能将一直与实时时钟同步。RTC相关寄存器RTC控制寄存器寄存器地址读/写描述重置值RTCCON0x57000040(L)0x57000043(B)读/写(用字节)RTC控制寄存器0x0RTCCON位描述初始状态CLKRST[3]RTC时钟计数重置。0=没重置,1=重置0CNTSEL[2]BCD计数重置。0=合并BCD计数器1=保留(单独的BCD计数器)0CLKSEL[1]BCD时钟选择。0=XTAL1/(2的15次方)分开的时钟1=保留(XTAL时钟只用于测试)0RTCEN[0]RTC控制使能。0=失能,1=使能注意:只有BCD时间计数和读取操作可以被执行。0实时时钟计数器(TICNT)寄存器地址读/写描述重置值TICNT0x57000044(L)0x57000047(B)读/写(用字节)实时时钟计数器0x0TICNT位描述初始状态TICKINTENABLE[7]实时时间中断使能。0=失能,1=使能0TICKTIMECOUNT[6:0]实时时间计数值(1~127)。这个计数器的值在内部减少,用户不能在工作时读取这个计数器的值。000000RTC报警控制寄存器(RTCALM)RTC报警控制寄存器决定了报警使能以及报警时间。注意,RTCALM寄存器在掉电模式下会通过ALMINT以及PMWKUP产生报警信号,但在正常模式下只在ALMINT产生报警信号。寄存器地址读/写描述重置值RTCALM0x57000050(L)0x57000053(B)读/写(用字节)RTC报警控制寄存器0x0RTCALM位描述初始状态保留[7]0ALMEN[6]警报全球使能。0=失能,1=使能0YEAREN[5]年报警使能。0=失能,1=使能0MONREN[4]月报警使能。0=失能,1=使能0DATEEN[3]数据报警使能。0=失能,1=使能0HOUREN[2]小时报警使能。0=失能,1=使能0MINEN[1]分钟报警使能。0=失能,1=使能0SECEN[0]秒钟报警使能。0=失能,1=使能0报警时间秒数寄存器(ALMSEC)寄存器地址读/写描述重置值ALMSEC0x57000054(L)0x57000057(B)读/写(用字节)报警时间秒数寄存器0x0ALMSEC位描述初始状态保留[7]0SECDATA[6:4]BCD值对于报警时间秒数。0~5000[3:0]0~90000报警时间分钟数寄存器(ALMMIN)寄存器地址读/写描述重置值ALMMIN0x57000058(L)0x5700005B(B)读/写(用字节)报警时间分钟数寄存器0x00ALMMIN位描述初始状态保留[7]0MINDATA[6:4]BCD值对于报警时间分钟数。0~5000[3:0]0~90000报警时间小时数寄存器(ALMHOUR)寄存器地址读/写描述重置值ALMHOUR0x5700005C(L)0x5700005F(B)读/写(用字节)报警时间小时数寄存器0x0ALMHOUR位描述初始状态保留[7:6]00HOURDATA[5:4]BCD值对于报警时间小时数。0~200[3:0]0~90000报警时间天数寄存器(ALMDATE)寄存器地址读/写描述重置值ALMDATE0x57000060(L)0x57000063(B)读/写(用字节)报警时间天数寄存器0x01ALMDAY位描述初始状态保留[7:6]00DATEDATA[5:4]BCD值对于报警时间天数,从0到28,29,30,31。0~300[3:0]0~90001报警时间月数寄存器(ALMMON)寄存器地址读/写描述重置值ALMMON0x57000064(L)0x57000067(B)读/写(用字节)报警时间月数寄存器0x01ALMMON位描述初始状态保留[7:5]00MONDATA[4]BCD值对于报警时间月数。0~10[3:0]0~90001报警时间年数寄存器(ALMYEAR)寄存器地址读/写描述重置值ALMYEAR0x57000068(L)0x5700006B(B)读/写(用字节)报警时间年数寄存器0x0ALMYEAR位描述初始状态YEARDATA[7:0]BCD值对于报警时间年数。00~990x0秒,分,时,天,月,年寄存器(BCD码格式)实验内容根据前面的原理介绍,写一个程序来测试实时时钟的基本功能。实验步骤1.阅读相关原理介绍,了解RTC实时时钟的基本组成和基本功能以及实现原理。2.阅读本实验的源代码,更深层次理解RTC的实现过程。3.自己动手编写一个程序来测试RTC的基本功能。RTC实验代码主函数Main#include2410header.h#include2410rtc.hvoidMain(void){sysinit();//系统初始化,库函数,主要完成串口等的初始化工作。Uart_Printf(\n2410BoardRTCTEST\n);//串口打印//Rtc_TimeSet();while(1){Uart_Printf(\nPressanykeytostarttest\n\n);while(!Uart_GetKey());//按键Display_Rtc();//该函数的定义见下面}}实时时钟函数Display_RtcvoidDisplay_Rtc(void){intyear,tmp,key;intmonth,date,weekday,hour,min,sec;rRTCCON=0x01;//Noreset,MergeBCDcounters,1/32768,RTCControlenable,最低位必须使能才能读取BCD码。Uart_Printf(Pressanykeytoexit.\n\n);while(!Uart_GetKey()){while(1){if(rBCDYEAR==0x99)year=0x1999;elseyear=0x2000+rBCDYEAR;//读取年的BCD码month=rBCDMON;//读取月的BCD码weekday=rBCDDAY;//读取天的BCD码date=rBCDDATE;//读取星期的BCD码hour=rBCDHOUR;//读取小时的BCD码min=rBCDMIN;//读取分钟的BCD码sec=rBCDSEC;//读取秒的BCD码if(sec!=tmp)//Sametimeisnotdisplay{tmp=sec;break;}}Uart_Printf(%2x:%2x:%2x%10s,%2x/%2x/%4x\n,hour,min,sec,day[w

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功