s3c2410實(shí)時(shí)時(shí)鐘(RTC)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在嵌入式系統(tǒng)中,實(shí)時(shí)時(shí)鐘單元可以提供可靠的時(shí)鐘,包括時(shí)、分、秒、年、月、日??梢蕴峁┖撩爰?jí)的時(shí)鐘中斷。
與實(shí)時(shí)時(shí)鐘相關(guān)的寄存器:
實(shí)時(shí)時(shí)鐘控制寄存器(RTCCON):
實(shí)時(shí)時(shí)鐘控制設(shè)置。
告警控制寄存器:
年、月、日、時(shí)、分、秒告警使能標(biāo)志,當(dāng)告警時(shí)間寄存器時(shí)間到達(dá)時(shí)引發(fā)實(shí)時(shí)時(shí)鐘報(bào)警中斷。
實(shí)時(shí)時(shí)鐘計(jì)數(shù)器:
用與存儲(chǔ)時(shí)鐘計(jì)數(shù)值,每過(guò)一個(gè)時(shí)鐘減一,到零時(shí)引發(fā)實(shí)時(shí)時(shí)鐘時(shí)間滴答中斷。
告警時(shí)間寄存器:
存儲(chǔ)告警時(shí)間的年、月、日、時(shí)、分、秒值
實(shí)時(shí)時(shí)鐘寄存器:
保存實(shí)際時(shí)間。
實(shí)時(shí)時(shí)鐘編程步驟:
1、初始化時(shí)鐘
2、向?qū)崟r(shí)時(shí)鐘寄存器寫入當(dāng)前的時(shí)間,即效表
3、讀取時(shí)間顯示
下面為試驗(yàn)代碼
struct time
{
unsigned char year;
unsigned char mon;
unsigned char day;
unsigned char weekday;
unsigned char hour;
unsigned char min;
unsigned char sec;
};
void inittime()
{
rRTCCON=0x0;
}
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;
}
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;
}
void enabletimeint(char value)
{
rRTCCON|=0x01;
value|=0x80;
rTICNT=value;
rRTCCON&=0xFE;
}
void disenabletimeint(void)
{
rRTCCON|=0x01;
rTICNT&=0x7f;
rRTCCON&=0xFE;
}
void setrtcalm(char value)
{
rRTCCON|=0x01;
rRTCALM=value;
rRTCCON&=0xFE;
}
void setalmtime(struct time *t)
{
rRTCCON|=0x01;
rALMYEAR=t->year;
rALMMON=t->mon;
rALMDATE=t->day;
rALMHOUR=t->hour;
rALMMIN=t->min;
rALMSEC=t->sec;
rRTCCON&=0xFE;
}
void printtime(struct time *t)
{
char h,l;
l=t->year&0x0F;
h=t->year&0xF0;
h=h>>4;
uart0_sendchar('2');
uart0_sendchar('0');
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('.');
l=t->mon&0x0F;
h=t->mon&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('.');
l=t->day&0x0F;
h=t->day&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(' ');
uart0_sendchar(' ');
l=t->hour&0x0F;
h=t->hour&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(':');
l=t->min&0x0F;
h=t->min&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(':');
l=t->sec&0x0F;
h=t->sec&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('r');
uart0_sendchar('n');
}