當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]相對于STM32,6410的RTC是相當(dāng)?shù)暮唵?/***************************************************************************

相對于STM32,6410的RTC是相當(dāng)?shù)暮唵?




/*************************************************************************************************************
?*?文件名:	RTC.c
?*?功能:		S3C6410?RTC底層驅(qū)動(dòng)函數(shù)
?*?作者:		cp1300@139.com
?*?創(chuàng)建時(shí)間:	2012年3月28日21:52
?*?最后修改時(shí)間:2012年3月28日
?*?詳細(xì):		RTC相關(guān)底層驅(qū)動(dòng)函數(shù)
*************************************************************************************************************/
#include?"system.h"
#include?"rtc.h"

Time_TypeDef?Timer;//存放全局時(shí)間

//內(nèi)部靜態(tài)變量聲明
static?bool?uAutoTimeUpdate?=?FALSE;	//標(biāo)記是否自動(dòng)由中斷更新時(shí)間
static?bool?uSecEnd?=?FALSE;			//秒結(jié)束標(biāo)志,結(jié)束后就可以更新時(shí)間了


/*************************************************************************************************************************
*函數(shù)????????:	void?RTC_Install(u8?ENABLE)
*功能????????:	RTC設(shè)置使能與失能
*參數(shù)????????:	Enable:使能時(shí)鐘設(shè)置,Disable:使能時(shí)鐘設(shè)置
*返回????????:	無
*依賴?????:?	底層宏定義
*作者????????:	cp1300@139.com
*時(shí)間?????:	20120328
*最后修改時(shí)間:	20120329
*說明?????:	平時(shí)不設(shè)置時(shí)應(yīng)該設(shè)置為Disable
*************************************************************************************************************************/
void?RTC_Install(u8?ENABLE)
{
	if(ENABLE)
		RTC->CON?|=??BIT0;//RTC時(shí)鐘設(shè)置使能
	else
		RTC->CON?&=??~BIT0;//RTC時(shí)鐘設(shè)置失能
}

/*************************************************************************************************************************
*函數(shù)????????:	u8?BCD_to_DEC(u8?BCD_Code)
*功能????????:	BCD碼轉(zhuǎn)DEC碼
*參數(shù)????????:	BCD碼
*返回????????:	DEC碼
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	用于將BCD碼時(shí)間轉(zhuǎn)換為十進(jìn)制時(shí)間,長度為8bit
*************************************************************************************************************************/
u8?BCD_to_DEC(u8?BCD_Code)
{
	return?((BCD_Code?>>?4)?*?10?+?(BCD_Code?&?0x0f));
}


/*************************************************************************************************************************
*函數(shù)????????:	__inline?u8?GetSec(void)
*功能????????:	獲取秒
*參數(shù)????????:	無
*返回????????:	秒
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將BCD秒獲取后轉(zhuǎn)化為DEC秒
*************************************************************************************************************************/
__inline?u8?GetSec(void)
{
	return?(BCD_to_DEC(RTC->BCDSEC));//獲取秒
}

/*************************************************************************************************************************
*函數(shù)????????:	__inline?u8?GetMin(void)
*功能????????:	獲取分
*參數(shù)????????:	無
*返回????????:	分
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將BCD分獲取后轉(zhuǎn)化為DEC分
*************************************************************************************************************************/
__inline?u8?GetMin(void)
{
	return?(BCD_to_DEC(RTC->BCDMIN));//獲取分
}

/*************************************************************************************************************************
*函數(shù)????????:	__inline?u8?GetHour(void)
*功能????????:	獲取時(shí)
*參數(shù)????????:	無
*返回????????:	時(shí)
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將BCD時(shí)獲取后轉(zhuǎn)化為DEC時(shí)
*************************************************************************************************************************/
__inline?u8?GetHour(void)
{
	return?(BCD_to_DEC(RTC->BCDHOUR));//獲取時(shí)
}

/*************************************************************************************************************************
*函數(shù)????????:	__inline?u8?GetWeek(void)
*功能????????:	獲取星期
*參數(shù)????????:	無
*返回????????:	星期
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將BCD星期獲取后轉(zhuǎn)化為DEC星期,1-7:星期一-星期日
*************************************************************************************************************************/
__inline?u8?GetWeek(void)
{
	return?(BCD_to_DEC(RTC->BCDDAY));//獲取星期
}


