s3c2410实时时钟模块要点分析
2010-11-08 20:20
232 查看
作者:杨硕,华清远见嵌入式学院讲师。
1. 概述
RTC的功能:通常采用RTC来提供可靠地系统时间,包括年月日时分秒等信息。
RTC在系统处于关机状态下也能够正常工作,因为有后备电池供电
RTC的外围不需要太多的辅助电路,典型的只需要一个高精度的32.768KHz晶振和电容就可以了,如下图所示:
以前的产品里面RTC模块是一个独立的芯片,现在随着SOC技术的成熟,更多的是把RTC集成到芯片内部,S3C2410内部就集成了一个RTC模块。
很多嵌入式产品都有RTC功能,手机、电子日历、数码产品、机顶盒等
S3C2410的RTC具有如下特点:
● 时钟数据采用BCD编码(用4个二进制位表示一个十进制数)
● 时钟数据有:年月日时分秒和星期
● 能够对闰年的年、月、日进行自动处理
● 具有报警功能(中断:INT_RTC)
● 具有独立的电源输入
● 提供毫秒级时钟中断(可用于嵌入式实时操作系统的内核时钟)
2. 结构
2410的RTC主要由五部分构成:
● 时钟发生器
● 节拍发生器
● 时间与日期计数器
● 报警发生器
● 控制逻辑
如下图所示:
3. 寄存器
控制寄存器:RTCCON
报警控制寄存器:RTCALM
实时时钟计数器:TICNT
报警时间寄存器:ALMSEC,ALMMIN,ALMHOUR,ALMDATE,ALMMON,ALMYEAR
4. 实时时钟编程步骤
1)初始化实时时钟
void inittime()
{
rRTCCON=0x0;
}
2)向实时时钟寄存器写入当前时间
void settime(struct time *t)
{
rRTCCON|=0x01;
rBCDYEAR=t->year;
rBCDMON=t->mon;
rBCDDAY=t->weekday;
rBCDDATE=t->day;
rBCDHOUR=t->hour;
rBCDMIN=t->min;
rBCDSEC=t->sec;
rRTCCON&=0xFE;
}
3)读取时间并显示
void gettime(struct time *t)
{
rRTCCON|=0x01;
while(1)
{
t->year=rBCDYEAR;
t->mon=rBCDMON;
t->weekday=rBCDDAY;
t->day=rBCDDATE;
t->hour=rBCDHOUR;
t->min=rBCDMIN;
t->sec=rBCDSEC;
If(t->sec !=0)
break;
}
rRTCCON&=0xFE;
}
如果您喜欢这篇文章,可以加华清远见老师为好友,单击以下链接即可:
http://student.csdn.net/invite.php?u=45153&c=8af704eb3cd8e773
(作者:华清远见嵌入式培训中心 www.embedu.org www.farsight.com.cn )
1. 概述
RTC的功能:通常采用RTC来提供可靠地系统时间,包括年月日时分秒等信息。
RTC在系统处于关机状态下也能够正常工作,因为有后备电池供电
RTC的外围不需要太多的辅助电路,典型的只需要一个高精度的32.768KHz晶振和电容就可以了,如下图所示:
以前的产品里面RTC模块是一个独立的芯片,现在随着SOC技术的成熟,更多的是把RTC集成到芯片内部,S3C2410内部就集成了一个RTC模块。
很多嵌入式产品都有RTC功能,手机、电子日历、数码产品、机顶盒等
S3C2410的RTC具有如下特点:
● 时钟数据采用BCD编码(用4个二进制位表示一个十进制数)
● 时钟数据有:年月日时分秒和星期
● 能够对闰年的年、月、日进行自动处理
● 具有报警功能(中断:INT_RTC)
● 具有独立的电源输入
● 提供毫秒级时钟中断(可用于嵌入式实时操作系统的内核时钟)
2. 结构
2410的RTC主要由五部分构成:
● 时钟发生器
● 节拍发生器
● 时间与日期计数器
● 报警发生器
● 控制逻辑
如下图所示:
3. 寄存器
控制寄存器:RTCCON
报警控制寄存器:RTCALM
实时时钟计数器:TICNT
报警时间寄存器:ALMSEC,ALMMIN,ALMHOUR,ALMDATE,ALMMON,ALMYEAR
4. 实时时钟编程步骤
1)初始化实时时钟
void inittime()
{
rRTCCON=0x0;
}
2)向实时时钟寄存器写入当前时间
void settime(struct time *t)
{
rRTCCON|=0x01;
rBCDYEAR=t->year;
rBCDMON=t->mon;
rBCDDAY=t->weekday;
rBCDDATE=t->day;
rBCDHOUR=t->hour;
rBCDMIN=t->min;
rBCDSEC=t->sec;
rRTCCON&=0xFE;
}
3)读取时间并显示
void gettime(struct time *t)
{
rRTCCON|=0x01;
while(1)
{
t->year=rBCDYEAR;
t->mon=rBCDMON;
t->weekday=rBCDDAY;
t->day=rBCDDATE;
t->hour=rBCDHOUR;
t->min=rBCDMIN;
t->sec=rBCDSEC;
If(t->sec !=0)
break;
}
rRTCCON&=0xFE;
}
如果您喜欢这篇文章,可以加华清远见老师为好友,单击以下链接即可:
http://student.csdn.net/invite.php?u=45153&c=8af704eb3cd8e773
(作者:华清远见嵌入式培训中心 www.embedu.org www.farsight.com.cn )
相关文章推荐
- s3c2410实时时钟模块要点分析
- Linux 时钟模块分析2
- DS1302实时时钟模块显示到数码管(共阳极)
- 51单片机 指纹模块 PCF8563模块实时时钟(1)
- S3C2410 实验七—— 实时时钟(RTC)实验(未完)
- Linux操作系统的安全模块要点分析
- linux实时时钟驱动三之代码分析
- Linux 时钟模块分析1
- 51单片机 指纹模块 PCF8563模块实时时钟(2)
- 关于实时时钟模块DS1302使用心得
- ARM-Linux驱动--RTC(实时时钟)驱动分析 .
- linux中CPU各个模块的时钟驱动函数分析
- Python的socket模块源码中的一些实现要点分析
- S3C2410的时钟驱动分析
- 基于at91rm9200的i2c分析(DS1307实时时钟芯片)
- ARM-Linux驱动--RTC(实时时钟)驱动分析
- ARM-Linux驱动--RTC(实时时钟)驱动分析
- 基于at91rm9200的i2c分析(DS1307实时时钟芯片)
- FFmpeg架构之I/O模块分析
- php模块memcache和memcached区别分析