Trident IoT SDK
 
Loading...
Searching...
No Matches
T32CM11_rtc.h
Go to the documentation of this file.
1
43
44
45#ifndef T32CM11_RTC_H_
46#define T32CM11_RTC_H_
47
48#include "tr_hal_platform.h"
49
50
56
57
61#define TR_HAL_RTC_YEAR_MINIMUM 2000
62#define TR_HAL_RTC_YEAR_MAXIMUM 2099
63
64#define TR_HAL_RTC_MONTH_MINIMUM 1
65#define TR_HAL_RTC_MONTH_MAXIMUM 12
66
67#define TR_HAL_RTC_DAY_MINIMUM 1
68#define TR_HAL_RTC_DAY_MAXIMUM 31
69
70#define TR_HAL_RTC_SHORT_MONTH_DAY_MAXIMUM 30
71#define TR_HAL_RTC_FEB_DAY_MAXIMUM 28
72#define TR_HAL_RTC_FEB_LEAP_YEAR_DAY_MAXIMUM 29
73
74#define TR_HAL_RTC_HOUR_MINIMUM 0
75#define TR_HAL_RTC_HOUR_MAXIMUM 23
76
77#define TR_HAL_RTC_MINUTE_MINIMUM 0
78#define TR_HAL_RTC_MINUTE_MAXIMUM 59
79
80#define TR_HAL_RTC_SECOND_MINIMUM 0
81#define TR_HAL_RTC_SECOND_MAXIMUM 59
82
83
87#define TR_HAL_MONTH_JANUARY 1
88#define TR_HAL_MONTH_FEBRUARY 2
89#define TR_HAL_MONTH_MARCH 3
90#define TR_HAL_MONTH_APRIL 4
91#define TR_HAL_MONTH_MAY 5
92#define TR_HAL_MONTH_JUNE 6
93#define TR_HAL_MONTH_JULY 7
94#define TR_HAL_MONTH_AUGUST 8
95#define TR_HAL_MONTH_SEPTEMBER 9
96#define TR_HAL_MONTH_OCTOBER 10
97#define TR_HAL_MONTH_NOVEMBER 11
98#define TR_HAL_MONTH_DECEMBER 12
99
100
104
105// date
106typedef struct
107{
108 // 4 digit year and must be >= 2000
109 uint16_t years;
110
111 // 1-12
112 uint8_t months;
113
114 // 1-31, depends on month
115 uint8_t days;
116
118
119// time
120typedef struct
121{
122 // range 0-23
123 uint8_t hours;
124
125 // range 0-59
126 uint8_t minutes;
127
128 // range 0-59
129 uint8_t seconds;
130
132
133// date and time
140
141
148#define TR_HAL_INVALID_DATE_TIME_VALUE 255
149
150
166
167
183
184
194#define CHIP_MEMORY_MAP_RTC_BASE (0x40600000UL)
195
196
200typedef struct
201{
202 // register values for seconds, minutes, hours, days, months, years
203 // note that these must be written and read in BCD
204 __IO uint32_t seconds_value; // 0x00
205 __IO uint32_t minutes_value; // 0x04
206 __IO uint32_t hours_value; // 0x08
207 __IO uint32_t days_value; // 0x0C
208 __IO uint32_t months_value; // 0x10
209 __IO uint32_t years_value; // 0x14
210
211 // used for testing (can speed up rate) and to clear counters and values
212 __IO uint32_t control; // 0x18
213
214 // Clock Divisor for generating a 1Hz enable pulse to the seconds counter
215 __IO uint32_t clock_divisor; // 0x1C
216
217 // what trigger to use for each time unit: off, on_change, on_value, combo
218 // these registers also hold the trigger value if in on_value mode
219 __IO uint32_t seconds_event_trigger; // 0x20
220 __IO uint32_t minutes_event_trigger; // 0x24
221 __IO uint32_t hours_event_trigger; // 0x28
222 __IO uint32_t days_event_trigger; // 0x2C
223 __IO uint32_t months_event_trigger; // 0x30
224 __IO uint32_t years_event_trigger; // 0x34
225
226 // interrupts
227 __IO uint32_t interrupt_enable; // 0x38
228 __IO uint32_t interrupt_status; // 0x3C
229 __IO uint32_t interrupt_clear; // 0x40
230
231 // once clock divisior, event trigger values, or time values have been updated,
232 // this register allows them to be "loaded" == become active
233 __IO uint32_t load; // 0x44
234
236
237
238// *****************************************************************
239// this enum helps when dealing with the CONTROL REGISTER (0x18)
250
251
252// *****************************************************************
253// these defines help when dealing with the CLOCK DIVISIOR REGISTER (0x1C)
254// we expect a 32 KHz clock
255#define TR_HAL_DEFAULT_CLOCK_DIVISOR 39999
256
257
258// *****************************************************************
259// these defines help when dealing with the EVENT TRIGGER REGISTERs (0x20 - 0x34)
260#define TR_HAL_REG_SETTING_EVENT_OFF 0x0000
261#define TR_HAL_REG_SETTING_EVENT_ON_CHANGE 0x0100
262#define TR_HAL_REG_SETTING_EVENT_ON_VALUE 0x0000
263#define TR_HAL_REG_SETTING_COMBO_EVENT 0x0200
264
265
266// *****************************************************************
267// these defines help when dealing with the INTERRUPT ENABLE REGISTER (0x38),
268// the INTERRUPT STATUS REGISTER (0x3C) and the INTERRUPT CLEAR REGISTER (0x40)
269#define TR_HAL_RTC_INTERRUPT_NONE 0x00
270#define TR_HAL_RTC_INTERRUPT_SECONDS 0x01
271#define TR_HAL_RTC_INTERRUPT_MINUTES 0x02
272#define TR_HAL_RTC_INTERRUPT_HOURS 0x04
273#define TR_HAL_RTC_INTERRUPT_DAYS 0x08
274#define TR_HAL_RTC_INTERRUPT_MONTHS 0x10
275#define TR_HAL_RTC_INTERRUPT_YEARS 0x20
276#define TR_HAL_RTC_INTERRUPT_COMBINED_EVENT 0x40
277#define TR_HAL_RTC_INTERRUPT_ALL 0x7F
278
279
280// *****************************************************************
281// these defines help when dealing with the LOAD REGISTER (0x44)
282#define TR_HAL_RTC_UPDATE_TIME_VALUES 0x01
283#define TR_HAL_RTC_UPDATE_EVENT_TRIGGER 0x02
284#define TR_HAL_RTC_UPDATE_CLOCK_DIVISOR 0x04
285
286
287// *****************************************************************
288// this orients the RTC_REGISTERS struct with the correct address
289// so referencing a field will now read/write the correct RTC
290// register chip address
291#define RTC_REGISTERS ((RTC_REGISTERS_T *) CHIP_MEMORY_MAP_RTC_BASE)
292
293
299
300
304typedef void (*tr_hal_rtc_event_callback_t) (uint32_t event_bitmask,
305 tr_hal_rtc_date_time current_date_time);
306
307
313#define TR_HAL_RTC_EVENT_TRIGGERED_SECONDS 0x00000001
314#define TR_HAL_RTC_EVENT_TRIGGERED_MINUTES 0x00000002
315#define TR_HAL_RTC_EVENT_TRIGGERED_HOURS 0x00000004
316#define TR_HAL_RTC_EVENT_TRIGGERED_DAYS 0x00000008
317#define TR_HAL_RTC_EVENT_TRIGGERED_MONTHS 0x00000010
318#define TR_HAL_RTC_EVENT_TRIGGERED_YEARS 0x00000020
319#define TR_HAL_RTC_EVENT_TRIGGERED_COMBINED_EVENT 0x00000040
320
321
326typedef struct
327{
328 // **** date, time, and clock divisor ****
329
331
333
334
335 // **** event callback from HAL to App when an event happens ****
336 // if the app doesn't want this, then set it to NULL
338
339
340 // **** chip behavior settings ****
341
342 // are the chip interrupts enabled?
344
345 // set the INT priority
347
348 // when the device is sleeping, we can choose to DISABLE interrupts,
349 // or leave them enabled which would allow the device to wake on
350 // an interrupt from this peripheral
352
353
354 // **** time unit events ****
355
368
369
370 // **** combo event ****
371
374
376
377
386#define DEFAULT_RTC_CONFIG \
387 { \
388 .rtc_date_time.time.seconds = 0, \
389 .rtc_date_time.time.minutes = 0, \
390 .rtc_date_time.time.hours = 0, \
391 .rtc_date_time.date.days = 1, \
392 .rtc_date_time.date.months = 1, \
393 .rtc_date_time.date.years = 2025, \
394 .clock_divisor = TR_HAL_DEFAULT_CLOCK_DIVISOR, \
395 .event_handler_fx = NULL, \
396 .enable_chip_interrupts = true, \
397 .interrupt_priority = TR_HAL_INTERRUPT_PRIORITY_5, \
398 .wake_on_interrupt = false, \
399 .seconds_event_trigger = TR_HAL_EVENT_TRIGGER_OFF, \
400 .minutes_event_trigger = TR_HAL_EVENT_TRIGGER_OFF, \
401 .hours_event_trigger = TR_HAL_EVENT_TRIGGER_OFF, \
402 .days_event_trigger = TR_HAL_EVENT_TRIGGER_OFF, \
403 .months_event_trigger = TR_HAL_EVENT_TRIGGER_OFF, \
404 .years_event_trigger = TR_HAL_EVENT_TRIGGER_OFF, \
405 .combo_event_enabled = false, \
406 }
407
408
409// this API causes the time unit specified to speed up to change once per second
410// this is useful for testing
412
413// expose these so they can be fully tested
414uint32_t convert_bcd_to_int(uint32_t register_value);
415uint32_t convert_int_to_bcd(uint32_t int_value);
416
417
421
422
423#endif // T32CM11_RTC_H_
This file contains the CHIP SPECIFIC types and defines for the T32CM11.
tr_hal_int_pri_t
values and a range checking function for setting the interrupt priority in the Trident HAL APIs
Definition tr_hal_platform.h:34
tr_hal_status_t
Definition tr_hal_common.h:25
uint32_t convert_int_to_bcd(uint32_t int_value)
void(* tr_hal_rtc_event_callback_t)(uint32_t event_bitmask, tr_hal_rtc_date_time current_date_time)
Definition T32CM11_rtc.h:304
tr_hal_rtc_speedup_unit_t
Definition T32CM11_rtc.h:241
tr_hal_rtc_event_trigger_t
this enum is the trigger setting for time unit events OFF = not enabled ON_CHANGE = whenever the time...
Definition T32CM11_rtc.h:176
uint32_t convert_bcd_to_int(uint32_t register_value)
RTC_REGISTERS_T * tr_hal_rtc_get_register_address(void)
tr_hal_rtc_time_unit_t
this enum is used when we set up a time unit event, to tell which units we are using
Definition T32CM11_rtc.h:156
tr_hal_status_t tr_hal_rtc_speedup_for_testing(tr_hal_rtc_speedup_unit_t speedup_unit)
@ TR_HAL_RTC_SPEEDUP_YEARS
Definition T32CM11_rtc.h:247
@ TR_HAL_RTC_SPEEDUP_MINUTES
Definition T32CM11_rtc.h:243
@ TR_HAL_RTC_SPEEDUP_NONE
Definition T32CM11_rtc.h:242
@ TR_HAL_RTC_SPEEDUP_HOURS
Definition T32CM11_rtc.h:244
@ TR_HAL_RTC_SPEEDUP_DAYS
Definition T32CM11_rtc.h:245
@ TR_HAL_RTC_SPEEDUP_MONTHS
Definition T32CM11_rtc.h:246
@ TR_HAL_EVENT_TRIGGER_OFF
Definition T32CM11_rtc.h:177
@ TR_HAL_EVENT_TRIGGER_INVALID
Definition T32CM11_rtc.h:180
@ TR_HAL_EVENT_TRIGGER_ON_SPECIFIC_VALUE
Definition T32CM11_rtc.h:179
@ TR_HAL_EVENT_TRIGGER_ON_UNIT_CHANGE
Definition T32CM11_rtc.h:178
@ TR_HAL_RTC_TIME_UNIT_MONTHS
Definition T32CM11_rtc.h:161
@ TR_HAL_RTC_TIME_UNIT_MINUTES
Definition T32CM11_rtc.h:158
@ TR_HAL_RTC_TIME_UNIT_INVALID
Definition T32CM11_rtc.h:163
@ TR_HAL_RTC_TIME_UNIT_YEARS
Definition T32CM11_rtc.h:162
@ TR_HAL_RTC_TIME_UNIT_DAYS
Definition T32CM11_rtc.h:160
@ TR_HAL_RTC_TIME_UNIT_SECONDS
Definition T32CM11_rtc.h:157
@ TR_HAL_RTC_TIME_UNIT_HOURS
Definition T32CM11_rtc.h:159
tr_hal_rtc_event_trigger_t
this enum is the trigger setting for time unit events OFF = not enabled ON_CHANGE = whenever the time...
Definition T32CZ20_rtc.h:183
the struct we use so we can address registers using field names
Definition T32CM11_rtc.h:201
__IO uint32_t years_value
Definition T32CM11_rtc.h:209
__IO uint32_t interrupt_status
Definition T32CM11_rtc.h:228
__IO uint32_t days_value
Definition T32CM11_rtc.h:207
__IO uint32_t months_value
Definition T32CM11_rtc.h:208
__IO uint32_t interrupt_clear
Definition T32CM11_rtc.h:229
__IO uint32_t seconds_event_trigger
Definition T32CM11_rtc.h:219
__IO uint32_t minutes_value
Definition T32CM11_rtc.h:205
__IO uint32_t hours_value
Definition T32CM11_rtc.h:206
__IO uint32_t clock_divisor
Definition T32CM11_rtc.h:215
__IO uint32_t control
Definition T32CM11_rtc.h:212
__IO uint32_t years_event_trigger
Definition T32CM11_rtc.h:224
__IO uint32_t days_event_trigger
Definition T32CM11_rtc.h:222
__IO uint32_t interrupt_enable
Definition T32CM11_rtc.h:227
__IO uint32_t minutes_event_trigger
Definition T32CM11_rtc.h:220
__IO uint32_t hours_event_trigger
Definition T32CM11_rtc.h:221
__IO uint32_t load
Definition T32CM11_rtc.h:233
__IO uint32_t seconds_value
Definition T32CM11_rtc.h:204
__IO uint32_t months_event_trigger
Definition T32CM11_rtc.h:223
Definition T32CM11_rtc.h:135
tr_hal_rtc_time time
Definition T32CM11_rtc.h:137
tr_hal_rtc_date date
Definition T32CM11_rtc.h:136
convenience structs for use when passing around dates, times, or both
Definition T32CM11_rtc.h:107
uint16_t years
Definition T32CM11_rtc.h:109
uint8_t months
Definition T32CM11_rtc.h:112
uint8_t days
Definition T32CM11_rtc.h:115
Definition T32CM11_rtc.h:327
uint8_t minutes_trigger_value
Definition T32CM11_rtc.h:359
tr_hal_int_pri_t interrupt_priority
Definition T32CM11_rtc.h:346
uint32_t clock_divisor
Definition T32CM11_rtc.h:332
uint8_t hours_trigger_value
Definition T32CM11_rtc.h:361
bool enable_chip_interrupts
Definition T32CM11_rtc.h:343
bool combo_event_enabled
Definition T32CM11_rtc.h:372
tr_hal_rtc_date_time rtc_date_time
Definition T32CM11_rtc.h:330
uint8_t seconds_trigger_value
Definition T32CM11_rtc.h:357
tr_hal_rtc_date_time combo_event_trigger_date_time
Definition T32CM11_rtc.h:373
tr_hal_rtc_event_callback_t event_handler_fx
Definition T32CM11_rtc.h:337
tr_hal_rtc_event_trigger_t months_event_trigger
Definition T32CM11_rtc.h:364
uint8_t months_trigger_value
Definition T32CM11_rtc.h:365
uint8_t days_trigger_value
Definition T32CM11_rtc.h:363
tr_hal_rtc_event_trigger_t seconds_event_trigger
Definition T32CM11_rtc.h:356
bool wake_on_interrupt
Definition T32CM11_rtc.h:351
tr_hal_rtc_event_trigger_t minutes_event_trigger
Definition T32CM11_rtc.h:358
tr_hal_rtc_event_trigger_t hours_event_trigger
Definition T32CM11_rtc.h:360
uint16_t years_trigger_value
Definition T32CM11_rtc.h:367
tr_hal_rtc_event_trigger_t years_event_trigger
Definition T32CM11_rtc.h:366
tr_hal_rtc_event_trigger_t days_event_trigger
Definition T32CM11_rtc.h:362
Definition T32CM11_rtc.h:121
uint8_t hours
Definition T32CM11_rtc.h:123
uint8_t minutes
Definition T32CM11_rtc.h:126
uint8_t seconds
Definition T32CM11_rtc.h:129