/*************************************************************************************************************************
*函數(shù)????????:	__inline?u8?GetDate(void)
*功能????????:	獲取日
*參數(shù)????????:	無
*返回????????:	日
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將BCD日獲取后轉(zhuǎn)化為DEC日
*************************************************************************************************************************/
__inline?u8?GetDate(void)
{
	return?(BCD_to_DEC(RTC->BCDDATE));//獲取日
}


/*************************************************************************************************************************
*函數(shù)????????:	__inline?u8?GetMonth(void)
*功能????????:	獲取月
*參數(shù)????????:	無
*返回????????:	月
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將BCD月獲取后轉(zhuǎn)化為DEC月
*************************************************************************************************************************/
__inline?u8?GetMonth(void)
{
	return?(BCD_to_DEC(RTC->BCDMON));//獲取月
}



/*************************************************************************************************************************
*函數(shù)????????:	__inline?u8?GetYear(void)
*功能????????:	獲取年
*參數(shù)????????:	無
*返回????????:	年
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將BCD年獲取后轉(zhuǎn)化為DEC年
*************************************************************************************************************************/
__inline?u8?GetYear(void)
{
	return?(BCD_to_DEC(RTC->BCDYEAR));//獲取年
}



/*************************************************************************************************************************
*函數(shù)????????:	void?UpdateTimer(void)
*功能????????:	更新時(shí)間
*參數(shù)????????:	無
*返回????????:	無
*依賴????????:?	底層函數(shù)
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	將時(shí)間放在了全局的結(jié)構(gòu)Timer中
*************************************************************************************************************************/
void?UpdateTimer(void)
{
	Timer.w_year?=?2000?+?GetYear();	//更新年,起點(diǎn)為2000年
	Timer.w_month?=?GetMonth();	//更新月
	Timer.w_date?=?GetDate();	//更新日
	Timer.week?=?GetWeek();		//更新星期
	Timer.hour?=?GetHour();		//更新時(shí)
	Timer.min?=?GetMin();		//更新分
	Timer.sec?=?GetSec();		//更新秒
}


/*************************************************************************************************************************
*函數(shù)????????:	u8?DEC_to_BCD(u8?DEC_Code)
*功能????????:	DEC碼轉(zhuǎn)BCD碼
*參數(shù)????????:	DEC碼
*返回????????:	BCD碼
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	用于將DEC碼時(shí)間轉(zhuǎn)換為BCD時(shí)間,長度為8bit
*************************************************************************************************************************/
u8?DEC_to_BCD(u8?DEC_Code)
{
	u8?temp;
	
	if(DEC_Code?>?99)
		return?0;
	temp?=?DEC_Code?/?10;
	temp?<BCDSEC?=?DEC_to_BCD(DEC_Sec);//設(shè)置取秒
}

/*************************************************************************************************************************
*函數(shù)????????:	void?SetMin(u8?DEC_Min)
*功能????????:	設(shè)置分
*參數(shù)????????:	分
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置時(shí)間,注意需要先開啟寫保護(hù),否則無法寫入
*************************************************************************************************************************/
void?SetMin(u8?DEC_Min)
{
	RTC->BCDMIN?=?DEC_to_BCD(DEC_Min);//設(shè)置分
}

/*************************************************************************************************************************
*函數(shù)????????:	void?SetHour(u8?DEC_Hour)
*功能????????:	設(shè)置時(shí)
*參數(shù)????????:	時(shí)
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置時(shí)間,注意需要先開啟寫保護(hù),否則無法寫入
*************************************************************************************************************************/
void?SetHour(u8?DEC_Hour)
{
	RTC->BCDHOUR?=?DEC_to_BCD(DEC_Hour);//設(shè)置時(shí)
}

