mbed library sources. Supersedes mbed-src.

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**************************************************************************//**
<> 144:ef7eb2e8f9f7 2 * @file rtc.c
<> 144:ef7eb2e8f9f7 3 * @version V1.00
<> 144:ef7eb2e8f9f7 4 * $Revision: 17 $
<> 144:ef7eb2e8f9f7 5 * $Date: 14/10/03 11:51a $
<> 144:ef7eb2e8f9f7 6 * @brief NUC472/NUC442 RTC driver source file
<> 144:ef7eb2e8f9f7 7 *
<> 144:ef7eb2e8f9f7 8 * @note
<> 144:ef7eb2e8f9f7 9 * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
<> 144:ef7eb2e8f9f7 10 *****************************************************************************/
<> 144:ef7eb2e8f9f7 11
<> 144:ef7eb2e8f9f7 12
<> 144:ef7eb2e8f9f7 13 #include <stdio.h>
<> 144:ef7eb2e8f9f7 14 #include "NUC472_442.h"
<> 144:ef7eb2e8f9f7 15
<> 144:ef7eb2e8f9f7 16 /*---------------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 17 /* Includes of local headers */
<> 144:ef7eb2e8f9f7 18 /*---------------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 19
<> 144:ef7eb2e8f9f7 20
<> 144:ef7eb2e8f9f7 21
<> 144:ef7eb2e8f9f7 22 /** @addtogroup NUC472_442_Device_Driver NUC472/NUC442 Device Driver
<> 144:ef7eb2e8f9f7 23 @{
<> 144:ef7eb2e8f9f7 24 */
<> 144:ef7eb2e8f9f7 25
<> 144:ef7eb2e8f9f7 26 /** @addtogroup NUC472_442_RTC_Driver RTC Driver
<> 144:ef7eb2e8f9f7 27 @{
<> 144:ef7eb2e8f9f7 28 */
<> 144:ef7eb2e8f9f7 29 /// @cond HIDDEN_SYMBOLS
<> 144:ef7eb2e8f9f7 30
<> 144:ef7eb2e8f9f7 31 /*---------------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 32 /* Macro, type and constant definitions */
<> 144:ef7eb2e8f9f7 33 /*---------------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 34 #define RTC_GLOBALS
<> 144:ef7eb2e8f9f7 35
<> 144:ef7eb2e8f9f7 36 /*---------------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 37 /* Global file scope (static) variables */
<> 144:ef7eb2e8f9f7 38 /*---------------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 39 static volatile uint32_t g_u32Reg, g_u32Reg1,g_u32hiYear,g_u32loYear,g_u32hiMonth,g_u32loMonth,g_u32hiDay,g_u32loDay;
<> 144:ef7eb2e8f9f7 40 static volatile uint32_t g_u32hiHour,g_u32loHour,g_u32hiMin,g_u32loMin,g_u32hiSec,g_u32loSec;
<> 144:ef7eb2e8f9f7 41
<> 144:ef7eb2e8f9f7 42 /// @endcond HIDDEN_SYMBOLS
<> 144:ef7eb2e8f9f7 43
<> 144:ef7eb2e8f9f7 44 /** @addtogroup NUC472_442_RTC_EXPORTED_FUNCTIONS RTC Exported Functions
<> 144:ef7eb2e8f9f7 45 @{
<> 144:ef7eb2e8f9f7 46 */
<> 144:ef7eb2e8f9f7 47
<> 144:ef7eb2e8f9f7 48
<> 144:ef7eb2e8f9f7 49 /**
<> 144:ef7eb2e8f9f7 50 * @brief Set Frequency Compensation Data
<> 144:ef7eb2e8f9f7 51 *
<> 144:ef7eb2e8f9f7 52 * @param[in] i32FrequencyX100 Specify the RTC clock X100, ex: 3277365 means 32773.65.
<> 144:ef7eb2e8f9f7 53 *
<> 144:ef7eb2e8f9f7 54 * @return None
<> 144:ef7eb2e8f9f7 55 *
<> 144:ef7eb2e8f9f7 56 */
<> 144:ef7eb2e8f9f7 57 void RTC_32KCalibration(int32_t i32FrequencyX100)
<> 144:ef7eb2e8f9f7 58 {
<> 144:ef7eb2e8f9f7 59 int32_t i32RegInt,i32RegFra ;
<> 144:ef7eb2e8f9f7 60
<> 144:ef7eb2e8f9f7 61 /* Compute Integer and Fraction for RTC register*/
<> 144:ef7eb2e8f9f7 62 i32RegInt = (i32FrequencyX100/100) - RTC_FCR_REFERENCE;
<> 144:ef7eb2e8f9f7 63 i32RegFra = (((i32FrequencyX100%100)) * 60) / 100;
<> 144:ef7eb2e8f9f7 64
<> 144:ef7eb2e8f9f7 65 /* Judge Integer part is reasonable */
<> 144:ef7eb2e8f9f7 66 if ( (i32RegInt < 0) | (i32RegInt > 15) ) {
<> 144:ef7eb2e8f9f7 67 return;
<> 144:ef7eb2e8f9f7 68 }
<> 144:ef7eb2e8f9f7 69
<> 144:ef7eb2e8f9f7 70 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 71 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 72
<> 144:ef7eb2e8f9f7 73 RTC->FREQADJ = (uint32_t)((i32RegInt<<8) | i32RegFra);
<> 144:ef7eb2e8f9f7 74
<> 144:ef7eb2e8f9f7 75 }
<> 144:ef7eb2e8f9f7 76
<> 144:ef7eb2e8f9f7 77 /**
<> 144:ef7eb2e8f9f7 78 * @brief This function is used to:
<> 144:ef7eb2e8f9f7 79 * 1. Write initial key to let RTC start count. \n
<> 144:ef7eb2e8f9f7 80 * 2. Input parameter indicates start time. \n
<> 144:ef7eb2e8f9f7 81 * Null pointer for using default starting time. \n
<> 144:ef7eb2e8f9f7 82 *
<> 144:ef7eb2e8f9f7 83 * @param[in] sPt \n
<> 144:ef7eb2e8f9f7 84 * Specify the time property and current time. It includes: \n
<> 144:ef7eb2e8f9f7 85 * u32Year: Year value. \n
<> 144:ef7eb2e8f9f7 86 * u32Month: Month value. \n
<> 144:ef7eb2e8f9f7 87 * u32Day: Day value. \n
<> 144:ef7eb2e8f9f7 88 * u32DayOfWeek: Day of week. [ \ref RTC_SUNDAY / \ref RTC_MONDAY / \ref RTC_TUESDAY /
<> 144:ef7eb2e8f9f7 89 * \ref RTC_WEDNESDAY / \ref RTC_THURSDAY / \ref RTC_FRIDAY /
<> 144:ef7eb2e8f9f7 90 * \ref RTC_SATURDAY] \n
<> 144:ef7eb2e8f9f7 91 * u32Hour: Hour value. \n
<> 144:ef7eb2e8f9f7 92 * u32Minute: Minute value. \n
<> 144:ef7eb2e8f9f7 93 * u32Second: Second value. \n
<> 144:ef7eb2e8f9f7 94 * u32TimeScale: [ \ref RTC_CLOCK_12 / \ref RTC_CLOCK_24] \n
<> 144:ef7eb2e8f9f7 95 * u8AmPm: [ \ref RTC_AM / \ref RTC_PM] \n
<> 144:ef7eb2e8f9f7 96 *
<> 144:ef7eb2e8f9f7 97 * @return None
<> 144:ef7eb2e8f9f7 98 *
<> 144:ef7eb2e8f9f7 99 */
<> 144:ef7eb2e8f9f7 100 void RTC_Open (S_RTC_TIME_DATA_T *sPt)
<> 144:ef7eb2e8f9f7 101 {
<> 144:ef7eb2e8f9f7 102 uint32_t u32Reg;
<> 144:ef7eb2e8f9f7 103
<> 144:ef7eb2e8f9f7 104 volatile int32_t i32delay=1000;
<> 144:ef7eb2e8f9f7 105
<> 144:ef7eb2e8f9f7 106 if(RTC->INIT != 0x1) {
<> 144:ef7eb2e8f9f7 107 RTC->INIT = RTC_INIT_KEY;
<> 144:ef7eb2e8f9f7 108
<> 144:ef7eb2e8f9f7 109 while(RTC->INIT != 0x1);
<> 144:ef7eb2e8f9f7 110 }
<> 144:ef7eb2e8f9f7 111
<> 144:ef7eb2e8f9f7 112 if(sPt == NULL)
<> 144:ef7eb2e8f9f7 113 return;
<> 144:ef7eb2e8f9f7 114
<> 144:ef7eb2e8f9f7 115 /*-----------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 116 /* Second, set RTC 24/12 hour setting */
<> 144:ef7eb2e8f9f7 117 /*-----------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 118 if (sPt->u32TimeScale == RTC_CLOCK_12) {
<> 144:ef7eb2e8f9f7 119 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 120 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 121 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 122
<> 144:ef7eb2e8f9f7 123 /*-------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 124 /* important, range of 12-hour PM mode is 21 up to 32 */
<> 144:ef7eb2e8f9f7 125 /*-------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 126 if (sPt->u32AmPm == RTC_PM)
<> 144:ef7eb2e8f9f7 127 sPt->u32Hour += 20;
<> 144:ef7eb2e8f9f7 128 } else { /* RTC_CLOCK_24 */
<> 144:ef7eb2e8f9f7 129 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 130 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 131 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 132 }
<> 144:ef7eb2e8f9f7 133
<> 144:ef7eb2e8f9f7 134 /*-----------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 135 /* Set RTC Calender Loading */
<> 144:ef7eb2e8f9f7 136 /*-----------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 137 u32Reg = ((sPt->u32Year - RTC_YEAR2000) / 10) << 20;
<> 144:ef7eb2e8f9f7 138 u32Reg |= (((sPt->u32Year - RTC_YEAR2000) % 10) << 16);
<> 144:ef7eb2e8f9f7 139 u32Reg |= ((sPt->u32Month / 10) << 12);
<> 144:ef7eb2e8f9f7 140 u32Reg |= ((sPt->u32Month % 10) << 8);
<> 144:ef7eb2e8f9f7 141 u32Reg |= ((sPt->u32Day / 10) << 4);
<> 144:ef7eb2e8f9f7 142 u32Reg |= (sPt->u32Day % 10);
<> 144:ef7eb2e8f9f7 143 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 144
<> 144:ef7eb2e8f9f7 145 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 146 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 147
<> 144:ef7eb2e8f9f7 148 RTC->CAL = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 149
<> 144:ef7eb2e8f9f7 150 /*-----------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 151 /* Set RTC Time Loading */
<> 144:ef7eb2e8f9f7 152 /*-----------------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 153 u32Reg = ((sPt->u32Hour / 10) << 20);
<> 144:ef7eb2e8f9f7 154 u32Reg |= ((sPt->u32Hour % 10) << 16);
<> 144:ef7eb2e8f9f7 155 u32Reg |= ((sPt->u32Minute / 10) << 12);
<> 144:ef7eb2e8f9f7 156 u32Reg |= ((sPt->u32Minute % 10) << 8);
<> 144:ef7eb2e8f9f7 157 u32Reg |= ((sPt->u32Second / 10) << 4);
<> 144:ef7eb2e8f9f7 158 u32Reg |= (sPt->u32Second % 10);
<> 144:ef7eb2e8f9f7 159 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 160
<> 144:ef7eb2e8f9f7 161 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 162 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 163
<> 144:ef7eb2e8f9f7 164 RTC->TIME = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 165
<> 144:ef7eb2e8f9f7 166 RTC->WEEKDAY = sPt->u32DayOfWeek;
<> 144:ef7eb2e8f9f7 167
<> 144:ef7eb2e8f9f7 168 /* Waiting for RTC settings stable */
<> 144:ef7eb2e8f9f7 169 while(i32delay--);
<> 144:ef7eb2e8f9f7 170
<> 144:ef7eb2e8f9f7 171 }
<> 144:ef7eb2e8f9f7 172
<> 144:ef7eb2e8f9f7 173 /**
<> 144:ef7eb2e8f9f7 174 * @brief Read current date/time from RTC setting
<> 144:ef7eb2e8f9f7 175 *
<> 144:ef7eb2e8f9f7 176 * @param[out] sPt \n
<> 144:ef7eb2e8f9f7 177 * Specify the time property and current time. It includes: \n
<> 144:ef7eb2e8f9f7 178 * u32Year: Year value \n
<> 144:ef7eb2e8f9f7 179 * u32Month: Month value \n
<> 144:ef7eb2e8f9f7 180 * u32Day: Day value \n
<> 144:ef7eb2e8f9f7 181 * u32DayOfWeek: Day of week \n
<> 144:ef7eb2e8f9f7 182 * u32Hour: Hour value \n
<> 144:ef7eb2e8f9f7 183 * u32Minute: Minute value \n
<> 144:ef7eb2e8f9f7 184 * u32Second: Second value \n
<> 144:ef7eb2e8f9f7 185 * u32TimeScale: \ref RTC_CLOCK_12 / \ref RTC_CLOCK_24 \n
<> 144:ef7eb2e8f9f7 186 * u8AmPm: \ref RTC_AM / \ref RTC_PM \n
<> 144:ef7eb2e8f9f7 187 *
<> 144:ef7eb2e8f9f7 188 * @return None
<> 144:ef7eb2e8f9f7 189 *
<> 144:ef7eb2e8f9f7 190 */
<> 144:ef7eb2e8f9f7 191 void RTC_GetDateAndTime(S_RTC_TIME_DATA_T *sPt)
<> 144:ef7eb2e8f9f7 192 {
<> 144:ef7eb2e8f9f7 193 uint32_t u32Tmp;
<> 144:ef7eb2e8f9f7 194
<> 144:ef7eb2e8f9f7 195 sPt->u32TimeScale = RTC->CLKFMT & RTC_CLKFMT_24HEN_Msk; /* 12/24-hour */
<> 144:ef7eb2e8f9f7 196 sPt->u32DayOfWeek = RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk; /* Day of week */
<> 144:ef7eb2e8f9f7 197
<> 144:ef7eb2e8f9f7 198 g_u32hiYear = (RTC->CAL & RTC_CAL_TENYEAR_Msk) >> RTC_CAL_TENYEAR_Pos;
<> 144:ef7eb2e8f9f7 199 g_u32loYear = (RTC->CAL & RTC_CAL_YEAR_Msk) >> RTC_CAL_YEAR_Pos;
<> 144:ef7eb2e8f9f7 200 g_u32hiMonth = (RTC->CAL & RTC_CAL_TENMON_Msk) >> RTC_CAL_TENMON_Pos;
<> 144:ef7eb2e8f9f7 201 g_u32loMonth = (RTC->CAL & RTC_CAL_MON_Msk) >> RTC_CAL_MON_Pos;
<> 144:ef7eb2e8f9f7 202 g_u32hiDay = (RTC->CAL & RTC_CAL_TENDAY_Msk) >> RTC_CAL_TENDAY_Pos;
<> 144:ef7eb2e8f9f7 203 g_u32loDay = (RTC->CAL & RTC_CAL_DAY_Msk);
<> 144:ef7eb2e8f9f7 204
<> 144:ef7eb2e8f9f7 205 g_u32hiHour = (RTC->TIME & RTC_TIME_TENHR_Msk) >> RTC_TIME_TENHR_Pos;
<> 144:ef7eb2e8f9f7 206 g_u32loHour = (RTC->TIME & RTC_TIME_HR_Msk) >> RTC_TIME_HR_Pos;
<> 144:ef7eb2e8f9f7 207 g_u32hiMin = (RTC->TIME & RTC_TIME_TENMIN_Msk) >> RTC_TIME_TENMIN_Pos;
<> 144:ef7eb2e8f9f7 208 g_u32loMin = (RTC->TIME & RTC_TIME_MIN_Msk) >> RTC_TIME_MIN_Pos;
<> 144:ef7eb2e8f9f7 209 g_u32hiSec = (RTC->TIME & RTC_TIME_TENSEC_Msk) >> RTC_TIME_TENSEC_Pos;
<> 144:ef7eb2e8f9f7 210 g_u32loSec = (RTC->TIME & RTC_TIME_SEC_Msk);
<> 144:ef7eb2e8f9f7 211
<> 144:ef7eb2e8f9f7 212 u32Tmp = (g_u32hiYear * 10); /* Compute to 20XX year */
<> 144:ef7eb2e8f9f7 213 u32Tmp += g_u32loYear;
<> 144:ef7eb2e8f9f7 214 sPt->u32Year = u32Tmp + RTC_YEAR2000;
<> 144:ef7eb2e8f9f7 215
<> 144:ef7eb2e8f9f7 216 u32Tmp = (g_u32hiMonth * 10); /* Compute 0~12 month */
<> 144:ef7eb2e8f9f7 217 sPt->u32Month = u32Tmp + g_u32loMonth;
<> 144:ef7eb2e8f9f7 218
<> 144:ef7eb2e8f9f7 219 u32Tmp = (g_u32hiDay * 10); /* Compute 0~31 day */
<> 144:ef7eb2e8f9f7 220 sPt->u32Day = u32Tmp + g_u32loDay;
<> 144:ef7eb2e8f9f7 221
<> 144:ef7eb2e8f9f7 222 if (sPt->u32TimeScale == RTC_CLOCK_12) { /* Compute12/24 hour */
<> 144:ef7eb2e8f9f7 223 u32Tmp = (g_u32hiHour * 10);
<> 144:ef7eb2e8f9f7 224 u32Tmp+= g_u32loHour;
<> 144:ef7eb2e8f9f7 225 sPt->u32Hour = u32Tmp; /* AM: 1~12. PM: 21~32. */
<> 144:ef7eb2e8f9f7 226
<> 144:ef7eb2e8f9f7 227 if (sPt->u32Hour >= 21) {
<> 144:ef7eb2e8f9f7 228 sPt->u32AmPm = RTC_PM;
<> 144:ef7eb2e8f9f7 229 sPt->u32Hour -= 20;
<> 144:ef7eb2e8f9f7 230 } else {
<> 144:ef7eb2e8f9f7 231 sPt->u32AmPm = RTC_AM;
<> 144:ef7eb2e8f9f7 232 }
<> 144:ef7eb2e8f9f7 233
<> 144:ef7eb2e8f9f7 234 u32Tmp = (g_u32hiMin * 10);
<> 144:ef7eb2e8f9f7 235 u32Tmp+= g_u32loMin;
<> 144:ef7eb2e8f9f7 236 sPt->u32Minute = u32Tmp;
<> 144:ef7eb2e8f9f7 237
<> 144:ef7eb2e8f9f7 238 u32Tmp = (g_u32hiSec * 10);
<> 144:ef7eb2e8f9f7 239 u32Tmp+= g_u32loSec;
<> 144:ef7eb2e8f9f7 240 sPt->u32Second = u32Tmp;
<> 144:ef7eb2e8f9f7 241
<> 144:ef7eb2e8f9f7 242 } else {
<> 144:ef7eb2e8f9f7 243 /* RTC_CLOCK_24 */
<> 144:ef7eb2e8f9f7 244 u32Tmp = (g_u32hiHour * 10);
<> 144:ef7eb2e8f9f7 245 u32Tmp += g_u32loHour;
<> 144:ef7eb2e8f9f7 246 sPt->u32Hour = u32Tmp;
<> 144:ef7eb2e8f9f7 247
<> 144:ef7eb2e8f9f7 248 u32Tmp = (g_u32hiMin * 10);
<> 144:ef7eb2e8f9f7 249 u32Tmp += g_u32loMin;
<> 144:ef7eb2e8f9f7 250 sPt->u32Minute = u32Tmp;
<> 144:ef7eb2e8f9f7 251
<> 144:ef7eb2e8f9f7 252 u32Tmp = (g_u32hiSec * 10);
<> 144:ef7eb2e8f9f7 253 u32Tmp += g_u32loSec;
<> 144:ef7eb2e8f9f7 254 sPt->u32Second = u32Tmp;
<> 144:ef7eb2e8f9f7 255 }
<> 144:ef7eb2e8f9f7 256
<> 144:ef7eb2e8f9f7 257 }
<> 144:ef7eb2e8f9f7 258
<> 144:ef7eb2e8f9f7 259
<> 144:ef7eb2e8f9f7 260
<> 144:ef7eb2e8f9f7 261 /**
<> 144:ef7eb2e8f9f7 262 * @brief Read alarm date/time from RTC setting
<> 144:ef7eb2e8f9f7 263 *
<> 144:ef7eb2e8f9f7 264 * @param[out] sPt \n
<> 144:ef7eb2e8f9f7 265 * Specify the time property and current time. It includes: \n
<> 144:ef7eb2e8f9f7 266 * u32Year: Year value \n
<> 144:ef7eb2e8f9f7 267 * u32Month: Month value \n
<> 144:ef7eb2e8f9f7 268 * u32Day: Day value \n
<> 144:ef7eb2e8f9f7 269 * u32DayOfWeek: Day of week \n
<> 144:ef7eb2e8f9f7 270 * u32Hour: Hour value \n
<> 144:ef7eb2e8f9f7 271 * u32Minute: Minute value \n
<> 144:ef7eb2e8f9f7 272 * u32Second: Second value \n
<> 144:ef7eb2e8f9f7 273 * u32TimeScale: \ref RTC_CLOCK_12 / \ref RTC_CLOCK_24 \n
<> 144:ef7eb2e8f9f7 274 * u8AmPm: \ref RTC_AM / \ref RTC_PM \n
<> 144:ef7eb2e8f9f7 275 *
<> 144:ef7eb2e8f9f7 276 * @return None
<> 144:ef7eb2e8f9f7 277 *
<> 144:ef7eb2e8f9f7 278 */
<> 144:ef7eb2e8f9f7 279 void RTC_GetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt)
<> 144:ef7eb2e8f9f7 280 {
<> 144:ef7eb2e8f9f7 281 uint32_t u32Tmp;
<> 144:ef7eb2e8f9f7 282
<> 144:ef7eb2e8f9f7 283 sPt->u32TimeScale = RTC->CLKFMT & RTC_CLKFMT_24HEN_Msk; /* 12/24-hour */
<> 144:ef7eb2e8f9f7 284 sPt->u32DayOfWeek = RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk; /* Day of week */
<> 144:ef7eb2e8f9f7 285
<> 144:ef7eb2e8f9f7 286 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 287 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 288
<> 144:ef7eb2e8f9f7 289 g_u32hiYear = (RTC->CALM & RTC_CALM_TENYEAR_Msk) >> RTC_CALM_TENYEAR_Pos;
<> 144:ef7eb2e8f9f7 290 g_u32loYear = (RTC->CALM & RTC_CALM_YEAR_Msk) >> RTC_CALM_YEAR_Pos;
<> 144:ef7eb2e8f9f7 291 g_u32hiMonth = (RTC->CALM & RTC_CALM_TENMON_Msk) >> RTC_CALM_TENMON_Pos;
<> 144:ef7eb2e8f9f7 292 g_u32loMonth = (RTC->CALM & RTC_CALM_MON_Msk) >> RTC_CALM_MON_Pos;
<> 144:ef7eb2e8f9f7 293 g_u32hiDay = (RTC->CALM & RTC_CALM_TENDAY_Msk) >> RTC_CALM_TENDAY_Pos;
<> 144:ef7eb2e8f9f7 294 g_u32loDay = (RTC->CALM & RTC_CALM_DAY_Msk);
<> 144:ef7eb2e8f9f7 295
<> 144:ef7eb2e8f9f7 296 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 297 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 298
<> 144:ef7eb2e8f9f7 299 g_u32hiHour = (RTC->TALM & RTC_TALM_TENHR_Msk) >> RTC_TALM_TENHR_Pos;
<> 144:ef7eb2e8f9f7 300 g_u32loHour = (RTC->TALM & RTC_TALM_HR_Msk) >> RTC_TALM_HR_Pos;
<> 144:ef7eb2e8f9f7 301 g_u32hiMin = (RTC->TALM & RTC_TALM_TENMIN_Msk) >> RTC_TALM_TENMIN_Pos;
<> 144:ef7eb2e8f9f7 302 g_u32loMin = (RTC->TALM & RTC_TALM_MIN_Msk) >> RTC_TALM_MIN_Pos;
<> 144:ef7eb2e8f9f7 303 g_u32hiSec = (RTC->TALM & RTC_TALM_TENSEC_Msk) >> RTC_TALM_TENSEC_Pos;
<> 144:ef7eb2e8f9f7 304 g_u32loSec = (RTC->TALM & RTC_TALM_SEC_Msk);
<> 144:ef7eb2e8f9f7 305
<> 144:ef7eb2e8f9f7 306 u32Tmp = (g_u32hiYear * 10); /* Compute to 20XX year */
<> 144:ef7eb2e8f9f7 307 u32Tmp += g_u32loYear;
<> 144:ef7eb2e8f9f7 308 sPt->u32Year = u32Tmp + RTC_YEAR2000;
<> 144:ef7eb2e8f9f7 309
<> 144:ef7eb2e8f9f7 310 u32Tmp = (g_u32hiMonth * 10); /* Compute 0~12 month */
<> 144:ef7eb2e8f9f7 311 sPt->u32Month = u32Tmp + g_u32loMonth;
<> 144:ef7eb2e8f9f7 312
<> 144:ef7eb2e8f9f7 313 u32Tmp = (g_u32hiDay * 10); /* Compute 0~31 day */
<> 144:ef7eb2e8f9f7 314 sPt->u32Day = u32Tmp + g_u32loDay;
<> 144:ef7eb2e8f9f7 315
<> 144:ef7eb2e8f9f7 316 if (sPt->u32TimeScale == RTC_CLOCK_12) { /* Compute12/24 hour */
<> 144:ef7eb2e8f9f7 317 u32Tmp = (g_u32hiHour * 10);
<> 144:ef7eb2e8f9f7 318 u32Tmp += g_u32loHour;
<> 144:ef7eb2e8f9f7 319 sPt->u32Hour = u32Tmp; /* AM: 1~12. PM: 21~32. */
<> 144:ef7eb2e8f9f7 320
<> 144:ef7eb2e8f9f7 321 if (sPt->u32Hour >= 21) {
<> 144:ef7eb2e8f9f7 322 sPt->u32AmPm = RTC_PM;
<> 144:ef7eb2e8f9f7 323 sPt->u32Hour -= 20;
<> 144:ef7eb2e8f9f7 324 } else {
<> 144:ef7eb2e8f9f7 325 sPt->u32AmPm = RTC_AM;
<> 144:ef7eb2e8f9f7 326 }
<> 144:ef7eb2e8f9f7 327
<> 144:ef7eb2e8f9f7 328 u32Tmp = (g_u32hiMin * 10);
<> 144:ef7eb2e8f9f7 329 u32Tmp += g_u32loMin;
<> 144:ef7eb2e8f9f7 330 sPt->u32Minute = u32Tmp;
<> 144:ef7eb2e8f9f7 331
<> 144:ef7eb2e8f9f7 332 u32Tmp = (g_u32hiSec * 10);
<> 144:ef7eb2e8f9f7 333 u32Tmp += g_u32loSec;
<> 144:ef7eb2e8f9f7 334 sPt->u32Second = u32Tmp;
<> 144:ef7eb2e8f9f7 335
<> 144:ef7eb2e8f9f7 336 } else {
<> 144:ef7eb2e8f9f7 337 /* RTC_CLOCK_24 */
<> 144:ef7eb2e8f9f7 338 u32Tmp = (g_u32hiHour * 10);
<> 144:ef7eb2e8f9f7 339 u32Tmp += g_u32loHour;
<> 144:ef7eb2e8f9f7 340 sPt->u32Hour = u32Tmp;
<> 144:ef7eb2e8f9f7 341
<> 144:ef7eb2e8f9f7 342 u32Tmp = (g_u32hiMin * 10);
<> 144:ef7eb2e8f9f7 343 u32Tmp+= g_u32loMin;
<> 144:ef7eb2e8f9f7 344 sPt->u32Minute = u32Tmp;
<> 144:ef7eb2e8f9f7 345
<> 144:ef7eb2e8f9f7 346 u32Tmp = (g_u32hiSec * 10);
<> 144:ef7eb2e8f9f7 347 u32Tmp += g_u32loSec;
<> 144:ef7eb2e8f9f7 348 sPt->u32Second = u32Tmp;
<> 144:ef7eb2e8f9f7 349 }
<> 144:ef7eb2e8f9f7 350
<> 144:ef7eb2e8f9f7 351 }
<> 144:ef7eb2e8f9f7 352
<> 144:ef7eb2e8f9f7 353
<> 144:ef7eb2e8f9f7 354
<> 144:ef7eb2e8f9f7 355 /**
<> 144:ef7eb2e8f9f7 356 * @brief This function is used to update date/time to RTC.
<> 144:ef7eb2e8f9f7 357 *
<> 144:ef7eb2e8f9f7 358 * @param[in] sPt \n
<> 144:ef7eb2e8f9f7 359 * Specify the time property and current time. It includes: \n
<> 144:ef7eb2e8f9f7 360 * u32Year: Year value. \n
<> 144:ef7eb2e8f9f7 361 * u32Month: Month value. \n
<> 144:ef7eb2e8f9f7 362 * u32Day: Day value. \n
<> 144:ef7eb2e8f9f7 363 * u32DayOfWeek: Day of week. [ \ref RTC_SUNDAY / \ref RTC_MONDAY / \ref RTC_TUESDAY /
<> 144:ef7eb2e8f9f7 364 * \ref RTC_WEDNESDAY / \ref RTC_THURSDAY / \ref RTC_FRIDAY /
<> 144:ef7eb2e8f9f7 365 * \ref RTC_SATURDAY] \n
<> 144:ef7eb2e8f9f7 366 * u32Hour: Hour value. \n
<> 144:ef7eb2e8f9f7 367 * u32Minute: Minute value. \n
<> 144:ef7eb2e8f9f7 368 * u32Second: Second value. \n
<> 144:ef7eb2e8f9f7 369 * u32TimeScale: [ \ref RTC_CLOCK_12 / \ref RTC_CLOCK_24] \n
<> 144:ef7eb2e8f9f7 370 * u8AmPm: [ \ref RTC_AM / \ref RTC_PM] \n
<> 144:ef7eb2e8f9f7 371 *
<> 144:ef7eb2e8f9f7 372 *
<> 144:ef7eb2e8f9f7 373 * @return None
<> 144:ef7eb2e8f9f7 374 *
<> 144:ef7eb2e8f9f7 375 *
<> 144:ef7eb2e8f9f7 376 */
<> 144:ef7eb2e8f9f7 377 void RTC_SetDateAndTime(S_RTC_TIME_DATA_T *sPt)
<> 144:ef7eb2e8f9f7 378 {
<> 144:ef7eb2e8f9f7 379 uint32_t u32Reg;
<> 144:ef7eb2e8f9f7 380
<> 144:ef7eb2e8f9f7 381 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 382 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 383
<> 144:ef7eb2e8f9f7 384 if (sPt->u32TimeScale == RTC_CLOCK_12) {
<> 144:ef7eb2e8f9f7 385 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 386
<> 144:ef7eb2e8f9f7 387 /*-----------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 388 /* important, range of 12-hour PM mode is 21 up to 32 */
<> 144:ef7eb2e8f9f7 389 /*-----------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 390 if (sPt->u32AmPm == RTC_PM)
<> 144:ef7eb2e8f9f7 391 sPt->u32Hour += 20;
<> 144:ef7eb2e8f9f7 392 } else { /* RTC_CLOCK_24 */
<> 144:ef7eb2e8f9f7 393 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 394 }
<> 144:ef7eb2e8f9f7 395
<> 144:ef7eb2e8f9f7 396 RTC->WEEKDAY = sPt->u32DayOfWeek & RTC_WEEKDAY_WEEKDAY_Msk;
<> 144:ef7eb2e8f9f7 397
<> 144:ef7eb2e8f9f7 398 u32Reg = ((sPt->u32Year - RTC_YEAR2000) / 10) << 20;
<> 144:ef7eb2e8f9f7 399 u32Reg |= (((sPt->u32Year - RTC_YEAR2000) % 10) << 16);
<> 144:ef7eb2e8f9f7 400 u32Reg |= ((sPt->u32Month / 10) << 12);
<> 144:ef7eb2e8f9f7 401 u32Reg |= ((sPt->u32Month % 10) << 8);
<> 144:ef7eb2e8f9f7 402 u32Reg |= ((sPt->u32Day / 10) << 4);
<> 144:ef7eb2e8f9f7 403 u32Reg |= (sPt->u32Day % 10);
<> 144:ef7eb2e8f9f7 404 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 405
<> 144:ef7eb2e8f9f7 406 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 407 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 408
<> 144:ef7eb2e8f9f7 409 RTC->CAL = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 410
<> 144:ef7eb2e8f9f7 411 u32Reg = ((sPt->u32Hour / 10) << 20);
<> 144:ef7eb2e8f9f7 412 u32Reg |= ((sPt->u32Hour % 10) << 16);
<> 144:ef7eb2e8f9f7 413 u32Reg |= ((sPt->u32Minute / 10) << 12);
<> 144:ef7eb2e8f9f7 414 u32Reg |= ((sPt->u32Minute % 10) << 8);
<> 144:ef7eb2e8f9f7 415 u32Reg |= ((sPt->u32Second / 10) << 4);
<> 144:ef7eb2e8f9f7 416 u32Reg |= (sPt->u32Second % 10);
<> 144:ef7eb2e8f9f7 417 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 418
<> 144:ef7eb2e8f9f7 419 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 420 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 421
<> 144:ef7eb2e8f9f7 422 RTC->TIME = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 423
<> 144:ef7eb2e8f9f7 424 }
<> 144:ef7eb2e8f9f7 425
<> 144:ef7eb2e8f9f7 426 /**
<> 144:ef7eb2e8f9f7 427 * @brief This function is used to set alarm date/time to RTC.
<> 144:ef7eb2e8f9f7 428 *
<> 144:ef7eb2e8f9f7 429 * @param[in] sPt \n
<> 144:ef7eb2e8f9f7 430 * Specify the time property and current time. It includes: \n
<> 144:ef7eb2e8f9f7 431 * u32Year: Year value. \n
<> 144:ef7eb2e8f9f7 432 * u32Month: Month value. \n
<> 144:ef7eb2e8f9f7 433 * u32Day: Day value. \n
<> 144:ef7eb2e8f9f7 434 * u32DayOfWeek: Day of week. [ \ref RTC_SUNDAY / \ref RTC_MONDAY / \ref RTC_TUESDAY /
<> 144:ef7eb2e8f9f7 435 * \ref RTC_WEDNESDAY / \ref RTC_THURSDAY / \ref RTC_FRIDAY /
<> 144:ef7eb2e8f9f7 436 * \ref RTC_SATURDAY] \n
<> 144:ef7eb2e8f9f7 437 * u32Hour: Hour value. \n
<> 144:ef7eb2e8f9f7 438 * u32Minute: Minute value. \n
<> 144:ef7eb2e8f9f7 439 * u32Second: Second value. \n
<> 144:ef7eb2e8f9f7 440 * u32TimeScale: [ \ref RTC_CLOCK_12 / \ref RTC_CLOCK_24] \n
<> 144:ef7eb2e8f9f7 441 * u8AmPm: [ \ref RTC_AM / \ref RTC_PM] \n
<> 144:ef7eb2e8f9f7 442 *
<> 144:ef7eb2e8f9f7 443 * @return None
<> 144:ef7eb2e8f9f7 444 *
<> 144:ef7eb2e8f9f7 445 */
<> 144:ef7eb2e8f9f7 446 void RTC_SetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt)
<> 144:ef7eb2e8f9f7 447 {
<> 144:ef7eb2e8f9f7 448 uint32_t u32Reg;
<> 144:ef7eb2e8f9f7 449
<> 144:ef7eb2e8f9f7 450 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 451 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 452
<> 144:ef7eb2e8f9f7 453 if (sPt->u32TimeScale == RTC_CLOCK_12) {
<> 144:ef7eb2e8f9f7 454 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 455
<> 144:ef7eb2e8f9f7 456 /*-----------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 457 /* important, range of 12-hour PM mode is 21 up to 32 */
<> 144:ef7eb2e8f9f7 458 /*-----------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 459 if (sPt->u32AmPm == RTC_PM)
<> 144:ef7eb2e8f9f7 460 sPt->u32Hour += 20;
<> 144:ef7eb2e8f9f7 461 } else { /* RTC_CLOCK_24 */
<> 144:ef7eb2e8f9f7 462 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 463 }
<> 144:ef7eb2e8f9f7 464
<> 144:ef7eb2e8f9f7 465 RTC->WEEKDAY = sPt->u32DayOfWeek & RTC_WEEKDAY_WEEKDAY_Msk;
<> 144:ef7eb2e8f9f7 466
<> 144:ef7eb2e8f9f7 467
<> 144:ef7eb2e8f9f7 468 u32Reg = ((sPt->u32Year - RTC_YEAR2000) / 10) << 20;
<> 144:ef7eb2e8f9f7 469 u32Reg |= (((sPt->u32Year - RTC_YEAR2000) % 10) << 16);
<> 144:ef7eb2e8f9f7 470 u32Reg |= ((sPt->u32Month / 10) << 12);
<> 144:ef7eb2e8f9f7 471 u32Reg |= ((sPt->u32Month % 10) << 8);
<> 144:ef7eb2e8f9f7 472 u32Reg |= ((sPt->u32Day / 10) << 4);
<> 144:ef7eb2e8f9f7 473 u32Reg |= (sPt->u32Day % 10);
<> 144:ef7eb2e8f9f7 474 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 475
<> 144:ef7eb2e8f9f7 476 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 477 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 478
<> 144:ef7eb2e8f9f7 479 RTC->CALM = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 480
<> 144:ef7eb2e8f9f7 481 u32Reg = ((sPt->u32Hour / 10) << 20);
<> 144:ef7eb2e8f9f7 482 u32Reg |= ((sPt->u32Hour % 10) << 16);
<> 144:ef7eb2e8f9f7 483 u32Reg |= ((sPt->u32Minute / 10) << 12);
<> 144:ef7eb2e8f9f7 484 u32Reg |= ((sPt->u32Minute % 10) << 8);
<> 144:ef7eb2e8f9f7 485 u32Reg |= ((sPt->u32Second / 10) << 4);
<> 144:ef7eb2e8f9f7 486 u32Reg |= (sPt->u32Second % 10);
<> 144:ef7eb2e8f9f7 487 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 488
<> 144:ef7eb2e8f9f7 489 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 490 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 491
<> 144:ef7eb2e8f9f7 492 RTC->TALM = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 493
<> 144:ef7eb2e8f9f7 494 }
<> 144:ef7eb2e8f9f7 495
<> 144:ef7eb2e8f9f7 496
<> 144:ef7eb2e8f9f7 497 /**
<> 144:ef7eb2e8f9f7 498 * @brief This function is used to update date to RTC
<> 144:ef7eb2e8f9f7 499 *
<> 144:ef7eb2e8f9f7 500 * @param[in] u32Year The Year Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 501 * @param[in] u32Month The Month Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 502 * @param[in] u32Day The Day Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 503 * @param[in] u32DayOfWeek The Day of Week. [ \ref RTC_SUNDAY / \ref RTC_MONDAY / \ref RTC_TUESDAY /
<> 144:ef7eb2e8f9f7 504 * \ref RTC_WEDNESDAY / \ref RTC_THURSDAY / \ref RTC_FRIDAY /
<> 144:ef7eb2e8f9f7 505 * \ref RTC_SATURDAY]
<> 144:ef7eb2e8f9f7 506 *
<> 144:ef7eb2e8f9f7 507 * @return None
<> 144:ef7eb2e8f9f7 508 *
<> 144:ef7eb2e8f9f7 509 */
<> 144:ef7eb2e8f9f7 510 void RTC_SetDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day, uint32_t u32DayOfWeek)
<> 144:ef7eb2e8f9f7 511 {
<> 144:ef7eb2e8f9f7 512 __IO uint32_t u32Reg;
<> 144:ef7eb2e8f9f7 513
<> 144:ef7eb2e8f9f7 514 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 515 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 516
<> 144:ef7eb2e8f9f7 517 RTC->WEEKDAY = u32DayOfWeek & RTC_WEEKDAY_WEEKDAY_Msk;
<> 144:ef7eb2e8f9f7 518
<> 144:ef7eb2e8f9f7 519 u32Reg = ((u32Year - RTC_YEAR2000) / 10) << 20;
<> 144:ef7eb2e8f9f7 520 u32Reg |= (((u32Year - RTC_YEAR2000) % 10) << 16);
<> 144:ef7eb2e8f9f7 521 u32Reg |= ((u32Month / 10) << 12);
<> 144:ef7eb2e8f9f7 522 u32Reg |= ((u32Month % 10) << 8);
<> 144:ef7eb2e8f9f7 523 u32Reg |= ((u32Day / 10) << 4);
<> 144:ef7eb2e8f9f7 524 u32Reg |= (u32Day % 10);
<> 144:ef7eb2e8f9f7 525 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 526
<> 144:ef7eb2e8f9f7 527 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 528 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 529
<> 144:ef7eb2e8f9f7 530 RTC->CAL = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 531
<> 144:ef7eb2e8f9f7 532 }
<> 144:ef7eb2e8f9f7 533
<> 144:ef7eb2e8f9f7 534 /**
<> 144:ef7eb2e8f9f7 535 * @brief This function is used to update time to RTC.
<> 144:ef7eb2e8f9f7 536 *
<> 144:ef7eb2e8f9f7 537 * @param[in] u32Hour The Hour Time Digit of Alarm Setting.
<> 144:ef7eb2e8f9f7 538 * @param[in] u32Minute The Month Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 539 * @param[in] u32Second The Day Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 540 * @param[in] u32TimeMode The 24-Hour / 12-Hour Time Scale Selection. [ \ref RTC_CLOCK_12 / \ref RTC_CLOCK_24]
<> 144:ef7eb2e8f9f7 541 * @param[in] u32AmPm 12-hour time scale with AM and PM indication. Only Time Scale select 12-hour used. [ \ref RTC_AM / \ref RTC_PM]
<> 144:ef7eb2e8f9f7 542 *
<> 144:ef7eb2e8f9f7 543 * @return None
<> 144:ef7eb2e8f9f7 544 *
<> 144:ef7eb2e8f9f7 545 */
<> 144:ef7eb2e8f9f7 546 void RTC_SetTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm)
<> 144:ef7eb2e8f9f7 547 {
<> 144:ef7eb2e8f9f7 548 __IO uint32_t u32Reg;
<> 144:ef7eb2e8f9f7 549
<> 144:ef7eb2e8f9f7 550 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 551 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 552
<> 144:ef7eb2e8f9f7 553 if (u32TimeMode == RTC_CLOCK_12) {
<> 144:ef7eb2e8f9f7 554 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 555
<> 144:ef7eb2e8f9f7 556 if (u32AmPm == RTC_PM) /* important, range of 12-hour PM mode is 21 up to 32 */
<> 144:ef7eb2e8f9f7 557 u32Hour += 20;
<> 144:ef7eb2e8f9f7 558 } else if(u32TimeMode == RTC_CLOCK_24) {
<> 144:ef7eb2e8f9f7 559 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 560 }
<> 144:ef7eb2e8f9f7 561
<> 144:ef7eb2e8f9f7 562 u32Reg = ((u32Hour / 10) << 20);
<> 144:ef7eb2e8f9f7 563 u32Reg |= ((u32Hour % 10) << 16);
<> 144:ef7eb2e8f9f7 564 u32Reg |= ((u32Minute / 10) << 12);
<> 144:ef7eb2e8f9f7 565 u32Reg |= ((u32Minute % 10) << 8);
<> 144:ef7eb2e8f9f7 566 u32Reg |= ((u32Second / 10) << 4);
<> 144:ef7eb2e8f9f7 567 u32Reg |= (u32Second % 10);
<> 144:ef7eb2e8f9f7 568
<> 144:ef7eb2e8f9f7 569 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 570
<> 144:ef7eb2e8f9f7 571 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 572 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 573
<> 144:ef7eb2e8f9f7 574 RTC->TIME = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 575
<> 144:ef7eb2e8f9f7 576 }
<> 144:ef7eb2e8f9f7 577
<> 144:ef7eb2e8f9f7 578 /**
<> 144:ef7eb2e8f9f7 579 * @brief This function is used to set alarm date to RTC
<> 144:ef7eb2e8f9f7 580 *
<> 144:ef7eb2e8f9f7 581 * @param[in] u32Year The Year Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 582 * @param[in] u32Month The Month Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 583 * @param[in] u32Day The Day Calendar Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 584 *
<> 144:ef7eb2e8f9f7 585 * @return None
<> 144:ef7eb2e8f9f7 586 *
<> 144:ef7eb2e8f9f7 587 */
<> 144:ef7eb2e8f9f7 588 void RTC_SetAlarmDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day)
<> 144:ef7eb2e8f9f7 589 {
<> 144:ef7eb2e8f9f7 590 __IO uint32_t u32Reg;
<> 144:ef7eb2e8f9f7 591
<> 144:ef7eb2e8f9f7 592 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 593 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 594
<> 144:ef7eb2e8f9f7 595 u32Reg = ((u32Year - RTC_YEAR2000) / 10) << 20;
<> 144:ef7eb2e8f9f7 596 u32Reg |= (((u32Year - RTC_YEAR2000) % 10) << 16);
<> 144:ef7eb2e8f9f7 597 u32Reg |= ((u32Month / 10) << 12);
<> 144:ef7eb2e8f9f7 598 u32Reg |= ((u32Month % 10) << 8);
<> 144:ef7eb2e8f9f7 599 u32Reg |= ((u32Day / 10) << 4);
<> 144:ef7eb2e8f9f7 600 u32Reg |= (u32Day % 10);
<> 144:ef7eb2e8f9f7 601 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 602
<> 144:ef7eb2e8f9f7 603 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 604 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 605
<> 144:ef7eb2e8f9f7 606 RTC->CALM = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 607
<> 144:ef7eb2e8f9f7 608 }
<> 144:ef7eb2e8f9f7 609
<> 144:ef7eb2e8f9f7 610 /**
<> 144:ef7eb2e8f9f7 611 * @brief This function is used to set alarm date to RTC
<> 144:ef7eb2e8f9f7 612 *
<> 144:ef7eb2e8f9f7 613 * @param[in] u32Hour The Hour Time Digit of Alarm Setting.
<> 144:ef7eb2e8f9f7 614 * @param[in] u32Minute The Minute Time Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 615 * @param[in] u32Second The Second Time Digit of Alarm Setting
<> 144:ef7eb2e8f9f7 616 * @param[in] u32TimeMode The 24-Hour / 12-Hour Time Scale Selection. [ \ref RTC_CLOCK_12 / \ref RTC_CLOCK_24]
<> 144:ef7eb2e8f9f7 617 * @param[in] u32AmPm 12-hour time scale with AM and PM indication. Only Time Scale select 12-hour used. [ \ref RTC_AM / \ref RTC_PM]
<> 144:ef7eb2e8f9f7 618 *
<> 144:ef7eb2e8f9f7 619 * @return None
<> 144:ef7eb2e8f9f7 620 *
<> 144:ef7eb2e8f9f7 621 */
<> 144:ef7eb2e8f9f7 622 void RTC_SetAlarmTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm)
<> 144:ef7eb2e8f9f7 623 {
<> 144:ef7eb2e8f9f7 624 __IO uint32_t u32Reg;
<> 144:ef7eb2e8f9f7 625
<> 144:ef7eb2e8f9f7 626 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 627 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 628
<> 144:ef7eb2e8f9f7 629 if (u32TimeMode == RTC_CLOCK_12) {
<> 144:ef7eb2e8f9f7 630 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 631
<> 144:ef7eb2e8f9f7 632 if (u32AmPm == RTC_PM) /* important, range of 12-hour PM mode is 21 up to 32 */
<> 144:ef7eb2e8f9f7 633 u32Hour += 20;
<> 144:ef7eb2e8f9f7 634 } else if(u32TimeMode == RTC_CLOCK_24) {
<> 144:ef7eb2e8f9f7 635 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
<> 144:ef7eb2e8f9f7 636 }
<> 144:ef7eb2e8f9f7 637
<> 144:ef7eb2e8f9f7 638 u32Reg = ((u32Hour / 10) << 20);
<> 144:ef7eb2e8f9f7 639 u32Reg |= ((u32Hour % 10) << 16);
<> 144:ef7eb2e8f9f7 640 u32Reg |= ((u32Minute / 10) << 12);
<> 144:ef7eb2e8f9f7 641 u32Reg |= ((u32Minute % 10) << 8);
<> 144:ef7eb2e8f9f7 642 u32Reg |= ((u32Second / 10) << 4);
<> 144:ef7eb2e8f9f7 643 u32Reg |= (u32Second % 10);
<> 144:ef7eb2e8f9f7 644
<> 144:ef7eb2e8f9f7 645 g_u32Reg = u32Reg;
<> 144:ef7eb2e8f9f7 646
<> 144:ef7eb2e8f9f7 647 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 648 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 649
<> 144:ef7eb2e8f9f7 650 RTC->TALM = (uint32_t)g_u32Reg;
<> 144:ef7eb2e8f9f7 651
<> 144:ef7eb2e8f9f7 652 }
<> 144:ef7eb2e8f9f7 653
<> 144:ef7eb2e8f9f7 654
<> 144:ef7eb2e8f9f7 655 /**
<> 144:ef7eb2e8f9f7 656 * @brief The spare registers access enable
<> 144:ef7eb2e8f9f7 657 *
<> 144:ef7eb2e8f9f7 658 * @return None
<> 144:ef7eb2e8f9f7 659 *
<> 144:ef7eb2e8f9f7 660 */
<> 144:ef7eb2e8f9f7 661 void RTC_EnableSpareAccess(void)
<> 144:ef7eb2e8f9f7 662 {
<> 144:ef7eb2e8f9f7 663 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 664 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 665
<> 144:ef7eb2e8f9f7 666 RTC->SPRCTL |= RTC_SPRCTL_SPRRWEN_Msk;
<> 144:ef7eb2e8f9f7 667
<> 144:ef7eb2e8f9f7 668 while(!(RTC->SPRCTL & RTC_SPRCTL_SPRRWRDY_Msk));
<> 144:ef7eb2e8f9f7 669 }
<> 144:ef7eb2e8f9f7 670
<> 144:ef7eb2e8f9f7 671
<> 144:ef7eb2e8f9f7 672 /**
<> 144:ef7eb2e8f9f7 673 * @brief This function is used to:
<> 144:ef7eb2e8f9f7 674 * 1. Enable tamper detection function. \n
<> 144:ef7eb2e8f9f7 675 * 2. Set tamper detect pin number. \n
<> 144:ef7eb2e8f9f7 676 * 3. Set tamper control register, interrupt. \n
<> 144:ef7eb2e8f9f7 677 * 4. Clear tamper status. \n
<> 144:ef7eb2e8f9f7 678 * 5. Destroy Spare Register when tamper detected \n
<> 144:ef7eb2e8f9f7 679 *
<> 144:ef7eb2e8f9f7 680 * @param[in] u32PinNumber tamper detect pin number. [ \ref RTC_TAMPER_0 / \ref RTC_TAMPER_1]
<> 144:ef7eb2e8f9f7 681 * @param[in] u32PinCondition set tamper detection condition: 1=High level detect, 0=Low level detect
<> 144:ef7eb2e8f9f7 682 * @param[in] u32IntFlag Enable/Disable tamper interrupt: 1=Enable, 0=Disable
<> 144:ef7eb2e8f9f7 683 * @param[in] u32ClearFlag Clear tamper status
<> 144:ef7eb2e8f9f7 684 * @param[in] u32DestroyEn Enable/Disable Destroy Spare Register when tamper detected: 1=Enable, 0=Disable
<> 144:ef7eb2e8f9f7 685 *
<> 144:ef7eb2e8f9f7 686 * @return None
<> 144:ef7eb2e8f9f7 687 *
<> 144:ef7eb2e8f9f7 688 */
<> 144:ef7eb2e8f9f7 689 void RTC_EnableTamperDetection(uint32_t u32PinNumber, uint32_t u32PinCondition, uint32_t u32IntFlag, uint32_t u32ClearFlag, uint32_t u32DestroyEn)
<> 144:ef7eb2e8f9f7 690 {
<> 144:ef7eb2e8f9f7 691 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 692 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 693
<> 144:ef7eb2e8f9f7 694 if(u32PinNumber == RTC_TAMPER_0) {
<> 144:ef7eb2e8f9f7 695 if(u32ClearFlag)
<> 144:ef7eb2e8f9f7 696 RTC->TAMPSTS |= RTC_TAMPSTS_TAMPSTS0_Msk;
<> 144:ef7eb2e8f9f7 697
<> 144:ef7eb2e8f9f7 698 if(u32PinCondition)
<> 144:ef7eb2e8f9f7 699 RTC->TAMPCTL |= RTC_TAMPCTL_TAMPLV0_Msk;
<> 144:ef7eb2e8f9f7 700 else
<> 144:ef7eb2e8f9f7 701 RTC->TAMPCTL &= ~RTC_TAMPCTL_TAMPLV0_Msk;
<> 144:ef7eb2e8f9f7 702
<> 144:ef7eb2e8f9f7 703 RTC->TAMPCTL |= RTC_TAMPCTL_TAMPDBEN0_Msk;
<> 144:ef7eb2e8f9f7 704 RTC->TAMPCTL |= RTC_TAMPCTL_TAMPEN0_Msk;
<> 144:ef7eb2e8f9f7 705 } else if(u32PinNumber == RTC_TAMPER_1) {
<> 144:ef7eb2e8f9f7 706 if(u32ClearFlag)
<> 144:ef7eb2e8f9f7 707 RTC->TAMPSTS |= RTC_TAMPSTS_TAMPSTS1_Msk;
<> 144:ef7eb2e8f9f7 708
<> 144:ef7eb2e8f9f7 709 if(u32PinCondition)
<> 144:ef7eb2e8f9f7 710 RTC->TAMPCTL |= RTC_TAMPCTL_TAMPLV1_Msk;
<> 144:ef7eb2e8f9f7 711 else
<> 144:ef7eb2e8f9f7 712 RTC->TAMPCTL &= ~RTC_TAMPCTL_TAMPLV1_Msk;
<> 144:ef7eb2e8f9f7 713
<> 144:ef7eb2e8f9f7 714 RTC->TAMPCTL |= RTC_TAMPCTL_TAMPDBEN1_Msk;
<> 144:ef7eb2e8f9f7 715 RTC->TAMPCTL |= RTC_TAMPCTL_TAMPEN1_Msk;
<> 144:ef7eb2e8f9f7 716 }
<> 144:ef7eb2e8f9f7 717
<> 144:ef7eb2e8f9f7 718 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 719 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 720
<> 144:ef7eb2e8f9f7 721 if(u32IntFlag)
<> 144:ef7eb2e8f9f7 722 RTC->TAMPCTL |= RTC_TAMPCTL_TIEN_Msk;
<> 144:ef7eb2e8f9f7 723 else
<> 144:ef7eb2e8f9f7 724 RTC->TAMPCTL &= ~RTC_TAMPCTL_TIEN_Msk;
<> 144:ef7eb2e8f9f7 725
<> 144:ef7eb2e8f9f7 726 if(u32DestroyEn)
<> 144:ef7eb2e8f9f7 727 RTC->TAMPCTL |= RTC_TAMPCTL_DESTROYEN_Msk;
<> 144:ef7eb2e8f9f7 728 else
<> 144:ef7eb2e8f9f7 729 RTC->TAMPCTL &= ~RTC_TAMPCTL_DESTROYEN_Msk;
<> 144:ef7eb2e8f9f7 730
<> 144:ef7eb2e8f9f7 731 }
<> 144:ef7eb2e8f9f7 732
<> 144:ef7eb2e8f9f7 733 /**
<> 144:ef7eb2e8f9f7 734 * @brief This function is used to disable tamper detection function.
<> 144:ef7eb2e8f9f7 735 *
<> 144:ef7eb2e8f9f7 736 * @param[in] u32PinNumber tamper detect pin number: \ref RTC_TAMPER_0, \ref RTC_TAMPER_1
<> 144:ef7eb2e8f9f7 737 *
<> 144:ef7eb2e8f9f7 738 * @return None
<> 144:ef7eb2e8f9f7 739 *
<> 144:ef7eb2e8f9f7 740 */
<> 144:ef7eb2e8f9f7 741 void RTC_DisableTamperDetection(uint32_t u32PinNumber)
<> 144:ef7eb2e8f9f7 742 {
<> 144:ef7eb2e8f9f7 743 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 744 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 745
<> 144:ef7eb2e8f9f7 746 if(u32PinNumber == RTC_TAMPER_0) {
<> 144:ef7eb2e8f9f7 747 RTC->TAMPCTL &= ~RTC_TAMPCTL_TAMPEN0_Msk;
<> 144:ef7eb2e8f9f7 748 } else if(u32PinNumber == RTC_TAMPER_1) {
<> 144:ef7eb2e8f9f7 749 RTC->TAMPCTL &= ~RTC_TAMPCTL_TAMPEN1_Msk;
<> 144:ef7eb2e8f9f7 750 }
<> 144:ef7eb2e8f9f7 751
<> 144:ef7eb2e8f9f7 752 }
<> 144:ef7eb2e8f9f7 753
<> 144:ef7eb2e8f9f7 754 /**
<> 144:ef7eb2e8f9f7 755 * @brief This function is used to get day of week.
<> 144:ef7eb2e8f9f7 756 *
<> 144:ef7eb2e8f9f7 757 * @param None
<> 144:ef7eb2e8f9f7 758 *
<> 144:ef7eb2e8f9f7 759 * @return Day of week
<> 144:ef7eb2e8f9f7 760 *
<> 144:ef7eb2e8f9f7 761 */
<> 144:ef7eb2e8f9f7 762 uint32_t RTC_GetDayOfWeek(void)
<> 144:ef7eb2e8f9f7 763 {
<> 144:ef7eb2e8f9f7 764 return (RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk);
<> 144:ef7eb2e8f9f7 765 }
<> 144:ef7eb2e8f9f7 766
<> 144:ef7eb2e8f9f7 767 /**
<> 144:ef7eb2e8f9f7 768 * @brief The function is used to set time tick period for periodic time tick Interrupt.
<> 144:ef7eb2e8f9f7 769 *
<> 144:ef7eb2e8f9f7 770 * @param[in] u32TickSelection
<> 144:ef7eb2e8f9f7 771 * It is used to set the RTC time tick period for Periodic Time Tick Interrupt request.
<> 144:ef7eb2e8f9f7 772 * It consists of: \n
<> 144:ef7eb2e8f9f7 773 * - \ref RTC_TICK_1_SEC : Time tick is 1 second \n
<> 144:ef7eb2e8f9f7 774 * - \ref RTC_TICK_1_2_SEC : Time tick is 1/2 second \n
<> 144:ef7eb2e8f9f7 775 * - \ref RTC_TICK_1_4_SEC : Time tick is 1/4 second \n
<> 144:ef7eb2e8f9f7 776 * - \ref RTC_TICK_1_8_SEC : Time tick is 1/8 second \n
<> 144:ef7eb2e8f9f7 777 * - \ref RTC_TICK_1_16_SEC : Time tick is 1/16 second \n
<> 144:ef7eb2e8f9f7 778 * - \ref RTC_TICK_1_32_SEC : Time tick is 1/32 second \n
<> 144:ef7eb2e8f9f7 779 * - \ref RTC_TICK_1_64_SEC : Time tick is 1/64 second \n
<> 144:ef7eb2e8f9f7 780 * - \ref RTC_TICK_1_128_SEC : Time tick is 1/128 second
<> 144:ef7eb2e8f9f7 781 *
<> 144:ef7eb2e8f9f7 782 * @return None
<> 144:ef7eb2e8f9f7 783 *
<> 144:ef7eb2e8f9f7 784 */
<> 144:ef7eb2e8f9f7 785 void RTC_SetTickPeriod(uint32_t u32TickSelection)
<> 144:ef7eb2e8f9f7 786 {
<> 144:ef7eb2e8f9f7 787 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 788 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 789
<> 144:ef7eb2e8f9f7 790 RTC->TICK = RTC->TICK & ~RTC_TICK_TICKSEL_Msk | u32TickSelection;
<> 144:ef7eb2e8f9f7 791 }
<> 144:ef7eb2e8f9f7 792
<> 144:ef7eb2e8f9f7 793 /**
<> 144:ef7eb2e8f9f7 794 * @brief The function is used to enable specified interrupt.
<> 144:ef7eb2e8f9f7 795 *
<> 144:ef7eb2e8f9f7 796 * @param[in] u32IntFlagMask The structure of interrupt source. It consists of: \n
<> 144:ef7eb2e8f9f7 797 * \ref RTC_INTEN_ALMIEN_Msk : Alarm interrupt \n
<> 144:ef7eb2e8f9f7 798 * \ref RTC_INTEN_TICKIEN_Msk : Tick interrupt \n
<> 144:ef7eb2e8f9f7 799 *
<> 144:ef7eb2e8f9f7 800 * @return None
<> 144:ef7eb2e8f9f7 801 *
<> 144:ef7eb2e8f9f7 802 */
<> 144:ef7eb2e8f9f7 803 void RTC_EnableInt(uint32_t u32IntFlagMask)
<> 144:ef7eb2e8f9f7 804 {
<> 144:ef7eb2e8f9f7 805 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 806 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 807
<> 144:ef7eb2e8f9f7 808 RTC->INTEN |= u32IntFlagMask;
<> 144:ef7eb2e8f9f7 809 }
<> 144:ef7eb2e8f9f7 810
<> 144:ef7eb2e8f9f7 811 /**
<> 144:ef7eb2e8f9f7 812 * @brief The function is used to disable specified interrupt.
<> 144:ef7eb2e8f9f7 813 *
<> 144:ef7eb2e8f9f7 814 * @param[in] u32IntFlagMask The structure of interrupt source. It consists of: \n
<> 144:ef7eb2e8f9f7 815 * \ref RTC_INTEN_ALMIEN_Msk : Alarm interrupt \n
<> 144:ef7eb2e8f9f7 816 * \ref RTC_INTEN_TICKIEN_Msk : Tick interrupt \n
<> 144:ef7eb2e8f9f7 817 *
<> 144:ef7eb2e8f9f7 818 * @return None
<> 144:ef7eb2e8f9f7 819 *
<> 144:ef7eb2e8f9f7 820 */
<> 144:ef7eb2e8f9f7 821 void RTC_DisableInt(uint32_t u32IntFlagMask)
<> 144:ef7eb2e8f9f7 822 {
<> 144:ef7eb2e8f9f7 823 RTC->RWEN = RTC_WRITE_KEY;
<> 144:ef7eb2e8f9f7 824 while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
<> 144:ef7eb2e8f9f7 825
<> 144:ef7eb2e8f9f7 826 if(u32IntFlagMask & RTC_INTEN_TICKIEN_Msk) {
<> 144:ef7eb2e8f9f7 827 RTC->INTEN &= ~RTC_INTEN_TICKIEN_Msk;
<> 144:ef7eb2e8f9f7 828 RTC->INTSTS |= RTC_INTSTS_TICKIF_Msk;
<> 144:ef7eb2e8f9f7 829 }
<> 144:ef7eb2e8f9f7 830
<> 144:ef7eb2e8f9f7 831 if(u32IntFlagMask & RTC_INTEN_ALMIEN_Msk) {
<> 144:ef7eb2e8f9f7 832 RTC->INTEN &= ~RTC_INTEN_ALMIEN_Msk;
<> 144:ef7eb2e8f9f7 833 RTC->INTSTS |= RTC_INTSTS_ALMIF_Msk;
<> 144:ef7eb2e8f9f7 834 }
<> 144:ef7eb2e8f9f7 835
<> 144:ef7eb2e8f9f7 836 }
<> 144:ef7eb2e8f9f7 837
<> 144:ef7eb2e8f9f7 838 /**
<> 144:ef7eb2e8f9f7 839 * @brief Disable RTC clock.
<> 144:ef7eb2e8f9f7 840 *
<> 144:ef7eb2e8f9f7 841 * @return None
<> 144:ef7eb2e8f9f7 842 *
<> 144:ef7eb2e8f9f7 843 */
<> 144:ef7eb2e8f9f7 844 void RTC_Close (void)
<> 144:ef7eb2e8f9f7 845 {
<> 144:ef7eb2e8f9f7 846 CLK->APBCLK0 &= ~CLK_APBCLK0_RTCCKEN_Msk;
<> 144:ef7eb2e8f9f7 847 }
<> 144:ef7eb2e8f9f7 848
<> 144:ef7eb2e8f9f7 849
<> 144:ef7eb2e8f9f7 850 /*@}*/ /* end of group NUC472_442_RTC_EXPORTED_FUNCTIONS */
<> 144:ef7eb2e8f9f7 851
<> 144:ef7eb2e8f9f7 852 /*@}*/ /* end of group NUC472_442_RTC_Driver */
<> 144:ef7eb2e8f9f7 853
<> 144:ef7eb2e8f9f7 854 /*@}*/ /* end of group NUC472_442_Device_Driver */
<> 144:ef7eb2e8f9f7 855
<> 144:ef7eb2e8f9f7 856 /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/
<> 144:ef7eb2e8f9f7 857
<> 144:ef7eb2e8f9f7 858