?? alarm.c
字號:
#include "def.h"
#include "2410addr.h"
#include "2410lib.h"
#include "rtcapi.h"
#include "alarm.h"
/*
ALARM初始化,當系統地一次運行或者復位時運行。用于重組ALARM數據并啟動ALARM。
輸入:無
輸出:TRUE--成功;FALSE--失敗
*/
char ALM_Init(void)
{
return 0;
}
/*
APP注冊,如果APP要使用ALARM功能,則必須先應用這個函數注冊。
輸入:pAlmApp--要增加的APP注冊項結構指針
輸出:TRUE--成功;FALSE--失敗
*/
char ALM_RegisterApp(ALM_APP_T almApp)
{
return 0;
}
/*
APP銷注,如果APP不再使用ALARM功能,則需要應用這個函數銷注。
輸入:appName--應用程序標識
輸出:TRUE--成功;FALSE--失敗
*/
char ALM_DeRegisterApp(const char *appName)
{
return 0;
}
/*
系統調用,系統會檢測到RTC產生中斷時,調用這個函數。獲取當前響鬧ALARM信息和個數
輸入:pAlmInfo--傳給系統的目的ALARM信息數組,
pAlmCount--數組中元素個數,
maxRequest--最大需求個數
輸出:TRUE--成功;FALSE--失敗
*/
BYTE ALM_GetAlarmInfo(ALM_CINFO_T *pAlmInfo, WORD *pAlmCount, WORD maxRequest)
{
return 0;
}
/*
查看ALARM項下次工作的時間
輸入:pInDT--要查看的時間指針;pOutDT--轉換后時間指針;itemType--要查看的ALARM事件類型;interval--固定間隔時間長度(如果不是固定間隔類型則為零)
輸出:TRUE--成功;FALSE--沒有相應時間
*/
char ALM_TestResponse(SYSTEMTIME *pInDT, SYSTEMTIME *pOutDT, char itemType, DWORD interval)
{
return 0;
}
/*
增加ALARM事件,當增加一個ALARM項后,在該項生命期內,編號不會改變。
輸入:pAlmItem--要增加的ALARM事件結構指針
輸出:ALARM事件序號
*/
DWORD ALM_AddAlarm(ALM_ITEM_T *pAlmItem)
{
return 0;
}
/*
刪除ALARM事件
輸入:itemNo--要刪除的ALARM事件序號
輸出:ALARM事件序號
*/
DWORD ALM_DelAlarm(DWORD itemNo)
{
return 0;
}
/*
修改ALARM事件
輸入:almItem--要修改的ALARM事件結構指針;itemNo--要修改的ALARM事件序號
輸出:ALARM事件序號
*/
DWORD ALM_ModifyAlarm(ALM_ITEM_T *pAlmItem, DWORD itemNo)
{
return 0;
}
/*
重新標記ALARM事件,用于系統崩潰后重建ALARM
輸入:pAlmItem--要修改的ALARM事件結構指針;itemNo--要修改的ALARM事件序號
輸出:TRUE--成功;FALSE--失敗
*/
BYTE ALM_RemarkAlmItem(ALM_ITEM_T *pAlmItem, DWORD itemNo)
{
return 0;
}
/**************************************************************/
static U8 AlarmOn = 0;
static void (*AlarmCallBack)(void);
static void __irq IsrAlarm(void)
{
// WrUTXH0('A');
if(AlarmCallBack)
(*AlarmCallBack)();
ClearPending(BIT_RTC);
}
void OpenAlarm(void (*cbf)(void))
{
AlarmOn = 1;
rRTCALM = (0x7f); //enable alarm
//唯一指定的時間,年/月/日/時/分/秒方式只觸發一次
//若要按年/季/月/時/分固定間隔重觸發需要再設alarm的date,time
AlarmCallBack = cbf;
pISR_RTC = (U32)IsrAlarm;
ClearPending(BIT_RTC);
EnableIrq(BIT_RTC);
}
void CloseAlarm(void)
{
AlarmOn = 0;
rRTCALM = 0; //disable alarm
AlarmCallBack = NULL;
DisableIrq(BIT_RTC);
}
U8 AlarmSetDate(DATETIME_T *date)
{
if(AlarmOn&&RtcCheckDateValid(date->year, date->month, date->day))
{
U8 tmp;
if((date->year<2000)||(date->year>2999))
return FALSE;
if((date->hour>23)||(date->minute>59)||(date->second>59))
return FALSE;
rRTCCON = 1; //enable RTC write;
tmp = date->second;
rALMSEC = ((tmp/10)<<4)+(tmp%10);
tmp = date->minute;
rALMMIN = ((tmp/10)<<4)+(tmp%10);
tmp = date->hour;
rALMHOUR = ((tmp/10)<<4)+(tmp%10);
tmp = date->day;
rALMDATE = ((tmp/10)<<4)+(tmp%10);
tmp = date->month;
rALMMON = ((tmp/10)<<4)+(tmp%10);
tmp = date->year-2000;
rALMYEAR = ((tmp/10)<<4)+(tmp%10);
rRTCCON = 0; //disable RTC write
return TRUE;
}
return FALSE;
}
U8 AlarmGetDate(DATETIME_T *date)
{
if(AlarmOn)
{
U8 tmp;
tmp = rALMYEAR;
date->year = (tmp>>4)*10+(tmp&0xf);
tmp = rALMMON;
date->month = (tmp>>4)*10+(tmp&0xf);
tmp = rALMDATE;
date->day = (tmp>>4)*10+(tmp&0xf);
tmp = rALMHOUR;
date->hour = (tmp>>4)*10+(tmp&0xf);
tmp = rALMMIN;
date->minute = (tmp>>4)*10+(tmp&0xf);
tmp = rALMSEC;
date->second = (tmp>>4)*10+(tmp&0xf);
return TRUE;
}
return FALSE;
}
/*
ALARM觸發后,通過下列接口通知OS,OS進行消息封裝后提供給給GUI或應用層
輸入:沒有
返回:沒有
注意:AlarmProc()函數只能在高級中HISR中被調用,否則系統異常。
*/
void AlarmProc(void)
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -