实验时钟Word文档下载推荐.docx

上传人:b****1 文档编号:984252 上传时间:2023-04-29 格式:DOCX 页数:19 大小:86.91KB
下载 相关 举报
实验时钟Word文档下载推荐.docx_第1页
第1页 / 共19页
实验时钟Word文档下载推荐.docx_第2页
第2页 / 共19页
实验时钟Word文档下载推荐.docx_第3页
第3页 / 共19页
实验时钟Word文档下载推荐.docx_第4页
第4页 / 共19页
实验时钟Word文档下载推荐.docx_第5页
第5页 / 共19页
实验时钟Word文档下载推荐.docx_第6页
第6页 / 共19页
实验时钟Word文档下载推荐.docx_第7页
第7页 / 共19页
实验时钟Word文档下载推荐.docx_第8页
第8页 / 共19页
实验时钟Word文档下载推荐.docx_第9页
第9页 / 共19页
实验时钟Word文档下载推荐.docx_第10页
第10页 / 共19页
实验时钟Word文档下载推荐.docx_第11页
第11页 / 共19页
实验时钟Word文档下载推荐.docx_第12页
第12页 / 共19页
实验时钟Word文档下载推荐.docx_第13页
第13页 / 共19页
实验时钟Word文档下载推荐.docx_第14页
第14页 / 共19页
实验时钟Word文档下载推荐.docx_第15页
第15页 / 共19页
实验时钟Word文档下载推荐.docx_第16页
第16页 / 共19页
实验时钟Word文档下载推荐.docx_第17页
第17页 / 共19页
实验时钟Word文档下载推荐.docx_第18页
第18页 / 共19页
实验时钟Word文档下载推荐.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验时钟Word文档下载推荐.docx

《实验时钟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验时钟Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。

实验时钟Word文档下载推荐.docx

R/W

实时时钟控制寄存器

0x0

CLKRST

[3]

实时时钟计数器复位

0-不复位1-复位

CNTSEL

[2]

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

0-选择BCD模式1-保留

CLKSEL

[1]

BCD时钟选择

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

RTCEN

[0]

RTC读写使能

0-禁止1-使能

2)告警控制寄存器

表2告警控制寄存器

复位值

RTCALM

0x01D70050

告警控制寄存器

0x00

复位值

Reserved

[7]

保留

ALMEN

[6]

时钟告警总使能/禁止

YEAREN

[5]

年时钟告警使能/禁止

MONREN

[4]

月时钟告警使能/禁止

DAYEN

日时钟告警使能/禁止

HOUREN

时时钟告警使能/禁止

MINEN

分时钟告警使能/禁止

SECEN

秒时钟告警使能/禁止

3)实时时钟计数器

表3实时时钟计数器

寄存器

地址

读写

描述

TICNT

0x01D7008C

实时时钟计数器

0x00000000

TICKINTENABLE

中断使能/禁止

TICKTIMECOUNT

[6:

0]

0000000

4)告警时间寄存器

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

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

表4告警时间寄存器

ALMSEC

0x01D70054

秒时钟告警值

ALMMIN

0x01D70058

分时钟告警值

ALMHOUR

0x01D7005C

时时钟告警值

ALMDAY

0x01D70060

日时钟告警值

ALMMON

0x01D70064

月时钟告警值

ALMYEAR

0x01D70068

年时钟告警值

5)实时时钟寄存器

表5实时时钟寄存器

BCDSEC

0x01D70070

秒时钟当前值

不定

BCDMIN

0x01D70074

分时钟当前值

BCDHOUR

0x01D70078

时时钟当前值

BCDDAY

0x01D7007C

日时钟当前值

BCDDATE

0x01D70080

星期值当前值

BCDMON

0x01D70084

月时钟当前值

BCDYEAR

0x01D70088

年时钟当前值

注意事项:

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

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

六实验过程

1.实验硬件组成框图如图3所示。

图3

2.程序设计流程图如图4所示。

图4

3.原程序。

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

/*FILENAMEVERSION*/

/*RTC.C1.0*/

/*DESCRIPTION*/

/*JX44B0(S3C44B0X)实时时钟实验*/

/*DATASTRUCTURES*/

/*FUNCTIONS:

*/

/*在JX44B0教学实验箱进行PWM方式驱动蜂蜜器的实验*/

/*DEPENDENCIES*/

/*JX44B0-1*/

/*JX44B0-2*/

/*JX44B0-3*/

/*NAME:

*/

/*REMARKS:

/*Copyright(C)2003WuhanCVTECHCO.,LTD*/

/*学习S3C44B0X处理器中的实时时钟处理方法:

/*包含文件*/

#include"

44b.h"

44blib.h"

rtc.h"

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

typedefstructST_DATE

{shortyear;

//年

charmon;

//月

charday;

//日

charweek_day;

//星期

charhour;

//时

charmin;

//分

charsec;

//秒

}st_date;

typedef(*ISR_ROUTINE_ENTRY)(void);

/*全局变量*/

intled_index=1;

intext0_count=0;

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

unsignedcharseg7table[16]=

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

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

};

/*functions*/

voidrtc_tick_isr(void);

