Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_NUVOTON/TARGET_M480/device/StdDriver/m480_rtc.c@172:7d866c31b3c5, 2017-08-31 (annotated)
- 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?
User | Revision | Line number | New 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. ***/ |