WORD API_SetAlarm(WORD _Number, BYTE _Mask, BYTE _Repeat, BYTE _Month, BYTE _Day, BYTE _Hour, BYTE _Minute, BYTE _Second)
WORD API_SetAlarm(WORD _Number, BYTE _Mask, BYTE _Repeat, BYTE _Month, BYTE _Day, BYTE _Hour, BYTE _Minute, BYTE _Second) { RTCC_STRUCT_TIME StrucTime; RTCC_STRUCT_DATE StrucDate; REAL_TIME mRtccSw; BYTE Dummy = 0; WORD_VAL sender; sender.byte.HB = DCID[0][0]; sender.byte.LB = DCID[0][1]; if((_Number&0x0fff) >= MAX_ALARM){ API_Error(sender.Val, ERR_API_SetAlarm_MAX_ALARM); return ERR_API_SetAlarm_MAX_ALARM; } Alarm[_Number&0x0fff].Active = (_Number&0xf000)>>12; _Number &= 0x0fff; mRtccSw = API_GetRTCC(); StrucDate.Year = mRtccSw.Date.Year; StrucDate.Month = _Month; StrucDate.Day = _Day; StrucTime.Hour = _Hour; StrucTime.Minute = _Minute; StrucTime.Second = _Second; StrucTime.Days = RTCC_SDateToTStampDate( StrucDate ); Alarm[_Number].Date = RTCC_TStampDateToSDate( StrucTime.Days ); Alarm[_Number].Time = StrucTime; StrucTime.Thousandth = 0; #if defined(RTCC_SW_DISABLE) if(_Number == 0){ ALRMCFG = (0x03 | (_Mask<<2)); ALRMVALL = (Alarm[_Number].Date.Year%10) + ((Alarm[_Number].Date.Year/10)<<4); ALRMCFG = (0x02 | (_Mask<<2)); ALRMVALL = (Alarm[_Number].Date.Day%10) + ((Alarm[_Number].Date.Day/10)<<4); ALRMVALH = (Alarm[_Number].Date.Month%10) + ((Alarm[_Number].Date.Month/10)<<4); ALRMCFG = (0x01 | (_Mask<<2)); ALRMVALL = (Alarm[_Number].Time.Hour%10) + ((Alarm[_Number].Time.Hour/10)<<4); ALRMVALH = (Alarm[_Number].Date.DayOfWeek%10) + ((Alarm[_Number].Date.DayOfWeek/10)<<4); ALRMCFG = (_Mask<<2); ALRMVALL = (Alarm[_Number].Time.Second%10) + ((Alarm[_Number].Time.Second/10)<<4); ALRMVALH = (Alarm[_Number].Time.Minute%10) + ((Alarm[_Number].Time.Minute/10)<<4); if(_Repeat == 0){ //ide do nekonecna ALRMRPT = 0xff; ALRMCFG |= 0x40; } else ALRMRPT = (_Repeat-1); ALRMEN = 1; //enable ALARM } #endif return ERR_OK; }