diff options
| author | Dean Camera <[email protected]> | 2011-01-13 21:01:05 +0000 | 
|---|---|---|
| committer | Dean Camera <[email protected]> | 2011-01-13 21:01:05 +0000 | 
| commit | 9c7594e7db5b06b2703a9975f2b250056ee0c212 (patch) | |
| tree | b7485a5db611dd1464bebb7a50974017c90f0668 /Projects/TempDataLogger/Lib | |
| parent | 7776aa4e2e7430da6fab1712816b887d21032dd9 (diff) | |
| download | qmk_firmware-9c7594e7db5b06b2703a9975f2b250056ee0c212.tar.gz qmk_firmware-9c7594e7db5b06b2703a9975f2b250056ee0c212.zip | |
Oops - The DS1307 contains an unused "DayOfWeek" register that must be accounted for in the new unified DS1307 Time/Day read and write routines.
Diffstat (limited to 'Projects/TempDataLogger/Lib')
| -rw-r--r-- | Projects/TempDataLogger/Lib/DS1307.c | 73 | ||||
| -rw-r--r-- | Projects/TempDataLogger/Lib/DS1307.h | 22 | 
2 files changed, 52 insertions, 43 deletions
| diff --git a/Projects/TempDataLogger/Lib/DS1307.c b/Projects/TempDataLogger/Lib/DS1307.c index edbb272383..40aba32044 100644 --- a/Projects/TempDataLogger/Lib/DS1307.c +++ b/Projects/TempDataLogger/Lib/DS1307.c @@ -13,26 +13,26 @@ void DS1307_SetTimeDate(const TimeDate_t* NewTimeDate)  	return;  #endif -	DS1307_TimeRegs_t CurrentRTCTime; -	DS1307_DateRegs_t CurrentRTCDate; +	DS1307_DateTimeRegs_t NewRegValues;  	// Convert new time data to the DS1307's time register layout -	CurrentRTCTime.Byte1.Fields.TenSec  = (NewTimeDate->Second / 10); -	CurrentRTCTime.Byte1.Fields.Sec     = (NewTimeDate->Second % 10); -	CurrentRTCTime.Byte1.Fields.CH      = false; -	CurrentRTCTime.Byte2.Fields.TenMin  = (NewTimeDate->Minute / 10); -	CurrentRTCTime.Byte2.Fields.Min     = (NewTimeDate->Minute % 10); -	CurrentRTCTime.Byte3.Fields.TenHour = (NewTimeDate->Hour / 10); -	CurrentRTCTime.Byte3.Fields.Hour    = (NewTimeDate->Hour % 10); -	CurrentRTCTime.Byte3.Fields.TwelveHourMode = false; +	NewRegValues.Byte1.Fields.TenSec    = (NewTimeDate->Second / 10); +	NewRegValues.Byte1.Fields.Sec       = (NewTimeDate->Second % 10); +	NewRegValues.Byte1.Fields.CH        = false; +	NewRegValues.Byte2.Fields.TenMin    = (NewTimeDate->Minute / 10); +	NewRegValues.Byte2.Fields.Min       = (NewTimeDate->Minute % 10); +	NewRegValues.Byte3.Fields.TenHour   = (NewTimeDate->Hour / 10); +	NewRegValues.Byte3.Fields.Hour      = (NewTimeDate->Hour % 10); +	NewRegValues.Byte3.Fields.TwelveHourMode = false;  	// Convert new date data to the DS1307's date register layout -	CurrentRTCDate.Byte1.Fields.TenDay   = (NewTimeDate->Day / 10); -	CurrentRTCDate.Byte1.Fields.Day      = (NewTimeDate->Day % 10); -	CurrentRTCDate.Byte2.Fields.TenMonth = (NewTimeDate->Month / 10); -	CurrentRTCDate.Byte2.Fields.Month    = (NewTimeDate->Month % 10); -	CurrentRTCDate.Byte3.Fields.TenYear  = (NewTimeDate->Year / 10); -	CurrentRTCDate.Byte3.Fields.Year     = (NewTimeDate->Year % 10); +	NewRegValues.Byte4.Fields.DayOfWeek = 0; +	NewRegValues.Byte5.Fields.TenDay    = (NewTimeDate->Day / 10); +	NewRegValues.Byte5.Fields.Day       = (NewTimeDate->Day % 10); +	NewRegValues.Byte6.Fields.TenMonth  = (NewTimeDate->Month / 10); +	NewRegValues.Byte6.Fields.Month     = (NewTimeDate->Month % 10); +	NewRegValues.Byte7.Fields.TenYear   = (NewTimeDate->Year / 10); +	NewRegValues.Byte7.Fields.Year      = (NewTimeDate->Year % 10);  	if (TWI_StartTransmission(DS1307_ADDRESS_WRITE, 10))  	{ @@ -40,14 +40,15 @@ void DS1307_SetTimeDate(const TimeDate_t* NewTimeDate)  		TWI_SendByte(0);  		// Write time data to the first set of device registers -		TWI_SendByte(CurrentRTCTime.Byte1.IntVal); -		TWI_SendByte(CurrentRTCTime.Byte2.IntVal); -		TWI_SendByte(CurrentRTCTime.Byte3.IntVal); +		TWI_SendByte(NewRegValues.Byte1.IntVal); +		TWI_SendByte(NewRegValues.Byte2.IntVal); +		TWI_SendByte(NewRegValues.Byte3.IntVal);  		// Write date data to the second set of device registers -		TWI_SendByte(CurrentRTCDate.Byte1.IntVal); -		TWI_SendByte(CurrentRTCDate.Byte2.IntVal); -		TWI_SendByte(CurrentRTCDate.Byte3.IntVal); +		TWI_SendByte(NewRegValues.Byte4.IntVal); +		TWI_SendByte(NewRegValues.Byte5.IntVal); +		TWI_SendByte(NewRegValues.Byte6.IntVal); +		TWI_SendByte(NewRegValues.Byte7.IntVal);  		TWI_StopTransmission();  	} @@ -74,32 +75,32 @@ void DS1307_GetTimeDate(TimeDate_t* const TimeDate)  		TWI_StopTransmission();  	} -	DS1307_TimeRegs_t CurrentRTCTime; -	DS1307_DateRegs_t CurrentRTCDate; +	DS1307_DateTimeRegs_t CurrentRegValues;  	if (TWI_StartTransmission(DS1307_ADDRESS_READ, 10))  	{  		// First set of registers store the current time -		TWI_ReceiveByte(&CurrentRTCTime.Byte1.IntVal, false); -		TWI_ReceiveByte(&CurrentRTCTime.Byte2.IntVal, false); -		TWI_ReceiveByte(&CurrentRTCTime.Byte3.IntVal, false); +		TWI_ReceiveByte(&CurrentRegValues.Byte1.IntVal, false); +		TWI_ReceiveByte(&CurrentRegValues.Byte2.IntVal, false); +		TWI_ReceiveByte(&CurrentRegValues.Byte3.IntVal, false);  		// Second set of registers store the current date -		TWI_ReceiveByte(&CurrentRTCDate.Byte1.IntVal, false); -		TWI_ReceiveByte(&CurrentRTCDate.Byte2.IntVal, false); -		TWI_ReceiveByte(&CurrentRTCDate.Byte3.IntVal, true); +		TWI_ReceiveByte(&CurrentRegValues.Byte4.IntVal, false); +		TWI_ReceiveByte(&CurrentRegValues.Byte5.IntVal, false); +		TWI_ReceiveByte(&CurrentRegValues.Byte6.IntVal, false); +		TWI_ReceiveByte(&CurrentRegValues.Byte7.IntVal, true);  		TWI_StopTransmission();  	}  	// Convert stored time value into decimal -	TimeDate->Second  = (CurrentRTCTime.Byte1.Fields.TenSec  * 10) + CurrentRTCTime.Byte1.Fields.Sec; -	TimeDate->Minute  = (CurrentRTCTime.Byte2.Fields.TenMin  * 10) + CurrentRTCTime.Byte2.Fields.Min; -	TimeDate->Hour    = (CurrentRTCTime.Byte3.Fields.TenHour * 10) + CurrentRTCTime.Byte3.Fields.Hour; +	TimeDate->Second  = (CurrentRegValues.Byte1.Fields.TenSec  * 10) + CurrentRegValues.Byte1.Fields.Sec; +	TimeDate->Minute  = (CurrentRegValues.Byte2.Fields.TenMin  * 10) + CurrentRegValues.Byte2.Fields.Min; +	TimeDate->Hour    = (CurrentRegValues.Byte3.Fields.TenHour * 10) + CurrentRegValues.Byte3.Fields.Hour;  	// Convert stored date value into decimal -	TimeDate->Day    = (CurrentRTCDate.Byte1.Fields.TenDay   * 10) + CurrentRTCDate.Byte1.Fields.Day; -	TimeDate->Month  = (CurrentRTCDate.Byte2.Fields.TenMonth * 10) + CurrentRTCDate.Byte2.Fields.Month; -	TimeDate->Year   = (CurrentRTCDate.Byte3.Fields.TenYear  * 10) + CurrentRTCDate.Byte3.Fields.Year; +	TimeDate->Day    = (CurrentRegValues.Byte5.Fields.TenDay   * 10) + CurrentRegValues.Byte5.Fields.Day; +	TimeDate->Month  = (CurrentRegValues.Byte6.Fields.TenMonth * 10) + CurrentRegValues.Byte6.Fields.Month; +	TimeDate->Year   = (CurrentRegValues.Byte7.Fields.TenYear  * 10) + CurrentRegValues.Byte7.Fields.Year;  } diff --git a/Projects/TempDataLogger/Lib/DS1307.h b/Projects/TempDataLogger/Lib/DS1307.h index 212cdfecc4..6269bb235e 100644 --- a/Projects/TempDataLogger/Lib/DS1307.h +++ b/Projects/TempDataLogger/Lib/DS1307.h @@ -62,10 +62,18 @@  				uint8_t IntVal;  			} Byte3; -		} DS1307_TimeRegs_t; -		typedef struct -		{ +			union +			{ +				struct +				{ +					unsigned int DayOfWeek       : 3; +					unsigned int Reserved        : 5; +				} Fields; + +				uint8_t IntVal; +			} Byte4; +		  			union  			{  				struct @@ -76,7 +84,7 @@  				} Fields;  				uint8_t IntVal; -			} Byte1; +			} Byte5;  			union  			{ @@ -88,7 +96,7 @@  				} Fields;  				uint8_t IntVal; -			} Byte2; +			} Byte6;  			union  			{ @@ -99,8 +107,8 @@  				} Fields;  				uint8_t IntVal; -			} Byte3; -		} DS1307_DateRegs_t; +			} Byte7; +		} DS1307_DateTimeRegs_t;  	/* Macros: */  		#define DS1307_ADDRESS_READ   (0xD0 | TWI_ADDRESS_READ) | 
