Real Time clock Module RTC-8564 (EPSON TOYOCOM)

Dependents:   testRTC8564

RTC8564.h

Committer:
Rhyme
Date:
2017-05-12
Revision:
0:6edcd7b8b324

File content as of revision 0:6edcd7b8b324:

#ifndef _RTC8564_H_
#define _RTC8654_H_
#include "mbed.h"
/**
* EPSON TOYOCOM Real Time Clock Module
* RTC-8564JE/NB (ref: ETM11J-06)
*
* @code

* @endcode
*/
class RTC8564
{
public:
  /**
  * RTC8564 constructor
  *
  * @param sda SDA pin
  * @param sdl SCL pin
  * @param addr addr of the I2C peripheral
  */
  RTC8564(PinName sda, PinName scl, int addr);

  /**
  * RTC8564 destructor
  */
  ~RTC8564();

/** 
 * setReg : set arbitrary register
 * @param addr register address
 * @param data value to assign
 * @returns none
 */
void setReg(int addr, uint8_t data) ;

/**
 * getReg : get arbitrary register value
 * @param addr register address
 * @returns uint8_t register value
 */
uint8_t getReg(int addr) ;

/**
 * setAll : set all registers at once
 * @param data 16 x uint8_t values 
 */
void setAll(uint8_t data[]) ; 

/**
 * getAll : get values of all registers
 * @param data 16 x uint8_t values to receive
 * @returns none
 */
void getAll(uint8_t data[]) ; 

/**
 * setControl1 : assign value to Control 1 register (0x00) 
 * @param data uint8_t value to assign
 * @note bit[5] is STOP_BIT 1: stop 0: start 
 * @note all other bits should be 0
 */
void setControl1(uint8_t data) ;

/**
 * getControl1 : get Control 1 register value
 * @param none
 * @returns uint8_t value of Control 1 register
 */
uint8_t getControl1(void) ;

/**
 * setControl2 : assign value to Control 2 register (0x01)
 * @param data uint8_t value to assign
 * @note bit[0]: TIE, bit[1]: AIE, bit[2]: TF, bit[3]: AF
 * @note bit[4]: TI/TP
 */
void setControl2(uint8_t data) ;

/**
 * getControl2 : get value of Control 2 register (0x01)
 * @param none
 * @returns uint8_t value of Control 1 register
 */
uint8_t getControl2(void) ;

/**
 * set seconds 
 * @param data uint8_t value to assign (0..59)
 */
void setSeconds(uint8_t data) ;

/**
 * get seconds
 * @param none
 * @returns uint8_t seconds (0..59)
 */
uint8_t getSeconds(void) ;

/**
 * set minutes
 * @param data uint8_t value to assign (0..59)
 */
void setMinutes(uint8_t data) ;

/**
 * get minutes
 * @param none
 * @returns uint8_t minutes (0..59)
 */
uint8_t getMinutes(void) ;

/**
 * set hours
 * @param data uint8_t value to assign (0..23)
 */
void setHours(uint8_t data) ;

/**
 * get hours
 * @param none
 * @returns uint8_t hours (0..23)
 */
uint8_t getHours(void) ;

/**
 * set days
 * @param data uint8_t value to assing (0..31)
 */
void setDays(uint8_t data) ;

/**
 * get days
 * @param none
 * @returns uint8_t days (0..31)
 */
uint8_t getDays(void) ;

/**
 * set day of week
 * @param data 
 * @note 0: Sunday, 1: Monday, 2: Tuesday,
 * @note 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday
 */
void setWeekdays(uint8_t data) ;

/**
 * get day of week
 * @param none
 * @returns uint8_t day of week
 */
uint8_t getWeekdays(void) ;

/**
 * set months
 * @param data value to assign (1..12)
 */
void setMonths(uint8_t data) ;

/**
 * get months
 * @param none
 * @returns uint8_t monts (1..12)
 */
uint8_t getMonths(void) ;

/**
 * set years
 * @param data lower 2 digits of the year.
 * @note Currently 20xx is assumed.
 */
void setYears(uint8_t data) ;

/**
 * get Years
 * @param none
 * @returns uint8_t years
 */
uint8_t getYears(void) ;

/**
 * set Minute Alarm
 * @param uint8_t data AE_BIT(0x80) is enable,
 * @note rest of 7bit is 3bit and 4bit BCD value (00..59)
 */
void setMinuteAlarm(uint8_t data) ;

/**
 * get Minute Alarm
 * @param none
 * @returns uint8_t Minute Alarm
 */
uint8_t getMinuteAlarm(void) ;

/**
 * set Hour Alarm
 * @param uint8_t data AE_BIT(0x80) is enable
 * @note rest of 6bit is 2bit and 4bit BCD value (00..23)
 */
void setHourAlarm(uint8_t data) ;

/**
 * get Hour Alarm
 * @param none
 * @returns Hour Alarm
 */
uint8_t getHourAlarm(void) ;

/**
 * set Day Alarm
 * @param uint8_t data AE_BIT(0x80) is enable
 * @note rest of 6bit is 2bit and 4bit BCD value (00..31)
 */
void setDayAlarm(uint8_t data) ;

/**
 * get Day Alarm
 * @param none
 * @returns uint8_t Day Alarm
 */
uint8_t getDayAlarm(void) ;

/**
 * set day of week alarm
 * @param uint8_t data AE_BIT(0x80) is enable
 * @note rest of 3bit is BCD value (0..6)
 */
void setWeekdayAlarm(uint8_t data) ;

/**
 * get day of week alarm
 * @param none
 * @returns day of week alarm
 */
uint8_t getWeekdayAlarm(void) ;

/**
 * set CLKOUT Frequency 
 * @param uint8_t data FE_BIT(0x80) is enable
 * @note bit[1] FD1, bit[0] FD0 to select FREQ.
 * @note CLKOUT outputs only when CLKOE pin is "H"
 * @note and FE_BIT is 1.
 * @note FD1=0, FD0=0 : 32768 Hz,
 * @note FD1=0, FD0=1 : 1024 Hz,
 * @note FD1=1, FD0=0 : 32 Hz
 * @note FD1=1, FD0=1 : 1 Hz
 * @note When STOP_BIT is high, only 32768 Hz will be output
 * @note and other freq clock will not be generated.
 */
void setCLKOUTFrequency(uint8_t data) ;

/**
 * get CLKOUT Frequency
 * @param none
 * @returns uint8_t CLKOUT Frequency
 * @note please refer to setCLKOUTFrequency comment
 * @note and Datasheet for details
 */
uint8_t getCLKOUTFrequency(void) ;

/**
 * set Timer Control
 * @param uint8_t data TE_BIT (0x80) is enable
 * @note bit[1] TD1, bit[0] TD0
 * @note please refer to the Datasheet for the details
 */
void setTimerControl(uint8_t data) ;

/**
 * get Timer Control
 * @pram none
 * @returns uint8_t Timer Control register value
 */
uint8_t getTimerControl(void) ;

/**
 * set Timer
 * @param uint8_t data preset value for the count down timer
 * @note please refer to the Datasheet for the details
 */
void setTimer(uint8_t data) ;

/**
 * get Timer
 * @param none
 * @returns uint8_t timer value
 */
uint8_t getTimer(void) ;

/**
 * stop RTC
 * @note assert the STOP_BIT of the control1 register
 */
void stop(void) ;

/**
 * start RTC
 * @note clear the STOP_BIT of the control1 register
 */
void start(void) ;

private:
  I2C m_i2c;
  int m_addr;
  void readRegs(int addr, uint8_t * data, int len);
  void writeRegs(uint8_t * data, int len);

};


#endif /* _RTC8564_H_ */