/*************************************************************************************************************************
*函數(shù)????????:	void?SetWeek(u8?DEC_Week)
*功能????????:	設(shè)置星期
*參數(shù)????????:	星期
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置時(shí)間,注意需要先開啟寫保護(hù),否則無法寫入
*************************************************************************************************************************/
void?SetWeek(u8?DEC_Week)
{
	RTC->BCDDAY?=?DEC_to_BCD(DEC_Week);//設(shè)置星期
}


/*************************************************************************************************************************
*函數(shù)????????:	void?SetDate(u8?DEC_Date)
*功能????????:	設(shè)置日
*參數(shù)????????:	日
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置時(shí)間,注意需要先開啟寫保護(hù),否則無法寫入
*************************************************************************************************************************/
void?SetDate(u8?DEC_Date)
{
	RTC->BCDDATE?=?DEC_to_BCD(DEC_Date);//設(shè)置日
}


/*************************************************************************************************************************
*函數(shù)????????:	void?SetMonth(u8?DEC_Month)
*功能????????:	設(shè)置月
*參數(shù)????????:	月
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置時(shí)間,注意需要先開啟寫保護(hù),否則無法寫入
*************************************************************************************************************************/
void?SetMonth(u8?DEC_Month)
{
	RTC->BCDMON?=?DEC_to_BCD(DEC_Month);//設(shè)置月
}



/*************************************************************************************************************************
*函數(shù)????????:	void?SetYear(u8?DEC_Year)
*功能????????:	設(shè)置年
*參數(shù)????????:	年
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置時(shí)間,注意需要先開啟寫保護(hù),否則無法寫入
*************************************************************************************************************************/
void?SetYear(u8?DEC_Year)
{
	RTC->BCDYEAR?=?DEC_to_BCD(DEC_Year);//設(shè)置年
}



/*************************************************************************************************************************
*函數(shù)????????:	void?InstallData(u16?Year,u8?Month,u8?Date,u8?Week)
*功能????????:	設(shè)置日期
*參數(shù)????????:	年,月,日,星期
*返回????????:	無
*依賴????????:?	底層函數(shù)
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置會(huì)自動(dòng)去除寫保護(hù),年范圍為2000-2099
*************************************************************************************************************************/
void?InstallData(u16?Year,u8?Month,u8?Date,u8?Week)
{
	RTC_Install(ENABLE);	//允許更新時(shí)間
	SetYear(Year-2000);			//設(shè)置年
	SetMonth(Month);		//設(shè)置月
	SetDate(Date);			//設(shè)置日
	SetWeek(Week);			//設(shè)置星期
	RTC_Install(DISABLE);	//禁止更新時(shí)間
}


/*************************************************************************************************************************
*函數(shù)????????:	void?InstallTime(u8?Hour,u8?Min,u8?Sec)
*功能????????:	設(shè)置時(shí)間
*參數(shù)????????:	時(shí),分,秒
*返回????????:	無
*依賴????????:?	底層函數(shù)
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120329
*說明????????:	設(shè)置會(huì)自動(dòng)去除寫保護(hù)
*************************************************************************************************************************/
void?InstallTime(u8?Hour,u8?Min,u8?Sec)
{
	RTC_Install(ENABLE);	//允許更新時(shí)間
	SetHour(Hour);			//設(shè)置時(shí)
	SetMin(Min);			//設(shè)置分
	SetSec(Sec);			//設(shè)置秒
	RTC_Install(DISABLE);	//禁止更新時(shí)間
}


/*************************************************************************************************************************
*函數(shù)????????:	__inline?ClearIntP(void)
*功能????????:	清除INTP中斷標(biāo)志
*參數(shù)????????:	無
*返回????????:	無
*依賴????????:?	底層函數(shù)
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120331
*最后修改時(shí)間:	20120331
*說明????????:	無
*************************************************************************************************************************/
__inline?ClearIntP(void)
{
	RTC->INTP?|=?BIT0;	//寫1清除TIC中斷
}

