mbed official / mbed-dev

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Thu Aug 31 17:27:04 2017 +0100
Revision:
172:7d866c31b3c5
This updates the lib to the mbed lib v 150

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 172:7d866c31b3c5 1 /**************************************************************************//**
AnnaBridge 172:7d866c31b3c5 2 * @file rtc.c
AnnaBridge 172:7d866c31b3c5 3 * @version V3.00
AnnaBridge 172:7d866c31b3c5 4 * $Revision: 5 $
AnnaBridge 172:7d866c31b3c5 5 * $Date: 14/06/10 5:49p $
AnnaBridge 172:7d866c31b3c5 6 * @brief M480 series RTC driver source file
AnnaBridge 172:7d866c31b3c5 7 *
AnnaBridge 172:7d866c31b3c5 8 * @note
AnnaBridge 172:7d866c31b3c5 9 * @copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
AnnaBridge 172:7d866c31b3c5 10 *****************************************************************************/
AnnaBridge 172:7d866c31b3c5 11 #include "M480.h"
AnnaBridge 172:7d866c31b3c5 12
AnnaBridge 172:7d866c31b3c5 13
AnnaBridge 172:7d866c31b3c5 14 /** @cond HIDDEN_SYMBOLS */
AnnaBridge 172:7d866c31b3c5 15
AnnaBridge 172:7d866c31b3c5 16 /*---------------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 17 /* Macro, type and constant definitions */
AnnaBridge 172:7d866c31b3c5 18 /*---------------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 19 #define RTC_GLOBALS
AnnaBridge 172:7d866c31b3c5 20
AnnaBridge 172:7d866c31b3c5 21 /*---------------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 22 /* Global file scope (static) variables */
AnnaBridge 172:7d866c31b3c5 23 /*---------------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 24 static volatile uint32_t g_u32hiYear, g_u32loYear, g_u32hiMonth, g_u32loMonth, g_u32hiDay, g_u32loDay;
AnnaBridge 172:7d866c31b3c5 25 static volatile uint32_t g_u32hiHour, g_u32loHour, g_u32hiMin, g_u32loMin, g_u32hiSec, g_u32loSec;
AnnaBridge 172:7d866c31b3c5 26
AnnaBridge 172:7d866c31b3c5 27 /** @endcond HIDDEN_SYMBOLS */
AnnaBridge 172:7d866c31b3c5 28
AnnaBridge 172:7d866c31b3c5 29
AnnaBridge 172:7d866c31b3c5 30
AnnaBridge 172:7d866c31b3c5 31
AnnaBridge 172:7d866c31b3c5 32 /** @addtogroup M480_Device_Driver M480 Device Driver
AnnaBridge 172:7d866c31b3c5 33 @{
AnnaBridge 172:7d866c31b3c5 34 */
AnnaBridge 172:7d866c31b3c5 35
AnnaBridge 172:7d866c31b3c5 36 /** @addtogroup M480_RTC_Driver RTC Driver
AnnaBridge 172:7d866c31b3c5 37 @{
AnnaBridge 172:7d866c31b3c5 38 */
AnnaBridge 172:7d866c31b3c5 39
AnnaBridge 172:7d866c31b3c5 40 /** @addtogroup M480_RTC_EXPORTED_FUNCTIONS RTC Exported Functions
AnnaBridge 172:7d866c31b3c5 41 @{
AnnaBridge 172:7d866c31b3c5 42 */
AnnaBridge 172:7d866c31b3c5 43
AnnaBridge 172:7d866c31b3c5 44 /**
AnnaBridge 172:7d866c31b3c5 45 * @brief Initialize RTC module and start counting
AnnaBridge 172:7d866c31b3c5 46 *
AnnaBridge 172:7d866c31b3c5 47 * @param[in] sPt Specify the time property and current date and time. It includes: \n
AnnaBridge 172:7d866c31b3c5 48 * u32Year: Year value, range between 2000 ~ 2099. \n
AnnaBridge 172:7d866c31b3c5 49 * u32Month: Month value, range between 1 ~ 12. \n
AnnaBridge 172:7d866c31b3c5 50 * u32Day: Day value, range between 1 ~ 31. \n
AnnaBridge 172:7d866c31b3c5 51 * u32DayOfWeek: Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY /
AnnaBridge 172:7d866c31b3c5 52 * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY /
AnnaBridge 172:7d866c31b3c5 53 * RTC_SATURDAY] \n
AnnaBridge 172:7d866c31b3c5 54 * u32Hour: Hour value, range between 0 ~ 23. \n
AnnaBridge 172:7d866c31b3c5 55 * u32Minute: Minute value, range between 0 ~ 59. \n
AnnaBridge 172:7d866c31b3c5 56 * u32Second: Second value, range between 0 ~ 59. \n
AnnaBridge 172:7d866c31b3c5 57 * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n
AnnaBridge 172:7d866c31b3c5 58 * u8AmPm: [RTC_AM / RTC_PM] \n
AnnaBridge 172:7d866c31b3c5 59 *
AnnaBridge 172:7d866c31b3c5 60 * @return None
AnnaBridge 172:7d866c31b3c5 61 *
AnnaBridge 172:7d866c31b3c5 62 * @details This function is used to: \n
AnnaBridge 172:7d866c31b3c5 63 * 1. Write initial key to let RTC start count. \n
AnnaBridge 172:7d866c31b3c5 64 * 2. Input parameter indicates start date/time. \n
AnnaBridge 172:7d866c31b3c5 65 * 3. User has to make sure that parameters of RTC date/time are reasonable. \n
AnnaBridge 172:7d866c31b3c5 66 * @note Null pointer for using default starting date/time.
AnnaBridge 172:7d866c31b3c5 67 */
AnnaBridge 172:7d866c31b3c5 68 void RTC_Open(S_RTC_TIME_DATA_T *sPt)
AnnaBridge 172:7d866c31b3c5 69 {
AnnaBridge 172:7d866c31b3c5 70 RTC->INIT = RTC_INIT_KEY;
AnnaBridge 172:7d866c31b3c5 71
AnnaBridge 172:7d866c31b3c5 72 if(RTC->INIT != RTC_INIT_ACTIVE_Msk) {
AnnaBridge 172:7d866c31b3c5 73 RTC->INIT = RTC_INIT_KEY;
AnnaBridge 172:7d866c31b3c5 74 while(RTC->INIT != RTC_INIT_ACTIVE_Msk) {
AnnaBridge 172:7d866c31b3c5 75 }
AnnaBridge 172:7d866c31b3c5 76 }
AnnaBridge 172:7d866c31b3c5 77
AnnaBridge 172:7d866c31b3c5 78 if(sPt == 0) {
AnnaBridge 172:7d866c31b3c5 79 } else {
AnnaBridge 172:7d866c31b3c5 80 /* Set RTC date and time */
AnnaBridge 172:7d866c31b3c5 81 RTC_SetDateAndTime(sPt);
AnnaBridge 172:7d866c31b3c5 82 }
AnnaBridge 172:7d866c31b3c5 83 }
AnnaBridge 172:7d866c31b3c5 84
AnnaBridge 172:7d866c31b3c5 85 /**
AnnaBridge 172:7d866c31b3c5 86 * @brief Disable RTC Clock
AnnaBridge 172:7d866c31b3c5 87 *
AnnaBridge 172:7d866c31b3c5 88 * @param None
AnnaBridge 172:7d866c31b3c5 89 *
AnnaBridge 172:7d866c31b3c5 90 * @return None
AnnaBridge 172:7d866c31b3c5 91 *
AnnaBridge 172:7d866c31b3c5 92 * @details This API will disable RTC peripheral clock and stops RTC counting.
AnnaBridge 172:7d866c31b3c5 93 */
AnnaBridge 172:7d866c31b3c5 94 void RTC_Close(void)
AnnaBridge 172:7d866c31b3c5 95 {
AnnaBridge 172:7d866c31b3c5 96 CLK->APBCLK0 &= ~CLK_APBCLK0_RTCCKEN_Msk;
AnnaBridge 172:7d866c31b3c5 97 }
AnnaBridge 172:7d866c31b3c5 98
AnnaBridge 172:7d866c31b3c5 99 /**
AnnaBridge 172:7d866c31b3c5 100 * @brief Set Frequency Compensation Data
AnnaBridge 172:7d866c31b3c5 101 *
AnnaBridge 172:7d866c31b3c5 102 * @param[in] i32FrequencyX10000 Specify the RTC clock X10000, ex: 327736512 means 32773.6512.
AnnaBridge 172:7d866c31b3c5 103 *
AnnaBridge 172:7d866c31b3c5 104 * @return None
AnnaBridge 172:7d866c31b3c5 105 *
AnnaBridge 172:7d866c31b3c5 106 */
AnnaBridge 172:7d866c31b3c5 107 void RTC_32KCalibration(int32_t i32FrequencyX10000)
AnnaBridge 172:7d866c31b3c5 108 {
AnnaBridge 172:7d866c31b3c5 109 uint64_t u64Compensate;
AnnaBridge 172:7d866c31b3c5 110
AnnaBridge 172:7d866c31b3c5 111 u64Compensate = (uint64_t)(0x2710000000000);
AnnaBridge 172:7d866c31b3c5 112 u64Compensate = (uint64_t)(u64Compensate / (uint64_t)i32FrequencyX10000);
AnnaBridge 172:7d866c31b3c5 113
AnnaBridge 172:7d866c31b3c5 114 if(u64Compensate >= (uint64_t)0x400000) {
AnnaBridge 172:7d866c31b3c5 115 u64Compensate = (uint64_t)0x3FFFFF;
AnnaBridge 172:7d866c31b3c5 116 }
AnnaBridge 172:7d866c31b3c5 117
AnnaBridge 172:7d866c31b3c5 118 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 119 RTC->FREQADJ = (uint32_t)u64Compensate;
AnnaBridge 172:7d866c31b3c5 120 }
AnnaBridge 172:7d866c31b3c5 121
AnnaBridge 172:7d866c31b3c5 122 /**
AnnaBridge 172:7d866c31b3c5 123 * @brief Get Current RTC Date and Time
AnnaBridge 172:7d866c31b3c5 124 *
AnnaBridge 172:7d866c31b3c5 125 * @param[out] sPt The returned pointer is specified the current RTC value. It includes: \n
AnnaBridge 172:7d866c31b3c5 126 * u32Year: Year value \n
AnnaBridge 172:7d866c31b3c5 127 * u32Month: Month value \n
AnnaBridge 172:7d866c31b3c5 128 * u32Day: Day value \n
AnnaBridge 172:7d866c31b3c5 129 * u32DayOfWeek: Day of week \n
AnnaBridge 172:7d866c31b3c5 130 * u32Hour: Hour value \n
AnnaBridge 172:7d866c31b3c5 131 * u32Minute: Minute value \n
AnnaBridge 172:7d866c31b3c5 132 * u32Second: Second value \n
AnnaBridge 172:7d866c31b3c5 133 * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n
AnnaBridge 172:7d866c31b3c5 134 * u8AmPm: [RTC_AM / RTC_PM] \n
AnnaBridge 172:7d866c31b3c5 135 *
AnnaBridge 172:7d866c31b3c5 136 * @return None
AnnaBridge 172:7d866c31b3c5 137 *
AnnaBridge 172:7d866c31b3c5 138 * @details This API is used to get the current RTC date and time value.
AnnaBridge 172:7d866c31b3c5 139 */
AnnaBridge 172:7d866c31b3c5 140 void RTC_GetDateAndTime(S_RTC_TIME_DATA_T *sPt)
AnnaBridge 172:7d866c31b3c5 141 {
AnnaBridge 172:7d866c31b3c5 142 uint32_t u32Tmp;
AnnaBridge 172:7d866c31b3c5 143
AnnaBridge 172:7d866c31b3c5 144 sPt->u32TimeScale = RTC->CLKFMT & RTC_CLKFMT_24HEN_Msk; /* 12/24-hour */
AnnaBridge 172:7d866c31b3c5 145 sPt->u32DayOfWeek = RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk; /* Day of the week */
AnnaBridge 172:7d866c31b3c5 146
AnnaBridge 172:7d866c31b3c5 147 /* Get [Date digit] data */
AnnaBridge 172:7d866c31b3c5 148 g_u32hiYear = (RTC->CAL & RTC_CAL_TENYEAR_Msk) >> RTC_CAL_TENYEAR_Pos;
AnnaBridge 172:7d866c31b3c5 149 g_u32loYear = (RTC->CAL & RTC_CAL_YEAR_Msk) >> RTC_CAL_YEAR_Pos;
AnnaBridge 172:7d866c31b3c5 150 g_u32hiMonth = (RTC->CAL & RTC_CAL_TENMON_Msk) >> RTC_CAL_TENMON_Pos;
AnnaBridge 172:7d866c31b3c5 151 g_u32loMonth = (RTC->CAL & RTC_CAL_MON_Msk) >> RTC_CAL_MON_Pos;
AnnaBridge 172:7d866c31b3c5 152 g_u32hiDay = (RTC->CAL & RTC_CAL_TENDAY_Msk) >> RTC_CAL_TENDAY_Pos;
AnnaBridge 172:7d866c31b3c5 153 g_u32loDay = (RTC->CAL & RTC_CAL_DAY_Msk) >> RTC_CAL_DAY_Pos;
AnnaBridge 172:7d866c31b3c5 154
AnnaBridge 172:7d866c31b3c5 155 /* Get [Time digit] data */
AnnaBridge 172:7d866c31b3c5 156 g_u32hiHour = (RTC->TIME & RTC_TIME_TENHR_Msk) >> RTC_TIME_TENHR_Pos;
AnnaBridge 172:7d866c31b3c5 157 g_u32loHour = (RTC->TIME & RTC_TIME_HR_Msk) >> RTC_TIME_HR_Pos;
AnnaBridge 172:7d866c31b3c5 158 g_u32hiMin = (RTC->TIME & RTC_TIME_TENMIN_Msk) >> RTC_TIME_TENMIN_Pos;
AnnaBridge 172:7d866c31b3c5 159 g_u32loMin = (RTC->TIME & RTC_TIME_MIN_Msk) >> RTC_TIME_MIN_Pos;
AnnaBridge 172:7d866c31b3c5 160 g_u32hiSec = (RTC->TIME & RTC_TIME_TENSEC_Msk) >> RTC_TIME_TENSEC_Pos;
AnnaBridge 172:7d866c31b3c5 161 g_u32loSec = (RTC->TIME & RTC_TIME_SEC_Msk) >> RTC_TIME_SEC_Pos;
AnnaBridge 172:7d866c31b3c5 162
AnnaBridge 172:7d866c31b3c5 163 /* Compute to 20XX year */
AnnaBridge 172:7d866c31b3c5 164 u32Tmp = (g_u32hiYear * 10ul);
AnnaBridge 172:7d866c31b3c5 165 u32Tmp += g_u32loYear;
AnnaBridge 172:7d866c31b3c5 166 sPt->u32Year = u32Tmp + RTC_YEAR2000;
AnnaBridge 172:7d866c31b3c5 167
AnnaBridge 172:7d866c31b3c5 168 /* Compute 0~12 month */
AnnaBridge 172:7d866c31b3c5 169 u32Tmp = (g_u32hiMonth * 10ul);
AnnaBridge 172:7d866c31b3c5 170 sPt->u32Month = u32Tmp + g_u32loMonth;
AnnaBridge 172:7d866c31b3c5 171
AnnaBridge 172:7d866c31b3c5 172 /* Compute 0~31 day */
AnnaBridge 172:7d866c31b3c5 173 u32Tmp = (g_u32hiDay * 10ul);
AnnaBridge 172:7d866c31b3c5 174 sPt->u32Day = u32Tmp + g_u32loDay;
AnnaBridge 172:7d866c31b3c5 175
AnnaBridge 172:7d866c31b3c5 176 /* Compute 12/24 hour */
AnnaBridge 172:7d866c31b3c5 177 if(sPt->u32TimeScale == RTC_CLOCK_12) {
AnnaBridge 172:7d866c31b3c5 178 u32Tmp = (g_u32hiHour * 10ul);
AnnaBridge 172:7d866c31b3c5 179 u32Tmp += g_u32loHour;
AnnaBridge 172:7d866c31b3c5 180 sPt->u32Hour = u32Tmp; /* AM: 1~12. PM: 21~32. */
AnnaBridge 172:7d866c31b3c5 181
AnnaBridge 172:7d866c31b3c5 182 if(sPt->u32Hour >= 21ul) {
AnnaBridge 172:7d866c31b3c5 183 sPt->u32AmPm = RTC_PM;
AnnaBridge 172:7d866c31b3c5 184 sPt->u32Hour -= 20ul;
AnnaBridge 172:7d866c31b3c5 185 } else {
AnnaBridge 172:7d866c31b3c5 186 sPt->u32AmPm = RTC_AM;
AnnaBridge 172:7d866c31b3c5 187 }
AnnaBridge 172:7d866c31b3c5 188
AnnaBridge 172:7d866c31b3c5 189 u32Tmp = (g_u32hiMin * 10ul);
AnnaBridge 172:7d866c31b3c5 190 u32Tmp += g_u32loMin;
AnnaBridge 172:7d866c31b3c5 191 sPt->u32Minute = u32Tmp;
AnnaBridge 172:7d866c31b3c5 192
AnnaBridge 172:7d866c31b3c5 193 u32Tmp = (g_u32hiSec * 10ul);
AnnaBridge 172:7d866c31b3c5 194 u32Tmp += g_u32loSec;
AnnaBridge 172:7d866c31b3c5 195 sPt->u32Second = u32Tmp;
AnnaBridge 172:7d866c31b3c5 196 } else {
AnnaBridge 172:7d866c31b3c5 197 u32Tmp = (g_u32hiHour * 10ul);
AnnaBridge 172:7d866c31b3c5 198 u32Tmp += g_u32loHour;
AnnaBridge 172:7d866c31b3c5 199 sPt->u32Hour = u32Tmp;
AnnaBridge 172:7d866c31b3c5 200
AnnaBridge 172:7d866c31b3c5 201 u32Tmp = (g_u32hiMin * 10ul);
AnnaBridge 172:7d866c31b3c5 202 u32Tmp += g_u32loMin;
AnnaBridge 172:7d866c31b3c5 203 sPt->u32Minute = u32Tmp;
AnnaBridge 172:7d866c31b3c5 204
AnnaBridge 172:7d866c31b3c5 205 u32Tmp = (g_u32hiSec * 10ul);
AnnaBridge 172:7d866c31b3c5 206 u32Tmp += g_u32loSec;
AnnaBridge 172:7d866c31b3c5 207 sPt->u32Second = u32Tmp;
AnnaBridge 172:7d866c31b3c5 208 }
AnnaBridge 172:7d866c31b3c5 209 }
AnnaBridge 172:7d866c31b3c5 210
AnnaBridge 172:7d866c31b3c5 211 /**
AnnaBridge 172:7d866c31b3c5 212 * @brief Get RTC Alarm Date and Time
AnnaBridge 172:7d866c31b3c5 213 *
AnnaBridge 172:7d866c31b3c5 214 * @param[out] sPt The returned pointer is specified the RTC alarm value. It includes: \n
AnnaBridge 172:7d866c31b3c5 215 * u32Year: Year value \n
AnnaBridge 172:7d866c31b3c5 216 * u32Month: Month value \n
AnnaBridge 172:7d866c31b3c5 217 * u32Day: Day value \n
AnnaBridge 172:7d866c31b3c5 218 * u32DayOfWeek: Day of week \n
AnnaBridge 172:7d866c31b3c5 219 * u32Hour: Hour value \n
AnnaBridge 172:7d866c31b3c5 220 * u32Minute: Minute value \n
AnnaBridge 172:7d866c31b3c5 221 * u32Second: Second value \n
AnnaBridge 172:7d866c31b3c5 222 * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n
AnnaBridge 172:7d866c31b3c5 223 * u8AmPm: [RTC_AM / RTC_PM] \n
AnnaBridge 172:7d866c31b3c5 224 *
AnnaBridge 172:7d866c31b3c5 225 * @return None
AnnaBridge 172:7d866c31b3c5 226 *
AnnaBridge 172:7d866c31b3c5 227 * @details This API is used to get the RTC alarm date and time setting.
AnnaBridge 172:7d866c31b3c5 228 */
AnnaBridge 172:7d866c31b3c5 229 void RTC_GetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt)
AnnaBridge 172:7d866c31b3c5 230 {
AnnaBridge 172:7d866c31b3c5 231 uint32_t u32Tmp;
AnnaBridge 172:7d866c31b3c5 232
AnnaBridge 172:7d866c31b3c5 233 sPt->u32TimeScale = RTC->CLKFMT & RTC_CLKFMT_24HEN_Msk; /* 12/24-hour */
AnnaBridge 172:7d866c31b3c5 234 sPt->u32DayOfWeek = RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk; /* Day of the week */
AnnaBridge 172:7d866c31b3c5 235
AnnaBridge 172:7d866c31b3c5 236 /* Get alarm [Date digit] data */
AnnaBridge 172:7d866c31b3c5 237 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 238 g_u32hiYear = (RTC->CALM & RTC_CALM_TENYEAR_Msk) >> RTC_CALM_TENYEAR_Pos;
AnnaBridge 172:7d866c31b3c5 239 g_u32loYear = (RTC->CALM & RTC_CALM_YEAR_Msk) >> RTC_CALM_YEAR_Pos;
AnnaBridge 172:7d866c31b3c5 240 g_u32hiMonth = (RTC->CALM & RTC_CALM_TENMON_Msk) >> RTC_CALM_TENMON_Pos;
AnnaBridge 172:7d866c31b3c5 241 g_u32loMonth = (RTC->CALM & RTC_CALM_MON_Msk) >> RTC_CALM_MON_Pos;
AnnaBridge 172:7d866c31b3c5 242 g_u32hiDay = (RTC->CALM & RTC_CALM_TENDAY_Msk) >> RTC_CALM_TENDAY_Pos;
AnnaBridge 172:7d866c31b3c5 243 g_u32loDay = (RTC->CALM & RTC_CALM_DAY_Msk) >> RTC_CALM_DAY_Pos;
AnnaBridge 172:7d866c31b3c5 244
AnnaBridge 172:7d866c31b3c5 245 /* Get alarm [Time digit] data */
AnnaBridge 172:7d866c31b3c5 246 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 247 g_u32hiHour = (RTC->TALM & RTC_TALM_TENHR_Msk) >> RTC_TALM_TENHR_Pos;
AnnaBridge 172:7d866c31b3c5 248 g_u32loHour = (RTC->TALM & RTC_TALM_HR_Msk) >> RTC_TALM_HR_Pos;
AnnaBridge 172:7d866c31b3c5 249 g_u32hiMin = (RTC->TALM & RTC_TALM_TENMIN_Msk) >> RTC_TALM_TENMIN_Pos;
AnnaBridge 172:7d866c31b3c5 250 g_u32loMin = (RTC->TALM & RTC_TALM_MIN_Msk) >> RTC_TALM_MIN_Pos;
AnnaBridge 172:7d866c31b3c5 251 g_u32hiSec = (RTC->TALM & RTC_TALM_TENSEC_Msk) >> RTC_TALM_TENSEC_Pos;
AnnaBridge 172:7d866c31b3c5 252 g_u32loSec = (RTC->TALM & RTC_TALM_SEC_Msk) >> RTC_TALM_SEC_Pos;
AnnaBridge 172:7d866c31b3c5 253
AnnaBridge 172:7d866c31b3c5 254 /* Compute to 20XX year */
AnnaBridge 172:7d866c31b3c5 255 u32Tmp = (g_u32hiYear * 10ul);
AnnaBridge 172:7d866c31b3c5 256 u32Tmp += g_u32loYear;
AnnaBridge 172:7d866c31b3c5 257 sPt->u32Year = u32Tmp + RTC_YEAR2000;
AnnaBridge 172:7d866c31b3c5 258
AnnaBridge 172:7d866c31b3c5 259 /* Compute 0~12 month */
AnnaBridge 172:7d866c31b3c5 260 u32Tmp = (g_u32hiMonth * 10ul);
AnnaBridge 172:7d866c31b3c5 261 sPt->u32Month = u32Tmp + g_u32loMonth;
AnnaBridge 172:7d866c31b3c5 262
AnnaBridge 172:7d866c31b3c5 263 /* Compute 0~31 day */
AnnaBridge 172:7d866c31b3c5 264 u32Tmp = (g_u32hiDay * 10ul);
AnnaBridge 172:7d866c31b3c5 265 sPt->u32Day = u32Tmp + g_u32loDay;
AnnaBridge 172:7d866c31b3c5 266
AnnaBridge 172:7d866c31b3c5 267 /* Compute 12/24 hour */
AnnaBridge 172:7d866c31b3c5 268 if(sPt->u32TimeScale == RTC_CLOCK_12) {
AnnaBridge 172:7d866c31b3c5 269 u32Tmp = (g_u32hiHour * 10ul);
AnnaBridge 172:7d866c31b3c5 270 u32Tmp += g_u32loHour;
AnnaBridge 172:7d866c31b3c5 271 sPt->u32Hour = u32Tmp; /* AM: 1~12. PM: 21~32. */
AnnaBridge 172:7d866c31b3c5 272
AnnaBridge 172:7d866c31b3c5 273 if(sPt->u32Hour >= 21ul) {
AnnaBridge 172:7d866c31b3c5 274 sPt->u32AmPm = RTC_PM;
AnnaBridge 172:7d866c31b3c5 275 sPt->u32Hour -= 20ul;
AnnaBridge 172:7d866c31b3c5 276 } else {
AnnaBridge 172:7d866c31b3c5 277 sPt->u32AmPm = RTC_AM;
AnnaBridge 172:7d866c31b3c5 278 }
AnnaBridge 172:7d866c31b3c5 279
AnnaBridge 172:7d866c31b3c5 280 u32Tmp = (g_u32hiMin * 10ul);
AnnaBridge 172:7d866c31b3c5 281 u32Tmp += g_u32loMin;
AnnaBridge 172:7d866c31b3c5 282 sPt->u32Minute = u32Tmp;
AnnaBridge 172:7d866c31b3c5 283
AnnaBridge 172:7d866c31b3c5 284 u32Tmp = (g_u32hiSec * 10ul);
AnnaBridge 172:7d866c31b3c5 285 u32Tmp += g_u32loSec;
AnnaBridge 172:7d866c31b3c5 286 sPt->u32Second = u32Tmp;
AnnaBridge 172:7d866c31b3c5 287
AnnaBridge 172:7d866c31b3c5 288 } else {
AnnaBridge 172:7d866c31b3c5 289 u32Tmp = (g_u32hiHour * 10ul);
AnnaBridge 172:7d866c31b3c5 290 u32Tmp += g_u32loHour;
AnnaBridge 172:7d866c31b3c5 291 sPt->u32Hour = u32Tmp;
AnnaBridge 172:7d866c31b3c5 292
AnnaBridge 172:7d866c31b3c5 293 u32Tmp = (g_u32hiMin * 10ul);
AnnaBridge 172:7d866c31b3c5 294 u32Tmp += g_u32loMin;
AnnaBridge 172:7d866c31b3c5 295 sPt->u32Minute = u32Tmp;
AnnaBridge 172:7d866c31b3c5 296
AnnaBridge 172:7d866c31b3c5 297 u32Tmp = (g_u32hiSec * 10ul);
AnnaBridge 172:7d866c31b3c5 298 u32Tmp += g_u32loSec;
AnnaBridge 172:7d866c31b3c5 299 sPt->u32Second = u32Tmp;
AnnaBridge 172:7d866c31b3c5 300 }
AnnaBridge 172:7d866c31b3c5 301 }
AnnaBridge 172:7d866c31b3c5 302
AnnaBridge 172:7d866c31b3c5 303 /**
AnnaBridge 172:7d866c31b3c5 304 * @brief Update Current RTC Date and Time
AnnaBridge 172:7d866c31b3c5 305 *
AnnaBridge 172:7d866c31b3c5 306 * @param[in] sPt Specify the time property and current date and time. It includes: \n
AnnaBridge 172:7d866c31b3c5 307 * u32Year: Year value, range between 2000 ~ 2099. \n
AnnaBridge 172:7d866c31b3c5 308 * u32Month: Month value, range between 1 ~ 12. \n
AnnaBridge 172:7d866c31b3c5 309 * u32Day: Day value, range between 1 ~ 31. \n
AnnaBridge 172:7d866c31b3c5 310 * u32DayOfWeek: Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY /
AnnaBridge 172:7d866c31b3c5 311 * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY /
AnnaBridge 172:7d866c31b3c5 312 * RTC_SATURDAY] \n
AnnaBridge 172:7d866c31b3c5 313 * u32Hour: Hour value, range between 0 ~ 23. \n
AnnaBridge 172:7d866c31b3c5 314 * u32Minute: Minute value, range between 0 ~ 59. \n
AnnaBridge 172:7d866c31b3c5 315 * u32Second: Second value, range between 0 ~ 59. \n
AnnaBridge 172:7d866c31b3c5 316 * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n
AnnaBridge 172:7d866c31b3c5 317 * u8AmPm: [RTC_AM / RTC_PM] \n
AnnaBridge 172:7d866c31b3c5 318 *
AnnaBridge 172:7d866c31b3c5 319 * @return None
AnnaBridge 172:7d866c31b3c5 320 *
AnnaBridge 172:7d866c31b3c5 321 * @details This API is used to update current date and time to RTC.
AnnaBridge 172:7d866c31b3c5 322 */
AnnaBridge 172:7d866c31b3c5 323 void RTC_SetDateAndTime(S_RTC_TIME_DATA_T *sPt)
AnnaBridge 172:7d866c31b3c5 324 {
AnnaBridge 172:7d866c31b3c5 325 uint32_t u32RegCAL, u32RegTIME;
AnnaBridge 172:7d866c31b3c5 326
AnnaBridge 172:7d866c31b3c5 327 if(sPt == 0ul) {
AnnaBridge 172:7d866c31b3c5 328 } else {
AnnaBridge 172:7d866c31b3c5 329 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 330 /* Set RTC 24/12 hour setting and Day of the Week */
AnnaBridge 172:7d866c31b3c5 331 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 332 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 333 if(sPt->u32TimeScale == RTC_CLOCK_12) {
AnnaBridge 172:7d866c31b3c5 334 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 335
AnnaBridge 172:7d866c31b3c5 336 /*-------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 337 /* Important, range of 12-hour PM mode is 21 up to 32 */
AnnaBridge 172:7d866c31b3c5 338 /*-------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 339 if(sPt->u32AmPm == RTC_PM) {
AnnaBridge 172:7d866c31b3c5 340 sPt->u32Hour += 20ul;
AnnaBridge 172:7d866c31b3c5 341 }
AnnaBridge 172:7d866c31b3c5 342 } else {
AnnaBridge 172:7d866c31b3c5 343 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 344 }
AnnaBridge 172:7d866c31b3c5 345
AnnaBridge 172:7d866c31b3c5 346 /* Set Day of the Week */
AnnaBridge 172:7d866c31b3c5 347 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 348 RTC->WEEKDAY = sPt->u32DayOfWeek;
AnnaBridge 172:7d866c31b3c5 349
AnnaBridge 172:7d866c31b3c5 350 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 351 /* Set RTC Current Date and Time */
AnnaBridge 172:7d866c31b3c5 352 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 353 u32RegCAL = ((sPt->u32Year - RTC_YEAR2000) / 10ul) << 20;
AnnaBridge 172:7d866c31b3c5 354 u32RegCAL |= (((sPt->u32Year - RTC_YEAR2000) % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 355 u32RegCAL |= ((sPt->u32Month / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 356 u32RegCAL |= ((sPt->u32Month % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 357 u32RegCAL |= ((sPt->u32Day / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 358 u32RegCAL |= (sPt->u32Day % 10ul);
AnnaBridge 172:7d866c31b3c5 359
AnnaBridge 172:7d866c31b3c5 360 u32RegTIME = ((sPt->u32Hour / 10ul) << 20);
AnnaBridge 172:7d866c31b3c5 361 u32RegTIME |= ((sPt->u32Hour % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 362 u32RegTIME |= ((sPt->u32Minute / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 363 u32RegTIME |= ((sPt->u32Minute % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 364 u32RegTIME |= ((sPt->u32Second / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 365 u32RegTIME |= (sPt->u32Second % 10ul);
AnnaBridge 172:7d866c31b3c5 366
AnnaBridge 172:7d866c31b3c5 367 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 368 /* Set RTC Calender and Time Loading */
AnnaBridge 172:7d866c31b3c5 369 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 370 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 371 RTC->CAL = (uint32_t)u32RegCAL;
AnnaBridge 172:7d866c31b3c5 372 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 373 RTC->TIME = (uint32_t)u32RegTIME;
AnnaBridge 172:7d866c31b3c5 374 }
AnnaBridge 172:7d866c31b3c5 375 }
AnnaBridge 172:7d866c31b3c5 376
AnnaBridge 172:7d866c31b3c5 377 /**
AnnaBridge 172:7d866c31b3c5 378 * @brief Update RTC Alarm Date and Time
AnnaBridge 172:7d866c31b3c5 379 *
AnnaBridge 172:7d866c31b3c5 380 * @param[in] sPt Specify the time property and alarm date and time. It includes: \n
AnnaBridge 172:7d866c31b3c5 381 * u32Year: Year value, range between 2000 ~ 2099. \n
AnnaBridge 172:7d866c31b3c5 382 * u32Month: Month value, range between 1 ~ 12. \n
AnnaBridge 172:7d866c31b3c5 383 * u32Day: Day value, range between 1 ~ 31. \n
AnnaBridge 172:7d866c31b3c5 384 * u32DayOfWeek: Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY /
AnnaBridge 172:7d866c31b3c5 385 * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY /
AnnaBridge 172:7d866c31b3c5 386 * RTC_SATURDAY] \n
AnnaBridge 172:7d866c31b3c5 387 * u32Hour: Hour value, range between 0 ~ 23. \n
AnnaBridge 172:7d866c31b3c5 388 * u32Minute: Minute value, range between 0 ~ 59. \n
AnnaBridge 172:7d866c31b3c5 389 * u32Second: Second value, range between 0 ~ 59. \n
AnnaBridge 172:7d866c31b3c5 390 * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n
AnnaBridge 172:7d866c31b3c5 391 * u8AmPm: [RTC_AM / RTC_PM] \n
AnnaBridge 172:7d866c31b3c5 392 *
AnnaBridge 172:7d866c31b3c5 393 * @return None
AnnaBridge 172:7d866c31b3c5 394 *
AnnaBridge 172:7d866c31b3c5 395 * @details This API is used to update alarm date and time setting to RTC.
AnnaBridge 172:7d866c31b3c5 396 */
AnnaBridge 172:7d866c31b3c5 397 void RTC_SetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt)
AnnaBridge 172:7d866c31b3c5 398 {
AnnaBridge 172:7d866c31b3c5 399 uint32_t u32RegCALM, u32RegTALM;
AnnaBridge 172:7d866c31b3c5 400
AnnaBridge 172:7d866c31b3c5 401 if(sPt == 0) {
AnnaBridge 172:7d866c31b3c5 402 } else {
AnnaBridge 172:7d866c31b3c5 403 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 404 /* Set RTC 24/12 hour setting and Day of the Week */
AnnaBridge 172:7d866c31b3c5 405 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 406 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 407 if(sPt->u32TimeScale == RTC_CLOCK_12) {
AnnaBridge 172:7d866c31b3c5 408 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 409
AnnaBridge 172:7d866c31b3c5 410 /*-------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 411 /* Important, range of 12-hour PM mode is 21 up to 32 */
AnnaBridge 172:7d866c31b3c5 412 /*-------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 413 if(sPt->u32AmPm == RTC_PM) {
AnnaBridge 172:7d866c31b3c5 414 sPt->u32Hour += 20ul;
AnnaBridge 172:7d866c31b3c5 415 }
AnnaBridge 172:7d866c31b3c5 416 } else {
AnnaBridge 172:7d866c31b3c5 417 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 418 }
AnnaBridge 172:7d866c31b3c5 419
AnnaBridge 172:7d866c31b3c5 420 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 421 /* Set RTC Alarm Date and Time */
AnnaBridge 172:7d866c31b3c5 422 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 423 u32RegCALM = ((sPt->u32Year - RTC_YEAR2000) / 10ul) << 20;
AnnaBridge 172:7d866c31b3c5 424 u32RegCALM |= (((sPt->u32Year - RTC_YEAR2000) % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 425 u32RegCALM |= ((sPt->u32Month / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 426 u32RegCALM |= ((sPt->u32Month % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 427 u32RegCALM |= ((sPt->u32Day / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 428 u32RegCALM |= (sPt->u32Day % 10ul);
AnnaBridge 172:7d866c31b3c5 429
AnnaBridge 172:7d866c31b3c5 430 u32RegTALM = ((sPt->u32Hour / 10ul) << 20);
AnnaBridge 172:7d866c31b3c5 431 u32RegTALM |= ((sPt->u32Hour % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 432 u32RegTALM |= ((sPt->u32Minute / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 433 u32RegTALM |= ((sPt->u32Minute % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 434 u32RegTALM |= ((sPt->u32Second / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 435 u32RegTALM |= (sPt->u32Second % 10ul);
AnnaBridge 172:7d866c31b3c5 436
AnnaBridge 172:7d866c31b3c5 437 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 438 RTC->CALM = (uint32_t)u32RegCALM;
AnnaBridge 172:7d866c31b3c5 439 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 440 RTC->TALM = (uint32_t)u32RegTALM;
AnnaBridge 172:7d866c31b3c5 441 }
AnnaBridge 172:7d866c31b3c5 442 }
AnnaBridge 172:7d866c31b3c5 443
AnnaBridge 172:7d866c31b3c5 444 /**
AnnaBridge 172:7d866c31b3c5 445 * @brief Update RTC Current Date
AnnaBridge 172:7d866c31b3c5 446 *
AnnaBridge 172:7d866c31b3c5 447 * @param[in] u32Year The year calendar digit of current RTC setting.
AnnaBridge 172:7d866c31b3c5 448 * @param[in] u32Month The month calendar digit of current RTC setting.
AnnaBridge 172:7d866c31b3c5 449 * @param[in] u32Day The day calendar digit of current RTC setting.
AnnaBridge 172:7d866c31b3c5 450 * @param[in] u32DayOfWeek The Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY /
AnnaBridge 172:7d866c31b3c5 451 * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY /
AnnaBridge 172:7d866c31b3c5 452 * RTC_SATURDAY]
AnnaBridge 172:7d866c31b3c5 453 *
AnnaBridge 172:7d866c31b3c5 454 * @return None
AnnaBridge 172:7d866c31b3c5 455 *
AnnaBridge 172:7d866c31b3c5 456 * @details This API is used to update current date to RTC.
AnnaBridge 172:7d866c31b3c5 457 */
AnnaBridge 172:7d866c31b3c5 458 void RTC_SetDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day, uint32_t u32DayOfWeek)
AnnaBridge 172:7d866c31b3c5 459 {
AnnaBridge 172:7d866c31b3c5 460 uint32_t u32RegCAL;
AnnaBridge 172:7d866c31b3c5 461
AnnaBridge 172:7d866c31b3c5 462 u32RegCAL = ((u32Year - RTC_YEAR2000) / 10ul) << 20;
AnnaBridge 172:7d866c31b3c5 463 u32RegCAL |= (((u32Year - RTC_YEAR2000) % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 464 u32RegCAL |= ((u32Month / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 465 u32RegCAL |= ((u32Month % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 466 u32RegCAL |= ((u32Day / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 467 u32RegCAL |= (u32Day % 10ul);
AnnaBridge 172:7d866c31b3c5 468
AnnaBridge 172:7d866c31b3c5 469 /* Set Day of the Week */
AnnaBridge 172:7d866c31b3c5 470 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 471 RTC->WEEKDAY = u32DayOfWeek & RTC_WEEKDAY_WEEKDAY_Msk;
AnnaBridge 172:7d866c31b3c5 472
AnnaBridge 172:7d866c31b3c5 473 /* Set RTC Calender Loading */
AnnaBridge 172:7d866c31b3c5 474 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 475 RTC->CAL = (uint32_t)u32RegCAL;
AnnaBridge 172:7d866c31b3c5 476 }
AnnaBridge 172:7d866c31b3c5 477
AnnaBridge 172:7d866c31b3c5 478 /**
AnnaBridge 172:7d866c31b3c5 479 * @brief Update RTC Current Time
AnnaBridge 172:7d866c31b3c5 480 *
AnnaBridge 172:7d866c31b3c5 481 * @param[in] u32Hour The hour time digit of current RTC setting.
AnnaBridge 172:7d866c31b3c5 482 * @param[in] u32Minute The minute time digit of current RTC setting.
AnnaBridge 172:7d866c31b3c5 483 * @param[in] u32Second The second time digit of current RTC setting.
AnnaBridge 172:7d866c31b3c5 484 * @param[in] u32TimeMode The 24-Hour / 12-Hour Time Scale Selection. [RTC_CLOCK_12 / RTC_CLOCK_24]
AnnaBridge 172:7d866c31b3c5 485 * @param[in] u32AmPm 12-hour time scale with AM and PM indication. Only Time Scale select 12-hour used. [RTC_AM / RTC_PM]
AnnaBridge 172:7d866c31b3c5 486 *
AnnaBridge 172:7d866c31b3c5 487 * @return None
AnnaBridge 172:7d866c31b3c5 488 *
AnnaBridge 172:7d866c31b3c5 489 * @details This API is used to update current time to RTC.
AnnaBridge 172:7d866c31b3c5 490 */
AnnaBridge 172:7d866c31b3c5 491 void RTC_SetTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm)
AnnaBridge 172:7d866c31b3c5 492 {
AnnaBridge 172:7d866c31b3c5 493 uint32_t u32RegTIME;
AnnaBridge 172:7d866c31b3c5 494
AnnaBridge 172:7d866c31b3c5 495 /* Important, range of 12-hour PM mode is 21 up to 32 */
AnnaBridge 172:7d866c31b3c5 496 if((u32TimeMode == RTC_CLOCK_12) && (u32AmPm == RTC_PM)) {
AnnaBridge 172:7d866c31b3c5 497 u32Hour += 20ul;
AnnaBridge 172:7d866c31b3c5 498 }
AnnaBridge 172:7d866c31b3c5 499
AnnaBridge 172:7d866c31b3c5 500 u32RegTIME = ((u32Hour / 10ul) << 20);
AnnaBridge 172:7d866c31b3c5 501 u32RegTIME |= ((u32Hour % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 502 u32RegTIME |= ((u32Minute / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 503 u32RegTIME |= ((u32Minute % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 504 u32RegTIME |= ((u32Second / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 505 u32RegTIME |= (u32Second % 10ul);
AnnaBridge 172:7d866c31b3c5 506
AnnaBridge 172:7d866c31b3c5 507 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 508 /* Set RTC 24/12 hour setting and Day of the Week */
AnnaBridge 172:7d866c31b3c5 509 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 510 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 511 if(u32TimeMode == RTC_CLOCK_12) {
AnnaBridge 172:7d866c31b3c5 512 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 513 } else {
AnnaBridge 172:7d866c31b3c5 514 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 515 }
AnnaBridge 172:7d866c31b3c5 516
AnnaBridge 172:7d866c31b3c5 517 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 518 RTC->TIME = (uint32_t)u32RegTIME;
AnnaBridge 172:7d866c31b3c5 519 }
AnnaBridge 172:7d866c31b3c5 520
AnnaBridge 172:7d866c31b3c5 521 /**
AnnaBridge 172:7d866c31b3c5 522 * @brief Update RTC Alarm Date
AnnaBridge 172:7d866c31b3c5 523 *
AnnaBridge 172:7d866c31b3c5 524 * @param[in] u32Year The year calendar digit of RTC alarm setting.
AnnaBridge 172:7d866c31b3c5 525 * @param[in] u32Month The month calendar digit of RTC alarm setting.
AnnaBridge 172:7d866c31b3c5 526 * @param[in] u32Day The day calendar digit of RTC alarm setting.
AnnaBridge 172:7d866c31b3c5 527 *
AnnaBridge 172:7d866c31b3c5 528 * @return None
AnnaBridge 172:7d866c31b3c5 529 *
AnnaBridge 172:7d866c31b3c5 530 * @details This API is used to update alarm date setting to RTC.
AnnaBridge 172:7d866c31b3c5 531 */
AnnaBridge 172:7d866c31b3c5 532 void RTC_SetAlarmDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day)
AnnaBridge 172:7d866c31b3c5 533 {
AnnaBridge 172:7d866c31b3c5 534 uint32_t u32RegCALM;
AnnaBridge 172:7d866c31b3c5 535
AnnaBridge 172:7d866c31b3c5 536 u32RegCALM = ((u32Year - RTC_YEAR2000) / 10ul) << 20;
AnnaBridge 172:7d866c31b3c5 537 u32RegCALM |= (((u32Year - RTC_YEAR2000) % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 538 u32RegCALM |= ((u32Month / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 539 u32RegCALM |= ((u32Month % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 540 u32RegCALM |= ((u32Day / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 541 u32RegCALM |= (u32Day % 10ul);
AnnaBridge 172:7d866c31b3c5 542
AnnaBridge 172:7d866c31b3c5 543 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 544
AnnaBridge 172:7d866c31b3c5 545 /* Set RTC Alarm Date */
AnnaBridge 172:7d866c31b3c5 546 RTC->CALM = (uint32_t)u32RegCALM;
AnnaBridge 172:7d866c31b3c5 547 }
AnnaBridge 172:7d866c31b3c5 548
AnnaBridge 172:7d866c31b3c5 549 /**
AnnaBridge 172:7d866c31b3c5 550 * @brief Update RTC Alarm Time
AnnaBridge 172:7d866c31b3c5 551 *
AnnaBridge 172:7d866c31b3c5 552 * @param[in] u32Hour The hour time digit of RTC alarm setting.
AnnaBridge 172:7d866c31b3c5 553 * @param[in] u32Minute The minute time digit of RTC alarm setting.
AnnaBridge 172:7d866c31b3c5 554 * @param[in] u32Second The second time digit of RTC alarm setting.
AnnaBridge 172:7d866c31b3c5 555 * @param[in] u32TimeMode The 24-Hour / 12-Hour Time Scale Selection. [RTC_CLOCK_12 / RTC_CLOCK_24]
AnnaBridge 172:7d866c31b3c5 556 * @param[in] u32AmPm 12-hour time scale with AM and PM indication. Only Time Scale select 12-hour used. [RTC_AM / RTC_PM]
AnnaBridge 172:7d866c31b3c5 557 *
AnnaBridge 172:7d866c31b3c5 558 * @return None
AnnaBridge 172:7d866c31b3c5 559 *
AnnaBridge 172:7d866c31b3c5 560 * @details This API is used to update alarm time setting to RTC.
AnnaBridge 172:7d866c31b3c5 561 */
AnnaBridge 172:7d866c31b3c5 562 void RTC_SetAlarmTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm)
AnnaBridge 172:7d866c31b3c5 563 {
AnnaBridge 172:7d866c31b3c5 564 uint32_t u32RegTALM;
AnnaBridge 172:7d866c31b3c5 565
AnnaBridge 172:7d866c31b3c5 566 /* Important, range of 12-hour PM mode is 21 up to 32 */
AnnaBridge 172:7d866c31b3c5 567 if((u32TimeMode == RTC_CLOCK_12) && (u32AmPm == RTC_PM)) {
AnnaBridge 172:7d866c31b3c5 568 u32Hour += 20ul;
AnnaBridge 172:7d866c31b3c5 569 }
AnnaBridge 172:7d866c31b3c5 570
AnnaBridge 172:7d866c31b3c5 571 u32RegTALM = ((u32Hour / 10ul) << 20);
AnnaBridge 172:7d866c31b3c5 572 u32RegTALM |= ((u32Hour % 10ul) << 16);
AnnaBridge 172:7d866c31b3c5 573 u32RegTALM |= ((u32Minute / 10ul) << 12);
AnnaBridge 172:7d866c31b3c5 574 u32RegTALM |= ((u32Minute % 10ul) << 8);
AnnaBridge 172:7d866c31b3c5 575 u32RegTALM |= ((u32Second / 10ul) << 4);
AnnaBridge 172:7d866c31b3c5 576 u32RegTALM |= (u32Second % 10ul);
AnnaBridge 172:7d866c31b3c5 577
AnnaBridge 172:7d866c31b3c5 578 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 579 /* Set RTC 24/12 hour setting and Day of the Week */
AnnaBridge 172:7d866c31b3c5 580 /*-----------------------------------------------------------------------------------------------------*/
AnnaBridge 172:7d866c31b3c5 581 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 582 if(u32TimeMode == RTC_CLOCK_12) {
AnnaBridge 172:7d866c31b3c5 583 RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 584 } else {
AnnaBridge 172:7d866c31b3c5 585 RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk;
AnnaBridge 172:7d866c31b3c5 586 }
AnnaBridge 172:7d866c31b3c5 587
AnnaBridge 172:7d866c31b3c5 588 /* Set RTC Alarm Time */
AnnaBridge 172:7d866c31b3c5 589 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 590 RTC->TALM = (uint32_t)u32RegTALM;
AnnaBridge 172:7d866c31b3c5 591 }
AnnaBridge 172:7d866c31b3c5 592
AnnaBridge 172:7d866c31b3c5 593 /**
AnnaBridge 172:7d866c31b3c5 594 * @brief Get Day of the Week
AnnaBridge 172:7d866c31b3c5 595 *
AnnaBridge 172:7d866c31b3c5 596 * @param None
AnnaBridge 172:7d866c31b3c5 597 *
AnnaBridge 172:7d866c31b3c5 598 * @retval 0 Sunday
AnnaBridge 172:7d866c31b3c5 599 * @retval 1 Monday
AnnaBridge 172:7d866c31b3c5 600 * @retval 2 Tuesday
AnnaBridge 172:7d866c31b3c5 601 * @retval 3 Wednesday
AnnaBridge 172:7d866c31b3c5 602 * @retval 4 Thursday
AnnaBridge 172:7d866c31b3c5 603 * @retval 5 Friday
AnnaBridge 172:7d866c31b3c5 604 * @retval 6 Saturday
AnnaBridge 172:7d866c31b3c5 605 *
AnnaBridge 172:7d866c31b3c5 606 * @details This API is used to get day of the week of current RTC date.
AnnaBridge 172:7d866c31b3c5 607 */
AnnaBridge 172:7d866c31b3c5 608 uint32_t RTC_GetDayOfWeek(void)
AnnaBridge 172:7d866c31b3c5 609 {
AnnaBridge 172:7d866c31b3c5 610 return (RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk);
AnnaBridge 172:7d866c31b3c5 611 }
AnnaBridge 172:7d866c31b3c5 612
AnnaBridge 172:7d866c31b3c5 613 /**
AnnaBridge 172:7d866c31b3c5 614 * @brief Set RTC Tick Period Time
AnnaBridge 172:7d866c31b3c5 615 *
AnnaBridge 172:7d866c31b3c5 616 * @param[in] u32TickSelection It is used to set the RTC tick period time for Periodic Time Tick request. \n
AnnaBridge 172:7d866c31b3c5 617 * It consists of:
AnnaBridge 172:7d866c31b3c5 618 * - \ref RTC_TICK_1_SEC : Time tick is 1 second
AnnaBridge 172:7d866c31b3c5 619 * - \ref RTC_TICK_1_2_SEC : Time tick is 1/2 second
AnnaBridge 172:7d866c31b3c5 620 * - \ref RTC_TICK_1_4_SEC : Time tick is 1/4 second
AnnaBridge 172:7d866c31b3c5 621 * - \ref RTC_TICK_1_8_SEC : Time tick is 1/8 second
AnnaBridge 172:7d866c31b3c5 622 * - \ref RTC_TICK_1_16_SEC : Time tick is 1/16 second
AnnaBridge 172:7d866c31b3c5 623 * - \ref RTC_TICK_1_32_SEC : Time tick is 1/32 second
AnnaBridge 172:7d866c31b3c5 624 * - \ref RTC_TICK_1_64_SEC : Time tick is 1/64 second
AnnaBridge 172:7d866c31b3c5 625 * - \ref RTC_TICK_1_128_SEC : Time tick is 1/128 second
AnnaBridge 172:7d866c31b3c5 626 *
AnnaBridge 172:7d866c31b3c5 627 * @return None
AnnaBridge 172:7d866c31b3c5 628 *
AnnaBridge 172:7d866c31b3c5 629 * @details This API is used to set RTC tick period time for each tick interrupt.
AnnaBridge 172:7d866c31b3c5 630 */
AnnaBridge 172:7d866c31b3c5 631 void RTC_SetTickPeriod(uint32_t u32TickSelection)
AnnaBridge 172:7d866c31b3c5 632 {
AnnaBridge 172:7d866c31b3c5 633 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 634
AnnaBridge 172:7d866c31b3c5 635 RTC->TICK = (RTC->TICK & ~RTC_TICK_TICK_Msk) | u32TickSelection;
AnnaBridge 172:7d866c31b3c5 636 }
AnnaBridge 172:7d866c31b3c5 637
AnnaBridge 172:7d866c31b3c5 638 /**
AnnaBridge 172:7d866c31b3c5 639 * @brief Enable RTC Interrupt
AnnaBridge 172:7d866c31b3c5 640 *
AnnaBridge 172:7d866c31b3c5 641 * @param[in] u32IntFlagMask Specify the interrupt source. It consists of:
AnnaBridge 172:7d866c31b3c5 642 * - \ref RTC_INTEN_ALMIEN_Msk : Alarm interrupt
AnnaBridge 172:7d866c31b3c5 643 * - \ref RTC_INTEN_TICKIEN_Msk : Tick interrupt
AnnaBridge 172:7d866c31b3c5 644 * - \ref RTC_INTEN_TAMP0IEN_Msk : Tamper 0 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 645 * - \ref RTC_INTEN_TAMP1IEN_Msk : Tamper 1 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 646 * - \ref RTC_INTEN_TAMP2IEN_Msk : Tamper 2 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 647 * - \ref RTC_INTEN_TAMP3IEN_Msk : Tamper 3 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 648 * - \ref RTC_INTEN_TAMP4IEN_Msk : Tamper 4 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 649 * - \ref RTC_INTEN_TAMP5IEN_Msk : Tamper 5 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 650 *
AnnaBridge 172:7d866c31b3c5 651 * @return None
AnnaBridge 172:7d866c31b3c5 652 *
AnnaBridge 172:7d866c31b3c5 653 * @details This API is used to enable the specify RTC interrupt function.
AnnaBridge 172:7d866c31b3c5 654 */
AnnaBridge 172:7d866c31b3c5 655 void RTC_EnableInt(uint32_t u32IntFlagMask)
AnnaBridge 172:7d866c31b3c5 656 {
AnnaBridge 172:7d866c31b3c5 657 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 658 RTC->INTEN |= u32IntFlagMask;
AnnaBridge 172:7d866c31b3c5 659 }
AnnaBridge 172:7d866c31b3c5 660
AnnaBridge 172:7d866c31b3c5 661 /**
AnnaBridge 172:7d866c31b3c5 662 * @brief Disable RTC Interrupt
AnnaBridge 172:7d866c31b3c5 663 *
AnnaBridge 172:7d866c31b3c5 664 * @param[in] u32IntFlagMask Specify the interrupt source. It consists of:
AnnaBridge 172:7d866c31b3c5 665 * - \ref RTC_INTEN_ALMIEN_Msk : Alarm interrupt
AnnaBridge 172:7d866c31b3c5 666 * - \ref RTC_INTEN_TICKIEN_Msk : Tick interrupt
AnnaBridge 172:7d866c31b3c5 667 * - \ref RTC_INTEN_TAMP0IEN_Msk : Tamper 0 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 668 * - \ref RTC_INTEN_TAMP1IEN_Msk : Tamper 1 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 669 * - \ref RTC_INTEN_TAMP2IEN_Msk : Tamper 2 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 670 * - \ref RTC_INTEN_TAMP3IEN_Msk : Tamper 3 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 671 * - \ref RTC_INTEN_TAMP4IEN_Msk : Tamper 4 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 672 * - \ref RTC_INTEN_TAMP5IEN_Msk : Tamper 5 Pin Event Detection interrupt
AnnaBridge 172:7d866c31b3c5 673 *
AnnaBridge 172:7d866c31b3c5 674 * @return None
AnnaBridge 172:7d866c31b3c5 675 *
AnnaBridge 172:7d866c31b3c5 676 * @details This API is used to disable the specify RTC interrupt function.
AnnaBridge 172:7d866c31b3c5 677 */
AnnaBridge 172:7d866c31b3c5 678 void RTC_DisableInt(uint32_t u32IntFlagMask)
AnnaBridge 172:7d866c31b3c5 679 {
AnnaBridge 172:7d866c31b3c5 680 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 681 RTC->INTEN &= ~u32IntFlagMask;
AnnaBridge 172:7d866c31b3c5 682 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 683 RTC->INTSTS = u32IntFlagMask;
AnnaBridge 172:7d866c31b3c5 684 }
AnnaBridge 172:7d866c31b3c5 685
AnnaBridge 172:7d866c31b3c5 686 /**
AnnaBridge 172:7d866c31b3c5 687 * @brief Enable Spare Registers Access
AnnaBridge 172:7d866c31b3c5 688 *
AnnaBridge 172:7d866c31b3c5 689 * @param None
AnnaBridge 172:7d866c31b3c5 690 *
AnnaBridge 172:7d866c31b3c5 691 * @return None
AnnaBridge 172:7d866c31b3c5 692 *
AnnaBridge 172:7d866c31b3c5 693 * @details This API is used to enable the spare registers 0~19 can be accessed.
AnnaBridge 172:7d866c31b3c5 694 */
AnnaBridge 172:7d866c31b3c5 695 void RTC_EnableSpareAccess(void)
AnnaBridge 172:7d866c31b3c5 696 {
AnnaBridge 172:7d866c31b3c5 697 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 698
AnnaBridge 172:7d866c31b3c5 699 RTC->SPRCTL |= RTC_SPRCTL_SPRRWEN_Msk;
AnnaBridge 172:7d866c31b3c5 700 }
AnnaBridge 172:7d866c31b3c5 701
AnnaBridge 172:7d866c31b3c5 702 /**
AnnaBridge 172:7d866c31b3c5 703 * @brief Disable Spare Register
AnnaBridge 172:7d866c31b3c5 704 *
AnnaBridge 172:7d866c31b3c5 705 * @param None
AnnaBridge 172:7d866c31b3c5 706 *
AnnaBridge 172:7d866c31b3c5 707 * @return None
AnnaBridge 172:7d866c31b3c5 708 *
AnnaBridge 172:7d866c31b3c5 709 * @details This API is used to disable the spare register 0~19 cannot be accessed.
AnnaBridge 172:7d866c31b3c5 710 */
AnnaBridge 172:7d866c31b3c5 711 void RTC_DisableSpareRegister(void)
AnnaBridge 172:7d866c31b3c5 712 {
AnnaBridge 172:7d866c31b3c5 713 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 714
AnnaBridge 172:7d866c31b3c5 715 RTC->SPRCTL &= ~RTC_SPRCTL_SPRRWEN_Msk;
AnnaBridge 172:7d866c31b3c5 716 }
AnnaBridge 172:7d866c31b3c5 717
AnnaBridge 172:7d866c31b3c5 718 /**
AnnaBridge 172:7d866c31b3c5 719 * @brief Static Tamper Detect
AnnaBridge 172:7d866c31b3c5 720 *
AnnaBridge 172:7d866c31b3c5 721 * @param[in] u32TamperSelect Tamper pin select. Possible options are
AnnaBridge 172:7d866c31b3c5 722 * - \ref RTC_TAMPER5_SELECT
AnnaBridge 172:7d866c31b3c5 723 * - \ref RTC_TAMPER4_SELECT
AnnaBridge 172:7d866c31b3c5 724 * - \ref RTC_TAMPER3_SELECT
AnnaBridge 172:7d866c31b3c5 725 * - \ref RTC_TAMPER2_SELECT
AnnaBridge 172:7d866c31b3c5 726 * - \ref RTC_TAMPER1_SELECT
AnnaBridge 172:7d866c31b3c5 727 * - \ref RTC_TAMPER0_SELECT
AnnaBridge 172:7d866c31b3c5 728 *
AnnaBridge 172:7d866c31b3c5 729 * @param[in] u32DetecLevel Tamper pin detection level select. Possible options are
AnnaBridge 172:7d866c31b3c5 730 * - \ref RTC_TAMPER_HIGH_LEVEL_DETECT
AnnaBridge 172:7d866c31b3c5 731 * - \ref RTC_TAMPER_LOW_LEVEL_DETECT
AnnaBridge 172:7d866c31b3c5 732 *
AnnaBridge 172:7d866c31b3c5 733 * @param[in] u32DebounceEn Tamper pin de-bounce enable
AnnaBridge 172:7d866c31b3c5 734 * - \ref RTC_TAMPER_DEBOUNCE_ENABLE
AnnaBridge 172:7d866c31b3c5 735 * - \ref RTC_TAMPER_DEBOUNCE_DISABLE
AnnaBridge 172:7d866c31b3c5 736 *
AnnaBridge 172:7d866c31b3c5 737 * @return None
AnnaBridge 172:7d866c31b3c5 738 *
AnnaBridge 172:7d866c31b3c5 739 * @details This API is used to enable the tamper pin detect function with specify trigger condition.
AnnaBridge 172:7d866c31b3c5 740 */
AnnaBridge 172:7d866c31b3c5 741 void RTC_StaticTamperEnable(uint32_t u32TamperSelect, uint32_t u32DetecLevel, uint32_t u32DebounceEn)
AnnaBridge 172:7d866c31b3c5 742 {
AnnaBridge 172:7d866c31b3c5 743 uint32_t i;
AnnaBridge 172:7d866c31b3c5 744 uint32_t u32Reg;
AnnaBridge 172:7d866c31b3c5 745 uint32_t u32TmpReg;
AnnaBridge 172:7d866c31b3c5 746
AnnaBridge 172:7d866c31b3c5 747 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 748 u32Reg = RTC->TAMPCTL;
AnnaBridge 172:7d866c31b3c5 749
AnnaBridge 172:7d866c31b3c5 750 u32TmpReg = ( RTC_TAMPCTL_TAMP0EN_Msk | (u32DetecLevel << RTC_TAMPCTL_TAMP0LV_Pos) |
AnnaBridge 172:7d866c31b3c5 751 (u32DebounceEn << RTC_TAMPCTL_TAMP0DBEN_Pos) );
AnnaBridge 172:7d866c31b3c5 752
AnnaBridge 172:7d866c31b3c5 753 for(i = 0ul; i < MAX_TAMPER_PIN_NUM; i++) {
AnnaBridge 172:7d866c31b3c5 754 if(u32TamperSelect & (0x1ul << i)) {
AnnaBridge 172:7d866c31b3c5 755 u32Reg &= ~((RTC_TAMPCTL_TAMP0EN_Msk|RTC_TAMPCTL_TAMP0LV_Msk|RTC_TAMPCTL_TAMP0DBEN_Msk) << (i*4ul));
AnnaBridge 172:7d866c31b3c5 756 u32Reg |= (u32TmpReg << (i*4ul));
AnnaBridge 172:7d866c31b3c5 757 }
AnnaBridge 172:7d866c31b3c5 758 }
AnnaBridge 172:7d866c31b3c5 759
AnnaBridge 172:7d866c31b3c5 760 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 761 RTC->TAMPCTL = u32Reg;
AnnaBridge 172:7d866c31b3c5 762
AnnaBridge 172:7d866c31b3c5 763 }
AnnaBridge 172:7d866c31b3c5 764
AnnaBridge 172:7d866c31b3c5 765 /**
AnnaBridge 172:7d866c31b3c5 766 * @brief Static Tamper Disable
AnnaBridge 172:7d866c31b3c5 767 *
AnnaBridge 172:7d866c31b3c5 768 * @param[in] u32TamperSelect Tamper pin select. Possible options are
AnnaBridge 172:7d866c31b3c5 769 * - \ref RTC_TAMPER5_SELECT
AnnaBridge 172:7d866c31b3c5 770 * - \ref RTC_TAMPER4_SELECT
AnnaBridge 172:7d866c31b3c5 771 * - \ref RTC_TAMPER3_SELECT
AnnaBridge 172:7d866c31b3c5 772 * - \ref RTC_TAMPER2_SELECT
AnnaBridge 172:7d866c31b3c5 773 * - \ref RTC_TAMPER1_SELECT
AnnaBridge 172:7d866c31b3c5 774 * - \ref RTC_TAMPER0_SELECT
AnnaBridge 172:7d866c31b3c5 775 *
AnnaBridge 172:7d866c31b3c5 776 * @return None
AnnaBridge 172:7d866c31b3c5 777 *
AnnaBridge 172:7d866c31b3c5 778 * @details This API is used to disable the static tamper pin detect.
AnnaBridge 172:7d866c31b3c5 779 */
AnnaBridge 172:7d866c31b3c5 780 void RTC_StaticTamperDisable(uint32_t u32TamperSelect)
AnnaBridge 172:7d866c31b3c5 781 {
AnnaBridge 172:7d866c31b3c5 782 uint32_t i;
AnnaBridge 172:7d866c31b3c5 783 uint32_t u32Reg;
AnnaBridge 172:7d866c31b3c5 784 uint32_t u32TmpReg;
AnnaBridge 172:7d866c31b3c5 785
AnnaBridge 172:7d866c31b3c5 786 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 787 u32Reg = RTC->TAMPCTL;
AnnaBridge 172:7d866c31b3c5 788
AnnaBridge 172:7d866c31b3c5 789 u32TmpReg = (RTC_TAMPCTL_TAMP0EN_Msk);
AnnaBridge 172:7d866c31b3c5 790
AnnaBridge 172:7d866c31b3c5 791 for(i = 0ul; i < MAX_TAMPER_PIN_NUM; i++) {
AnnaBridge 172:7d866c31b3c5 792 if(u32TamperSelect & (0x1ul << i)) {
AnnaBridge 172:7d866c31b3c5 793 u32Reg &= ~(u32TmpReg << (i*4ul));
AnnaBridge 172:7d866c31b3c5 794 }
AnnaBridge 172:7d866c31b3c5 795 }
AnnaBridge 172:7d866c31b3c5 796
AnnaBridge 172:7d866c31b3c5 797 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 798 RTC->TAMPCTL = u32Reg;
AnnaBridge 172:7d866c31b3c5 799 }
AnnaBridge 172:7d866c31b3c5 800
AnnaBridge 172:7d866c31b3c5 801 /**
AnnaBridge 172:7d866c31b3c5 802 * @brief Dynamic Tamper Detect
AnnaBridge 172:7d866c31b3c5 803 *
AnnaBridge 172:7d866c31b3c5 804 * @param[in] u32PairSel Tamper pin detection enable. Possible options are
AnnaBridge 172:7d866c31b3c5 805 * - \ref RTC_PAIR0_SELECT
AnnaBridge 172:7d866c31b3c5 806 * - \ref RTC_PAIR1_SELECT
AnnaBridge 172:7d866c31b3c5 807 * - \ref RTC_PAIR2_SELECT
AnnaBridge 172:7d866c31b3c5 808 *
AnnaBridge 172:7d866c31b3c5 809 * @param[in] u32DebounceEn Tamper pin de-bounce enable
AnnaBridge 172:7d866c31b3c5 810 * - \ref RTC_TAMPER_DEBOUNCE_ENABLE
AnnaBridge 172:7d866c31b3c5 811 * - \ref RTC_TAMPER_DEBOUNCE_DISABLE
AnnaBridge 172:7d866c31b3c5 812 *
AnnaBridge 172:7d866c31b3c5 813 * @param[in] u32Pair1Source Dynamic Pair 1 Input Source Select
AnnaBridge 172:7d866c31b3c5 814 * 0: Pair 1 source select tamper 2
AnnaBridge 172:7d866c31b3c5 815 * 1: Pair 1 source select tamper 0
AnnaBridge 172:7d866c31b3c5 816 *
AnnaBridge 172:7d866c31b3c5 817 * @param[in] u32Pair2Source Dynamic Pair 2 Input Source Select
AnnaBridge 172:7d866c31b3c5 818 * 0: Pair 2 source select tamper 4
AnnaBridge 172:7d866c31b3c5 819 * 1: Pair 2 source select tamper 0
AnnaBridge 172:7d866c31b3c5 820 *
AnnaBridge 172:7d866c31b3c5 821 * @return None
AnnaBridge 172:7d866c31b3c5 822 *
AnnaBridge 172:7d866c31b3c5 823 * @details This API is used to enable the dynamic tamper.
AnnaBridge 172:7d866c31b3c5 824 */
AnnaBridge 172:7d866c31b3c5 825 void RTC_DynamicTamperEnable(uint32_t u32PairSel, uint32_t u32DebounceEn, uint32_t u32Pair1Source, uint32_t u32Pair2Source)
AnnaBridge 172:7d866c31b3c5 826 {
AnnaBridge 172:7d866c31b3c5 827 uint32_t i;
AnnaBridge 172:7d866c31b3c5 828 uint32_t u32Reg;
AnnaBridge 172:7d866c31b3c5 829 uint32_t u32TmpReg;
AnnaBridge 172:7d866c31b3c5 830 uint32_t u32Tamper2Debounce, u32Tamper4Debounce;
AnnaBridge 172:7d866c31b3c5 831
AnnaBridge 172:7d866c31b3c5 832 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 833 u32Reg = RTC->TAMPCTL;
AnnaBridge 172:7d866c31b3c5 834
AnnaBridge 172:7d866c31b3c5 835 u32Tamper2Debounce = u32Reg & RTC_TAMPCTL_TAMP2DBEN_Msk;
AnnaBridge 172:7d866c31b3c5 836 u32Tamper4Debounce = u32Reg & RTC_TAMPCTL_TAMP4DBEN_Msk;
AnnaBridge 172:7d866c31b3c5 837
AnnaBridge 172:7d866c31b3c5 838 u32Reg &= ~(RTC_TAMPCTL_TAMP0EN_Msk | RTC_TAMPCTL_TAMP1EN_Msk | RTC_TAMPCTL_TAMP2EN_Msk |
AnnaBridge 172:7d866c31b3c5 839 RTC_TAMPCTL_TAMP3EN_Msk | RTC_TAMPCTL_TAMP4EN_Msk | RTC_TAMPCTL_TAMP5EN_Msk);
AnnaBridge 172:7d866c31b3c5 840 u32Reg &= ~(RTC_TAMPCTL_DYN1ISS_Msk | RTC_TAMPCTL_DYN2ISS_Msk);
AnnaBridge 172:7d866c31b3c5 841 u32Reg |= ((u32Pair1Source & 0x1ul) << RTC_TAMPCTL_DYN1ISS_Pos) | ((u32Pair2Source & 0x1ul) << RTC_TAMPCTL_DYN2ISS_Pos);
AnnaBridge 172:7d866c31b3c5 842
AnnaBridge 172:7d866c31b3c5 843 if(u32DebounceEn) {
AnnaBridge 172:7d866c31b3c5 844 u32TmpReg = (RTC_TAMPCTL_TAMP0EN_Msk | RTC_TAMPCTL_TAMP1EN_Msk |
AnnaBridge 172:7d866c31b3c5 845 RTC_TAMPCTL_TAMP0DBEN_Msk | RTC_TAMPCTL_TAMP1DBEN_Msk | RTC_TAMPCTL_DYNPR0EN_Msk);
AnnaBridge 172:7d866c31b3c5 846 } else {
AnnaBridge 172:7d866c31b3c5 847 u32TmpReg = (RTC_TAMPCTL_TAMP0EN_Msk | RTC_TAMPCTL_TAMP1EN_Msk | RTC_TAMPCTL_DYNPR0EN_Msk);
AnnaBridge 172:7d866c31b3c5 848 }
AnnaBridge 172:7d866c31b3c5 849
AnnaBridge 172:7d866c31b3c5 850 for(i = 0ul; i < MAX_PAIR_NUM; i++) {
AnnaBridge 172:7d866c31b3c5 851 if(u32PairSel & (0x1ul << i)) {
AnnaBridge 172:7d866c31b3c5 852 u32Reg &= ~((RTC_TAMPCTL_TAMP0DBEN_Msk | RTC_TAMPCTL_TAMP1DBEN_Msk) << (i*8ul));
AnnaBridge 172:7d866c31b3c5 853 u32Reg |= (u32TmpReg << (i*8ul));
AnnaBridge 172:7d866c31b3c5 854 }
AnnaBridge 172:7d866c31b3c5 855 }
AnnaBridge 172:7d866c31b3c5 856
AnnaBridge 172:7d866c31b3c5 857 if((u32Pair1Source) && (u32PairSel & RTC_PAIR1_SELECT)) {
AnnaBridge 172:7d866c31b3c5 858 u32Reg &= ~RTC_TAMPCTL_TAMP2EN_Msk;
AnnaBridge 172:7d866c31b3c5 859 u32Reg |= u32Tamper2Debounce;
AnnaBridge 172:7d866c31b3c5 860 }
AnnaBridge 172:7d866c31b3c5 861
AnnaBridge 172:7d866c31b3c5 862 if((u32Pair2Source) && (u32PairSel & RTC_PAIR2_SELECT)) {
AnnaBridge 172:7d866c31b3c5 863 u32Reg &= ~RTC_TAMPCTL_TAMP4EN_Msk;
AnnaBridge 172:7d866c31b3c5 864 u32Reg |= u32Tamper4Debounce;
AnnaBridge 172:7d866c31b3c5 865 }
AnnaBridge 172:7d866c31b3c5 866
AnnaBridge 172:7d866c31b3c5 867 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 868 RTC->TAMPCTL = u32Reg;
AnnaBridge 172:7d866c31b3c5 869 }
AnnaBridge 172:7d866c31b3c5 870
AnnaBridge 172:7d866c31b3c5 871 /**
AnnaBridge 172:7d866c31b3c5 872 * @brief Dynamic Tamper Disable
AnnaBridge 172:7d866c31b3c5 873 *
AnnaBridge 172:7d866c31b3c5 874 * @param[in] u32PairSel Tamper pin detection enable. Possible options are
AnnaBridge 172:7d866c31b3c5 875 * - \ref RTC_PAIR0_SELECT
AnnaBridge 172:7d866c31b3c5 876 * - \ref RTC_PAIR1_SELECT
AnnaBridge 172:7d866c31b3c5 877 * - \ref RTC_PAIR2_SELECT
AnnaBridge 172:7d866c31b3c5 878 *
AnnaBridge 172:7d866c31b3c5 879 * @return None
AnnaBridge 172:7d866c31b3c5 880 *
AnnaBridge 172:7d866c31b3c5 881 * @details This API is used to disable the dynamic tamper.
AnnaBridge 172:7d866c31b3c5 882 */
AnnaBridge 172:7d866c31b3c5 883 void RTC_DynamicTamperDisable(uint32_t u32PairSel)
AnnaBridge 172:7d866c31b3c5 884 {
AnnaBridge 172:7d866c31b3c5 885 uint32_t i;
AnnaBridge 172:7d866c31b3c5 886 uint32_t u32Reg;
AnnaBridge 172:7d866c31b3c5 887 uint32_t u32TmpReg;
AnnaBridge 172:7d866c31b3c5 888 uint32_t u32Tamper2En = 0ul, u32Tamper4En = 0ul;
AnnaBridge 172:7d866c31b3c5 889
AnnaBridge 172:7d866c31b3c5 890 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 891 u32Reg = RTC->TAMPCTL;
AnnaBridge 172:7d866c31b3c5 892
AnnaBridge 172:7d866c31b3c5 893 if((u32Reg & RTC_TAMPCTL_DYN1ISS_Msk) && (u32PairSel & RTC_PAIR1_SELECT)) {
AnnaBridge 172:7d866c31b3c5 894 u32Tamper2En = u32Reg & RTC_TAMPCTL_TAMP2EN_Msk;
AnnaBridge 172:7d866c31b3c5 895 }
AnnaBridge 172:7d866c31b3c5 896
AnnaBridge 172:7d866c31b3c5 897 if((u32Reg & RTC_TAMPCTL_DYN2ISS_Msk) && (u32PairSel & RTC_PAIR2_SELECT)) {
AnnaBridge 172:7d866c31b3c5 898 u32Tamper4En = u32Reg & RTC_TAMPCTL_TAMP4EN_Msk;
AnnaBridge 172:7d866c31b3c5 899 }
AnnaBridge 172:7d866c31b3c5 900
AnnaBridge 172:7d866c31b3c5 901 u32TmpReg = (RTC_TAMPCTL_TAMP0EN_Msk | RTC_TAMPCTL_TAMP1EN_Msk | RTC_TAMPCTL_DYNPR0EN_Msk);
AnnaBridge 172:7d866c31b3c5 902
AnnaBridge 172:7d866c31b3c5 903 for(i = 0ul; i < MAX_PAIR_NUM; i++) {
AnnaBridge 172:7d866c31b3c5 904 if(u32PairSel & (0x1ul << i)) {
AnnaBridge 172:7d866c31b3c5 905 u32Reg &= ~(u32TmpReg << ((i*8ul)));
AnnaBridge 172:7d866c31b3c5 906 }
AnnaBridge 172:7d866c31b3c5 907 }
AnnaBridge 172:7d866c31b3c5 908
AnnaBridge 172:7d866c31b3c5 909 u32Reg |= (u32Tamper2En | u32Tamper4En);
AnnaBridge 172:7d866c31b3c5 910
AnnaBridge 172:7d866c31b3c5 911 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 912 RTC->TAMPCTL = u32Reg;
AnnaBridge 172:7d866c31b3c5 913 }
AnnaBridge 172:7d866c31b3c5 914
AnnaBridge 172:7d866c31b3c5 915 /**
AnnaBridge 172:7d866c31b3c5 916 * @brief Config dynamic tamper
AnnaBridge 172:7d866c31b3c5 917 *
AnnaBridge 172:7d866c31b3c5 918 * @param[in] u32ChangeRate The dynamic tamper output change rate
AnnaBridge 172:7d866c31b3c5 919 * - \ref RTC_2POW10_CLK
AnnaBridge 172:7d866c31b3c5 920 * - \ref RTC_2POW11_CLK
AnnaBridge 172:7d866c31b3c5 921 * - \ref RTC_2POW12_CLK
AnnaBridge 172:7d866c31b3c5 922 * - \ref RTC_2POW13_CLK
AnnaBridge 172:7d866c31b3c5 923 * - \ref RTC_2POW14_CLK
AnnaBridge 172:7d866c31b3c5 924 * - \ref RTC_2POW15_CLK
AnnaBridge 172:7d866c31b3c5 925 * - \ref RTC_2POW16_CLK
AnnaBridge 172:7d866c31b3c5 926 * - \ref RTC_2POW17_CLK
AnnaBridge 172:7d866c31b3c5 927 *
AnnaBridge 172:7d866c31b3c5 928 * @param[in] u32SeedReload Reload new seed or not
AnnaBridge 172:7d866c31b3c5 929 * 0: not reload new seed
AnnaBridge 172:7d866c31b3c5 930 * 1: reload new seed
AnnaBridge 172:7d866c31b3c5 931 *
AnnaBridge 172:7d866c31b3c5 932 * @param[in] u32RefPattern Reference pattern
AnnaBridge 172:7d866c31b3c5 933 * - \ref REF_RANDOM_PATTERN
AnnaBridge 172:7d866c31b3c5 934 * - \ref REF_PREVIOUS_PATTERN
AnnaBridge 172:7d866c31b3c5 935 * - \ref REF_SEED
AnnaBridge 172:7d866c31b3c5 936 *
AnnaBridge 172:7d866c31b3c5 937 * @param[in] u32Seed Seed Value (0x0 ~ 0xFFFFFFFF)
AnnaBridge 172:7d866c31b3c5 938 *
AnnaBridge 172:7d866c31b3c5 939 * @return None
AnnaBridge 172:7d866c31b3c5 940 *
AnnaBridge 172:7d866c31b3c5 941 * @details This API is used to config dynamic tamper setting.
AnnaBridge 172:7d866c31b3c5 942 */
AnnaBridge 172:7d866c31b3c5 943 void RTC_DynamicTamperConfig(uint32_t u32ChangeRate, uint32_t u32SeedReload, uint32_t u32RefPattern, uint32_t u32Seed)
AnnaBridge 172:7d866c31b3c5 944 {
AnnaBridge 172:7d866c31b3c5 945 uint32_t u32Reg;
AnnaBridge 172:7d866c31b3c5 946 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 947 u32Reg = RTC->TAMPCTL;
AnnaBridge 172:7d866c31b3c5 948
AnnaBridge 172:7d866c31b3c5 949 u32Reg &= ~(RTC_TAMPCTL_DYNSRC_Msk | RTC_TAMPCTL_SEEDRLD_Msk | RTC_TAMPCTL_DYNRATE_Msk);
AnnaBridge 172:7d866c31b3c5 950
AnnaBridge 172:7d866c31b3c5 951 u32Reg |= (u32ChangeRate) | ((u32SeedReload & 0x1ul) << RTC_TAMPCTL_SEEDRLD_Pos) |
AnnaBridge 172:7d866c31b3c5 952 ((u32RefPattern & 0x3ul) << RTC_TAMPCTL_DYNSRC_Pos);
AnnaBridge 172:7d866c31b3c5 953
AnnaBridge 172:7d866c31b3c5 954 RTC_WaitAccessEnable();
AnnaBridge 172:7d866c31b3c5 955 RTC->TAMPSEED = u32Seed; /* need set seed value before re-load seed */
AnnaBridge 172:7d866c31b3c5 956 RTC->TAMPCTL = u32Reg;
AnnaBridge 172:7d866c31b3c5 957 }
AnnaBridge 172:7d866c31b3c5 958
AnnaBridge 172:7d866c31b3c5 959 /*@}*/ /* end of group M480_RTC_EXPORTED_FUNCTIONS */
AnnaBridge 172:7d866c31b3c5 960
AnnaBridge 172:7d866c31b3c5 961 /*@}*/ /* end of group M480_RTC_Driver */
AnnaBridge 172:7d866c31b3c5 962
AnnaBridge 172:7d866c31b3c5 963 /*@}*/ /* end of group M480_Device_Driver */
AnnaBridge 172:7d866c31b3c5 964
AnnaBridge 172:7d866c31b3c5 965 /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/