?? drv_calendar.c.bak
字號(hào):
#include "config_GD61.h"
#include "include_GD61.h"
#include <stdio.h>
volatile CALENDAR CurrentTime;
volatile CALENDAR SettingTime;
////////////////////////////////////////////////////////////////////////
volatile char TimerActSecTick = 0; // for timer_control function
volatile char HeartBeetTimeSecTick = 0; // for display of time
#ifdef INCLUDE_RF_MODEM
volatile char LED_Counter=0;
#endif
volatile char RunningLED_Cnt=0;
volatile uint8 TestSecondTick=0;
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 ADC_ChannelTimer;
volatile uint16 LD_AlarmCounter;
volatile uint16 PW_AlarmCounter;
volatile uint32 times_time0;
volatile uint32 datas_time0;
extern ROUTETASK routeTask[MAX_ROUTE_TASK_NUM];
extern ROUTETASK relayErrorTask[MAX_ROUTE_TASK_NUM];
extern uint16 ModuleAddress; //=0x5555; //module address.
extern volatile uint16 RTC_Failed_Time; //3000ms
extern volatile uint16 Channel_Max_Time;
////////////////////////////////////////////////////////////////////////
void __irq RTC_InterruptServing(void);
void ReadDateTime(void);
void Start_RTC(void);
void SettingRTC (CALENDAR Ctime);
void SetDefaultRTC(void);
void RTC_Time0_Sencond(void);
///////////////////////////////////////////////////////////////////////
void RTC_Time0_Sencond(void)
{
uint8 i;
ReadDateTime();
CurrentTime.xSEC++;
if(CurrentTime.xSEC>59)
{
CurrentTime.xSEC=0;
CurrentTime.xMIN++;
if(CurrentTime.xMIN>59)
{
CurrentTime.xMIN=0;
CurrentTime.xHOUR++;
if(CurrentTime.xHOUR>23)
{
CurrentTime.xHOUR=0;
CurrentTime.xDOM++;
if(CurrentTime.xDOM>30)
CurrentTime.xDOM=1;
}
}
}
SettingRTC(CurrentTime);
TimerActSecTick =1; //for timer_control function
HeartBeetTimeSecTick=1; //for display of time
#ifdef INCLUDE_RF_MODEM
LED_Counter++;
if(LED_Counter & 0x01 == 0x01){ IO1CLR = LED4;} // LED1點(diǎn)亮
else { IO1SET = LED4;} // LED1點(diǎn)亮
#endif
RunningLED_Cnt++;
if(RunningLED_Cnt & 0x01 == 0x01){ IO1CLR = LED_P1_21;} // power LED點(diǎn)亮
else { IO1SET = LED_P1_21;} // power LED點(diǎn)亮
////
for(i=0;i<MAX_ROUTE_TASK_NUM;i++){ //
if((routeTask[i].activityFlag==ENABLE_FLAG)&&
(routeTask[i].secondTimer!=0)){
routeTask[i].secondTimer--;
}
#ifdef RP_RELAY_ERROR
else if((routeTask[i].waittingResponse==ENABLE_FLAG)&&
(routeTask[i].secondTimer!=0xff)){
routeTask[i].secondTimer++;
}
#endif
}
////
#ifdef RP_RELAY_ERROR
for(i=0;i<MAX_ROUTE_TASK_NUM;i++){ //
if((relayErrorTask[i].activityFlag==ENABLE_FLAG)&&
(relayErrorTask[i].secondTimer!=0)){
relayErrorTask[i].secondTimer--;
}
else if((relayErrorTask[i].waittingResponse==ENABLE_FLAG)&&
(relayErrorTask[i].secondTimer!=0xff)){
relayErrorTask[i].secondTimer++;
}
}
#endif
////
if(enTimerLightCnt!=0){
enTimerLightCnt--; // decrease 1 every second.
}
////
if(AutoVoltageTimer!=0){
AutoVoltageTimer--; //decrease 1 every second
}
////
if(PW_AlarmEnTimer!=0){ //decrease 1 every second
PW_AlarmEnTimer--; //for alarm system
}
if(LD_AlarmEnTimer!=0){ //decrease 1 every second
LD_AlarmEnTimer--; //for alarm system
}
////
if(CC1000ResetTimer!=0){ //decrease 1 every second
CC1000ResetTimer--;
}
////
if(SysReadyTimer!=0){ //decrease 1 every second
SysReadyTimer--;
}
if(OutReadyTimer!=0){ //decrease 1 every second
OutReadyTimer--;
}
if(TestSecondTick!=0){ //decrease 1 every second
TestSecondTick--;
}
////
ADC_ChannelTimer++;
if(ADC_ChannelTimer>=Channel_Max_Time){ //decrease 1 every second
ADC_ChannelTimer=0;
}
////
if((CurrentTime.xHOUR == EN_ALARM_MSG_SENDING_TIME)&&
(CurrentTime.xMIN == (ModuleAddress*3)/60)&&
(CurrentTime.xSEC == (ModuleAddress*3)%60)){
LD_AlarmCounter=0; //enable alarm message sending at about 10 hour
PW_AlarmCounter=0;
}
////
}
/*******************************************************************/
//status ok
void __irq RTC_InterruptServing(void)
{
uint32 datas;
uint32 times;
uint8 i;
RTC_Failed_Time=3000;
////
TraceFunAddr((void*)RTC_InterruptServing); //for watchdog tracing
////
times = CTIME0; // 讀取完整的時(shí)鐘寄存器
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; // 獲取 小時(shí)
CurrentTime.xMIN = (times >> 8) & 0x3f; // 獲取 分鐘
CurrentTime.xSEC = times & 0x3f; // 獲取 秒鐘
TimerActSecTick =1; //for timer_control function
HeartBeetTimeSecTick=1; //for display of time
#ifdef INCLUDE_RF_MODEM
LED_Counter++;
if(LED_Counter & 0x01 == 0x01){ IO1CLR = LED4;} // LED1點(diǎn)亮
else { IO1SET = LED4;} // LED1點(diǎn)亮
#endif
RunningLED_Cnt++;
if(RunningLED_Cnt & 0x01 == 0x01){ IO1CLR = LED_P1_21;} // power LED點(diǎn)亮
else { IO1SET = LED_P1_21;} // power LED點(diǎn)亮
////
for(i=0;i<MAX_ROUTE_TASK_NUM;i++){ //
if((routeTask[i].activityFlag==ENABLE_FLAG)&&
(routeTask[i].secondTimer!=0)){
routeTask[i].secondTimer--;
}
#ifdef RP_RELAY_ERROR
else if((routeTask[i].waittingResponse==ENABLE_FLAG)&&
(routeTask[i].secondTimer!=0xff)){
routeTask[i].secondTimer++;
}
#endif
}
////
#ifdef RP_RELAY_ERROR
for(i=0;i<MAX_ROUTE_TASK_NUM;i++){ //
if((relayErrorTask[i].activityFlag==ENABLE_FLAG)&&
(relayErrorTask[i].secondTimer!=0)){
relayErrorTask[i].secondTimer--;
}
else if((relayErrorTask[i].waittingResponse==ENABLE_FLAG)&&
(relayErrorTask[i].secondTimer!=0xff)){
relayErrorTask[i].secondTimer++;
}
}
#endif
////
if(enTimerLightCnt!=0){
enTimerLightCnt--; // decrease 1 every second.
}
////
if(AutoVoltageTimer!=0){
AutoVoltageTimer--; //decrease 1 every second
}
////
if(PW_AlarmEnTimer!=0){ //decrease 1 every second
PW_AlarmEnTimer--; //for alarm system
}
if(LD_AlarmEnTimer!=0){ //decrease 1 every second
LD_AlarmEnTimer--; //for alarm system
}
////
if(CC1000ResetTimer!=0){ //decrease 1 every second
CC1000ResetTimer--;
}
////
if(SysReadyTimer!=0){ //decrease 1 every second
SysReadyTimer--;
}
if(OutReadyTimer!=0){ //decrease 1 every second
OutReadyTimer--;
}
if(TestSecondTick!=0){ //decrease 1 every second
TestSecondTick--;
}
////
ADC_ChannelTimer++;
if(ADC_ChannelTimer>=Channel_Max_Time){ //decrease 1 every second
ADC_ChannelTimer=0;
}
////
if((CurrentTime.xHOUR == EN_ALARM_MSG_SENDING_TIME)&&
(CurrentTime.xMIN == (ModuleAddress*3)/60)&&
(CurrentTime.xSEC == (ModuleAddress*3)%60)){
LD_AlarmCounter=0; //enable alarm message sending at about 10 hour
PW_AlarmCounter=0;
}
////
ILR = 0x01; // 清除RTC增量中斷標(biāo)志
VICVectAddr = 0; // 向量中斷結(jié)束
}
//////////////////////////////////////////////////////////////////
//status ok
void ReadDateTime(void)
{
uint32 datas;
uint32 times;
times = CTIME0; // 讀取完整的時(shí)鐘寄存器
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; // 獲取 小時(shí)
CurrentTime.xMIN = (times >> 8) & 0x3f; // 獲取 分鐘
CurrentTime.xSEC = times & 0x3f; // 獲取 秒鐘
}
/*********************************************************************
** 函數(shù)名稱 :RTCInit()
** 函數(shù)功能 :初始化實(shí)時(shí)時(shí)鐘
** 入口參數(shù) :無(wú)
** 出口參數(shù) :無(wú)
status ok
*********************************************************************/
void Start_RTC(void)
{
// char dbuf[100];
uint16 CTC1;
uint16 CTC_i;
IRQDisable();
CCR = 0x12; // 使用獨(dú)立振蕩器, CTC reset
ILR = 0x03; // 清除增量中斷標(biāo)志
/* VIC初始化 */
VICVectCntl2 = 0x20|INT_RTC; // 分配通道2
VICVectAddr2 = (int)RTC_InterruptServing; // 設(shè)置中斷服務(wù)程序地址
VICIntEnable = (1<<INT_RTC); // 使能RTC中斷
ILR = 0x01; // 清除RTC增量中斷標(biāo)志
VICVectAddr = 0; // 向量中斷結(jié)束
//restore the calendar
#ifdef EN_SET_DEFAULT_TIME
SetDefaultRTC(); //set default day and time
#endif
CCR = 0x11; // 使用獨(dú)立振蕩器, RTC start
CIIR = 0x01; // 設(shè)置秒值的增量產(chǎn)生1次中斷
CTC1=CTC;
for(CTC_i=1;CTC_i<10000;CTC_i++);
if(CTC==CTC1)
{
PREINT=LPC_FPCLK/32768-1;
PREFRAC=LPC_FPCLK-(PREINT+1)*32768;
CCR=0x01; //連接到內(nèi)部預(yù)分頻
}
// if(CCR==0x11) Uart0SendString("RTC work by RTC_external OSC"); //for debug
// if(CCR==0x01) Uart0SendString("RTC work by RTC_internal VPB"); //for debug
IRQEnable(); // 打開(kāi)中斷
}
/////////////////////////////////////////////////////////////////////
//status ok
void SettingRTC (CALENDAR Ctime)
{
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;
}
///////////////////////////////////////////////////////////////////
//status ok
void SetDefaultRTC(void)
{
if((POWERUP_FLAG1!=WARM_START_FLAG1)||
(POWERUP_FLAG2!=WARM_START_FLAG2)){
RTC_YEAR = 2005;
RTC_MONTH = 12;
RTC_DOM = 10;
RTC_DOW = 6;
RTC_HOUR = 18;
RTC_MIN = 1;
RTC_SEC = 40+(ModuleAddress%5);
}
}
/****************************************************************
** End Of File
****************************************************************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -