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

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




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

Time_TypeDef?Timer;//存放全局時間

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


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

/*************************************************************************************************************************
*函數(shù)????????:	u8?BCD_to_DEC(u8?BCD_Code)
*功能????????:	BCD碼轉(zhuǎn)DEC碼
*參數(shù)????????:	BCD碼
*返回????????:	DEC碼
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時間????????:	20120329
*最后修改時間:	20120329
*說明????????:	用于將BCD碼時間轉(zhuǎn)換為十進制時間,長度為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
*時間????????:	20120329
*最后修改時間:	20120329
*說明????????:	將BCD秒獲取后轉(zhuǎn)化為DEC秒
*************************************************************************************************************************/
__inline?u8?GetSec(void)
{
	return?(BCD_to_DEC(RTC->BCDSEC));//獲取秒
}

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

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

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


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



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



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


/*************************************************************************************************************************
*函數(shù)????????:	u8?DEC_to_BCD(u8?DEC_Code)
*功能????????:	DEC碼轉(zhuǎn)BCD碼
*參數(shù)????????:	DEC碼
*返回????????:	BCD碼
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時間????????:	20120329
*最后修改時間:	20120329
*說明????????:	用于將DEC碼時間轉(zhuǎn)換為BCD時間,長度為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ù)????????:	void?SetMin(u8?DEC_Min)
*功能????????:	設置分
*參數(shù)????????:	分
*返回????????:	無
*依賴????????:?	無
*作者????????:	cp1300@139.com
*時間????????:	20120329
*最后修改時間:	20120329
*說明????????:	設置時間,注意需要先開啟寫保護,否則無法寫入
*************************************************************************************************************************/
void?SetMin(u8?DEC_Min)
{
	RTC->BCDMIN?=?DEC_to_BCD(DEC_Min);//設置分
}

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

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


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


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



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



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


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


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

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



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




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






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


?//時間結(jié)構(gòu)體
typedef?struct?
{
	u8?hour;?	//小時
	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;//存放全局時間

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



#endif



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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(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)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

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

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

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

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

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

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

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

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

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

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

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

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(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)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

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