mcp7940 1.0
mcp7940 driver library
Loading...
Searching...
No Matches
mcp7940.h
Go to the documentation of this file.
1
18
19#ifndef MCP7940_H_
20#define MCP7940_H_
21
22 #ifndef MCP7940_HAL_PLATFORM
32 #define MCP7940_HAL_PLATFORM avr0
33 #endif
34
35 #ifndef MCP7940_ADDRESS
45 #define MCP7940_ADDRESS 0x6F
46 #endif
47
48 #ifndef MCP7940_USE_EXTOSC
57 //#define MCP7940_USE_EXTOSC
58
59 #ifdef _DOXYGEN_ // Used for documentation, can be ignored
60 #define MCP7940_USE_EXTOSC
61 #endif
62 #endif
63
64 #ifndef MCP7940_BATTERY_BACKUP_EN
75 //#define MCP7940_BATTERY_BACKUP_EN
76
77 #ifdef _DOXYGEN_ // Used for documentation, can be ignored
78 #define MCP7940_BATTERY_BACKUP_EN
79 #endif
80 #endif
81
82
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
87
101 #define MCP7940_MFP_MODE MCP7940_MFP_MODE_OUTPUT
102 #endif
103
104 #ifndef MCP7940_SQW_CRSTRIM_EN
115 //#define MCP7940_SQW_CRSTRIM_EN
116 #endif
117
118 #ifndef MCP7940_CRSTRIM_EN
119 #ifndef MCP7940_MFP_SQUARE_WAVE_PRESCALER
134 #define MCP7940_MFP_SQUARE_WAVE_PRESCALER MCP7940_SQWFS_1HZ
135 #endif
136 #endif
137
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)
142
156 #define MCP7940_MFP_ALARM_MODE MCP7940_MFP_ALARM_MODE_BOTH
157 #endif
158
159 #define MCP7940_MFP_ALARM_POLARITY_NORMAL 0x00
160 #define MCP7940_MFP_ALARM_POLARITY_INVERTED RTC_ALMPOL_bm
161
162 #ifndef MCP7940_MFP_ALARM1_POLARITY
163
176 #define MCP7940_MFP_ALARM1_POLARITY MCP7940_MFP_ALARM_POLARITY_NORMAL
177 #endif
178
179 #ifndef MCP7940_MFP_ALARM2_POLARITY
180
193 #define MCP7940_MFP_ALARM2_POLARITY MCP7940_MFP_ALARM_POLARITY_NORMAL
194 #endif
195
196 #ifndef MCP7940_IO_TIMEOUT_MS
205 #define MCP7940_IO_TIMEOUT_MS 1
206 #endif
207
208 #ifndef MCP7940_OSC_ENABLE_MS
219 #define MCP7940_OSC_ENABLE_MS 1000UL
220 #endif
221
222 #ifndef MCP7940_RTCSEC
229 #define MCP7940_RTCSEC 0x00
230
231 #define MCP7940_ST_bm 0x80
232 #define MCP7940_SECTEN_bm 0x70
233 #define MCP7940_SECTEN_bp 4
234 #endif
235
236 #ifndef MCP7940_RTCMIN
243 #define MCP7940_RTCMIN 0x01
244
245 #define MCP7940_MINTEN_bm 0x70
246 #define MCP7940_MINTEN_bp 4
247 #endif
248
249 #ifndef MCP7940_RTCHOUR
256 #define MCP7940_RTCHOUR 0x02
257
258 #define MCP7940_FORMAT_bm 0x40
259 #define MCP7940_HRTEN_bm 0x30
260 #define MCP7940_HRTEN_bp 4
261 #endif
262
263 #ifndef MCP7940_RTCWKDAY
270 #define MCP7940_RTCWKDAY 0x03
271
272 #define MCP7940_OSCRUN_bm 0x20
273 #define MCP7940_PWRFAIL_bm 0x10
274 #define MCP7940_VBATEN_bm 0x08
275 #define MCP7940_WKDAY_bp 0
276 #endif
277
278 #ifndef MCP7940_RTCDATE
285 #define MCP7940_RTCDATE 0x04
286
287 #define MCP7940_DATETEN_bm 0x30
288 #define MCP7940_DATETEN_bp 4
289 #endif
290
291 #ifndef MCP7940_RTCMTH
298 #define MCP7940_RTCMTH 0x05
299
300 #define MCP7940_LPYR_bm 0x20
301 #define MCP7940_MTHTEN_bm 0x10
302 #define MCP7940_LPYR_bp 5
303 #define MCP7940_MTHTEN_bp 4
304 #endif
305
306 #ifndef MCP7940_RTCYEAR
313 #define MCP7940_RTCYEAR 0x06
314
315 #define MCP7940_YRTEN_bm 0xF0
316 #define MCP7940_YRTEN_bp 4
317 #endif
318
319 #ifndef MCP7940_CONTROL
326 #define MCP7940_CONTROL 0x07
327
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
336
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
341 #endif
342
343 #ifndef MCP7940_OSCTRIM
350 #define MCP7940_OSCTRIM 0x08
351
352 #define MCP7940_SIGN_bm 0x80
353 #endif
354
355 // #############################################
356
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
365 #endif
366
367 #if !defined(MCP7940_ALM0SEC) && !defined(MCP7940_ALM1SEC)
368 #define MCP7940_ALM_SECTEN_bp 4
369 #define MCP7940_ALM_SECONE_bp 0
370
377 #define MCP7940_ALM0SEC 0x0A
378
385 #define MCP7940_ALM1SEC 0x11
386 #endif
387
388 #if !defined(MCP7940_ALM0MIN) && !defined(MCP7940_ALM1MIN)
389 #define MCP7940_ALM_MINTEN_bp 4
390 #define MCP7940_ALM_MINONE_bp 0
391
398 #define MCP7940_ALM0MIN 0x0B
399
406 #define MCP7940_ALM1MIN 0x12
407 #endif
408
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
413
420 #define MCP7940_ALM0HOUR 0x0C
421
428 #define MCP7940_ALM1HOUR 0x13
429 #endif
430
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
437
438 #define MCP7940_ALARM_WKDAY_bp 0
439
440 #define MCP7940_ALARM_ALMMSK_bp 4
441
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)
448
455 #define MCP7940_ALM0WKDAY 0x0D
456
463 #define MCP7940_ALM1WKDAY 0x14
464 #endif
465
466 #if !defined(MCP7940_ALM0DATE) && !defined(MCP7940_ALM1DATE)
467 #define MCP7940_ALM_DATETEN_bp 4
468 #define MCP7940_ALM_DATEONE_bp 0
469
476 #define MCP7940_ALM0DATE 0x0E
477
484 #define MCP7940_ALM1DATE 0x15
485 #endif
486
487 #if !defined(MCP7940_ALM0MTH) && !defined(MCP7940_ALM1MTH)
488 #define MCP7940_ALM_MTHTEN_bp 4
489 #define MCP7940_ALM_MTHONE_bp 0
490
497 #define MCP7940_ALM0MTH 0x0F
498
507 #define MCP7940_ALM1MTH 0x16
508 #endif
509
510 // #############################################
511
512 #if !defined(MCP7940_PWRDNMIN) && !defined(MCP7940_PWRUPMIN)
519 #define MCP7940_PWRDNMIN 0x18
520
527 #define MCP7940_PWRUPMIN 0x1C
528 #endif
529
530 #if !defined(MCP7940_PWRDNHOUR) && !defined(MCP7940_PWRUPHOUR)
537 #define MCP7940_PWRDNHOUR 0x19
538
545 #define MCP7940_PWRUPHOUR 0x1D
546 #endif
547
548 #if !defined(MCP7940_PWRDNDATE) && !defined(MCP7940_PWRUPDATE)
555 #define MCP7940_PWRDNDATE 0x1A
556
563 #define MCP7940_PWRUPDATE 0x1E
564 #endif
565
566 #if !defined(MCP7940_PWRDNMTH) && !defined(MCP7940_PWRUPMTH)
567 #define MCP7940_PWRWEEKDAY_bp 5
568
575 #define MCP7940_PWRDNMTH 0x1B
576
583 #define MCP7940_PWRUPMTH 0x1F
584 #endif
585
587
591
592 #include _STR(../../../hal/MCP7940_HAL_PLATFORM/twi/twi.h)
593
608
614
627
632
645
650
663
668
681
686
700
706
707
708 void mcp7940_init(void);
709 MCP7940_Error mcp7940_trimming(MCP7940_Trim mode, unsigned char value);
712
713 #if MCP7940_MFP_MODE == MCP7940_MFP_MODE_OUTPUT
714 void mcp7940_mfp_output(MCP7940_Mode output);
715 #endif
716
717 const char* mcp7940_weekday_string(unsigned char day);
718 unsigned char mcp7940_weekday(MCP7940_Register data);
719
723
725
726 MCP7940_Error mcp7940_setweekday(unsigned char weekday);
730
731#endif /* MCP7940_H_ */
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