单片机课件-第七章-S3C2440A的实时时钟

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

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

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

资源描述

机电工程学院自控系侯叶第七章S3C2440A的实时时钟主要内容7.1实时时钟在嵌入式系统中的作用7.2实时时钟操作7.3实时时钟相关寄存器7.1实时时钟在嵌入式系统中的作用在一个嵌入式系统中,实时时钟单元可以提供可靠的时钟,包括时、分、秒和年、月、日。即使系统处于关机状态下,它也能够正常工作(通常采用后备电池供电)。在嵌入式系统中,实时时钟主要用来显示时间。实时时钟(RTC)可以通过使用STRB/LDRBARM操作发送8位二--十进制BCD值数据给CPU。这些数据包括年、月、日、星期、时、分和秒的时间信息。RTC单元工作在外部32.768kHz晶振并且可以执行闹钟功能。特性:–BCD数:年、月、日、星期、时、分和秒–闰年发生器–闹钟功能:闹钟中断或从掉电模式唤醒–已解决的2000年问题–独立电源引脚(RTCVDD)支持RTOS内核时钟节拍(tick)的毫秒节拍时间中断7.2实时时钟操作闰年发生器:闰年发生器能够基于BCDDATE、BCDMON和BCDYEAR的数据,从28、29、30或31中决定哪个是每月的最后日。此模块决定最后日时会考虑闰年因素。8位计数器只能够表示为2个BCD数字,因此其不能判决“00”年(最后两位数为0的年份)是否为闰年。例如,其不能判别1900和2000年。请注意:1900年不是闰年,而2000年是闰年。7.2实时时钟操作读/写寄存器:为了写RTC模块中的BCD寄存器,RTCCON寄存器的位[0]必须设置为高。为了显示年、月、日、时、分和秒,CPU应该分别读取RTC模块中的各寄存器中的数据。然而因为读取了多个寄存器,可能存在1秒的偏差。例如,当用户从BCDYEAR到BCDMIN寄存器读取,其结果假定为2059(年)、12(月)、31(日)、23(时)和59(分)。当用户读取BCDSEC寄存器并且值的范围是从1到59(秒),这没有问题,但是如果该值为0秒,则年、月、日、时和分可能要变为2060(年)、1(月)、1(日)、0(时)和0(分),因为存在着1秒的偏差。在这种情况中,如果BCDSEC为0则应该重新从BCDYEAR到BCDSEC读取。7.2实时时钟操作备用电池操作:RTC逻辑可以由备用电池驱动,如果系统电源关闭,由RTCVDD引脚供电给RTC模块。当关闭了电源,则应该阻塞掉CPU和RTC逻辑的接口,而备用电池只驱动振荡电路和BCD计数器以最小化功耗。闹钟功能:RTC在掉电模式中或正常工作模式中通过指定时间产生一个闹钟信号。在正常工作模式中,只激活闹钟中断(INT_RTC)信号。在掉电模式中,除了INT_RTC被激活之外还激活电源管理唤醒(PMWKUP)信号。实时时钟控制(RTCCON)寄存器节拍时间计数(TICNT)寄存器RTC闹钟控制(RTCALM)寄存器闹钟秒数据(ALMSEC)寄存器闹钟分数据(ALMMIN)寄存器闹钟时数据(ALMHOUR)寄存器闹钟日数据(ALMDATE)寄存器闹钟月数据(ALMMON)寄存器闹钟年数据(ALMYEAR)寄存器BCD秒(BCDSEC)寄存器BCD分(BCDMIN)寄存器BCD时(BCDHOUR)寄存器BCD日(BCDDATE)寄存器BCD星期(BCDDAY)寄存器BCD月(BCDMON)寄存器BCD年(BCDYEAR)寄存器7.3实时时钟相关寄存器7.3实时时钟相关寄存器实时时钟控制(RTCCON)寄存器7.3实时时钟相关寄存器节拍时间计数(TICNT)寄存器7.3实时时钟相关寄存器RTC闹钟控制(RTCALM)寄存器7.3实时时钟相关寄存器闹钟秒数据(ALMSEC)寄存器7.3实时时钟相关寄存器闹钟分数据(ALMMIN)寄存器7.3实时时钟相关寄存器闹钟时数据(ALMHOUR)寄存器7.3实时时钟相关寄存器闹钟日数据(ALMDATE)寄存器7.3实时时钟相关寄存器闹钟月数据(ALMMON)寄存器7.3实时时钟相关寄存器闹钟年数据(ALMYEAR)寄存器7.3实时时钟相关寄存器BCD秒(BCDSEC)寄存器7.3实时时钟相关寄存器BCD分(BCDMIN)寄存器7.3实时时钟相关寄存器BCD时(BCDHOUR)寄存器7.3实时时钟相关寄存器BCD日(BCDDATE)寄存器7.3实时时钟相关寄存器BCD星期(BCDDAY)寄存器7.3实时时钟相关寄存器BCD月(BCDMON)寄存器7.3实时时钟相关寄存器BCD年(BCDYEAR)寄存器实验五、系统时钟实验一、实验目的了解实时时钟在嵌入式系统中的作用;掌握实时时钟的使用。二、实验仪器JXARM9-2440教学实验箱、ADT1000仿真器和ADTIDE集成开发环境、串口连接线、PC机。三、实验原理在一个嵌入式系统中,实时时钟单元可以提供可靠的时钟,包括时分秒和年月日;即使在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。/*包含文件*/#includedef.h#include2410lib.h#includeoption.h#include2410addr.h#includeinterrupt.h/*表示日期、时间的数据结构*/typedefstructST_DATE{shortyear;//年charmon;//月charday;//日charweek_day;//星期charhour;//时charmin;//分charsec;//秒}st_date;/*全局变量*/intled_index=0;intext0_count=0;/*functions*/voidrtc_tick_isr(void)__attribute__((interrupt(IRQ)));;voidrtc_int_isr(void)__attribute__((interrupt(IRQ)));;/*****************************************************************************//Functionname:rtc_set_date//Description:修改实时时钟当前时间、日期//Returntype:void//Argument:p_date,待设置的日期*****************************************************************************/voidrtc_set_date(st_date*p_date){rRTCCON=0x01;rBCDYEAR=p_date-year;rBCDMON=p_date-mon;rBCDDAY=p_date-day;rBCDDATE=p_date-week_day;rBCDHOUR=p_date-hour;rBCDMIN=p_date-min;四、参考程序rBCDSEC=p_date-sec;rRTCCON=0x00;}/*****************************************************//Functionname:rtc_get_date//Description:获取实时时钟当前时间、日期//Returntype:void//Argument:p_date,返回日期的指针******************************************************/voidrtc_get_date(st_date*p_date){rRTCCON=0x01;p_date-year=rBCDYEAR;p_date-mon=rBCDMON;p_date-day=rBCDDAY;p_date-week_day=rBCDDATE;p_date-hour=rBCDHOUR;p_date-min=rBCDMIN;p_date-sec=rBCDSEC;rRTCCON=0x00;}/*****************************************************************************//Functionname:rtc_tick_init//Description:初始化S3C2440的TICK定时器//Returntype:void//Argument:tick,设置的TICK频率(时钟滴答的周期为(1+tick)/128秒)*****************************************************************************/voidrtc_tick_init(chartick){Irq_Request(IRQ_TICK,rtc_tick_isr);rRTCCON=0x0;//Noreset[3],MergeBCDcounters[2],BCDclockselectXTAL[1],RTCControldisable[0]rTICNT=(tick&0x7f)|0x80;/*TICK中断使能,周期为(1+tick)/128秒*/Irq_Enable(IRQ_TICK);}/*****************************************************************************//Functionname:rtc_alarm_set//Description:设置S3C2440的告警时间以及方式//Returntype:void//Argument:p_date,告警的时间//mode,告警模式*****************************************************************************/voidrtc_alarm_set(st_date*p_date,unsignedcharmode){Irq_Request(IRQ_RTC,rtc_int_isr);rRTCCON=0x01;rALMYEAR=p_date-year;rALMMON=p_date-mon;rALMDATE=p_date-day;rALMHOUR=p_date-hour;rALMMIN=p_date-min;rALMSEC=p_date-sec;rRTCALM=mode;rRTCCON=0x00;Irq_Enable(IRQ_RTC);}/*****************************************************************************//Functionname:Main//Description:JXARM9-2440实时时钟实验主程序//完成功能:时钟滴答:每秒钟刷新数码管显示//设置当前日期、时间//动态刷新当前日期、时间,通过串口打印出来//时间告警功能:每分钟的第5秒告警,并进行跑马灯显示//Returntype:void//Argument:void*****************************************************************************/voidMain(void){intold_index;st_datem_date;/*配置系统时钟*/ChangeClockDivider(2,1);U32mpll_val=0;mpll_val=(9212)|(14)|(1);ChangeMPllValue((mpll_val12)&0xff,(mpll_val4)&0x3f,mpll_val&3);/*中断初始化*/Isr_Init();/*初始化端口*/Port_Init();/*初始化串口*

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

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

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

×
保存成功