35 #include "sys_config.h"
48 #if defined(CHIP_LPC177X_8X) || defined(CHIP_LPC407X_8X) || defined(CHIP_LPC18XX) || defined(CHIP_LPC43XX)
49 #define RTC_EV_SUPPORT 1
54 typedef enum IP_RTC_TIMEINDEX {
70 typedef enum IP_RTC_EV_CHANNEL {
75 } IP_RTC_EV_CHANNEL_T;
90 #if defined(CHIP_LPC177X_8X) || defined(CHIP_LPC407X_8X) || defined(CHIP_LPC175X_6X)
103 __I
uint32_t ERFIRSTSTAMP[RTC_EV_CHANNEL_NUM];
105 __I
uint32_t ERLASTSTAMP[RTC_EV_CHANNEL_NUM];
113 #define RTC_ILR_BITMASK ((0x00000003))
115 #define RTC_IRL_RTCCIF ((1 << 0))
117 #define RTC_IRL_RTCALF ((1 << 1))
123 #define RTC_CCR_BITMASK ((0x00000013))
125 #define RTC_CCR_CLKEN ((1 << 0))
127 #define RTC_CCR_CTCRST ((1 << 1))
129 #define RTC_CCR_CCALEN ((1 << 4))
135 #define RTC_AMR_CIIR_IMSEC ((1 << 0))
137 #define RTC_AMR_CIIR_IMMIN ((1 << 1))
139 #define RTC_AMR_CIIR_IMHOUR ((1 << 2))
141 #define RTC_AMR_CIIR_IMDOM ((1 << 3))
143 #define RTC_AMR_CIIR_IMDOW ((1 << 4))
145 #define RTC_AMR_CIIR_IMDOY ((1 << 5))
147 #define RTC_AMR_CIIR_IMMON ((1 << 6))
149 #define RTC_AMR_CIIR_IMYEAR ((1 << 7))
151 #define RTC_AMR_CIIR_BITMASK ((0xFF))
157 #define RTC_AUX_RTC_OSCF ((1 << 4))
158 #if defined(CHIP_LPC177X_8X) || defined(CHIP_LPC407X_8X)
160 #define RTC_AUX_RTC_PDOUT ((1 << 6))
167 #define RTC_AUXEN_RTC_OSCFEN ((1 << 4))
172 #define RTC_CTIME0_SECONDS_MASK ((0x3F))
173 #define RTC_CTIME0_MINUTES_MASK ((0x3F00))
174 #define RTC_CTIME0_HOURS_MASK ((0x1F0000))
175 #define RTC_CTIME0_DOW_MASK ((0x7000000))
180 #define RTC_CTIME1_DOM_MASK ((0x1F))
181 #define RTC_CTIME1_MONTH_MASK ((0xF00))
182 #define RTC_CTIME1_YEAR_MASK ((0xFFF0000))
187 #define RTC_CTIME2_DOY_MASK ((0xFFF))
193 #define RTC_SEC_MASK (0x0000003F)
195 #define RTC_MIN_MASK (0x0000003F)
197 #define RTC_HOUR_MASK (0x0000001F)
199 #define RTC_DOM_MASK (0x0000001F)
201 #define RTC_DOW_MASK (0x00000007)
203 #define RTC_DOY_MASK (0x000001FF)
205 #define RTC_MONTH_MASK (0x0000000F)
207 #define RTC_YEAR_MASK (0x00000FFF)
209 #define RTC_SECOND_MAX 59
210 #define RTC_MINUTE_MAX 59
211 #define RTC_HOUR_MAX 23
212 #define RTC_MONTH_MIN 1
213 #define RTC_MONTH_MAX 12
214 #define RTC_DAYOFMONTH_MIN 1
215 #define RTC_DAYOFMONTH_MAX 31
216 #define RTC_DAYOFWEEK_MAX 6
217 #define RTC_DAYOFYEAR_MIN 1
218 #define RTC_DAYOFYEAR_MAX 366
219 #define RTC_YEAR_MAX 4095
225 #define RTC_CALIBRATION_CALVAL_MASK ((0x1FFFF))
227 #define RTC_CALIBRATION_LIBDIR ((1 << 17))
229 #define RTC_CALIBRATION_MAX ((0x20000))
231 #define RTC_CALIB_DIR_FORWARD ((uint8_t) (0))
232 #define RTC_CALIB_DIR_BACKWARD ((uint8_t) (1))
239 #define RTC_ERCTRL_BITMASK ((uint32_t) 0xC0F03C0F)
241 #define RTC_ERCTRL_INTWAKE_EN ((uint32_t) (1 << 0))
243 #define RTC_ERCTRL_GPCLEAR_EN ((uint32_t) (1 << 1))
245 #define RTC_ERCTRL_POL_NEGATIVE (0)
246 #define RTC_ERCTRL_POL_POSITIVE ((uint32_t) (1 << 2))
248 #define RTC_ERCTRL_INPUT_EN ((uint32_t) (1 << 3))
250 #define RTC_ERCTRL_CHANNEL_CONFIG_BITMASK(ch) ((uint32_t) (0x0F << (10 * ch)))
251 #define RTC_ERCTRL_CHANNEL_CONFIG(ch, flag) ((uint32_t) (flag << (10 * ch)))
254 #define RTC_ERCTRL_MODE_MASK (((uint32_t) 3) << 30)
255 #define RTC_ERCTRL_MODE_CLK_DISABLE (((uint32_t) 0) << 30)
256 #define RTC_ERCTRL_MODE_16HZ (((uint32_t) 1) << 30)
257 #define RTC_ERCTRL_MODE_64HZ (((uint32_t) 2) << 30)
258 #define RTC_ERCTRL_MODE_1KHZ (((uint32_t) 3) << 30)
259 #define RTC_ERCTRL_MODE(n) (((uint32_t) n) << 30)
265 #define RTC_ERSTATUS_CHANNEL_EV(ch) ((uint32_t) (1 << ch))
267 #define RTC_ERSTATUS_GPCLEARED ((uint32_t) (1 << 3))
269 #define RTC_ERSTATUS_WAKEUP ((uint32_t) (((uint32_t) 1) << 31))
275 #define RTC_ER_COUNTER(ch, n) ((uint32_t) ((n >> (8 * ch)) & 0x07))
280 #define RTC_ER_TIMESTAMP_SEC(n) ((uint32_t) (n & 0x3F))
281 #define RTC_ER_TIMESTAMP_MIN(n) ((uint32_t) ((n >> 6) & 0x3F))
282 #define RTC_ER_TIMESTAMP_HOUR(n) ((uint32_t) ((n >> 12) & 0x1F))
283 #define RTC_ER_TIMESTAMP_DOY(n) ((uint32_t) ((n >> 17) & 0x1FF))
288 typedef enum IP_RTC_EV_MODE {
289 RTC_EV_MODE_DISABLE = 0,
290 RTC_EV_MODE_ENABLE_16HZ = 1,
291 RTC_EV_MODE_ENABLE_64HZ = 2,
292 RTC_EV_MODE_ENABLE_1KHZ = 3,
304 } IP_RTC_EV_TIMESTAMP_T;
313 typedef enum IP_RTC_INT_OPT {
501 temp = pRTC->ERCONTROL & (~(RTC_ERCTRL_CHANNEL_CONFIG_BITMASK(ch))) & RTC_ERCTRL_BITMASK;
502 pRTC->ERCONTROL = temp | (RTC_ERCTRL_CHANNEL_CONFIG(ch, flag) & RTC_ERCTRL_BITMASK);
515 temp = pRTC->ERCONTROL & (~RTC_ERCTRL_MODE_MASK) & RTC_ERCTRL_BITMASK;
516 pRTC->ERCONTROL = temp | RTC_ERCTRL_MODE(mode);
526 return pRTC->ERSTATUS & (RTC_ERSTATUS_GPCLEARED | RTC_ERSTATUS_WAKEUP);
537 pRTC->ERSTATUS = flag & (RTC_ERSTATUS_GPCLEARED | RTC_ERSTATUS_WAKEUP);
548 return (pRTC->ERSTATUS & RTC_ERSTATUS_CHANNEL_EV(ch)) ?
SET :
RESET;
559 pRTC->ERSTATUS = RTC_ERSTATUS_CHANNEL_EV(ch);
570 return RTC_ER_COUNTER(ch, pRTC->ERCOUNTERS);
580 void IP_RTC_EV_GetFirstTimeStamp(
IP_RTC_001_T *pRTC, IP_RTC_EV_CHANNEL_T ch, IP_RTC_EV_TIMESTAMP_T *pTimeStamp);
589 void IP_RTC_EV_GetLastTimeStamp(
IP_RTC_001_T *pRTC, IP_RTC_EV_CHANNEL_T ch, IP_RTC_EV_TIMESTAMP_T *pTimeStamp);