#ifndef _DS_3231_H_ #define _DS_3231_H_ #include "mbed.h" #include "main.h" #define DS3231_ADDR 0x68 typedef union { struct { uint8_t Value : 7; uint8_t : 1; }; uint8_t AS_BYTE; } T_SECOND; typedef union { struct { uint8_t Value : 7; uint8_t : 1; }; uint8_t AS_BYTE; } T_MINUTE; typedef union { struct { uint8_t Value : 5; uint8_t nAM : 1; uint8_t n24 : 1; uint8_t : 1; }; uint8_t AS_BYTE; } T_HOUR; typedef union { struct { uint8_t Value : 3; uint8_t : 5; }; uint8_t AS_BYTE; } T_DAY; typedef union { struct { uint8_t Value : 6; uint8_t : 2; }; uint8_t AS_BYTE; } T_DATE; typedef union { struct { uint8_t Value : 5; uint8_t : 2; uint8_t Century : 1; }; uint8_t AS_BYTE; } T_MONTH; typedef union { struct { uint8_t Value : 8; }; uint8_t AS_BYTE; } T_YEAR; typedef union { struct { uint8_t Value : 7; uint8_t M1 : 1; }; uint8_t AS_BYTE; } A_SECOND; typedef union { struct { uint8_t Value : 7; uint8_t M2 : 1; }; uint8_t AS_BYTE; } A_MINUTE; typedef union { struct { uint8_t Value : 5; uint8_t nAM : 1; uint8_t n24 : 1; uint8_t M3 : 1; }; uint8_t AS_BYTE; } A_HOUR; typedef union { struct { union { struct { uint8_t Value : 4; uint8_t : 2; } Day; struct { uint8_t Value : 6; } Date; }; uint8_t nDT : 1; uint8_t M4 : 1; }; uint8_t AS_BYTE; } A_DAY_DATE; typedef union { struct { uint8_t A1IE : 1; uint8_t A2IE : 1; uint8_t INTCN : 1; uint8_t RS1 : 1; uint8_t RS2 : 1; uint8_t CONV : 1; uint8_t BBSQW : 1; uint8_t nEOSC : 1; }; uint8_t AS_BYTE; } CONTROL_1; typedef union { struct { uint8_t A1F : 1; uint8_t A2F : 1; uint8_t BSY : 1; uint8_t EN32KHZ : 1; uint8_t : 3; uint8_t OSF : 1; }; uint8_t AS_BYTE; } CONTROL_2; typedef union { struct { uint8_t Value : 7; uint8_t Sign : 1; }; uint8_t AS_BYTE; } AGING_OFFSET; typedef union { struct { uint8_t Value : 7; uint8_t Sign : 1; }; uint8_t AS_BYTE; } TEMP_MSB; typedef union { struct { uint8_t : 6; uint8_t Value : 2; }; uint8_t AS_DATA; } TEMP_LSB; typedef union { struct { T_SECOND Second; // 0x00 T_MINUTE Minute; // 0x01 T_HOUR Hour; // 0x02 T_DAY Day; // 0x03 T_DATE Date; // 0x04 T_MONTH Month; // 0x05 T_YEAR Year; // 0x06 A_SECOND A1_Second; // 0x07 A_MINUTE A1_Minute; // 0x08 A_HOUR A1_Hour; // 0x09 A_DAY_DATE A1_Day_Date; // 0x0A A_MINUTE A2_Minute; // 0x0B A_HOUR A2_Hour; // 0x0C A_DAY_DATE A2_Day_Date; // 0x0D CONTROL_1 Control_1; // 0x0E CONTROL_2 Control_2; // 0x0F AGING_OFFSET Aging_Offset; // 0x10 TEMP_MSB Temp_MSB; // 0x11 TEMP_LSB Temp_LSB; // 0x12 }; } DS3231_REGS; void DS3231_Init(void); #endif