实时时钟实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.6 实时时钟实验

5.6.1 实验目的

1. 了解实时时钟在嵌入式系统中的作用;

2. 掌握实时时钟的使用。

5.6.2 实验内容

1. 编程实现实时时钟功能,每秒显示实时时钟;

2. 编程实现实时时钟告警功能。

5.6.3 预备知识

1. 了解ADT IDE集成开发环境的基本功能;

2. 学习S3C44B0X的实时时钟模块的使用。

5.6.4 实验设备

1. 硬件:JX44B0教学实验箱、PC机;

2. 软件:PC机操作系统 Windows 98(2000、XP) + ADT IDE集成开发环境。

5.6.5 基础知识

1. 实时时钟在嵌入式系统中的作用

在一个嵌入式系统中,实时时钟单元可以提供可靠的时钟,包括时、分、秒和年、月、日。即使在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的晶振。

2. S3C44B0X的实时时钟单元

如图5-12为S3C44B0X的实时时钟框图。它具有以下特点:

图5-12 S3C44B0X的实时时钟框图

1)时钟数据采用BCD编码;

2)能够对闰年的年月日进行自动处理;

3)具有告警功能,当系统处于关机状态时,能产生告警中断;

4)具有独立的电源输入;

5)提供毫秒级时钟中断,该中断可以用于作为嵌入式操作系统的内核时钟。

3. S3C44B0X的实时时钟寄存器

1) 控制寄存器

表5-16 控制寄存器

2) 告警控制寄存器

表5-17 告警控制寄存器

3) 实时时钟计数器

表5-18 实时时钟计数器

4) 告警时间寄存器

包括年、月、日、时、分、秒。它们都以BCD的格式表示,地址见下表:

表5-19 告警时间寄存器

5) 实时时钟寄存器

包括年、月、日、时、分、秒。它们都以BCD的格式表示,地址见下表:

表5-20 实时时钟寄存器

注意事项:

1. 以上各寄存器都只能以字节模式进行读写操作;

2. 当系统使用BIG-ENDIAN模式时,各寄存器对应的地址为会有所改变,具体值请参考S3C44B0X的数据手册。

4. 实验参考代码及说明

本实验测试S3C44B0X的实时时钟功能,包括:

1) 时钟滴答功能测试,通过LED显示TIME TICK;

2) 时间告警功能测试。

/* 包含文件 */

#include "44b.h"

#include "44blib.h"

#include "rtc.h"

/* 表示日期、时间的数据结构 */

typedef struct ST_DATE

{

short year; // 年

char mon; // 月

char day; // 日

char week_day; // 星期

char hour; // 时

char min; // 分

char sec; // 秒

} st_date;

typedef (*ISR_ROUTINE_ENTRY)(void);

/* 全局变量 */

int led_index = 0;

int ext0_count = 0;

/* 数码管显示码表,请参考led实验 */

unsigned char seg7table[16] =

{

0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,

0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,

};

/* functions */

void rtc_tick_isr(void);

void rtc_int_isr(void);

void IsrIRQ() __attribute__ ((interrupt("IRQ")));

/***************************************************************************** // Function name : rtc_set_date

// Description : 修改实时时钟当前时间、日期

// Return type : void

// Argument : p_date, 待设置的日期

*****************************************************************************/ void rtc_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;

}

/***************************************************************************** // Function name : rtc_get_date

// Description : 获取实时时钟当前时间、日期

// Return type : void

// Argument : p_date, 返回日期的指针

*****************************************************************************/ void rtc_get_date(st_date* p_date)

相关文档
最新文档