71 lines
1.5 KiB
C
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_ */
|