/*************************************************************************************************************************
*函數(shù)????????:	bool?RTC_SecEnd(void)
*功能????????:	判斷秒是否到達(dá)
*參數(shù)????????:	無
*返回????????:	TRUE:秒到達(dá);FALSE:未到達(dá)
*依賴????????:?	底層函數(shù)
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120331
*最后修改時(shí)間:	20120331
*說明????????:	無
*************************************************************************************************************************/
bool?RTC_SecEnd(void)
{
	if(uAutoTimeUpdate?==?TRUE)	//開啟了自動(dòng)更新時(shí)間
	{
		if(uSecEnd?==?TRUE)		//秒結(jié)束
		{
			uSecEnd?=?FALSE;	//清除標(biāo)志
			return?TRUE;
		}
		else
			return?FALSE;
	}
	if(RTC->INTP?&?BIT0)	//TIC中斷標(biāo)志置位
	{
		ClearIntP();		//清除中斷標(biāo)志
		return?TRUE;
	}
	return?FALSE;
}



//TIC中斷服務(wù)程序,用于自動(dòng)更新時(shí)間
void?__irq?Isr_RTC_InspectTick(void)
{
	uSecEnd?=?TRUE;					//秒結(jié)束時(shí)間成立
	UpdateTimer();					//更新所有時(shí)間
	ClearIntP();					//清除中斷標(biāo)志
	VICInterruptEnd();	//中斷退出
}




/*************************************************************************************************************************
*函數(shù)????????:	void?RTC_Init(u8?AutoUpdate)
*功能????????:	初始化RTC
*參數(shù)????????:	EnableInt:是否開啟中斷
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時(shí)間????????:	20120329
*最后修改時(shí)間:	20120331
*說明????????:	判斷時(shí)鐘是否寫保護(hù),如果沒,則寫開啟保護(hù),并更新時(shí)間
*************************************************************************************************************************/
void?RTC_Init(FunctionalState?EnableInt)
{
	RTC->TICNT?=?32768-1;
	RTC->CON?=?BIT8;		//使能標(biāo)記定時(shí)器,32768分頻
	RTC_Install(DISABLE);	//開啟時(shí)鐘寫保護(hù)
	UpdateTimer();			//更新所有時(shí)間
	if(EnableInt?==?ENABLE)			//使能自動(dòng)更新時(shí)間
	{
		uAutoTimeUpdate?=?TRUE;//標(biāo)志有效
		Set_IsrAddr(INT_RTC_TIC,(u32)Isr_RTC_InspectTick);//設(shè)置中斷向量地址
		Set_IntEnable(INT_RTC_TIC,ENABLE);//使能TIC中斷
	}
	else
	{
		uAutoTimeUpdate?=?FALSE;
		Set_IntEnable(INT_RTC_TIC,DISABLE);//關(guān)閉TIC中斷
	}
}






/*************************************************************************************************************
?*?文件名:	RTC.H
?*?功能:		S3C6410?RTC底層驅(qū)動(dòng)函數(shù)
?*?作者:		陳鵬
?*?創(chuàng)建時(shí)間:	2012年3月28日21:52
?*?最后修改時(shí)間:2012年3月28日
?*?詳細(xì):		RTC相關(guān)底層驅(qū)動(dòng)函數(shù)
*************************************************************************************************************/
#ifndef?_RTC_H_
#define?_RTC_H_


?//時(shí)間結(jié)構(gòu)體
typedef?struct?
{
	u8?hour;?	//小時(shí)
	u8?min;	?	//分鐘
	u8?sec;		//秒			
	//公歷日月年周
	u16?w_year;	?	//年
	u8??w_month;	//月
	u8??w_date;		//日
	u8??week;		//星期
#if?_Lunar_calendar
	//農(nóng)歷日月年節(jié)氣
	u8?l_year;		//年
	u8?l_month;		//月
	u8?l_data;		//日
	u8?SolarTerms;	//農(nóng)歷節(jié)氣?
#endif
}Time_TypeDef;

extern?Time_TypeDef?Timer;//存放全局時(shí)間

void?UpdateTimer(void);	//更新全部時(shí)間
void?RTC_Init(FunctionalState?EnableInt);	//初始化RTC
void?InstallData(u16?Year,u8?Month,u8?Date,u8?Week);	//設(shè)置日期
void?InstallTime(u8?Hour,u8?Min,u8?Sec);				//設(shè)置時(shí)間
bool?RTC_SecEnd(void);							//判斷秒是否到達(dá)



#endif



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