voidrtc_int_isr(void);

voidIsrIRQ()__attribute__((interrupt("

IRQ"

)));

voidtest_pwm();

//Functionname:

IsrIRQ

//Description:

非矢量方式下中断的查表处理

//中断地址表位于0x0c7fff00开始的256字节

//Returntype:

void

//Argument:

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

voidIsrIRQ()

{intcount=0;

unsignedintisr_pending;

unsignedintisr_mask=0x00000001;

unsignedintisr_mask_set=rINTMSK;

ISR_ROUTINE_ENTRYisr_routine_entry=(ISR_ROUTINE_ENTRY)0x0;

__asm__(

"

STMFDSP!

{r1,r4-r8}@SAVEr1,r4-r10\n"

nop\n"

);

isr_pending=(rINTPND&

~isr_mask_set);

while(isr_mask)

{if(isr_pending&

isr_mask)

{isr_routine_entry=(ISR_ROUTINE_ENTRY)(*(int*)(HandleADC+count));

break;

}

count+=4;

isr_mask<

<

=1;

}

if(isr_routine_entry)(*isr_routine_entry)();

LDMFDSP!

{r1,r4-r8}@RESTOREr1,r4-r10\n"

}

init_interrupt_handler

非矢量方式下中断向量表初始化处理

irq_handler

//中断处理函数入口

voidinit_interrupt_handler(unsignedintirq_handler)

{inti;

rINTPND=0x00000000;

/*清除所有未决的中断*/

rI_ISPC=0x03FFFFFF;

for(i=0;

i<

256;

i+=4)/*清除中断表*/

*(unsignedint*)(_ISR_STARTADDRESS+i)=0;

*(unsignedint*)(HandleIRQ)=irq_handler;

/*设置IRQ模式处理函数*/

install_isr_handler

非矢量方式下中断向量的安装

irq_no,中断号

//irq_routine,中断处理函数地址

voidinstall_isr_handler(intirq_no,void*irq_routine)

{*(unsignedint*)(irq_no)=(unsignedint)irq_routine;

rtc_set_date

修改实时时钟当前时间、日期

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;

rtc_get_date

获取实时时钟当前时间、日期

p_date,返回日期的指针

voidrtc_get_date(st_date*p_date)

p_date->

year=rBCDYEAR;

mon=rBCDMON;

day=rBCDDAY;

week_day=rBCDDATE;

hour=rBCDHOUR;

min=rBCDMIN;

sec=rBCDSEC;

rtc_tick_init

初始化S3C44B0的TICK定时器

tick,设置的TICK频率(时钟滴答的周期为(1+tick)/128秒)

voidrtc_tick_init(chartick)

rTICINT=(tick&

0x7f)|0x80;

/*TICK中断使能,周期为(1+tick)/128秒*/

rtc_alarm_set

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

p_date,告警的时间

//mode,告警模式

voidrtc_alarm_set(st_date*p_date,unsignedcharmode)

{rRTCCON=0x01;

rALMYEAR=p_date->

rALMMON=p_date->

rALMDAY=p_date->

rALMHOUR=p_date->

rALMMIN=p_date->

rALMSEC=p_date->

rRTCALM=mode;

Main

测试程序主函数

//完成功能:

//时钟滴答:

每秒钟刷新数码管显示

//设置当前日期、时间

//动态刷新当前日期、时间,通过串口打印出来

//时间告警功能:

每分钟的第5秒告警,并进行跑马灯显示

int

intMain(void)

{intold_index;

st_datem_date;

/*采用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);

rINTCON=0x7;

/*Non-vect,IRQdisable,FIQdisable*/

init_interrupt_handler((unsignedint)IsrIRQ);

install_isr_handler(HandleTICK,(void*)rtc_tick_isr);

install_isr_handler(HandleRTC,(void*)rtc_int_isr);

rINTMOD=0x0;

/*设置所有中断为IRQ模式*/

rINTMSK=0x07ffffff&

~/*使能TICK中断*/

(BIT_GLOBAL|BIT_TICK|BIT_RTC);

rINTCON=0x5;

/*打开IRQ模式的中断*/

old_index=led_index;

Uart_Printf("

\r\n"

while

(1)

{if(old_index!

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

{rtc_get_date(&

old_index=led_index;

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

"

\r%02x:

%02x:

%02x"

m_date.hour,m_date.min,m_date.sec);

};

rtc_tick_isr

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

voidrtc_tick_isr(void)

{

rI_ISPC=BIT_TICK;

/*清除时钟滴答中断标志*/

*((unsignedchar*)0x02000006)=0x00;

*(unsignedchar*)0x02000004=seg7table[(led_index)%10];

led_index++;

rtc_int_isr

//Description:

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

voidrtc_int_isr(void)

{rI_ISPC=BIT_RTC;

/*清除RTC中断*/

if(ext0_count&

1)

{*(unsignedchar*)0x2000000=0xff;

test_pwm();

else

{*(unsignedchar*)0x2000000=0x0f;

ext0_count++;

voidtest_pwm()

{intindex,rate;

unsignedshortdiv;

intfreq;

/

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

当前位置:首页 > 临时分类 > 批量上传

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

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