五 ARM9(S3C2440)的實(shí)時(shí)時(shí)鐘(RTC)-理論知識(shí)及程序?qū)嵗v解
它具有以下特點(diǎn):
•
•
•
•
•
實(shí)時(shí)時(shí)鐘特殊功能寄存器
實(shí)時(shí)時(shí)鐘控制(RTCCON)寄存器
RTCCON 寄存器由4 位組成,如控制BCD 寄存器讀/寫(xiě)使能的RTCEN、CLKSEL、CNTSEL 和測(cè)試用的
CLKRST。
RTCEN 位可以控制所有CPU 與RTC 之間的接口,因此在系統(tǒng)復(fù)位后在RTC 控制程序中必須設(shè)置為1 來(lái)使
能數(shù)據(jù)的讀/寫(xiě)。同樣的在掉電前,RTCEN 位應(yīng)該清除為0 來(lái)預(yù)防誤寫(xiě)入RTC 寄存器中。
RTC 鬧鐘控制(RTCALM)寄存器
RTCALM 寄存器決定了鬧鐘使能和鬧鐘時(shí)間。請(qǐng)注意RTCALM 寄存器在掉電模式中同時(shí)通過(guò)INT_RTC 和
PMWKUP 產(chǎn)生鬧鐘信號(hào),但是在正常工作模式中只產(chǎn)生INT_RTC。
鬧鐘秒數(shù)據(jù)(ALMSEC)寄存器:鬧鐘秒數(shù)據(jù)寄存器
同理:鬧鐘分?jǐn)?shù)據(jù)(ALMMIN)寄存器,鬧鐘時(shí)數(shù)據(jù)(ALMHOUR)寄存器,鬧鐘日數(shù)據(jù)(ALMDATE)寄存器,鬧鐘月數(shù)據(jù)(ALMMON)寄存器,鬧鐘年數(shù)據(jù)(ALMYEAR)寄存器
BCD 秒(BCDSEC)寄存器:存儲(chǔ)的是當(dāng)前時(shí)間秒,同樣還有,BCDMIN,BCDHOUR,BCDDATE(日),BCDDAY(星期),BCDMON,BCDYEAR
注意以上這些寄存器存儲(chǔ)的數(shù)據(jù)都是BCD碼,即是自動(dòng)處理的數(shù)據(jù),如果自己想做時(shí)鐘顯示時(shí),如果調(diào)時(shí)間的請(qǐng)注意時(shí)間加減時(shí)實(shí)際上是十六進(jìn)制的
下面結(jié)合具體的程序介紹一下RTC操作
程序編寫(xiě)包括三步,第一步是時(shí)鐘初始化,第二步把嵌入式控制系統(tǒng)投入運(yùn)行時(shí)要將當(dāng)前準(zhǔn)確時(shí)間寫(xiě)入RTC,俗稱效表;第三步是系統(tǒng)正常運(yùn)行后,讀取RTC時(shí)間在LCD上顯示。
廢話少說(shuō),上程序(開(kāi)發(fā)板FL2440)
#include "def.h"
#include "option.h"
#include "2440addr.h"
U8 beep=1;
void __irq IsrAlarm(void);//下面這些都是函數(shù)聲明
void delay(int x);
void RTC_Alm_Set(U8 almyear,U8 almmon,U8 almdate,
void OpenAlarm(void) ;
void CloseAlarm(void) ;
//==================================================================================
void RTC_Time_Set( U8 wRTCyear,U8 wRTCmon,U8 wRTCdate,U8 wRTCday,U8 wRTChour,U8 wRTCmin,U8 wRTCsec )//時(shí)間設(shè)置函數(shù),操作是不是比較簡(jiǎn)單?呵呵
{
}
void RTC_Alm_Set(U8 almyear,U8 almmon,U8 almdate,
{
}
void OpenAlarm(void) //開(kāi)鬧鐘函數(shù)
{
}
void CloseAlarm(void)
{
}
void __irq IsrAlarm(void)
{
}
void delay(int x)//延時(shí)函數(shù)
{
}
//==================================================================================
void RTCmain(void)
{
}
評(píng)論