《嵌入式 实验5 RTC实验.docx》由会员分享,可在线阅读,更多相关《嵌入式 实验5 RTC实验.docx(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、实验5-1实时时钟设计实验1、实验目的了解S3C2410A的实时时钟硬件控制原理及设计方法。 掌握S3C2410A的实时时钟的使用方法2、实验内容 编程实现实时时钟功能,每秒显示实时时钟实现实时时钟Alarm,控制蜂鸣器3、实验设备GEC2410开发板 ADS1.2集成开发环境,ARM仿真器、串口连接线4、实验原理实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作 各种计算机系统的时钟信号和参数设置存储电路。RTC具有计时准确、耗电低和体积小的 特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力 自动化、工业控制等自动化程度高的领域
2、无人职守环境。随着集成电路技术的不断开展, RTC器件的新品也不断推出,这些新品不仅具有准确的RTC,还有大容量的存储器、温度 传感器和A/D数据采集通道等。4. 1 S3C2410A实时时钟模块介绍S3C2410A实时时钟单元模块在系统电源掉电的时候可以通过备份电源来完成供电。RTC提供8bit时间数据。其中包括秒、分、时、日、星期、月、年等时间信息。RTC要有 外部晶振提供32.768kHZ的外部时钟。RTC也可以提供闹钟定时的功能。1 .特点一BCD数字,:秒、分、时、日、星期、月、年. 定时功能。 解除了千年虫的问题。 独立的电源引脚支持毫秒时钟2 .读/写寄存器访问RTC模块的寄存器
3、,首先要设RTCCON的bitO为1, CPU通过读取RTC模块中 寄存器 BCDSEC、BCDMIN. BCDHOUR、 BCDDAY、 BCDMONBCD YEAR 的值,得到当前的相应时间值,然而,由于多个寄存器依次读出,所以有可能产生错误。例如:用户依次读取年(18)、月(12)、日(31)、时(23)、分(59)、秒(59)。当 秒数为1到59时没有任何问题,但是当秒数为0时,但前时间和日期就变成了 19年1月1日 0时0分。这种情况下(秒数为0),用户应该重新读取年份到分钟的值。3 .闹钟功能RTC在制定的时间产生报警信号,包括CPU工作在正常模式和休眠模式(poweroff) 下
4、,在正常工作模式下,报警中断信号(ALMINT)被激活。在休眠模式,报警中断信号和rTICNT &=(17);Disablelrq(BIT_TICK);vo i d OpenAI arm ()/open rtc a I armpISR_RTC =(unsigned)Alarm_lsr;ClearPending(BIT_RTC);rRTCALM 二(0x7f);Enablelrq(BIT_RTC);) vo i d CIoseAI arm (vo i d) /cIose rtc a I arm (rRTCALM = 0;Disablelrq(BIT_RTC);) void Get_Rtc(voi
5、d)/ get rtc (rRTCCON = 0x01;if (rBCDYEAR = 0x99)year = 0x1999; e I seyear = 0x2000 + rBCDYEAR;month=rBCDMON;date=rBCDDATE;weekday=rBCDDAY;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;rRTCCON = 0x0; )/*p、* 月、口、星期、时、分、秒 (rRTCCON=0x01;rBCDYEAR = wRTCyear;rBCDM ON = wRTCmon;rBCDDATE= wRTCdate;rBCDDAY = wRTCday
6、;rBCDHOUR = wRTChour;rBCDM IN = wRTCmon;rBCDSEC = wRTCsec;rRTCCON = 0x00; /disable RTC write )5.3时钟和闹钟的开关操作开实时时钟 void OpenRtc(void) (pISR_TICK=(unsigned)Tick_Isr;rTICNT=0xFF;/Tick time interrupt enable;Tick time count value= 127EnableIrq(BIT_TICK);/open RTC TICK INTERRUPT )关实时时钟void CloseRtc(void) (
7、rTICNT &=(lv djdj djwl41,, 11*1*/vo i d xma i n(vo i d) (ChangeCIockD i v ider(1,1);ChangeMPIIVaIue(0xa1,0x3, 0x1);Port_lnit ();Uart_SeIect (0);Uart_lnit(0, 115200);Uart_Pr i ntf Cs3c2410x RTC Testnu);Rtc_lnit();实时时钟初始化Tick中断初始化ClearPending(BIT_TICK);Enablelrq(BIT_TICK);pISR_TICK=(unsi gned)RTC_ISR;
8、 rTICNT=Oxff;wh i Ie (1);/4/ T T TT1*/vo i d i rq RTC_ISR (vo i d)( char *week8 = “SUN,“MON”, “TUES”,“WED, THURS, FRI “SAT” ;ClearPending(BIT_TICK);i+;Get_Rtc ();读时间并显示Uart_Printf (HRTC TIME : %04x-%02x-%02x - %s- %02x:%02x:%02xn, year, month, date, weekweekday, hour, min, sec);rGPFDAT=Oxff;if (i=1)
9、控制LED灯状态变化rGPFDAT=0x00;De I ay (5000);rGPFDAT=0xff;De lay (5000);rGPFDAT=0x00; (2)利用报警中断,使启动2分钟后报警(蜂鸣器响)#i ncIude#i ncIude#i ncIude#i ncIude#i ncIude#i ncIude24101 ib.hn 2410addr.hn def. hn char *week8=二 “SUN”,“MON”,“TUES”,“WED”,“THURS,“FRI ”,“SAT” int year, month, date, weekday, hour, min, sec;i nt
10、 enab Ie_beep = 1;extern void Buzzer_PWM_Run(void);void i rq Alarm_lsr(void);vo i d i rq T i ck_lsr(vo i d);void Buzzer_Stop( void )( rGPBCON |= 1;rGPBCON = rGPBCON & 3|1;/set GPBO as outputrGPBDAT &=;/output 0void setRTCaIm(U8 almyear,U8 aImmon,U8 aImdate, U8 almhour, U8 almmin,U8 a I msec) 设置ALARM
11、 时间(rRTCCON = 0x0001;rALMYEAR = almyear;rALMMON = a Immon;rALMDATE = aImdate;rALMHOUR = almhour;rALMMIN = almmin;rALMSEC = almsec;rRTCCON = 0x0000;) vo i d setRTCt ime (U8 wRTCyear,U8 wRTCmon,U8 wRTCdate,U8 wRTCday,U8 wRTChour, U8 wRTCmin, U8 wRTCsec)置时钟时间(rRTCCON = 0x0001;rBCDYEAR = wRTCyear;rBCDMON = wRTCmon;rBCDDATE = wRTCdate;rBCDDAY = wRTCday;rBCDHOUR = wRTChour;rBCDMIN = wRTCmi n;rBCDSEC = wRTCsec;rRTCCON = 0x0000;)void OpenRtcTick (void)/open rtc t ick, 1 spISR_TICK =(unsigned)Tick_lsr;rTICNT = Oxff;Enablelrq(BIT_TICK); vo i d CIoseRtcT i ck (vo i d)/cIose rtc t i ck
限制150内