当前位置:文档之家› 嵌入式实验:实时时钟实验

嵌入式实验:实时时钟实验

{
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;
// Argument : p_date,待设置的日期
*****************************************************************************/
void rtc_set_date(st_date* p_date)
{
rRTCCON = 0x01;
Irq_Enable(IRQ_TICK);
}
/*****************************************************************************
// Function name: rtc_alarm_set
// Description:设置S3C2410的告警时间以及方式
rRTCCON = 0x00;
}
/*****************************************************************************
// Function name: rtc_get_date
// Description:获取实时时钟当前时间、日期
/*表示日期、时间的数据结构*/
typedef struct ST_DATE
{
shortyear; //年
charmon; //月
charday; //日
charweek_day; //星期
charhour; //时
charmin; //分
charsec; //秒
} st_date;
/*全局变量*/
/*****************************************************************************
// Function name: rtc_set_date
// Description:修改实时时钟当前时间、日期
// Return type: void
{
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 ;
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);
Uart_Select(0);
/*打印提示信息*/
PRINTF("\n---实时时钟测试程序---\n");
PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)\n");
PRINTF("\n实时时钟测试开始\n");
/*采用BCD编码,如2004年需要设置的值为0x2004 */
ext0_count++;
PRINTF("\r\nAlarm\r\n ");
}
四实验结果及分析
五实验体会
本次实验是了解实时时钟在嵌入式系统中的作用,并熟练掌握实时时钟的使用。在实验过程中我们学会了S3C2410的实时时钟单元的工作原理,并理解了S3C2410X的实时时钟寄存器的工作过程,以及RTCOON代码的使用方法。对于主函数的代码虽然大致上是理解了,但对于一些代码的具体含义还是会有或多或少的不解,不过这些都在同学和老师的帮助下得到了解决。特别是报警的时间间隔如何修改,以及系统默认的时间如何在代码中修改,都一一的理解和运用了!
// Return type: int
// Argument : void
*****************************************************************************/
void rtc_tick_isr(void)
{
Irq_Clear(IRQ_TICK); /*清除TICK中断*/
// Argument : void
*****************************************************************************/
voidMain(void)
{
int old_index ;
st_date m_date;
/*配置系统时钟*/
4.编写程序实现时间告警功能。
5.编译rtc,下载程序并运行,通过超级终端看输出结果。
三实验代码
/*包含文件*/
#include "def.h"
#include "2410lib.h"
#include "option.h"
#include "2410addr.h"
#include "interrupt.h"
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;
}
};
}
/*****************************************************************************
// Function name: rtc_tick_isr
// Description: TICK中断处理程序,程序中设置每秒钟引发一次中断
//*((unsigned char*) 0x02000006) = 0x00;
//*(unsigned char*)0x02000004 = seg7table[led_index%10];
led_index++;
}
/*****************************************************************************
// Return type: void
// Argument : tick,设置的TICK频率(时钟滴答的周期为(1+tick)/128秒)
*****************************************************************************/
void rtc_tick_init( char tick )
int led_index = 0;
int ext0_count = 0;
/* functions */
void rtc_tick_isr(void) __attribute__ ((interrupt("IRQ")));;
void rtc_int_isr(void) __attribute__ ((interrupt("IRQ")));;
{
Irq_Request(IRQ_TICK, rtc_tick_isr);
rRTCCON = 0x0; //No reset[3], Merge BCD counters[2], BCD clock select XTAL[1], RTC Control disable[0]
rTICNT = (tick&0x7f)|0x80;/*TICK中断使能,周期为(1+tick)/128秒*/
// Return type: void
// Argument : p_date,返回日期的指针
*****************************************************************************/
void rtc_get_date(st_date* p_date)
{
if(old_index != led_index)/*每隔一秒更新一次数据*/
{
rtc_get_date(&m_date);
old_index = led_index;
PRINTF(/*时钟数据为BCD码格式,以16进制显示*/
"\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec);
// Function name: rtc_int_isr
// Description: rtc中断处理程序,程序中设置每分钟的第5秒引发该中断
// Return type: int
相关主题