00001 #include "ds1307.h"
00002
00003
00004 uns8 bcd_to_dec(uns8 bcd) {
00005 return (bcd & 0b00001111) + ((bcd >> 4) * 10);
00006 }
00007
00008 uns8 dec_to_bcd(uns8 dec) {
00009 return ((dec / 10) << 4) + (dec % 10);
00010 }
00011
00012 uns8 rtc_get_minutes() {
00013 return bcd_to_dec(i2c_read_eeprom(ds1307_device, ds1307_minutes_register));
00014 }
00015 uns8 rtc_get_hours() {
00016
00017
00018
00019 return bcd_to_dec(0b00111111 & i2c_read_eeprom(ds1307_device, ds1307_hours_register));
00020 }
00021
00022 uns8 rtc_get_seconds() {
00023 return bcd_to_dec(0b01111111 & i2c_read_eeprom(ds1307_device, ds1307_seconds_register));
00024 }
00025
00026 uns8 rtc_get_day() {
00027 return bcd_to_dec(i2c_read_eeprom(ds1307_device, ds1307_day_register));
00028 }
00029
00030 uns8 rtc_get_date() {
00031 return bcd_to_dec(i2c_read_eeprom(ds1307_device, ds1307_date_register));
00032 }
00033
00034 uns8 rtc_get_month() {
00035 return bcd_to_dec(i2c_read_eeprom(ds1307_device, ds1307_month_register));
00036 }
00037 uns8 rtc_get_year() {
00038 return bcd_to_dec(i2c_read_eeprom(ds1307_device, ds1307_year_register));
00039 }
00040
00041 uns8 rtc_get_config() {
00042 return i2c_read_eeprom(ds1307_device, ds1307_control_register);
00043 }
00044
00045 uns8 rtc_set_config(uns8 config) {
00046 i2c_write_eeprom(ds1307_device, ds1307_control_register, config);
00047 }
00048
00049
00050 void rtc_stop_clock() {
00051 i2c_write_eeprom(ds1307_device, ds1307_seconds_register, 0b10000000 | i2c_read_eeprom(ds1307_device, ds1307_seconds_register));
00052 }
00053
00054 void rtc_start_clock() {
00055 i2c_write_eeprom(ds1307_device, ds1307_seconds_register, 0b01111111 & i2c_read_eeprom(ds1307_device, ds1307_seconds_register));
00056 }
00057
00058 void rtc_set_year(uns16 year) {
00059 i2c_write_eeprom(ds1307_device, ds1307_year_register, dec_to_bcd(year));
00060 }
00061 void rtc_set_minutes(uns16 minutes) {
00062 i2c_write_eeprom(ds1307_device, ds1307_minutes_register, dec_to_bcd(minutes));
00063 }
00064 void rtc_set_day(uns8 day) {
00065 i2c_write_eeprom(ds1307_device, ds1307_day_register, dec_to_bcd(day));
00066 }
00067 void rtc_set_date(uns8 date) {
00068 i2c_write_eeprom(ds1307_device, ds1307_date_register, dec_to_bcd(date));
00069 }
00070
00071 void rtc_set_seconds(uns8 seconds) {
00072 i2c_write_eeprom(ds1307_device, ds1307_seconds_register, (0b10000000 & i2c_read_eeprom(ds1307_device, ds1307_seconds_register)) + dec_to_bcd(seconds));
00073 }
00074
00075 void rtc_set_hours(uns8 hours) {
00076
00077 i2c_write_eeprom(ds1307_device, ds1307_hours_register, dec_to_bcd(hours));
00078 }
00079
00080 void rtc_set_month(uns8 month) {
00081 i2c_write_eeprom(ds1307_device, ds1307_month_register, dec_to_bcd(month));
00082 }
00083
00084 void rtc_setup() {
00085 i2c_setup();
00086 }