实时时钟参考程序资料.docx

上传人:b****2 文档编号:17248910 上传时间:2023-07-23 格式:DOCX 页数:14 大小:40.30KB
下载 相关 举报
实时时钟参考程序资料.docx_第1页
第1页 / 共14页
实时时钟参考程序资料.docx_第2页
第2页 / 共14页
实时时钟参考程序资料.docx_第3页
第3页 / 共14页
实时时钟参考程序资料.docx_第4页
第4页 / 共14页
实时时钟参考程序资料.docx_第5页
第5页 / 共14页
实时时钟参考程序资料.docx_第6页
第6页 / 共14页
实时时钟参考程序资料.docx_第7页
第7页 / 共14页
实时时钟参考程序资料.docx_第8页
第8页 / 共14页
实时时钟参考程序资料.docx_第9页
第9页 / 共14页
实时时钟参考程序资料.docx_第10页
第10页 / 共14页
实时时钟参考程序资料.docx_第11页
第11页 / 共14页
实时时钟参考程序资料.docx_第12页
第12页 / 共14页
实时时钟参考程序资料.docx_第13页
第13页 / 共14页
实时时钟参考程序资料.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实时时钟参考程序资料.docx

《实时时钟参考程序资料.docx》由会员分享,可在线阅读,更多相关《实时时钟参考程序资料.docx(14页珍藏版)》请在冰点文库上搜索。

实时时钟参考程序资料.docx

实时时钟参考程序资料

5.6实时时钟实验

5.6.1实验目的

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

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

5.6.2实验内容

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

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

5.6.3预备知识

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

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

5.6.4实验设备

1.硬件:

JXARM9-2440教学实验箱、PC机;

2.软件:

PC机操作系统Windows98(2000、XP)+ADTIDE开发环境。

5.6.5基础知识

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

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

2.S3C24X0的实时时钟单元

下图为S3C24X0的实时时钟框图。

它具有以下特点:

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

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

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

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

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

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

3.S3C24X0的实时时钟寄存器

1)控制寄存器

表5-16控制寄存器

寄存器

地址

读/写状态

描述

复位值

RTCCON

0x57000040

R/W

实时时钟控制寄存器

0x0

RTCCON

描述

复位值

CLKRST

[3]

实时时钟计数器复位

0-不复位1-复位

0

CNTSEL

[2]

BCD计数选择,将计数器设置为BCD模式

0-选择BCD模式1-保留

0

CLKSEL

[1]

BCD时钟选择

0-将输入时钟进行1/215分频1-保留

0

RTCEN

[0]

RTC读写使能

0-禁止1-使能

0

2)告警控制寄存器

表5-17告警控制寄存器

寄存器

地址

读/写状态

描述

复位值

RTCALM

0x57000050

R/W

告警控制寄存器

0x00

RTCALM

描述

复位值

Reserved

[7]

保留

0

ALMEN

[6]

时钟告警总使能/禁止

0-禁止1-使能

0

YEAREN

[5]

年时钟告警使能/禁止

0-禁止1-使能

0

MONREN

[4]

月时钟告警使能/禁止

0-禁止1-使能

0

DAYEN

[3]

日时钟告警使能/禁止

0-禁止1-使能

0

HOUREN

[2]

时时钟告警使能/禁止

0-禁止1-使能

0

MINEN

[1]

分时钟告警使能/禁止

0-禁止1-使能

0

SECEN

[0]

秒时钟告警使能/禁止

0-禁止1-使能

0

3)实时时钟计数器

表5-18实时时钟计数器

寄存器

地址

读写

描述

复位值

TICNT

0x57000044

R/W

实时时钟计数器

0x00000000

TICNT

描述

复位值

TICKINTENABLE

[7]

中断使能/禁止

0-禁止1-使能

0

TICKTIMECOUNT

[6:

0]

实时时钟计数器

0000000

4)告警时间寄存器

包括年、月、日、时、分、秒。

它们都以BCD的格式表示,地址见下表:

表5-19告警时间寄存器

寄存器

地址

读/写状态

描述

复位值

ALMSEC

0x57000054

R/W

