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