Files
qlock-two/Firmware/include/ds1307.h
2016-01-25 21:48:04 +01:00

71 lines
1.5 KiB
C

/*
* ds1307.h
*
* Created on: 09.01.2016
* Author: BlexTw11
*/
#ifndef INCLUDE_DS1307_H_
#define INCLUDE_DS1307_H_
/* PORTS */
#define I2C_PORT PORTC
#define I2C_DDR DDRC
#define I2C_CLK PC5
#define I2C_DATA PC4
// Signal In from DS1307 (1 Hz)
#define DS1307_PORT PORTD
#define DS1307_DDR DDRD
#define DS1307_PIN PD4
/* Addresses */
#define DS1307_ADDR 0b1101000
#define DS1307_SEC 0x00
#define DS1307_MIN 0x01
#define DS1307_HOURS 0x02
#define DS1307_DAY 0x03
#define DS1307_DATE 0x04
#define DS1307_MONTH 0x05
#define DS1307_YEAR 0x06
#define DS1307_CTRL 0x07
#define DS1307_SQWE_ON (1 << 4)
#define DS1307_SQWE_OFF 0
#define DS1307_1HZ 0
#define DS1307_4KHZ 1
#define DS1307_8KHZ 2
#define DS1307_32KHZ 3
#define DS1307_OUT_H (1 << 7)
#define DS1307_OUT_L 0
#define L_NIBBLE(x) (x & 0xf)
#define H_NIBBLE(x) ((x << 4) & 0xf0)
#define INT_TO_BCD(x) ((H_NIBBLE(x / 10)) | (L_NIBBLE(x % 10)))
#define BCD_TO_INT(x) ( ( ((x >> 4) & 0xf)*10) + L_NIBBLE(x))
typedef enum {AM, PM} MODE_AMPM;
typedef enum {MODE_24, MODE_12} MODE_HOUR;
typedef struct {
uint8_t seconds;
uint8_t minutes;
uint8_t hours;
MODE_HOUR mode;
MODE_AMPM ampm;
uint8_t day;
uint8_t weekday;
uint8_t month;
uint8_t year;
} t_TIME;
uint8_t DS1307_write(uint8_t data[], uint8_t len, uint8_t addr);
uint8_t DS1307_read(uint8_t data[], uint8_t len, uint8_t addr);
uint8_t DS1307_init(t_TIME date, uint8_t square_wave, uint8_t frequency, uint8_t output_level);
#endif /* INCLUDE_DS1307_H_ */