秒时钟告警值

0x00

ALMMIN

0x57000058

R/W

分时钟告警值

0x00

ALMHOUR

0x5700005C

R/W

时时钟告警值

0x00

ALMDAY

0x57000060

R/W

日时钟告警值

0x00

ALMMON

0x57000064

R/W

月时钟告警值

0x00

ALMYEAR

0x57000068

R/W

年时钟告警值

0x00

5)实时时钟寄存器

包括年、月、日、时、分、秒。

它们都以BCD的格式表示,地址见下表:

表5-20实时时钟寄存器

寄存器

地址

读/写状态

描述

复位值

BCDSEC

0x57000070

R/W

秒时钟当前值

不定

BCDMIN

0x57000074

R/W

分时钟当前值

不定

BCDHOUR

0x57000078

R/W

时时钟当前值

不定

BCDDAY

0x5700007C

R/W

日时钟当前值

不定

BCDDATE

0x57000080

R/W

星期值当前值

不定

BCDMON

0x57000084

R/W

月时钟当前值

不定

BCDYEAR

0x57000088

R/W

年时钟当前值

不定

注意事项:

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

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

4.实验参考代码及说明:

/*包含文件*/

#include"2410addr.h"

#include"2410lib.h"

#include"2410RTC.h"

#include"interrupt.h"

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

typedefstructST_DATE

{

shortyear;//年

charmon;//月

charday;//日

charweek_day;//星期

charhour;//时

charmin;//分

charsec;//秒

}st_date;

/*全局变量*/

intled_index=0;

intext0_count=0;

/*functions*/

voidrtc_tick_isr(void);

voidrtc_int_isr(void);

/*****************************************************************************

//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:

初始化S3C2410的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:

设置S3C2410的告警时间以及方式

//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=(92<<12)|(1<<4)|

(1);

ChangeMPllValue((mpll_val>>12)&0xff,(mpll_val>>4)&0x3f,mpll_val&3);

/*中断初始化*/

Isr_Init();

/*初始化串口*/

Uart_Init(0,115200);

Uart_Select(0);

/*打印提示信息*/

Uart_Printf("\n---实时时钟测试程序---\n");

Uart_Printf("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200,8,N,1)\n");

Uart_Printf("\n实时时钟测试开始\n");

/*采用BCD编码,如2004年需要设置的值为0x2004*/

m_date.year=0x2000+0x04;

m_date.mon=0x03;

m_date.day=0x02;

m_date.week_day=0x02;

m_date.hour=0x15;

m_date.min=0x40;

m_date.sec=0x00;

/*修改当前日期和时间*/

rtc_set_date(&m_date);

m_date.sec=0x05;

/*设置告警的时间及方式,0x41表示使能RTC告警,以及使能秒时钟告警*/

rtc_alarm_set(&m_date,0x41);

rtc_tick_init(127);

old_index=led_index;

Uart_Printf("\r\n\r\n");

while

(1)

{

if(old_index!

=led_index)/*每隔一秒更新一次数据*/

{

rtc_get_date(&m_date);

old_index=led_index;

Uart_Printf(/*时钟数据为BCD码格式,以16进制显示*/

"\b\b\b\b\b\b\b\b%02x:

%02x:

%02x",m_date.hour,m_date.min,m_date.sec);

}

};

}

/*****************************************************************************

//Functionname:

rtc_tick_isr

//Description:

TICK中断处理程序,程序中设置每秒钟引发一次中断

//Returntype:

int

//Argument:

void

*****************************************************************************/

voidrtc_tick_isr(void)

{

Irq_Clear(IRQ_TICK);/*清除TICK中断*/

led_index++;

}

/*****************************************************************************

//Functionname:

rtc_int_isr

//Description:

rtc中断处理程序,程序中设置每分钟的第5秒引发该中断

//Returntype:

int

//Argument:

void

*****************************************************************************/

voidrtc_int_isr(void)

{

Irq_Clear(IRQ_RTC);/*清除RTC中断*/

ext0_count++;

Uart_Printf("\r\nAlarm\r\n");

}

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

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

2)时间告警功能测试。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2