Enhance TemperatureDatalogger project -- add RTC capabilities so that data is logged...
[pub/lufa.git] / Projects / TemperatureDataLogger / Lib / DS1307.h
diff --git a/Projects/TemperatureDataLogger/Lib/DS1307.h b/Projects/TemperatureDataLogger/Lib/DS1307.h
new file mode 100644 (file)
index 0000000..4918360
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+     Copyright (C) Dean Camera, 2010.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+#ifndef _DS1307_H_\r
+#define _DS1307_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+\r
+               #include <LUFA/Drivers/Peripheral/TWI.h>\r
+\r
+       /* Type Defines: */\r
+               typedef struct\r
+               {\r
+                       union\r
+                       {\r
+                               struct\r
+                               {\r
+                                       unsigned int Sec            : 4;\r
+                                       unsigned int TenSec         : 3;\r
+                                       unsigned int CH             : 1;\r
+                               };\r
+                               \r
+                               uint8_t IntVal;\r
+                       } Byte1;\r
+                       \r
+                       union\r
+                       {\r
+                               struct\r
+                               {\r
+                                       unsigned int Min            : 4;\r
+                                       unsigned int TenMin         : 3;\r
+                                       unsigned int _RESERVED      : 1;\r
+                               };\r
+                               \r
+                               uint8_t IntVal;\r
+                       } Byte2;\r
+                       \r
+                       union\r
+                       {\r
+                               struct\r
+                               {\r
+                                       unsigned int Hour            : 4;\r
+                                       unsigned int TenHour         : 2;\r
+                                       unsigned int TwelveHourMode  : 1;\r
+                                       unsigned int _RESERVED       : 1;\r
+                               };\r
+                               \r
+                               uint8_t IntVal;\r
+                       } Byte3;\r
+               } DS1307_TimeRegs_t;\r
+\r
+               typedef struct\r
+               {\r
+                       union\r
+                       {\r
+                               struct\r
+                               {\r
+                                       unsigned int Day             : 4;\r
+                                       unsigned int TenDay          : 2;\r
+                                       unsigned int _RESERVED       : 2;\r
+                               };\r
+                       \r
+                               uint8_t IntVal;\r
+                       } Byte1;\r
+\r
+                       union\r
+                       {\r
+                               struct\r
+                               {\r
+                                       unsigned int Month           : 4;\r
+                                       unsigned int TenMonth        : 1;\r
+                                       unsigned int _RESERVED       : 3;\r
+                               };\r
+                               \r
+                               uint8_t IntVal;\r
+                       } Byte2;\r
+                       \r
+                       union\r
+                       {\r
+                               struct\r
+                               {\r
+                                       unsigned int Year            : 4;\r
+                                       unsigned int TenYear         : 4;\r
+                               };\r
+                               \r
+                               uint8_t IntVal;\r
+                       } Byte3;\r
+               } DS1307_DateRegs_t;\r
+\r
+       /* Macros: */\r
+               #define DS1307_TIMEREG_START  0x00\r
+               #define DS1307_DATEREG_START  0x04\r
+       \r
+               #define DS1307_ADDRESS_READ   0b11010001\r
+               #define DS1307_ADDRESS_WRITE  0b11010000\r
+\r
+       /* Function Prototypes: */\r
+               void DS1307_Init(void);\r
+               \r
+               void DS1307_SetDate(uint8_t Day, uint8_t Month, uint8_t Year);\r
+               void DS1307_SetTime(uint8_t Hour, uint8_t Minute, uint8_t Second);\r
+               \r
+               void DS1307_GetDate(uint8_t* Day, uint8_t* Month, uint8_t* Year);\r
+               void DS1307_GetTime(uint8_t* Hour, uint8_t* Minute, uint8_t* Second);\r
+\r
+#endif\r