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

📄 rtc.c

📁 2440超级bios(ads1.2 rvds2.2)通用
💻 C
字号:
/*
*******************************************************************************
* file name:	rtc.c
* description:	rtc driver
* author:		xzChen(chxzh123@163.com)
* QQ / msn:		36725175 / chxzh123@hotmail.com
*******************************************************************************
*/

#ifndef __RTC_C__
#define __RTC_C__

#include "Includes.h"

void RTC_getdate(date *ret)
{
	ret->da_year= 2000 + rBCDYEAR;	
	ret->da_mon	= (rBCDMON>>4)*10+(rBCDMON&0x0f);
	ret->da_day	= (rBCDDATE>>4)*10+(rBCDDATE&0x0f);
}
void RTC_gettime(time *ret)
{
	ret->ti_hour= (rBCDHOUR>>4)*10+(rBCDHOUR&0x0f);
	ret->ti_min	= (rBCDMIN>>4)*10+(rBCDMIN&0x0f);
	ret->ti_hund= 0;
	ret->ti_sec	= (rBCDSEC>>4)*10+(rBCDSEC&0x0f);
}
void RTC_setdate(date *ret)
{
	rBCDYEAR= ret->da_year-2000;
	rBCDMON	= ((ret->da_mon/10)<<4)+(ret->da_mon%10);
	rBCDDATE= ((ret->da_day/10)<<4)+(ret->da_day%10);
}
void RTC_settime(time *ret)
{
	rBCDHOUR= ((ret->ti_hour/10)<<4)+(ret->ti_hour%10);
	rBCDMIN	= ((ret->ti_min/10)<<4)+(ret->ti_min%10);
	rBCDSEC = ((ret->ti_sec/10)<<4)+(ret->ti_sec%10);
}
void Rtc_Init(void)
{
	date sys_date;
	time sys_time;
	
    rRTCCON   = 0x0;			//No reset[3], Merge BCD counters[2], BCD clock select XTAL[1], RTC Control disable[0]
    rTICNT    = (1<<7) + 127;	//Tick time interrupt enable, Tick time count value 127
	RTC_getdate(&sys_date);
	RTC_gettime(&sys_time);
	if (sys_date.da_year> 2099 ||
		sys_date.da_mon	> 12 ||
		sys_date.da_day > 31 ||
		sys_time.ti_hour> 23 ||
		sys_time.ti_min > 59 ||
		sys_time.ti_sec > 59)
	{
		rBCDYEAR	= 0x06;
		rBCDMON		= 0x01;
		rBCDDATE	= 0x01;
		rBCDHOUR	= 0x00;
		rBCDMIN		= 0x00;
		rBCDSEC		= 0x00;
	}
	
    rRTCCON  = rRTCCON  & ~(0xf)  | 0x1;		//No reset, Merge BCD counters, 1/32768, RTC Control enable
    rBCDYEAR = rBCDYEAR & ~(0xff) | TESTYEAR;
    rBCDMON  = rBCDMON  & ~(0x1f) | TESTMONTH;
    rBCDDATE = rBCDDATE & ~(0x3f) | TESTDATE;         
    rBCDDAY  = rBCDDAY  & ~(0x7)  | TESTDAY;	//SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
    rBCDHOUR = rBCDHOUR & ~(0x3f) | TESTHOUR;
    rBCDMIN  = rBCDMIN  & ~(0x7f) | TESTMIN;
    rBCDSEC  = rBCDSEC  & ~(0x7f) | TESTSEC;

    rALMYEAR = TESTYEAR2;
    rALMMON  = TESTMONTH2;
    rALMDATE = TESTDATE2;
    rALMHOUR = TESTHOUR2;
    rALMMIN  = TESTMIN2;
    rALMSEC  = TESTSEC2 + 9; 

    rRTCALM  = 0x7f;                    //Global,Year,Month,Day,Hour,Minute,Second alarm enable
    rRTCCON  = 0x0;                     //No reset, Merge BCD counters, 1/32768, RTC Control disable
    rTICNT    = (0<<7) + 127;			//Tick time interrupt enable, Tick time count value 127
										//Period = (n + 1) / 128 second    n:Tick time count value(1~127)
}
#endif

⌨️ 快捷键说明

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