22 #ifndef MCP7940_HAL_PLATFORM
32 #define MCP7940_HAL_PLATFORM avr0
35 #ifndef MCP7940_ADDRESS
45 #define MCP7940_ADDRESS 0x6F
48 #ifndef MCP7940_USE_EXTOSC
60 #define MCP7940_USE_EXTOSC
64 #ifndef MCP7940_BATTERY_BACKUP_EN
78 #define MCP7940_BATTERY_BACKUP_EN
83 #ifndef MCP7940_MFP_MODE
84 #define MCP7940_MFP_MODE_OUTPUT 0x00
85 #define MCP7940_MFP_MODE_SQUARE_WAVE 0x01
86 #define MCP7940_MFP_MODE_ALARM 0x02
101 #define MCP7940_MFP_MODE MCP7940_MFP_MODE_OUTPUT
104 #ifndef MCP7940_SQW_CRSTRIM_EN
118 #ifndef MCP7940_CRSTRIM_EN
119 #ifndef MCP7940_MFP_SQUARE_WAVE_PRESCALER
134 #define MCP7940_MFP_SQUARE_WAVE_PRESCALER MCP7940_SQWFS_1HZ
138 #ifndef MCP7940_MFP_ALARM_MODE
139 #define MCP7940_MFP_ALARM_MODE_ALM0 (MCP7940_ALM0EN_bm)
140 #define MCP7940_MFP_ALARM_MODE_ALM1 (MCP7940_ALM1EN_bm)
141 #define MCP7940_MFP_ALARM_MODE_BOTH (MCP7940_ALM1EN_bm | MCP7940_ALM0EN_bm)
156 #define MCP7940_MFP_ALARM_MODE MCP7940_MFP_ALARM_MODE_BOTH
159 #define MCP7940_MFP_ALARM_POLARITY_NORMAL 0x00
160 #define MCP7940_MFP_ALARM_POLARITY_INVERTED RTC_ALMPOL_bm
162 #ifndef MCP7940_MFP_ALARM1_POLARITY
176 #define MCP7940_MFP_ALARM1_POLARITY MCP7940_MFP_ALARM_POLARITY_NORMAL
179 #ifndef MCP7940_MFP_ALARM2_POLARITY
193 #define MCP7940_MFP_ALARM2_POLARITY MCP7940_MFP_ALARM_POLARITY_NORMAL
196 #ifndef MCP7940_IO_TIMEOUT_MS
205 #define MCP7940_IO_TIMEOUT_MS 1
208 #ifndef MCP7940_OSC_ENABLE_MS
219 #define MCP7940_OSC_ENABLE_MS 1000UL
222 #ifndef MCP7940_RTCSEC
229 #define MCP7940_RTCSEC 0x00
231 #define MCP7940_ST_bm 0x80
232 #define MCP7940_SECTEN_bm 0x70
233 #define MCP7940_SECTEN_bp 4
236 #ifndef MCP7940_RTCMIN
243 #define MCP7940_RTCMIN 0x01
245 #define MCP7940_MINTEN_bm 0x70
246 #define MCP7940_MINTEN_bp 4
249 #ifndef MCP7940_RTCHOUR
256 #define MCP7940_RTCHOUR 0x02
258 #define MCP7940_FORMAT_bm 0x40
259 #define MCP7940_HRTEN_bm 0x30
260 #define MCP7940_HRTEN_bp 4
263 #ifndef MCP7940_RTCWKDAY
270 #define MCP7940_RTCWKDAY 0x03
272 #define MCP7940_OSCRUN_bm 0x20
273 #define MCP7940_PWRFAIL_bm 0x10
274 #define MCP7940_VBATEN_bm 0x08
275 #define MCP7940_WKDAY_bp 0
278 #ifndef MCP7940_RTCDATE
285 #define MCP7940_RTCDATE 0x04
287 #define MCP7940_DATETEN_bm 0x30
288 #define MCP7940_DATETEN_bp 4
291 #ifndef MCP7940_RTCMTH
298 #define MCP7940_RTCMTH 0x05
300 #define MCP7940_LPYR_bm 0x20
301 #define MCP7940_MTHTEN_bm 0x10
302 #define MCP7940_LPYR_bp 5
303 #define MCP7940_MTHTEN_bp 4
306 #ifndef MCP7940_RTCYEAR
313 #define MCP7940_RTCYEAR 0x06
315 #define MCP7940_YRTEN_bm 0xF0
316 #define MCP7940_YRTEN_bp 4
319 #ifndef MCP7940_CONTROL
326 #define MCP7940_CONTROL 0x07
328 #define MCP7940_OUT_bm 0x80
329 #define MCP7940_SQWEN_bm 0x40
330 #define MCP7940_ALM1EN_bm 0x20
331 #define MCP7940_ALM0EN_bm 0x10
332 #define MCP7940_EXTOSC_bm 0x08
333 #define MCP7940_CSTRIM_bm 0x04
334 #define MCP7940_SQWFS1_bm 0x02
335 #define MCP7940_SQWFS0_bm 0x01
337 #define MCP7940_SQWFS_32768HZ (MCP7940_SQWFS1_bm | MCP7940_SQWFS0_bm)
338 #define MCP7940_SQWFS_8192HZ MCP7940_SQWFS1_bm
339 #define MCP7940_SQWFS_4096HZ MCP7940_SQWFS0_bm
340 #define MCP7940_SQWFS_1HZ 0x00
343 #ifndef MCP7940_OSCTRIM
350 #define MCP7940_OSCTRIM 0x08
352 #define MCP7940_SIGN_bm 0x80
357 #ifndef MCP7940_WEEKDAY_bp
358 #define MCP7940_WEEKDAY_MONDAY_gc 0x00
359 #define MCP7940_WEEKDAY_TUESDAY_gc 0x01
360 #define MCP7940_WEEKDAY_WEDNESDAY_gc 0x02
361 #define MCP7940_WEEKDAY_THURSDAY_gc 0x03
362 #define MCP7940_WEEKDAY_FRIDAY_gc 0x04
363 #define MCP7940_WEEKDAY_SATURDAY_gc 0x05
364 #define MCP7940_WEEKDAY_SUNDAY_gc 0x06
367 #if !defined(MCP7940_ALM0SEC) && !defined(MCP7940_ALM1SEC)
368 #define MCP7940_ALM_SECTEN_bp 4
369 #define MCP7940_ALM_SECONE_bp 0
377 #define MCP7940_ALM0SEC 0x0A
385 #define MCP7940_ALM1SEC 0x11
388 #if !defined(MCP7940_ALM0MIN) && !defined(MCP7940_ALM1MIN)
389 #define MCP7940_ALM_MINTEN_bp 4
390 #define MCP7940_ALM_MINONE_bp 0
398 #define MCP7940_ALM0MIN 0x0B
406 #define MCP7940_ALM1MIN 0x12
409 #if !defined(MCP7940_ALM0HOUR) && !defined(MCP7940_ALM1HOUR)
410 #define MCP7940_ALM_FORMAT_bm 0x40
411 #define MCP7940_ALM_HRTEN_bp 4
412 #define MCP7940_ALM_HRONE_bp 0
420 #define MCP7940_ALM0HOUR 0x0C
428 #define MCP7940_ALM1HOUR 0x13
431 #if !defined(MCP7940_ALM0WKDAY) && !defined(MCP7940_ALM1WKDAY)
432 #define MCP7940_ALARM_ALMPOL_bm 0x80
433 #define MCP7940_ALARM_ALMMSK2_bm 0x40
434 #define MCP7940_ALARM_ALMMSK1_bm 0x20
435 #define MCP7940_ALARM_ALMMSK0_bm 0x10
436 #define MCP7940_ALARM_ALMIF_bm 0x08
438 #define MCP7940_ALARM_WKDAY_bp 0
440 #define MCP7940_ALARM_ALMMSK_bp 4
442 #define MCP7940_ALARM_SECOND_MATCH_gc (0x00<<MCP7940_ALARM_ALMMSK_bp)
443 #define MCP7940_ALARM_MINUTE_MATCH (0x01<<MCP7940_ALARM_ALMMSK_bp)
444 #define MCP7940_ALARM_HOUR_MATCH (0x02<<MCP7940_ALARM_ALMMSK_bp)
445 #define MCP7940_ALARM_DAY_MATCH (0x03<<MCP7940_ALARM_ALMMSK_bp)
446 #define MCP7940_ALARM_DATE_MATCH (0x04<<MCP7940_ALARM_ALMMSK_bp)
447 #define MCP7940_ALARM_FULL_MATCH (0x07<<MCP7940_ALARM_ALMMSK_bp)
455 #define MCP7940_ALM0WKDAY 0x0D
463 #define MCP7940_ALM1WKDAY 0x14
466 #if !defined(MCP7940_ALM0DATE) && !defined(MCP7940_ALM1DATE)
467 #define MCP7940_ALM_DATETEN_bp 4
468 #define MCP7940_ALM_DATEONE_bp 0
476 #define MCP7940_ALM0DATE 0x0E
484 #define MCP7940_ALM1DATE 0x15
487 #if !defined(MCP7940_ALM0MTH) && !defined(MCP7940_ALM1MTH)
488 #define MCP7940_ALM_MTHTEN_bp 4
489 #define MCP7940_ALM_MTHONE_bp 0
497 #define MCP7940_ALM0MTH 0x0F
507 #define MCP7940_ALM1MTH 0x16
512 #if !defined(MCP7940_PWRDNMIN) && !defined(MCP7940_PWRUPMIN)
519 #define MCP7940_PWRDNMIN 0x18
527 #define MCP7940_PWRUPMIN 0x1C
530 #if !defined(MCP7940_PWRDNHOUR) && !defined(MCP7940_PWRUPHOUR)
537 #define MCP7940_PWRDNHOUR 0x19
545 #define MCP7940_PWRUPHOUR 0x1D
548 #if !defined(MCP7940_PWRDNDATE) && !defined(MCP7940_PWRUPDATE)
555 #define MCP7940_PWRDNDATE 0x1A
563 #define MCP7940_PWRUPDATE 0x1E
566 #if !defined(MCP7940_PWRDNMTH) && !defined(MCP7940_PWRUPMTH)
567 #define MCP7940_PWRWEEKDAY_bp 5
575 #define MCP7940_PWRDNMTH 0x1B
583 #define MCP7940_PWRUPMTH 0x1F
592 #include _STR(../../../hal/MCP7940_HAL_PLATFORM/twi/twi.h)
713 #if MCP7940_MFP_MODE == MCP7940_MFP_MODE_OUTPUT
MCP7940_Error mcp7940_trimming(MCP7940_Trim mode, unsigned char value)
Configures the MCP7940 oscillator trimming value and verifies the write.
Definition mcp7940.c:157
MCP7940_Trim_t
Selects the trim direction for MCP7940 oscillator calibration.
Definition mcp7940.h:659
@ MCP7940_Trim_Add
Definition mcp7940.h:661
@ MCP7940_Trim_Substract
Definition mcp7940.h:660
enum MCP7940_Trim_t MCP7940_Trim
Alias for enum MCP7940_Trim_t representing MCP7940 trim direction selection.
Definition mcp7940.h:667
MCP7940_LeapYear mcp7940_leapyear(void)
Returns the current leap year status from the MCP7940 device.
Definition mcp7940.c:450
enum MCP7940_Error_t MCP7940_Error
Alias for enum MCP7940_Error_t representing MCP7940 driver error codes.
Definition mcp7940.h:631
enum MCP7940_LeapYear_t MCP7940_LeapYear
Alias for enum MCP7940_LeapYear_t representing MCP7940 leap year status.
Definition mcp7940.h:685
enum MCP7940_Mode_t MCP7940_Mode
Alias for enum MCP7940_Mode_t representing MCP7940 enable/disable modes.
Definition mcp7940.h:649
MCP7940_Status mcp7940_status(void)
Reads and returns the current MCP7940 status flags from the weekday register.
Definition mcp7940.c:221
MCP7940_LeapYear_t
Indicates whether the MCP7940 calendar year is a leap year.
Definition mcp7940.h:677
@ MCP7940_LeapYear_True
Definition mcp7940.h:679
@ MCP7940_LeapYear_False
Definition mcp7940.h:678
MCP7940_Error mcp7940_setdate(const FORMAT_Date *date)
Sets the current calendar date of the MCP7940 RTC from a FORMAT_Date structure.
Definition mcp7940.c:550
MCP7940_Mode_t
Selects enabled or disabled mode for MCP7940 features.
Definition mcp7940.h:641
@ MCP7940_Mode_Enable
Definition mcp7940.h:643
@ MCP7940_Mode_Disable
Definition mcp7940.h:642
enum MCP7940_Register_t MCP7940_Register
Alias for enum MCP7940_Register_t representing MCP7940 register block selections.
Definition mcp7940.h:705
MCP7940_Register_t
Selects MCP7940 time-stamp register blocks for access operations.
Definition mcp7940.h:695
@ MCP7940_Register_Power_Down_Time
Definition mcp7940.h:697
@ MCP7940_Register_Power_Up_Time
Definition mcp7940.h:698
@ MCP7940_Register_Current_Time
Definition mcp7940.h:696
MCP7940_Error mcp7940_settime(const FORMAT_Time *time)
Sets the current time of the MCP7940 RTC from a FORMAT_Time structure.
Definition mcp7940.c:519
void mcp7940_init(void)
Initializes the MCP7940 RTC with battery backup, MFP mode, and oscillator settings.
Definition mcp7940.c:112
MCP7940_Error mcp7940_setweekday(unsigned char weekday)
Sets the MCP7940 weekday field in the RTCWKDAY register.
Definition mcp7940.c:473
unsigned char mcp7940_weekday(MCP7940_Register data)
Reads the weekday value from the MCP7940 for the selected timestamp register set.
Definition mcp7940.c:306
MCP7940_Error mcp7940_setdatetime(const FORMAT_DateTime *datetime)
Sets the current MCP7940 date and time from a FORMAT_DateTime structure.
Definition mcp7940.c:580
void mcp7940_time(FORMAT_Time *time, MCP7940_Register reg)
Reads hour, minute, and second fields from the MCP7940 into a FORMAT_Time structure.
Definition mcp7940.c:378
void mcp7940_datetime(FORMAT_DateTime *datetime, MCP7940_Register reg)
Reads both time and date from the MCP7940 into a FORMAT_DateTime structure.
Definition mcp7940.c:434
#define MCP7940_OSCRUN_bm
Definition mcp7940.h:272
MCP7940_Error_t
Represents error conditions reported by the MCP7940 driver.
Definition mcp7940.h:623
@ MCP7940_Error_None
Definition mcp7940.h:624
@ MCP7940_Error_Fail
Definition mcp7940.h:625
#define MCP7940_VBATEN_bm
Definition mcp7940.h:274
#define MCP7940_PWRFAIL_bm
Definition mcp7940.h:273
void mcp7940_date(FORMAT_Date *date, MCP7940_Register reg)
Reads day, month, and year fields from the MCP7940 into a FORMAT_Date structure.
Definition mcp7940.c:408
enum MCP7940_Status_t MCP7940_Status
Alias for enum MCP7940_Status_t representing MCP7940 RTC status flags.
Definition mcp7940.h:613
const char * mcp7940_weekday_string(unsigned char day)
Returns a three-letter weekday abbreviation for a given day value.
Definition mcp7940.c:52
void mcp7940_mfp_output(MCP7940_Mode output)
Controls the MCP7940 MFP pin when configured as a general-purpose output.
Definition mcp7940.c:237
MCP7940_Status_t
Represents status and configuration flags of the MCP7940 RTC.
Definition mcp7940.h:602
@ MCP7940_Status_Battery_Enabled
Definition mcp7940.h:604
@ MCP7940_Status_None
Definition mcp7940.h:603
@ MCP7940_Status_Power_Fail
Definition mcp7940.h:605
@ MCP7940_Status_Oscillator_Running
Definition mcp7940.h:606
void mcp7940_oscillator(MCP7940_Mode mode)
Enables or disables the MCP7940 RTC oscillator or external clock input.
Definition mcp7940.c:185
Helper macros for stringification in C preprocessor.
Header file with declarations and macros for systick utility.
Time and date format structures for embedded applications.
struct FORMAT_DateTime_t FORMAT_DateTime
Alias for struct FORMAT_DateTime_t representing a combined date-time value.
Definition time.h:92
struct FORMAT_Time_t FORMAT_Time
Alias for struct FORMAT_Time_t representing a formatted time of day.
Definition time.h:45
struct FORMAT_Date_t FORMAT_Date
Alias for struct FORMAT_Date_t representing a formatted calendar date.
Definition time.h:69