Date: March 20, 2011 This library is created from "LPC17xx CMSIS-Compliant Standard Peripheral Firmware Driver Library (GNU, Keil, IAR) (Jan 28, 2011)", available from NXP's website, under "All microcontrollers support documents" [[http://ics.nxp.com/support/documents/microcontrollers/?type=software]] You will need to follow [[/projects/libraries/svn/mbed/trunk/LPC1768/LPC17xx.h]] while using this library Examples provided here [[/users/frank26080115/programs/LPC1700CMSIS_Examples/]] The beautiful thing is that NXP does not place copyright protection on any of the files in here Only a few modifications are made to make it compile with the mbed online compiler, I fixed some warnings as well. This is untested as of March 20, 2011 Forum post about this library: [[/forum/mbed/topic/2030/]]

Committer:
frank26080115
Date:
Sun Mar 20 18:45:15 2011 +0000
Revision:
0:84d7747641aa

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frank26080115 0:84d7747641aa 1 /***********************************************************************//**
frank26080115 0:84d7747641aa 2 * @file lpc17xx_rtc.c
frank26080115 0:84d7747641aa 3 * @brief Contains all functions support for RTC firmware library on LPC17xx
frank26080115 0:84d7747641aa 4 * @version 3.0
frank26080115 0:84d7747641aa 5 * @date 18. June. 2010
frank26080115 0:84d7747641aa 6 * @author NXP MCU SW Application Team
frank26080115 0:84d7747641aa 7 **************************************************************************
frank26080115 0:84d7747641aa 8 * Software that is described herein is for illustrative purposes only
frank26080115 0:84d7747641aa 9 * which provides customers with programming information regarding the
frank26080115 0:84d7747641aa 10 * products. This software is supplied "AS IS" without any warranties.
frank26080115 0:84d7747641aa 11 * NXP Semiconductors assumes no responsibility or liability for the
frank26080115 0:84d7747641aa 12 * use of the software, conveys no license or title under any patent,
frank26080115 0:84d7747641aa 13 * copyright, or mask work right to the product. NXP Semiconductors
frank26080115 0:84d7747641aa 14 * reserves the right to make changes in the software without
frank26080115 0:84d7747641aa 15 * notification. NXP Semiconductors also make no representation or
frank26080115 0:84d7747641aa 16 * warranty that such application will be suitable for the specified
frank26080115 0:84d7747641aa 17 * use without further testing or modification.
frank26080115 0:84d7747641aa 18 **********************************************************************/
frank26080115 0:84d7747641aa 19
frank26080115 0:84d7747641aa 20
frank26080115 0:84d7747641aa 21 /* Peripheral group ----------------------------------------------------------- */
frank26080115 0:84d7747641aa 22 /** @addtogroup RTC
frank26080115 0:84d7747641aa 23 * @{
frank26080115 0:84d7747641aa 24 */
frank26080115 0:84d7747641aa 25
frank26080115 0:84d7747641aa 26 /* Includes ------------------------------------------------------------------- */
frank26080115 0:84d7747641aa 27 #include "lpc17xx_rtc.h"
frank26080115 0:84d7747641aa 28 #include "lpc17xx_clkpwr.h"
frank26080115 0:84d7747641aa 29
frank26080115 0:84d7747641aa 30
frank26080115 0:84d7747641aa 31 /* If this source file built with example, the LPC17xx FW library configuration
frank26080115 0:84d7747641aa 32 * file in each example directory ("lpc17xx_libcfg.h") must be included,
frank26080115 0:84d7747641aa 33 * otherwise the default FW library configuration file must be included instead
frank26080115 0:84d7747641aa 34 */
frank26080115 0:84d7747641aa 35 #ifdef __BUILD_WITH_EXAMPLE__
frank26080115 0:84d7747641aa 36 #include "lpc17xx_libcfg.h"
frank26080115 0:84d7747641aa 37 #else
frank26080115 0:84d7747641aa 38 #include "lpc17xx_libcfg_default.h"
frank26080115 0:84d7747641aa 39 #endif /* __BUILD_WITH_EXAMPLE__ */
frank26080115 0:84d7747641aa 40
frank26080115 0:84d7747641aa 41
frank26080115 0:84d7747641aa 42 #ifdef _RTC
frank26080115 0:84d7747641aa 43
frank26080115 0:84d7747641aa 44 /* Public Functions ----------------------------------------------------------- */
frank26080115 0:84d7747641aa 45 /** @addtogroup RTC_Public_Functions
frank26080115 0:84d7747641aa 46 * @{
frank26080115 0:84d7747641aa 47 */
frank26080115 0:84d7747641aa 48
frank26080115 0:84d7747641aa 49 /********************************************************************//**
frank26080115 0:84d7747641aa 50 * @brief Initializes the RTC peripheral.
frank26080115 0:84d7747641aa 51 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 52 * @return None
frank26080115 0:84d7747641aa 53 *********************************************************************/
frank26080115 0:84d7747641aa 54 void RTC_Init (LPC_RTC_TypeDef *RTCx)
frank26080115 0:84d7747641aa 55 {
frank26080115 0:84d7747641aa 56 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 57
frank26080115 0:84d7747641aa 58 /* Set up clock and power for RTC module */
frank26080115 0:84d7747641aa 59 CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCRTC, ENABLE);
frank26080115 0:84d7747641aa 60
frank26080115 0:84d7747641aa 61 // Clear all register to be default
frank26080115 0:84d7747641aa 62 RTCx->ILR = 0x00;
frank26080115 0:84d7747641aa 63 RTCx->CCR = 0x00;
frank26080115 0:84d7747641aa 64 RTCx->CIIR = 0x00;
frank26080115 0:84d7747641aa 65 RTCx->AMR = 0xFF;
frank26080115 0:84d7747641aa 66 RTCx->CALIBRATION = 0x00;
frank26080115 0:84d7747641aa 67 }
frank26080115 0:84d7747641aa 68
frank26080115 0:84d7747641aa 69
frank26080115 0:84d7747641aa 70 /*********************************************************************//**
frank26080115 0:84d7747641aa 71 * @brief De-initializes the RTC peripheral registers to their
frank26080115 0:84d7747641aa 72 * default reset values.
frank26080115 0:84d7747641aa 73 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 74 * @return None
frank26080115 0:84d7747641aa 75 **********************************************************************/
frank26080115 0:84d7747641aa 76 void RTC_DeInit(LPC_RTC_TypeDef *RTCx)
frank26080115 0:84d7747641aa 77 {
frank26080115 0:84d7747641aa 78 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 79
frank26080115 0:84d7747641aa 80 RTCx->CCR = 0x00;
frank26080115 0:84d7747641aa 81 // Disable power and clock for RTC module
frank26080115 0:84d7747641aa 82 CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCRTC, DISABLE);
frank26080115 0:84d7747641aa 83 }
frank26080115 0:84d7747641aa 84
frank26080115 0:84d7747641aa 85 /*********************************************************************//**
frank26080115 0:84d7747641aa 86 * @brief Reset clock tick counter in RTC peripheral
frank26080115 0:84d7747641aa 87 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 88 * @return None
frank26080115 0:84d7747641aa 89 **********************************************************************/
frank26080115 0:84d7747641aa 90 void RTC_ResetClockTickCounter(LPC_RTC_TypeDef *RTCx)
frank26080115 0:84d7747641aa 91 {
frank26080115 0:84d7747641aa 92 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 93
frank26080115 0:84d7747641aa 94 RTCx->CCR |= RTC_CCR_CTCRST;
frank26080115 0:84d7747641aa 95 RTCx->CCR &= (~RTC_CCR_CTCRST) & RTC_CCR_BITMASK;
frank26080115 0:84d7747641aa 96 }
frank26080115 0:84d7747641aa 97
frank26080115 0:84d7747641aa 98 /*********************************************************************//**
frank26080115 0:84d7747641aa 99 * @brief Start/Stop RTC peripheral
frank26080115 0:84d7747641aa 100 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 101 * @param[in] NewState New State of this function, should be:
frank26080115 0:84d7747641aa 102 * - ENABLE: The time counters are enabled
frank26080115 0:84d7747641aa 103 * - DISABLE: The time counters are disabled
frank26080115 0:84d7747641aa 104 * @return None
frank26080115 0:84d7747641aa 105 **********************************************************************/
frank26080115 0:84d7747641aa 106 void RTC_Cmd (LPC_RTC_TypeDef *RTCx, FunctionalState NewState)
frank26080115 0:84d7747641aa 107 {
frank26080115 0:84d7747641aa 108 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 109 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState));
frank26080115 0:84d7747641aa 110
frank26080115 0:84d7747641aa 111 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 112 {
frank26080115 0:84d7747641aa 113 RTCx->CCR |= RTC_CCR_CLKEN;
frank26080115 0:84d7747641aa 114 }
frank26080115 0:84d7747641aa 115 else
frank26080115 0:84d7747641aa 116 {
frank26080115 0:84d7747641aa 117 RTCx->CCR &= (~RTC_CCR_CLKEN) & RTC_CCR_BITMASK;
frank26080115 0:84d7747641aa 118 }
frank26080115 0:84d7747641aa 119 }
frank26080115 0:84d7747641aa 120
frank26080115 0:84d7747641aa 121
frank26080115 0:84d7747641aa 122 /*********************************************************************//**
frank26080115 0:84d7747641aa 123 * @brief Enable/Disable Counter increment interrupt for each time type
frank26080115 0:84d7747641aa 124 * in RTC peripheral
frank26080115 0:84d7747641aa 125 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 126 * @param[in] CntIncrIntType: Counter Increment Interrupt type,
frank26080115 0:84d7747641aa 127 * an increment of this type value below will generates
frank26080115 0:84d7747641aa 128 * an interrupt, should be:
frank26080115 0:84d7747641aa 129 * - RTC_TIMETYPE_SECOND
frank26080115 0:84d7747641aa 130 * - RTC_TIMETYPE_MINUTE
frank26080115 0:84d7747641aa 131 * - RTC_TIMETYPE_HOUR
frank26080115 0:84d7747641aa 132 * - RTC_TIMETYPE_DAYOFWEEK
frank26080115 0:84d7747641aa 133 * - RTC_TIMETYPE_DAYOFMONTH
frank26080115 0:84d7747641aa 134 * - RTC_TIMETYPE_DAYOFYEAR
frank26080115 0:84d7747641aa 135 * - RTC_TIMETYPE_MONTH
frank26080115 0:84d7747641aa 136 * - RTC_TIMETYPE_YEAR
frank26080115 0:84d7747641aa 137 * @param[in] NewState New State of this function, should be:
frank26080115 0:84d7747641aa 138 * - ENABLE: Counter Increment interrupt for this
frank26080115 0:84d7747641aa 139 * time type are enabled
frank26080115 0:84d7747641aa 140 * - DISABLE: Counter Increment interrupt for this
frank26080115 0:84d7747641aa 141 * time type are disabled
frank26080115 0:84d7747641aa 142 * @return None
frank26080115 0:84d7747641aa 143 **********************************************************************/
frank26080115 0:84d7747641aa 144 void RTC_CntIncrIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t CntIncrIntType, \
frank26080115 0:84d7747641aa 145 FunctionalState NewState)
frank26080115 0:84d7747641aa 146 {
frank26080115 0:84d7747641aa 147 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 148 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState));
frank26080115 0:84d7747641aa 149 CHECK_PARAM(PARAM_RTC_TIMETYPE(CntIncrIntType));
frank26080115 0:84d7747641aa 150
frank26080115 0:84d7747641aa 151 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 152 {
frank26080115 0:84d7747641aa 153 switch (CntIncrIntType)
frank26080115 0:84d7747641aa 154 {
frank26080115 0:84d7747641aa 155 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 156 RTCx->CIIR |= RTC_CIIR_IMSEC;
frank26080115 0:84d7747641aa 157 break;
frank26080115 0:84d7747641aa 158 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 159 RTCx->CIIR |= RTC_CIIR_IMMIN;
frank26080115 0:84d7747641aa 160 break;
frank26080115 0:84d7747641aa 161 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 162 RTCx->CIIR |= RTC_CIIR_IMHOUR;
frank26080115 0:84d7747641aa 163 break;
frank26080115 0:84d7747641aa 164 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 165 RTCx->CIIR |= RTC_CIIR_IMDOW;
frank26080115 0:84d7747641aa 166 break;
frank26080115 0:84d7747641aa 167 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 168 RTCx->CIIR |= RTC_CIIR_IMDOM;
frank26080115 0:84d7747641aa 169 break;
frank26080115 0:84d7747641aa 170 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 171 RTCx->CIIR |= RTC_CIIR_IMDOY;
frank26080115 0:84d7747641aa 172 break;
frank26080115 0:84d7747641aa 173 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 174 RTCx->CIIR |= RTC_CIIR_IMMON;
frank26080115 0:84d7747641aa 175 break;
frank26080115 0:84d7747641aa 176 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 177 RTCx->CIIR |= RTC_CIIR_IMYEAR;
frank26080115 0:84d7747641aa 178 break;
frank26080115 0:84d7747641aa 179 }
frank26080115 0:84d7747641aa 180 }
frank26080115 0:84d7747641aa 181 else
frank26080115 0:84d7747641aa 182 {
frank26080115 0:84d7747641aa 183 switch (CntIncrIntType)
frank26080115 0:84d7747641aa 184 {
frank26080115 0:84d7747641aa 185 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 186 RTCx->CIIR &= (~RTC_CIIR_IMSEC) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 187 break;
frank26080115 0:84d7747641aa 188 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 189 RTCx->CIIR &= (~RTC_CIIR_IMMIN) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 190 break;
frank26080115 0:84d7747641aa 191 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 192 RTCx->CIIR &= (~RTC_CIIR_IMHOUR) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 193 break;
frank26080115 0:84d7747641aa 194 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 195 RTCx->CIIR &= (~RTC_CIIR_IMDOW) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 196 break;
frank26080115 0:84d7747641aa 197 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 198 RTCx->CIIR &= (~RTC_CIIR_IMDOM) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 199 break;
frank26080115 0:84d7747641aa 200 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 201 RTCx->CIIR &= (~RTC_CIIR_IMDOY) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 202 break;
frank26080115 0:84d7747641aa 203 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 204 RTCx->CIIR &= (~RTC_CIIR_IMMON) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 205 break;
frank26080115 0:84d7747641aa 206 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 207 RTCx->CIIR &= (~RTC_CIIR_IMYEAR) & RTC_CIIR_BITMASK;
frank26080115 0:84d7747641aa 208 break;
frank26080115 0:84d7747641aa 209 }
frank26080115 0:84d7747641aa 210 }
frank26080115 0:84d7747641aa 211 }
frank26080115 0:84d7747641aa 212
frank26080115 0:84d7747641aa 213
frank26080115 0:84d7747641aa 214 /*********************************************************************//**
frank26080115 0:84d7747641aa 215 * @brief Enable/Disable Alarm interrupt for each time type
frank26080115 0:84d7747641aa 216 * in RTC peripheral
frank26080115 0:84d7747641aa 217 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 218 * @param[in] AlarmTimeType: Alarm Time Interrupt type,
frank26080115 0:84d7747641aa 219 * an matching of this type value below with current time
frank26080115 0:84d7747641aa 220 * in RTC will generates an interrupt, should be:
frank26080115 0:84d7747641aa 221 * - RTC_TIMETYPE_SECOND
frank26080115 0:84d7747641aa 222 * - RTC_TIMETYPE_MINUTE
frank26080115 0:84d7747641aa 223 * - RTC_TIMETYPE_HOUR
frank26080115 0:84d7747641aa 224 * - RTC_TIMETYPE_DAYOFWEEK
frank26080115 0:84d7747641aa 225 * - RTC_TIMETYPE_DAYOFMONTH
frank26080115 0:84d7747641aa 226 * - RTC_TIMETYPE_DAYOFYEAR
frank26080115 0:84d7747641aa 227 * - RTC_TIMETYPE_MONTH
frank26080115 0:84d7747641aa 228 * - RTC_TIMETYPE_YEAR
frank26080115 0:84d7747641aa 229 * @param[in] NewState New State of this function, should be:
frank26080115 0:84d7747641aa 230 * - ENABLE: Alarm interrupt for this
frank26080115 0:84d7747641aa 231 * time type are enabled
frank26080115 0:84d7747641aa 232 * - DISABLE: Alarm interrupt for this
frank26080115 0:84d7747641aa 233 * time type are disabled
frank26080115 0:84d7747641aa 234 * @return None
frank26080115 0:84d7747641aa 235 **********************************************************************/
frank26080115 0:84d7747641aa 236 void RTC_AlarmIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t AlarmTimeType, \
frank26080115 0:84d7747641aa 237 FunctionalState NewState)
frank26080115 0:84d7747641aa 238 {
frank26080115 0:84d7747641aa 239 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 240 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState));
frank26080115 0:84d7747641aa 241 CHECK_PARAM(PARAM_RTC_TIMETYPE(AlarmTimeType));
frank26080115 0:84d7747641aa 242
frank26080115 0:84d7747641aa 243 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 244 {
frank26080115 0:84d7747641aa 245 switch (AlarmTimeType)
frank26080115 0:84d7747641aa 246 {
frank26080115 0:84d7747641aa 247 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 248 RTCx->AMR &= (~RTC_AMR_AMRSEC) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 249 break;
frank26080115 0:84d7747641aa 250 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 251 RTCx->AMR &= (~RTC_AMR_AMRMIN) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 252 break;
frank26080115 0:84d7747641aa 253 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 254 RTCx->AMR &= (~RTC_AMR_AMRHOUR) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 255 break;
frank26080115 0:84d7747641aa 256 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 257 RTCx->AMR &= (~RTC_AMR_AMRDOW) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 258 break;
frank26080115 0:84d7747641aa 259 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 260 RTCx->AMR &= (~RTC_AMR_AMRDOM) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 261 break;
frank26080115 0:84d7747641aa 262 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 263 RTCx->AMR &= (~RTC_AMR_AMRDOY) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 264 break;
frank26080115 0:84d7747641aa 265 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 266 RTCx->AMR &= (~RTC_AMR_AMRMON) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 267 break;
frank26080115 0:84d7747641aa 268 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 269 RTCx->AMR &= (~RTC_AMR_AMRYEAR) & RTC_AMR_BITMASK;
frank26080115 0:84d7747641aa 270 break;
frank26080115 0:84d7747641aa 271 }
frank26080115 0:84d7747641aa 272 }
frank26080115 0:84d7747641aa 273 else
frank26080115 0:84d7747641aa 274 {
frank26080115 0:84d7747641aa 275 switch (AlarmTimeType)
frank26080115 0:84d7747641aa 276 {
frank26080115 0:84d7747641aa 277 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 278 RTCx->AMR |= (RTC_AMR_AMRSEC);
frank26080115 0:84d7747641aa 279 break;
frank26080115 0:84d7747641aa 280 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 281 RTCx->AMR |= (RTC_AMR_AMRMIN);
frank26080115 0:84d7747641aa 282 break;
frank26080115 0:84d7747641aa 283 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 284 RTCx->AMR |= (RTC_AMR_AMRHOUR);
frank26080115 0:84d7747641aa 285 break;
frank26080115 0:84d7747641aa 286 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 287 RTCx->AMR |= (RTC_AMR_AMRDOW);
frank26080115 0:84d7747641aa 288 break;
frank26080115 0:84d7747641aa 289 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 290 RTCx->AMR |= (RTC_AMR_AMRDOM);
frank26080115 0:84d7747641aa 291 break;
frank26080115 0:84d7747641aa 292 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 293 RTCx->AMR |= (RTC_AMR_AMRDOY);
frank26080115 0:84d7747641aa 294 break;
frank26080115 0:84d7747641aa 295 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 296 RTCx->AMR |= (RTC_AMR_AMRMON);
frank26080115 0:84d7747641aa 297 break;
frank26080115 0:84d7747641aa 298 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 299 RTCx->AMR |= (RTC_AMR_AMRYEAR);
frank26080115 0:84d7747641aa 300 break;
frank26080115 0:84d7747641aa 301 }
frank26080115 0:84d7747641aa 302 }
frank26080115 0:84d7747641aa 303 }
frank26080115 0:84d7747641aa 304
frank26080115 0:84d7747641aa 305
frank26080115 0:84d7747641aa 306 /*********************************************************************//**
frank26080115 0:84d7747641aa 307 * @brief Set current time value for each time type in RTC peripheral
frank26080115 0:84d7747641aa 308 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 309 * @param[in] Timetype: Time Type, should be:
frank26080115 0:84d7747641aa 310 * - RTC_TIMETYPE_SECOND
frank26080115 0:84d7747641aa 311 * - RTC_TIMETYPE_MINUTE
frank26080115 0:84d7747641aa 312 * - RTC_TIMETYPE_HOUR
frank26080115 0:84d7747641aa 313 * - RTC_TIMETYPE_DAYOFWEEK
frank26080115 0:84d7747641aa 314 * - RTC_TIMETYPE_DAYOFMONTH
frank26080115 0:84d7747641aa 315 * - RTC_TIMETYPE_DAYOFYEAR
frank26080115 0:84d7747641aa 316 * - RTC_TIMETYPE_MONTH
frank26080115 0:84d7747641aa 317 * - RTC_TIMETYPE_YEAR
frank26080115 0:84d7747641aa 318 * @param[in] TimeValue Time value to set
frank26080115 0:84d7747641aa 319 * @return None
frank26080115 0:84d7747641aa 320 **********************************************************************/
frank26080115 0:84d7747641aa 321 void RTC_SetTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t TimeValue)
frank26080115 0:84d7747641aa 322 {
frank26080115 0:84d7747641aa 323 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 324 CHECK_PARAM(PARAM_RTC_TIMETYPE(Timetype));
frank26080115 0:84d7747641aa 325
frank26080115 0:84d7747641aa 326 switch ( Timetype)
frank26080115 0:84d7747641aa 327 {
frank26080115 0:84d7747641aa 328 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 329 CHECK_PARAM(TimeValue < RTC_SECOND_MAX);
frank26080115 0:84d7747641aa 330
frank26080115 0:84d7747641aa 331 RTCx->SEC = TimeValue & RTC_SEC_MASK;
frank26080115 0:84d7747641aa 332 break;
frank26080115 0:84d7747641aa 333
frank26080115 0:84d7747641aa 334 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 335 CHECK_PARAM(TimeValue < RTC_MINUTE_MAX);
frank26080115 0:84d7747641aa 336
frank26080115 0:84d7747641aa 337 RTCx->MIN = TimeValue & RTC_MIN_MASK;
frank26080115 0:84d7747641aa 338 break;
frank26080115 0:84d7747641aa 339
frank26080115 0:84d7747641aa 340 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 341 CHECK_PARAM(TimeValue < RTC_HOUR_MAX);
frank26080115 0:84d7747641aa 342
frank26080115 0:84d7747641aa 343 RTCx->HOUR = TimeValue & RTC_HOUR_MASK;
frank26080115 0:84d7747641aa 344 break;
frank26080115 0:84d7747641aa 345
frank26080115 0:84d7747641aa 346 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 347 CHECK_PARAM(TimeValue < RTC_DAYOFWEEK_MAX);
frank26080115 0:84d7747641aa 348
frank26080115 0:84d7747641aa 349 RTCx->DOW = TimeValue & RTC_DOW_MASK;
frank26080115 0:84d7747641aa 350 break;
frank26080115 0:84d7747641aa 351
frank26080115 0:84d7747641aa 352 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 353 CHECK_PARAM((TimeValue < RTC_DAYOFMONTH_MAX) \
frank26080115 0:84d7747641aa 354 && (TimeValue > RTC_DAYOFMONTH_MIN));
frank26080115 0:84d7747641aa 355
frank26080115 0:84d7747641aa 356 RTCx->DOM = TimeValue & RTC_DOM_MASK;
frank26080115 0:84d7747641aa 357 break;
frank26080115 0:84d7747641aa 358
frank26080115 0:84d7747641aa 359 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 360 CHECK_PARAM((TimeValue > RTC_DAYOFYEAR_MIN) \
frank26080115 0:84d7747641aa 361 && (TimeValue < RTC_DAYOFYEAR_MAX));
frank26080115 0:84d7747641aa 362
frank26080115 0:84d7747641aa 363 RTCx->DOY = TimeValue & RTC_DOY_MASK;
frank26080115 0:84d7747641aa 364 break;
frank26080115 0:84d7747641aa 365
frank26080115 0:84d7747641aa 366 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 367 CHECK_PARAM((TimeValue > RTC_MONTH_MIN) \
frank26080115 0:84d7747641aa 368 && (TimeValue < RTC_MONTH_MAX));
frank26080115 0:84d7747641aa 369
frank26080115 0:84d7747641aa 370 RTCx->MONTH = TimeValue & RTC_MONTH_MASK;
frank26080115 0:84d7747641aa 371 break;
frank26080115 0:84d7747641aa 372
frank26080115 0:84d7747641aa 373 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 374 CHECK_PARAM(TimeValue < RTC_YEAR_MAX);
frank26080115 0:84d7747641aa 375
frank26080115 0:84d7747641aa 376 RTCx->YEAR = TimeValue & RTC_YEAR_MASK;
frank26080115 0:84d7747641aa 377 break;
frank26080115 0:84d7747641aa 378 }
frank26080115 0:84d7747641aa 379 }
frank26080115 0:84d7747641aa 380
frank26080115 0:84d7747641aa 381 /*********************************************************************//**
frank26080115 0:84d7747641aa 382 * @brief Get current time value for each type time type
frank26080115 0:84d7747641aa 383 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 384 * @param[in] Timetype: Time Type, should be:
frank26080115 0:84d7747641aa 385 * - RTC_TIMETYPE_SECOND
frank26080115 0:84d7747641aa 386 * - RTC_TIMETYPE_MINUTE
frank26080115 0:84d7747641aa 387 * - RTC_TIMETYPE_HOUR
frank26080115 0:84d7747641aa 388 * - RTC_TIMETYPE_DAYOFWEEK
frank26080115 0:84d7747641aa 389 * - RTC_TIMETYPE_DAYOFMONTH
frank26080115 0:84d7747641aa 390 * - RTC_TIMETYPE_DAYOFYEAR
frank26080115 0:84d7747641aa 391 * - RTC_TIMETYPE_MONTH
frank26080115 0:84d7747641aa 392 * - RTC_TIMETYPE_YEAR
frank26080115 0:84d7747641aa 393 * @return Value of time according to specified time type
frank26080115 0:84d7747641aa 394 **********************************************************************/
frank26080115 0:84d7747641aa 395 uint32_t RTC_GetTime(LPC_RTC_TypeDef *RTCx, uint32_t Timetype)
frank26080115 0:84d7747641aa 396 {
frank26080115 0:84d7747641aa 397 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 398 CHECK_PARAM(PARAM_RTC_TIMETYPE(Timetype));
frank26080115 0:84d7747641aa 399
frank26080115 0:84d7747641aa 400 switch (Timetype)
frank26080115 0:84d7747641aa 401 {
frank26080115 0:84d7747641aa 402 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 403 return (RTCx->SEC & RTC_SEC_MASK);
frank26080115 0:84d7747641aa 404 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 405 return (RTCx->MIN & RTC_MIN_MASK);
frank26080115 0:84d7747641aa 406 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 407 return (RTCx->HOUR & RTC_HOUR_MASK);
frank26080115 0:84d7747641aa 408 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 409 return (RTCx->DOW & RTC_DOW_MASK);
frank26080115 0:84d7747641aa 410 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 411 return (RTCx->DOM & RTC_DOM_MASK);
frank26080115 0:84d7747641aa 412 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 413 return (RTCx->DOY & RTC_DOY_MASK);
frank26080115 0:84d7747641aa 414 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 415 return (RTCx->MONTH & RTC_MONTH_MASK);
frank26080115 0:84d7747641aa 416 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 417 return (RTCx->YEAR & RTC_YEAR_MASK);
frank26080115 0:84d7747641aa 418 default:
frank26080115 0:84d7747641aa 419 return (0);
frank26080115 0:84d7747641aa 420 }
frank26080115 0:84d7747641aa 421 }
frank26080115 0:84d7747641aa 422
frank26080115 0:84d7747641aa 423
frank26080115 0:84d7747641aa 424 /*********************************************************************//**
frank26080115 0:84d7747641aa 425 * @brief Set full of time in RTC peripheral
frank26080115 0:84d7747641aa 426 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 427 * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
frank26080115 0:84d7747641aa 428 * contains time value in full.
frank26080115 0:84d7747641aa 429 * @return None
frank26080115 0:84d7747641aa 430 **********************************************************************/
frank26080115 0:84d7747641aa 431 void RTC_SetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
frank26080115 0:84d7747641aa 432 {
frank26080115 0:84d7747641aa 433 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 434
frank26080115 0:84d7747641aa 435 RTCx->DOM = pFullTime->DOM & RTC_DOM_MASK;
frank26080115 0:84d7747641aa 436 RTCx->DOW = pFullTime->DOW & RTC_DOW_MASK;
frank26080115 0:84d7747641aa 437 RTCx->DOY = pFullTime->DOY & RTC_DOY_MASK;
frank26080115 0:84d7747641aa 438 RTCx->HOUR = pFullTime->HOUR & RTC_HOUR_MASK;
frank26080115 0:84d7747641aa 439 RTCx->MIN = pFullTime->MIN & RTC_MIN_MASK;
frank26080115 0:84d7747641aa 440 RTCx->SEC = pFullTime->SEC & RTC_SEC_MASK;
frank26080115 0:84d7747641aa 441 RTCx->MONTH = pFullTime->MONTH & RTC_MONTH_MASK;
frank26080115 0:84d7747641aa 442 RTCx->YEAR = pFullTime->YEAR & RTC_YEAR_MASK;
frank26080115 0:84d7747641aa 443 }
frank26080115 0:84d7747641aa 444
frank26080115 0:84d7747641aa 445
frank26080115 0:84d7747641aa 446 /*********************************************************************//**
frank26080115 0:84d7747641aa 447 * @brief Get full of time in RTC peripheral
frank26080115 0:84d7747641aa 448 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 449 * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
frank26080115 0:84d7747641aa 450 * will be stored time in full.
frank26080115 0:84d7747641aa 451 * @return None
frank26080115 0:84d7747641aa 452 **********************************************************************/
frank26080115 0:84d7747641aa 453 void RTC_GetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
frank26080115 0:84d7747641aa 454 {
frank26080115 0:84d7747641aa 455 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 456
frank26080115 0:84d7747641aa 457 pFullTime->DOM = RTCx->DOM & RTC_DOM_MASK;
frank26080115 0:84d7747641aa 458 pFullTime->DOW = RTCx->DOW & RTC_DOW_MASK;
frank26080115 0:84d7747641aa 459 pFullTime->DOY = RTCx->DOY & RTC_DOY_MASK;
frank26080115 0:84d7747641aa 460 pFullTime->HOUR = RTCx->HOUR & RTC_HOUR_MASK;
frank26080115 0:84d7747641aa 461 pFullTime->MIN = RTCx->MIN & RTC_MIN_MASK;
frank26080115 0:84d7747641aa 462 pFullTime->SEC = RTCx->SEC & RTC_SEC_MASK;
frank26080115 0:84d7747641aa 463 pFullTime->MONTH = RTCx->MONTH & RTC_MONTH_MASK;
frank26080115 0:84d7747641aa 464 pFullTime->YEAR = RTCx->YEAR & RTC_YEAR_MASK;
frank26080115 0:84d7747641aa 465 }
frank26080115 0:84d7747641aa 466
frank26080115 0:84d7747641aa 467
frank26080115 0:84d7747641aa 468 /*********************************************************************//**
frank26080115 0:84d7747641aa 469 * @brief Set alarm time value for each time type
frank26080115 0:84d7747641aa 470 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 471 * @param[in] Timetype: Time Type, should be:
frank26080115 0:84d7747641aa 472 * - RTC_TIMETYPE_SECOND
frank26080115 0:84d7747641aa 473 * - RTC_TIMETYPE_MINUTE
frank26080115 0:84d7747641aa 474 * - RTC_TIMETYPE_HOUR
frank26080115 0:84d7747641aa 475 * - RTC_TIMETYPE_DAYOFWEEK
frank26080115 0:84d7747641aa 476 * - RTC_TIMETYPE_DAYOFMONTH
frank26080115 0:84d7747641aa 477 * - RTC_TIMETYPE_DAYOFYEAR
frank26080115 0:84d7747641aa 478 * - RTC_TIMETYPE_MONTH
frank26080115 0:84d7747641aa 479 * - RTC_TIMETYPE_YEAR
frank26080115 0:84d7747641aa 480 * @param[in] ALValue Alarm time value to set
frank26080115 0:84d7747641aa 481 * @return None
frank26080115 0:84d7747641aa 482 **********************************************************************/
frank26080115 0:84d7747641aa 483 void RTC_SetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t ALValue)
frank26080115 0:84d7747641aa 484 {
frank26080115 0:84d7747641aa 485 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 486
frank26080115 0:84d7747641aa 487 switch (Timetype)
frank26080115 0:84d7747641aa 488 {
frank26080115 0:84d7747641aa 489 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 490 CHECK_PARAM(ALValue < RTC_SECOND_MAX);
frank26080115 0:84d7747641aa 491
frank26080115 0:84d7747641aa 492 RTCx->ALSEC = ALValue & RTC_SEC_MASK;
frank26080115 0:84d7747641aa 493 break;
frank26080115 0:84d7747641aa 494
frank26080115 0:84d7747641aa 495 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 496 CHECK_PARAM(ALValue < RTC_MINUTE_MAX);
frank26080115 0:84d7747641aa 497
frank26080115 0:84d7747641aa 498 RTCx->ALMIN = ALValue & RTC_MIN_MASK;
frank26080115 0:84d7747641aa 499 break;
frank26080115 0:84d7747641aa 500
frank26080115 0:84d7747641aa 501 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 502 CHECK_PARAM(ALValue < RTC_HOUR_MAX);
frank26080115 0:84d7747641aa 503
frank26080115 0:84d7747641aa 504 RTCx->ALHOUR = ALValue & RTC_HOUR_MASK;
frank26080115 0:84d7747641aa 505 break;
frank26080115 0:84d7747641aa 506
frank26080115 0:84d7747641aa 507 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 508 CHECK_PARAM(ALValue < RTC_DAYOFWEEK_MAX);
frank26080115 0:84d7747641aa 509
frank26080115 0:84d7747641aa 510 RTCx->ALDOW = ALValue & RTC_DOW_MASK;
frank26080115 0:84d7747641aa 511 break;
frank26080115 0:84d7747641aa 512
frank26080115 0:84d7747641aa 513 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 514 CHECK_PARAM((ALValue < RTC_DAYOFMONTH_MAX) \
frank26080115 0:84d7747641aa 515 && (ALValue > RTC_DAYOFMONTH_MIN));
frank26080115 0:84d7747641aa 516
frank26080115 0:84d7747641aa 517 RTCx->ALDOM = ALValue & RTC_DOM_MASK;
frank26080115 0:84d7747641aa 518 break;
frank26080115 0:84d7747641aa 519
frank26080115 0:84d7747641aa 520 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 521 CHECK_PARAM((ALValue > RTC_DAYOFYEAR_MIN) \
frank26080115 0:84d7747641aa 522 && (ALValue < RTC_DAYOFYEAR_MAX));
frank26080115 0:84d7747641aa 523
frank26080115 0:84d7747641aa 524 RTCx->ALDOY = ALValue & RTC_DOY_MASK;
frank26080115 0:84d7747641aa 525 break;
frank26080115 0:84d7747641aa 526
frank26080115 0:84d7747641aa 527 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 528 CHECK_PARAM((ALValue > RTC_MONTH_MIN) \
frank26080115 0:84d7747641aa 529 && (ALValue < RTC_MONTH_MAX));
frank26080115 0:84d7747641aa 530
frank26080115 0:84d7747641aa 531 RTCx->ALMON = ALValue & RTC_MONTH_MASK;
frank26080115 0:84d7747641aa 532 break;
frank26080115 0:84d7747641aa 533
frank26080115 0:84d7747641aa 534 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 535 CHECK_PARAM(ALValue < RTC_YEAR_MAX);
frank26080115 0:84d7747641aa 536
frank26080115 0:84d7747641aa 537 RTCx->ALYEAR = ALValue & RTC_YEAR_MASK;
frank26080115 0:84d7747641aa 538 break;
frank26080115 0:84d7747641aa 539 }
frank26080115 0:84d7747641aa 540 }
frank26080115 0:84d7747641aa 541
frank26080115 0:84d7747641aa 542
frank26080115 0:84d7747641aa 543
frank26080115 0:84d7747641aa 544 /*********************************************************************//**
frank26080115 0:84d7747641aa 545 * @brief Get alarm time value for each time type
frank26080115 0:84d7747641aa 546 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 547 * @param[in] Timetype: Time Type, should be:
frank26080115 0:84d7747641aa 548 * - RTC_TIMETYPE_SECOND
frank26080115 0:84d7747641aa 549 * - RTC_TIMETYPE_MINUTE
frank26080115 0:84d7747641aa 550 * - RTC_TIMETYPE_HOUR
frank26080115 0:84d7747641aa 551 * - RTC_TIMETYPE_DAYOFWEEK
frank26080115 0:84d7747641aa 552 * - RTC_TIMETYPE_DAYOFMONTH
frank26080115 0:84d7747641aa 553 * - RTC_TIMETYPE_DAYOFYEAR
frank26080115 0:84d7747641aa 554 * - RTC_TIMETYPE_MONTH
frank26080115 0:84d7747641aa 555 * - RTC_TIMETYPE_YEAR
frank26080115 0:84d7747641aa 556 * @return Value of Alarm time according to specified time type
frank26080115 0:84d7747641aa 557 **********************************************************************/
frank26080115 0:84d7747641aa 558 uint32_t RTC_GetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype)
frank26080115 0:84d7747641aa 559 {
frank26080115 0:84d7747641aa 560 switch (Timetype)
frank26080115 0:84d7747641aa 561 {
frank26080115 0:84d7747641aa 562 case RTC_TIMETYPE_SECOND:
frank26080115 0:84d7747641aa 563 return (RTCx->ALSEC & RTC_SEC_MASK);
frank26080115 0:84d7747641aa 564 case RTC_TIMETYPE_MINUTE:
frank26080115 0:84d7747641aa 565 return (RTCx->ALMIN & RTC_MIN_MASK);
frank26080115 0:84d7747641aa 566 case RTC_TIMETYPE_HOUR:
frank26080115 0:84d7747641aa 567 return (RTCx->ALHOUR & RTC_HOUR_MASK);
frank26080115 0:84d7747641aa 568 case RTC_TIMETYPE_DAYOFWEEK:
frank26080115 0:84d7747641aa 569 return (RTCx->ALDOW & RTC_DOW_MASK);
frank26080115 0:84d7747641aa 570 case RTC_TIMETYPE_DAYOFMONTH:
frank26080115 0:84d7747641aa 571 return (RTCx->ALDOM & RTC_DOM_MASK);
frank26080115 0:84d7747641aa 572 case RTC_TIMETYPE_DAYOFYEAR:
frank26080115 0:84d7747641aa 573 return (RTCx->ALDOY & RTC_DOY_MASK);
frank26080115 0:84d7747641aa 574 case RTC_TIMETYPE_MONTH:
frank26080115 0:84d7747641aa 575 return (RTCx->ALMON & RTC_MONTH_MASK);
frank26080115 0:84d7747641aa 576 case RTC_TIMETYPE_YEAR:
frank26080115 0:84d7747641aa 577 return (RTCx->ALYEAR & RTC_YEAR_MASK);
frank26080115 0:84d7747641aa 578 default:
frank26080115 0:84d7747641aa 579 return (0);
frank26080115 0:84d7747641aa 580 }
frank26080115 0:84d7747641aa 581 }
frank26080115 0:84d7747641aa 582
frank26080115 0:84d7747641aa 583
frank26080115 0:84d7747641aa 584 /*********************************************************************//**
frank26080115 0:84d7747641aa 585 * @brief Set full of alarm time in RTC peripheral
frank26080115 0:84d7747641aa 586 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 587 * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
frank26080115 0:84d7747641aa 588 * contains alarm time value in full.
frank26080115 0:84d7747641aa 589 * @return None
frank26080115 0:84d7747641aa 590 **********************************************************************/
frank26080115 0:84d7747641aa 591 void RTC_SetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
frank26080115 0:84d7747641aa 592 {
frank26080115 0:84d7747641aa 593 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 594
frank26080115 0:84d7747641aa 595 RTCx->ALDOM = pFullTime->DOM & RTC_DOM_MASK;
frank26080115 0:84d7747641aa 596 RTCx->ALDOW = pFullTime->DOW & RTC_DOW_MASK;
frank26080115 0:84d7747641aa 597 RTCx->ALDOY = pFullTime->DOY & RTC_DOY_MASK;
frank26080115 0:84d7747641aa 598 RTCx->ALHOUR = pFullTime->HOUR & RTC_HOUR_MASK;
frank26080115 0:84d7747641aa 599 RTCx->ALMIN = pFullTime->MIN & RTC_MIN_MASK;
frank26080115 0:84d7747641aa 600 RTCx->ALSEC = pFullTime->SEC & RTC_SEC_MASK;
frank26080115 0:84d7747641aa 601 RTCx->ALMON = pFullTime->MONTH & RTC_MONTH_MASK;
frank26080115 0:84d7747641aa 602 RTCx->ALYEAR = pFullTime->YEAR & RTC_YEAR_MASK;
frank26080115 0:84d7747641aa 603 }
frank26080115 0:84d7747641aa 604
frank26080115 0:84d7747641aa 605
frank26080115 0:84d7747641aa 606 /*********************************************************************//**
frank26080115 0:84d7747641aa 607 * @brief Get full of alarm time in RTC peripheral
frank26080115 0:84d7747641aa 608 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 609 * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
frank26080115 0:84d7747641aa 610 * will be stored alarm time in full.
frank26080115 0:84d7747641aa 611 * @return None
frank26080115 0:84d7747641aa 612 **********************************************************************/
frank26080115 0:84d7747641aa 613 void RTC_GetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
frank26080115 0:84d7747641aa 614 {
frank26080115 0:84d7747641aa 615 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 616
frank26080115 0:84d7747641aa 617 pFullTime->DOM = RTCx->ALDOM & RTC_DOM_MASK;
frank26080115 0:84d7747641aa 618 pFullTime->DOW = RTCx->ALDOW & RTC_DOW_MASK;
frank26080115 0:84d7747641aa 619 pFullTime->DOY = RTCx->ALDOY & RTC_DOY_MASK;
frank26080115 0:84d7747641aa 620 pFullTime->HOUR = RTCx->ALHOUR & RTC_HOUR_MASK;
frank26080115 0:84d7747641aa 621 pFullTime->MIN = RTCx->ALMIN & RTC_MIN_MASK;
frank26080115 0:84d7747641aa 622 pFullTime->SEC = RTCx->ALSEC & RTC_SEC_MASK;
frank26080115 0:84d7747641aa 623 pFullTime->MONTH = RTCx->ALMON & RTC_MONTH_MASK;
frank26080115 0:84d7747641aa 624 pFullTime->YEAR = RTCx->ALYEAR & RTC_YEAR_MASK;
frank26080115 0:84d7747641aa 625 }
frank26080115 0:84d7747641aa 626
frank26080115 0:84d7747641aa 627
frank26080115 0:84d7747641aa 628 /*********************************************************************//**
frank26080115 0:84d7747641aa 629 * @brief Check whether if specified Location interrupt in
frank26080115 0:84d7747641aa 630 * RTC peripheral is set or not
frank26080115 0:84d7747641aa 631 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 632 * @param[in] IntType Interrupt location type, should be:
frank26080115 0:84d7747641aa 633 * - RTC_INT_COUNTER_INCREASE: Counter Increment Interrupt
frank26080115 0:84d7747641aa 634 * block generated an interrupt.
frank26080115 0:84d7747641aa 635 * - RTC_INT_ALARM: Alarm generated an
frank26080115 0:84d7747641aa 636 * interrupt.
frank26080115 0:84d7747641aa 637 * @return New state of specified Location interrupt in RTC peripheral
frank26080115 0:84d7747641aa 638 * (SET or RESET)
frank26080115 0:84d7747641aa 639 **********************************************************************/
frank26080115 0:84d7747641aa 640 IntStatus RTC_GetIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType)
frank26080115 0:84d7747641aa 641 {
frank26080115 0:84d7747641aa 642 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 643 CHECK_PARAM(PARAM_RTC_INT(IntType));
frank26080115 0:84d7747641aa 644
frank26080115 0:84d7747641aa 645 return ((RTCx->ILR & IntType) ? SET : RESET);
frank26080115 0:84d7747641aa 646 }
frank26080115 0:84d7747641aa 647
frank26080115 0:84d7747641aa 648
frank26080115 0:84d7747641aa 649 /*********************************************************************//**
frank26080115 0:84d7747641aa 650 * @brief Clear specified Location interrupt pending in
frank26080115 0:84d7747641aa 651 * RTC peripheral
frank26080115 0:84d7747641aa 652 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 653 * @param[in] IntType Interrupt location type, should be:
frank26080115 0:84d7747641aa 654 * - RTC_INT_COUNTER_INCREASE: Clear Counter Increment
frank26080115 0:84d7747641aa 655 * Interrupt pending.
frank26080115 0:84d7747641aa 656 * - RTC_INT_ALARM: Clear alarm interrupt pending
frank26080115 0:84d7747641aa 657 * @return None
frank26080115 0:84d7747641aa 658 **********************************************************************/
frank26080115 0:84d7747641aa 659 void RTC_ClearIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType)
frank26080115 0:84d7747641aa 660 {
frank26080115 0:84d7747641aa 661 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 662 CHECK_PARAM(PARAM_RTC_INT(IntType));
frank26080115 0:84d7747641aa 663
frank26080115 0:84d7747641aa 664 RTCx->ILR |= IntType;
frank26080115 0:84d7747641aa 665 }
frank26080115 0:84d7747641aa 666
frank26080115 0:84d7747641aa 667 /*********************************************************************//**
frank26080115 0:84d7747641aa 668 * @brief Enable/Disable calibration counter in RTC peripheral
frank26080115 0:84d7747641aa 669 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 670 * @param[in] NewState New State of this function, should be:
frank26080115 0:84d7747641aa 671 * - ENABLE: The calibration counter is enabled and counting
frank26080115 0:84d7747641aa 672 * - DISABLE: The calibration counter is disabled and reset to zero
frank26080115 0:84d7747641aa 673 * @return None
frank26080115 0:84d7747641aa 674 **********************************************************************/
frank26080115 0:84d7747641aa 675 void RTC_CalibCounterCmd(LPC_RTC_TypeDef *RTCx, FunctionalState NewState)
frank26080115 0:84d7747641aa 676 {
frank26080115 0:84d7747641aa 677 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 678 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState));
frank26080115 0:84d7747641aa 679
frank26080115 0:84d7747641aa 680 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 681 {
frank26080115 0:84d7747641aa 682 RTCx->CCR &= (~RTC_CCR_CCALEN) & RTC_CCR_BITMASK;
frank26080115 0:84d7747641aa 683 }
frank26080115 0:84d7747641aa 684 else
frank26080115 0:84d7747641aa 685 {
frank26080115 0:84d7747641aa 686 RTCx->CCR |= RTC_CCR_CCALEN;
frank26080115 0:84d7747641aa 687 }
frank26080115 0:84d7747641aa 688 }
frank26080115 0:84d7747641aa 689
frank26080115 0:84d7747641aa 690
frank26080115 0:84d7747641aa 691 /*********************************************************************//**
frank26080115 0:84d7747641aa 692 * @brief Configures Calibration in RTC peripheral
frank26080115 0:84d7747641aa 693 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 694 * @param[in] CalibValue Calibration value, should be in range from
frank26080115 0:84d7747641aa 695 * 0 to 131,072
frank26080115 0:84d7747641aa 696 * @param[in] CalibDir Calibration Direction, should be:
frank26080115 0:84d7747641aa 697 * - RTC_CALIB_DIR_FORWARD: Forward calibration
frank26080115 0:84d7747641aa 698 * - RTC_CALIB_DIR_BACKWARD: Backward calibration
frank26080115 0:84d7747641aa 699 * @return None
frank26080115 0:84d7747641aa 700 **********************************************************************/
frank26080115 0:84d7747641aa 701 void RTC_CalibConfig(LPC_RTC_TypeDef *RTCx, uint32_t CalibValue, uint8_t CalibDir)
frank26080115 0:84d7747641aa 702 {
frank26080115 0:84d7747641aa 703 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 704 CHECK_PARAM(PARAM_RTC_CALIB_DIR(CalibDir));
frank26080115 0:84d7747641aa 705 CHECK_PARAM(CalibValue < RTC_CALIBRATION_MAX);
frank26080115 0:84d7747641aa 706
frank26080115 0:84d7747641aa 707 RTCx->CALIBRATION = ((CalibValue - 1) & RTC_CALIBRATION_CALVAL_MASK) \
frank26080115 0:84d7747641aa 708 | ((CalibDir == RTC_CALIB_DIR_BACKWARD) ? RTC_CALIBRATION_LIBDIR : 0);
frank26080115 0:84d7747641aa 709 }
frank26080115 0:84d7747641aa 710
frank26080115 0:84d7747641aa 711
frank26080115 0:84d7747641aa 712 /*********************************************************************//**
frank26080115 0:84d7747641aa 713 * @brief Write value to General purpose registers
frank26080115 0:84d7747641aa 714 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 715 * @param[in] Channel General purpose registers Channel number,
frank26080115 0:84d7747641aa 716 * should be in range from 0 to 4.
frank26080115 0:84d7747641aa 717 * @param[in] Value Value to write
frank26080115 0:84d7747641aa 718 * @return None
frank26080115 0:84d7747641aa 719 * Note: These General purpose registers can be used to store important
frank26080115 0:84d7747641aa 720 * information when the main power supply is off. The value in these
frank26080115 0:84d7747641aa 721 * registers is not affected by chip reset.
frank26080115 0:84d7747641aa 722 **********************************************************************/
frank26080115 0:84d7747641aa 723 void RTC_WriteGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel, uint32_t Value)
frank26080115 0:84d7747641aa 724 {
frank26080115 0:84d7747641aa 725 uint32_t *preg;
frank26080115 0:84d7747641aa 726
frank26080115 0:84d7747641aa 727 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 728 CHECK_PARAM(PARAM_RTC_GPREG_CH(Channel));
frank26080115 0:84d7747641aa 729
frank26080115 0:84d7747641aa 730 preg = (uint32_t *)&RTCx->GPREG0;
frank26080115 0:84d7747641aa 731 preg += Channel;
frank26080115 0:84d7747641aa 732 *preg = Value;
frank26080115 0:84d7747641aa 733 }
frank26080115 0:84d7747641aa 734
frank26080115 0:84d7747641aa 735
frank26080115 0:84d7747641aa 736 /*********************************************************************//**
frank26080115 0:84d7747641aa 737 * @brief Read value from General purpose registers
frank26080115 0:84d7747641aa 738 * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
frank26080115 0:84d7747641aa 739 * @param[in] Channel General purpose registers Channel number,
frank26080115 0:84d7747641aa 740 * should be in range from 0 to 4.
frank26080115 0:84d7747641aa 741 * @return Read Value
frank26080115 0:84d7747641aa 742 * Note: These General purpose registers can be used to store important
frank26080115 0:84d7747641aa 743 * information when the main power supply is off. The value in these
frank26080115 0:84d7747641aa 744 * registers is not affected by chip reset.
frank26080115 0:84d7747641aa 745 **********************************************************************/
frank26080115 0:84d7747641aa 746 uint32_t RTC_ReadGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel)
frank26080115 0:84d7747641aa 747 {
frank26080115 0:84d7747641aa 748 uint32_t *preg;
frank26080115 0:84d7747641aa 749 uint32_t value;
frank26080115 0:84d7747641aa 750
frank26080115 0:84d7747641aa 751 CHECK_PARAM(PARAM_RTCx(RTCx));
frank26080115 0:84d7747641aa 752 CHECK_PARAM(PARAM_RTC_GPREG_CH(Channel));
frank26080115 0:84d7747641aa 753
frank26080115 0:84d7747641aa 754 preg = (uint32_t *)&RTCx->GPREG0;
frank26080115 0:84d7747641aa 755 preg += Channel;
frank26080115 0:84d7747641aa 756 value = *preg;
frank26080115 0:84d7747641aa 757 return (value);
frank26080115 0:84d7747641aa 758 }
frank26080115 0:84d7747641aa 759
frank26080115 0:84d7747641aa 760 /**
frank26080115 0:84d7747641aa 761 * @}
frank26080115 0:84d7747641aa 762 */
frank26080115 0:84d7747641aa 763
frank26080115 0:84d7747641aa 764 #endif /* _RTC */
frank26080115 0:84d7747641aa 765
frank26080115 0:84d7747641aa 766 /**
frank26080115 0:84d7747641aa 767 * @}
frank26080115 0:84d7747641aa 768 */
frank26080115 0:84d7747641aa 769
frank26080115 0:84d7747641aa 770 /* --------------------------------- End Of File ------------------------------ */
frank26080115 0:84d7747641aa 771