实验二 实时时钟实验
1 实验目的
(1) 了解实时时钟在嵌入式系统中的作用; (2) 掌握实时时钟的使用。
2 实验设备
(1) S3C2410嵌入式开发板,JTAG仿真器。
(2) 软件:PC机操作系统Win98、Win2000或Windows XP,ADS1.2集成开发环境,仿真器驱动程序,超级终端通讯程序。
3 实验内容
(1) 编程实现实时时钟功能,每秒显示实时时钟; (2) 编程实现实时时钟告警功能。
4 实验步骤
(1) 参照模板工程,新建一个工程RTC,添加相应的文件,并修改RTC的工程设置;
(2) 创建Main.c并加入到工程RTC中; (3) 编写程序每秒钟读取时钟滴答;
关键代码如下: old_index=led_index; Uart_Printf(“\\r\\n”); While(1){
/*每隔1秒更新一次数据*/ if(old_index!=led_index) {
rtc_get_data(&m_data); old_index=led_index;
/*实时时钟数据为BCD码格式,以16进制显示*/ Uart_Printf
(“\\rx: x: x”,m_date.hour,m_date.min,m_date.sec);
} };
(4) 编写程序实现时间告警功能;
关键代码如下;
a.首先设置告警时间,如下例程设置每分钟的第5秒告警 m_date.sec=0x05;
rtc_alalm_set(&m_date.0x41);
模式0x41表示使能RTC告警,以及使能秒时钟告警 b.注册中断例程,打开中断
install_isr_handler(HandleRTC,(void *)rtc_int_isr); rINTMSK=(rINTMSK&?(BIT_GLOBAL|BIT_RTC); c.中断服务例程中清除中断事件 rI_ISPC=BIT_RTC; if(alarm_count&1)
*(unsigned char*)0x20000000=0x0f; else
*(unsigned char*)0x20000000=0xff; alarm_count++; (5) 编译RTC;
(6) 运行超级终端,选择正确的串口号,并将串口设置位:波特率(115200)、奇偶校验(None)、数据位数(8)和停止位数(1),无流控,打开串口;
(7) 装载程序并运行,如果运行正确,在超级终端中将会显示如图2.1所示内容。
图2.1 运行结果
5 实验总结
通过这次实验我进一步掌握了RTCCON控制寄存器、告警控制寄存器RTCALM、实时时钟计数器TICNT、告警时间寄存器ALMSEC的使用和初始设置方法,最后的是学会了如何读程序,在文件工作组中查找自己不知道的标号好地址的方法来完整的理解代码。
在实验过程中遇到了很多的问题,例如,通过了第一次的实验还是无法熟练的掌握实验的流程,问题百出,但最后都解决了。
通过实验现象对代码有了更深的理解,首先是每一秒都会滴答显示、每分钟的第5秒报警等,把运行的结果和源代码进行比对解读,一目了然。