⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc.c

📁 S3C44B0X全套培训资料及源代码 e008s3c44b0x
💻 C
字号:
//about real-time-clock#include	"../ucos-ii/includes.h"               /* uC/OS interface */OS_EVENT *Rtc_Rw_Sem;                   //Rtc读写控制权旗语//and you can use it as folloeing://    Rtc_Rw_Sem=OSSemCreate(1);        //创建Rtc读写控制权旗语,初值为1满足互斥条件////    OSSemPend(Rtc_Rw_Sem,0,&err);//    OSSemPost(Rtc_Rw_Sem);void InitRtc(){	Rtc_Rw_Sem=OSSemCreate(1);        //创建Rtc读写控制权旗语,初值为1满足互斥条件//}void Get_Rtc(PstructTime time){	unsigned char err;	OSSemPend(Rtc_Rw_Sem,0,&err);		rRTCCON = 0x01;         // R/W enable, 1/32768, Normal(merge), No reset	time->year=rBCDYEAR;	time->month=rBCDMON;	time->date=rBCDDATE;	time->day=rBCDDAY;	time->hour=rBCDHOUR;	time->minute=rBCDMIN;	time->second=rBCDSEC;	rRTCCON = 0x00;       // R/W disable(for power consumption), 1/32768, Normal(merge), No reset    		OSSemPost(Rtc_Rw_Sem);}U8 Rtc_IsTimeChange(U32 whichChange){	unsigned char err;	static U32 second=0xff,minute=0xff,hour=0xff,day=0xff;	U8 retvalue=FALSE;	OSSemPend(Rtc_Rw_Sem,0,&err);	rRTCCON = 0x01;         // R/W enable, 1/32768, Normal(merge), No reset	switch(whichChange){	case RTC_SECOND_CHANGE:		if(rBCDSEC!=second){			retvalue=TRUE;			second=rBCDSEC;		}		break;	case RTC_MINUTE_CHANGE:		if(rBCDMIN==minute){			retvalue=TRUE;			minute=rBCDMIN;		}		break;	case RTC_HOUR_CHANGE:		if(rBCDHOUR==hour){			retvalue=TRUE;			hour=rBCDHOUR;		}		break;	case RTC_DAY_CHANGE:{			retvalue=TRUE;			day=rBCDDAY;		}		break;	}	rRTCCON = 0x00;       // R/W disable(for power consumption), 1/32768, Normal(merge), No reset    	OSSemPost(Rtc_Rw_Sem);	return retvalue;}void Set_Rtc(PstructTime time){	unsigned char err;	OSSemPend(Rtc_Rw_Sem,0,&err);	rRTCCON = 0x01;         // R/W enable, 1/32768, Normal(merge), No reset	rBCDYEAR=time->year;	rBCDMON=time->month;	rBCDDAY=time->day;	rBCDHOUR=time->hour;	rBCDMIN=time->minute;	rBCDSEC=time->second;	rRTCCON = 0x00;       // R/W disable(for power consumption), 1/32768, Normal(merge), No reset    	OSSemPost(Rtc_Rw_Sem);}void GetBCDTime2Str(U16* fmtchar,U32 bcdata){	*fmtchar=(bcdata>>4)+'0';	fmtchar++;	*fmtchar=(bcdata&0xf)+'0';}void Rtc_Format(char*  fmtchar, U16* outstr){	structTime time;	Get_Rtc(&time);	while(*fmtchar){		if((*fmtchar)==((U16)'%')){			switch(*(fmtchar+1)){			case 'Y':				GetBCDTime2Str(outstr, time.year);				fmtchar+=2;				outstr+=2;				break;			case 'M':	//month				GetBCDTime2Str(outstr, time.month);				fmtchar+=2;				outstr+=2;				break;			case 'D':				GetBCDTime2Str(outstr, time.day);				fmtchar+=2;				outstr+=2;				break;			case 'H':				GetBCDTime2Str(outstr, time.hour);				fmtchar+=2;				outstr+=2;				break;			case 'I':	//minute				GetBCDTime2Str(outstr, time.minute);				fmtchar+=2;				outstr+=2;				break;			case 'S':				GetBCDTime2Str(outstr, time.second);				fmtchar+=2;				outstr+=2;				break;			case '%':				*outstr='%';				fmtchar++;				outstr++;			case NULL:				return;			}		}		else{			*outstr=*fmtchar;			fmtchar++;			outstr++;		}	}	*outstr=0;}void Set_Rtc_Clock(PstructClock time){	unsigned char err;	OSSemPend(Rtc_Rw_Sem,0,&err);	rRTCCON = 0x01;         // R/W enable, 1/32768, Normal(merge), No reset	rBCDHOUR=time->hour;	rBCDMIN=time->minute;	rBCDSEC=time->second;	rRTCCON = 0x00;       // R/W disable(for power consumption), 1/32768, Normal(merge), No reset    	OSSemPost(Rtc_Rw_Sem);}void Set_Rtc_Date(PstructDate time){	unsigned char err;	OSSemPend(Rtc_Rw_Sem,0,&err);	rRTCCON = 0x01;         // R/W enable, 1/32768, Normal(merge), No reset	rBCDYEAR=time->year;	rBCDMON=time->month;	rBCDDAY=time->day;	rRTCCON = 0x00;       // R/W disable(for power consumption), 1/32768, Normal(merge), No reset    	OSSemPost(Rtc_Rw_Sem);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -