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

📄 drv_calendar.c

📁 Enhanced LPC213x device drivers,tools ADS1.2
💻 C
字号:
#include "config_60_61.h"
#include "config_GD61.h"
#include "include_GD61.h"

#include "config_60_61.h"
#include "config_GD60.h"
#include "include_GD60.h"

#include "Def_ATT7022.h"

volatile CALENDAR CurrentTime;
volatile CALENDAR SettingTime;
////////////////////////////////////////////////////////////////////////
// the following is is for GD60
volatile uint8 DispSecondTick    =0;	// for display of time
volatile uint8 U1_EngSecondTick  =0;	// for U1_Energy accumulation Function
volatile uint8 U2_EngSecondTick  =0;	// for U2_Energy accumulation Function
volatile uint8 EnergyMeterSTick  =0;
volatile uint8 TempSampleFlag    =0;	// for temperature sampling task
volatile uint8 KKK_Check_Timer   =0;	// for KKK check
volatile uint8 TempSample_Timer  =0;
volatile uint8 GetCurrentDataTick=0;
volatile uint8 U1U2_ReadyTimer=U1U2READYTIME;	// DSP get ready time

////////////////////////////////////////////////////////////////////////

volatile char TimerActSecTick	   = 0;	// for timer_control Function
volatile char HeartBeetTimeSecTick = 0;	// for display of time

volatile uint16 enTimerLightCnt;		//decrease 1 every second
volatile uint16 PW_AlarmEnTimer;
volatile uint16 LD_AlarmEnTimer;
volatile uint16 CC1000ResetTimer;		//CC1000 reset timer
volatile uint16 SysReadyTimer;
volatile uint16 OutReadyTimer;
volatile uint16 LD_AlarmCounter;
volatile uint16 PW_AlarmCounter;

ROUTETASK routeTask[MAX_ROUTE_TASK_NUM];
ROUTETASK relayErrorTask[MAX_ROUTE_TASK_NUM];
extern uint16 RF_ModuleAddress;		//=0x5555;	//module address.
extern volatile uint16 WireCutAlarmSecTimer;	

////////////////////////////////////////////////////////////////////////
//volatile CALENDAR CurrentTime;
volatile uint8    NegoSendTimerSe;
volatile uint8    PPP_Test_Tick;
volatile uint16   AtuoPingTimerS;
/////////////////////////////////////////////////////////////////////

void __irq RTC_InterruptServing(void);
void ReadDateTime(void);
void Start_RTC(void);
void SettingRTC(CALENDAR Ctime);
void SetDefaultRTC(void);

/*******************************************************************/
//status ok
void __irq RTC_InterruptServing(void)
{
uint32 datas;
uint32 times;
uint8 i;

	times = CTIME0;					// 读取完整的时钟寄存器
	datas = CTIME1;

	CurrentTime.xYEAR  = (datas >> 16) & 0xfff;	// 获取 年
	CurrentTime.xMONTH = (datas >> 8)  & 0x0f;	// 获取 月
	CurrentTime.xDOM   =  datas        & 0x1f;	// 获取 日
	CurrentTime.xDOW   = (times >> 24) & 0x07;	// 获取 星期
	CurrentTime.xHOUR  = (times >> 16) & 0x1f;	// 获取 小时
	CurrentTime.xMIN   = (times >> 8)  & 0x3f;	// 获取 分钟
	CurrentTime.xSEC   =  times        & 0x3f;	// 获取 秒钟

//// for PPP negotiation
	if(NegoSendTimerSe != 0x0)	NegoSendTimerSe --;
	if(PPP_Test_Tick   != 0x0)  PPP_Test_Tick --;
	if(AtuoPingTimerS  != 0x0)	AtuoPingTimerS--;	

////
	RUN_LED_Flash();				//flash REv2 led
	
//// run system timer
	DispSecondTick  ++;				//as display of timer
	U1_EngSecondTick++;				//for U1_Energy accumulation function
	U2_EngSecondTick++;				//for U2_Energy accumulation function
	EnergyMeterSTick++;				//as energy meter timer
	KKK_Check_Timer ++;				//for Att7022 configuration data check function
	TempSample_Timer++;

////
	if(TempSample_Timer>=10){
		TempSample_Timer=0;
		TempSampleFlag = GET_SAMPLE_TEP;	//enable temperature sample
	}
	
////	
	TimerActSecTick     =1;			//for timer_control Function
	HeartBeetTimeSecTick=1;			//for display of time

////
	for(i=0;i<MAX_ROUTE_TASK_NUM;i++){	//
		if((routeTask[i].activityFlag==ENABLE_FLAG)&&
		   (routeTask[i].secondTimer!=0))	routeTask[i].secondTimer--;
	}

////
	if(U1U2_ReadyTimer>0)		U1U2_ReadyTimer--;
	if(GetCurrentDataTick!=0)	GetCurrentDataTick--;
	if(enTimerLightCnt!=0)		enTimerLightCnt--;
	if(AutoVoltageTimer!=0)		AutoVoltageTimer--;
	if(PW_AlarmEnTimer!=0)		PW_AlarmEnTimer--;
	if(LD_AlarmEnTimer!=0)		LD_AlarmEnTimer--;
	if(CC1000ResetTimer!=0)		CC1000ResetTimer--;
	if(SysReadyTimer!=0)		SysReadyTimer--;
	if(OutReadyTimer!=0)		OutReadyTimer--;
	if(WireCutAlarmSecTimer!=0)	WireCutAlarmSecTimer--;

////
	if((CurrentTime.xHOUR==EN_ALARM_MSG_SENDING_TIME)&&
	   (CurrentTime.xMIN ==(RF_ModuleAddress*3)/60)&&
	   (CurrentTime.xSEC ==(RF_ModuleAddress*3)%60)){
	   
			LD_AlarmCounter=0;		//enable alarm message sending at about 10 hour
			PW_AlarmCounter=0;
	}

////
    ILR = 0x01;						// 清除RTC增量中断标志
    VICVectAddr = 0;				// 向量中断结束
}

//////////////////////////////////////////////////////////////////
//status ok

void ReadDateTime(void)
{
uint32 datas;
uint32 times;

	IRQDisable();	
	times = CTIME0;								// 读取完整的时钟寄存器
	datas = CTIME1;
	IRQEnable();
			
	CurrentTime.xYEAR  = (datas >> 16) & 0xfff;	// 获取 年
	CurrentTime.xMONTH = (datas >> 8)  & 0x0f;	// 获取 月
	CurrentTime.xDOM   =  datas        & 0x1f;	// 获取 日
	CurrentTime.xDOW   = (times >> 24) & 0x07;	// 获取 星期
	CurrentTime.xHOUR  = (times >> 16) & 0x1f;	// 获取 小时
	CurrentTime.xMIN   = (times >> 8)  & 0x3f;	// 获取 分钟
	CurrentTime.xSEC   = times         & 0x3f;	// 获取 秒钟
}

/*********************************************************************
** 函数名称 :RTCInit()
** 函数功能 :初始化实时时钟
** 入口参数 :无
** 出口参数 :无
status ok
*********************************************************************/
void Start_RTC(void)
{
	IRQDisable();
	
////
#ifdef SET_DEFAULT_TIME
	SetDefaultRTC();	//set default day and time
#endif
////
    CCR   = 0x02;          			// using internal clk source,, CTC reset
//  CCR   = 0x12;          			// 使用独立振荡器, CTC reset

	PREINT	= LPC_FPCLK/32768-1;			//set prescale, int port
	PREFRAC	= LPC_FPCLK-((PREINT+1)*32768);	//set prescale, fraction port

    CCR   = 0x01;					// using internal clk source,RTC start
//  CCR   = 0x11;					// 使用独立振荡器, RTC start

    ILR   = 0x03;           		// 清除增量中断标志
	CIIR  = 0x01;					// 设置秒值的增量产生1次中断

	/* VIC初始化 */
    VICVectCntl2 = 0x20|INT_RTC;	// 分配通道2
    VICVectAddr2 = (int)RTC_InterruptServing;	// 设置中断服务程序地址
    VICIntEnable = (1<<INT_RTC);	// 使能RTC中断
    
    ILR 		= 0x01;				// 清除RTC增量中断标志
    VICVectAddr = 0;				// 向量中断结束
    
	IRQEnable();	
}

/////////////////////////////////////////////////////////////////////
//status ok
void SettingRTC (CALENDAR Ctime)
{
	IRQDisable();	   
  
    CCR   = 0x02;       // using internal clk source,, CTC reset
	RTC_YEAR	= Ctime.xYEAR;
	RTC_MONTH	= Ctime.xMONTH;
	RTC_DOM		= Ctime.xDOM;
	RTC_DOW		= Ctime.xDOW;
	RTC_HOUR	= Ctime.xHOUR;
	RTC_MIN		= Ctime.xMIN;
	RTC_SEC		= Ctime.xSEC;
	CCR   = 0x01;		// using internal clk source,RTC start
	
////
	SetSOE_Timer(RTC_HOUR*3600*1000+
	                  RTC_MIN*60*1000+
	                     RTC_SEC*1000);	// synchronize SOE timer
	
	IRQEnable();		// 使能IRQ中断 

////
	CurrentTime.xYEAR  = Ctime.xYEAR;	// 获取 年
	CurrentTime.xMONTH = Ctime.xMONTH;	// 获取 月
	CurrentTime.xDOM   = Ctime.xDOM;	// 获取 日
	CurrentTime.xDOW   = Ctime.xDOW;	// 获取 星期
	CurrentTime.xHOUR  = Ctime.xHOUR;	// 获取 小时
	CurrentTime.xMIN   = Ctime.xMIN;	// 获取 分钟
	CurrentTime.xSEC   = Ctime.xSEC;	// 获取 秒钟
}

///////////////////////////////////////////////////////////////////
//status ok
void SetDefaultRTC(void)
{ 
	if((POWERUP_FLAG1!=WARM_START_FLAG1)||
	   (POWERUP_FLAG2!=WARM_START_FLAG2)){

////
		IRQDisable();
		
    	CCR   = 0x02;   	 // using internal clk source,, CTC reset
    	RTC_YEAR	= 2006;
		RTC_MONTH	= 10;
		RTC_DOM		= 1;
		RTC_DOW		= 4;
		
		RTC_HOUR	= 23;
		RTC_MIN		= 57;
		RTC_SEC		= 0;
    	CCR   = 0x01;		// using internal clk source,RTC start
////
		SetSOE_Timer(RTC_HOUR*3600*1000+
		                  RTC_MIN*60*1000+
		                     RTC_SEC*1000);	// synchronize SOE timer

		IRQEnable();						// 使能IRQ中断 

////		
		CurrentTime.xYEAR  = RTC_YEAR;		// 获取 年
		CurrentTime.xMONTH = RTC_MONTH;		// 获取 月
		CurrentTime.xDOM   = RTC_DOM;		// 获取 日
		CurrentTime.xDOW   = RTC_DOW;		// 获取 星期
		CurrentTime.xHOUR  = RTC_HOUR;		// 获取 小时
		CurrentTime.xMIN   = RTC_MIN;		// 获取 分钟
		CurrentTime.xSEC   = RTC_SEC;		// 获取 秒钟
	}
} 

//////////////////////////////////////////////////////////////////
// only SOE test
void PrintSOE_Timer(void)
{
uint32 SOE_milSecond;
char buffer[100];
static uint8 SecondTick;
 
	 if(SecondTick!=DispSecondTick){
		SecondTick =DispSecondTick;

		SOE_milSecond=T1TC;
		sprintf(buffer,"SOE timer: %d - %d = %d ms",
							SOE_milSecond,SOE_milSecond/55295,
		                   (SOE_milSecond-SOE_milSecond/55295));
		DB_SendString(buffer);

		ReadDateTime();
		sprintf(buffer,"CUR timer: %2d:%2d:%2d  %2d:%2d:%2d = %d ms",
		                CurrentTime.xYEAR,CurrentTime.xMONTH,CurrentTime.xDOM,
		                CurrentTime.xHOUR,CurrentTime.xMIN,CurrentTime.xSEC,
			           (CurrentTime.xHOUR*3600+CurrentTime.xMIN*60+CurrentTime.xSEC)*1000);	
		DB_SendString(buffer);
	}
}

/****************************************************************
**                            End Of File
****************************************************************/

⌨️ 快捷键说明

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