嵌入式软件开发基础实验报告 实时时钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海电力学院
嵌入式软件开发基础实验报告
题目:【ARM】实时时钟实验
专业:电子科学与技术
年级:
姓名:
学号:
一、实验目的
1、了解实时时钟的硬件控制原理及设计方法。
2、掌握S3C44B0X 处理器的RTC 模块程序设计方法。
二、实验设备
1、硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。
2、软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP。
三、实验内容
学习和掌握 Embest EduKit-III 实验平台中RTC 模块的使用,进行以下操作:
1、编写应用程序,修改时钟日期及时间的设置。
2、使用EMBEST ARM 教学系统的串口,在超级终端显示当前系统时间。
四、实验原理
1. 实时时钟(RTC)
实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展,RTC 器件的新品也不断推出,这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D 数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。
RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如I2C、SPI、MICROWIRE和CAN 等串行总线接口。这些串口由2~3 根线连接,分为同步和异步。
2. S3C44B0X 实时时钟(RTC)单元
S3C44B0X 实时时钟(RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部32.768KHz 晶振提供,可以实现闹钟(报警)功能。
S3C44B0X 实时时钟(RTC)单元特性:
BCD 数据:秒、分、小时、星期、日期、月份和年份
1、闹钟(报警)功能:产生定时中断或激活系统
2、自动计算闰年
3、无2000 年问题
4、独立的电源输入
5、支持毫秒级时间片中断,为RTOS 提供时间基准
读/写寄存器
访问 RTC 模块的寄存器,首先要设RTCCON 的bit0 为1。CPU 通过读取RTC 模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON 和 BCDYEAR 的值,得到当前的相应时间值。然而,由于多个寄存器依次读出,所以有可能产生错误。比如:用户依次读取年(1989)、月(12)、日(31)、时(23)、分(59)、秒(59)。当秒数为1 到59 时,没有任何问题,但是,当秒数为0 时,当前时间和日期就变成了1990 年1 月1 日0 时0 分。这种情况下(秒数为0),用户应该重新读取年份到分钟的值(参考程序设计)。
后备电池:
RTC 单元可以使用后备电池通过管脚RTCVDD 供电。当系统关闭电源以后,CPU 和RTC 的接口电路被阻断,后备电池只需要驱动晶振和BCD 计数器,从而达到最小的功耗。
闹钟功能RTC 在指定的时间产生报警信号,包括CPU 工作在正常模式和休眠(power down)模式下。在正常工作模式,报警中断信号(ALMINT)被激活。在休眠模式,报警中断信号和唤醒信号(PMWKUP)同时被激活。RTC 报警寄存器(RTCALM)决定报警功能的使能/屏蔽和完成报警时间检测。
时间片中断
RTC 时间片中断用于中断请求。寄存器TICNT 有一个中断使能位和中断计数。该中断计数自动递减,当达到0 时,则产生中断。中断周期按照下列公式计算:Period = ( n+1 ) / 128 second
其中,n 为RTC 时钟中断计数,可取值为(1-127)
置零计数功能
RTC 的置零计数功能可以实现30、40 和50 秒步长重新计数,供某些专用系统使用。当使用50秒置零设置时,如果当前时间是11:59:49,则下一秒后时间将变为12:00:00。
注意:所有的RTC 寄存器都是字节型的,必须使用字节访问指令(STRB、LDRB)或字符型指针访问。
五、实验设计
1. 硬件电路设计
2. 软件程序设计
(1)时钟设置
时钟设置程序必须实现时钟工作情况以及数据设置有效性检测功能。具体实现可以参考示例程序设计。
(2)时钟显示
时钟参数通过实验系统串口0 输出到超级终端,显示内容包括年月日时分秒。参数以BCD 码形式传送,用户使用串口通信函数(参见串口通信实验)将参数取出显示。
/*********************************************************************************************
* name: rtc_read
* func: read data from rtc
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
void rtc_read(void)
{
while(1)
{
// read the data from RTC registers
if(rBCDYEAR == 0x99)
g_nYear = 0x1999;
else
g_nYear = 0x2000 + rBCDYEAR;
g_nMonth = rBCDMON;
g_nDay = rBCDDAY;
g_nWeekday = rBCDDATE;
g_nHour = rBCDHOUR;
g_nMin = rBCDMIN;
g_nSec = rBCDSEC;
if(g_nSec != 0)
break;