You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					127 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					127 lines
				
				2.0 KiB
			| 
								 
											8 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								     Copyright (C) Dean Camera, 2017.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  dean [at] fourwalledcubicle [dot] com
							 | 
						||
| 
								 | 
							
								           www.lufa-lib.org
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef _RTC_H_
							 | 
						||
| 
								 | 
							
								#define _RTC_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Includes: */
							 | 
						||
| 
								 | 
							
										#include <avr/io.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										#include <LUFA/Drivers/Peripheral/TWI.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										#include "Config/AppConfig.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Type Defines: */
							 | 
						||
| 
								 | 
							
										typedef struct
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											uint8_t Hour;
							 | 
						||
| 
								 | 
							
											uint8_t Minute;
							 | 
						||
| 
								 | 
							
											uint8_t Second;
							 | 
						||
| 
								 | 
							
											uint8_t Day;
							 | 
						||
| 
								 | 
							
											uint8_t Month;
							 | 
						||
| 
								 | 
							
											uint8_t Year;
							 | 
						||
| 
								 | 
							
										} TimeDate_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										typedef struct
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											union
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												struct
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													unsigned Sec            : 4;
							 | 
						||
| 
								 | 
							
													unsigned TenSec         : 3;
							 | 
						||
| 
								 | 
							
													unsigned CH             : 1;
							 | 
						||
| 
								 | 
							
												} Fields;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												uint8_t IntVal;
							 | 
						||
| 
								 | 
							
											} Byte1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											union
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												struct
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													unsigned Min            : 4;
							 | 
						||
| 
								 | 
							
													unsigned TenMin         : 3;
							 | 
						||
| 
								 | 
							
													unsigned Reserved       : 1;
							 | 
						||
| 
								 | 
							
												} Fields;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												uint8_t IntVal;
							 | 
						||
| 
								 | 
							
											} Byte2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											union
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												struct
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													unsigned Hour            : 4;
							 | 
						||
| 
								 | 
							
													unsigned TenHour         : 2;
							 | 
						||
| 
								 | 
							
													unsigned TwelveHourMode  : 1;
							 | 
						||
| 
								 | 
							
													unsigned Reserved        : 1;
							 | 
						||
| 
								 | 
							
												} Fields;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												uint8_t IntVal;
							 | 
						||
| 
								 | 
							
											} Byte3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											union
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												struct
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													unsigned DayOfWeek       : 3;
							 | 
						||
| 
								 | 
							
													unsigned Reserved        : 5;
							 | 
						||
| 
								 | 
							
												} Fields;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												uint8_t IntVal;
							 | 
						||
| 
								 | 
							
											} Byte4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											union
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												struct
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													unsigned Day             : 4;
							 | 
						||
| 
								 | 
							
													unsigned TenDay          : 2;
							 | 
						||
| 
								 | 
							
													unsigned Reserved        : 2;
							 | 
						||
| 
								 | 
							
												} Fields;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												uint8_t IntVal;
							 | 
						||
| 
								 | 
							
											} Byte5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											union
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												struct
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													unsigned Month           : 4;
							 | 
						||
| 
								 | 
							
													unsigned TenMonth        : 1;
							 | 
						||
| 
								 | 
							
													unsigned Reserved        : 3;
							 | 
						||
| 
								 | 
							
												} Fields;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												uint8_t IntVal;
							 | 
						||
| 
								 | 
							
											} Byte6;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											union
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												struct
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													unsigned Year            : 4;
							 | 
						||
| 
								 | 
							
													unsigned TenYear         : 4;
							 | 
						||
| 
								 | 
							
												} Fields;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												uint8_t IntVal;
							 | 
						||
| 
								 | 
							
											} Byte7;
							 | 
						||
| 
								 | 
							
										} DS1307_DateTimeRegs_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Macros: */
							 | 
						||
| 
								 | 
							
										/** TWI address of the DS1307 device on the bus. */
							 | 
						||
| 
								 | 
							
										#define DS1307_ADDRESS       0xD0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Function Prototypes: */
							 | 
						||
| 
								 | 
							
										void RTC_Init(void);
							 | 
						||
| 
								 | 
							
										void RTC_Tick500ms(void);
							 | 
						||
| 
								 | 
							
										bool RTC_SetTimeDate(const TimeDate_t* NewTimeDate);
							 | 
						||
| 
								 | 
							
										bool RTC_GetTimeDate(TimeDate_t* const TimeDate);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 |