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

📄 alarm.c

📁 优龙 ARM9 FS2410开发板的BIOS源程序!
💻 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 + -