Real Time clock Module RTC-8564 (EPSON TOYOCOM)

Dependents:   testRTC8564

Committer:
Rhyme
Date:
Fri May 12 00:51:58 2017 +0000
Revision:
0:6edcd7b8b324
First commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:6edcd7b8b324 1 #ifndef _RTC8564_H_
Rhyme 0:6edcd7b8b324 2 #define _RTC8654_H_
Rhyme 0:6edcd7b8b324 3 #include "mbed.h"
Rhyme 0:6edcd7b8b324 4 /**
Rhyme 0:6edcd7b8b324 5 * EPSON TOYOCOM Real Time Clock Module
Rhyme 0:6edcd7b8b324 6 * RTC-8564JE/NB (ref: ETM11J-06)
Rhyme 0:6edcd7b8b324 7 *
Rhyme 0:6edcd7b8b324 8 * @code
Rhyme 0:6edcd7b8b324 9
Rhyme 0:6edcd7b8b324 10 * @endcode
Rhyme 0:6edcd7b8b324 11 */
Rhyme 0:6edcd7b8b324 12 class RTC8564
Rhyme 0:6edcd7b8b324 13 {
Rhyme 0:6edcd7b8b324 14 public:
Rhyme 0:6edcd7b8b324 15 /**
Rhyme 0:6edcd7b8b324 16 * RTC8564 constructor
Rhyme 0:6edcd7b8b324 17 *
Rhyme 0:6edcd7b8b324 18 * @param sda SDA pin
Rhyme 0:6edcd7b8b324 19 * @param sdl SCL pin
Rhyme 0:6edcd7b8b324 20 * @param addr addr of the I2C peripheral
Rhyme 0:6edcd7b8b324 21 */
Rhyme 0:6edcd7b8b324 22 RTC8564(PinName sda, PinName scl, int addr);
Rhyme 0:6edcd7b8b324 23
Rhyme 0:6edcd7b8b324 24 /**
Rhyme 0:6edcd7b8b324 25 * RTC8564 destructor
Rhyme 0:6edcd7b8b324 26 */
Rhyme 0:6edcd7b8b324 27 ~RTC8564();
Rhyme 0:6edcd7b8b324 28
Rhyme 0:6edcd7b8b324 29 /**
Rhyme 0:6edcd7b8b324 30 * setReg : set arbitrary register
Rhyme 0:6edcd7b8b324 31 * @param addr register address
Rhyme 0:6edcd7b8b324 32 * @param data value to assign
Rhyme 0:6edcd7b8b324 33 * @returns none
Rhyme 0:6edcd7b8b324 34 */
Rhyme 0:6edcd7b8b324 35 void setReg(int addr, uint8_t data) ;
Rhyme 0:6edcd7b8b324 36
Rhyme 0:6edcd7b8b324 37 /**
Rhyme 0:6edcd7b8b324 38 * getReg : get arbitrary register value
Rhyme 0:6edcd7b8b324 39 * @param addr register address
Rhyme 0:6edcd7b8b324 40 * @returns uint8_t register value
Rhyme 0:6edcd7b8b324 41 */
Rhyme 0:6edcd7b8b324 42 uint8_t getReg(int addr) ;
Rhyme 0:6edcd7b8b324 43
Rhyme 0:6edcd7b8b324 44 /**
Rhyme 0:6edcd7b8b324 45 * setAll : set all registers at once
Rhyme 0:6edcd7b8b324 46 * @param data 16 x uint8_t values
Rhyme 0:6edcd7b8b324 47 */
Rhyme 0:6edcd7b8b324 48 void setAll(uint8_t data[]) ;
Rhyme 0:6edcd7b8b324 49
Rhyme 0:6edcd7b8b324 50 /**
Rhyme 0:6edcd7b8b324 51 * getAll : get values of all registers
Rhyme 0:6edcd7b8b324 52 * @param data 16 x uint8_t values to receive
Rhyme 0:6edcd7b8b324 53 * @returns none
Rhyme 0:6edcd7b8b324 54 */
Rhyme 0:6edcd7b8b324 55 void getAll(uint8_t data[]) ;
Rhyme 0:6edcd7b8b324 56
Rhyme 0:6edcd7b8b324 57 /**
Rhyme 0:6edcd7b8b324 58 * setControl1 : assign value to Control 1 register (0x00)
Rhyme 0:6edcd7b8b324 59 * @param data uint8_t value to assign
Rhyme 0:6edcd7b8b324 60 * @note bit[5] is STOP_BIT 1: stop 0: start
Rhyme 0:6edcd7b8b324 61 * @note all other bits should be 0
Rhyme 0:6edcd7b8b324 62 */
Rhyme 0:6edcd7b8b324 63 void setControl1(uint8_t data) ;
Rhyme 0:6edcd7b8b324 64
Rhyme 0:6edcd7b8b324 65 /**
Rhyme 0:6edcd7b8b324 66 * getControl1 : get Control 1 register value
Rhyme 0:6edcd7b8b324 67 * @param none
Rhyme 0:6edcd7b8b324 68 * @returns uint8_t value of Control 1 register
Rhyme 0:6edcd7b8b324 69 */
Rhyme 0:6edcd7b8b324 70 uint8_t getControl1(void) ;
Rhyme 0:6edcd7b8b324 71
Rhyme 0:6edcd7b8b324 72 /**
Rhyme 0:6edcd7b8b324 73 * setControl2 : assign value to Control 2 register (0x01)
Rhyme 0:6edcd7b8b324 74 * @param data uint8_t value to assign
Rhyme 0:6edcd7b8b324 75 * @note bit[0]: TIE, bit[1]: AIE, bit[2]: TF, bit[3]: AF
Rhyme 0:6edcd7b8b324 76 * @note bit[4]: TI/TP
Rhyme 0:6edcd7b8b324 77 */
Rhyme 0:6edcd7b8b324 78 void setControl2(uint8_t data) ;
Rhyme 0:6edcd7b8b324 79
Rhyme 0:6edcd7b8b324 80 /**
Rhyme 0:6edcd7b8b324 81 * getControl2 : get value of Control 2 register (0x01)
Rhyme 0:6edcd7b8b324 82 * @param none
Rhyme 0:6edcd7b8b324 83 * @returns uint8_t value of Control 1 register
Rhyme 0:6edcd7b8b324 84 */
Rhyme 0:6edcd7b8b324 85 uint8_t getControl2(void) ;
Rhyme 0:6edcd7b8b324 86
Rhyme 0:6edcd7b8b324 87 /**
Rhyme 0:6edcd7b8b324 88 * set seconds
Rhyme 0:6edcd7b8b324 89 * @param data uint8_t value to assign (0..59)
Rhyme 0:6edcd7b8b324 90 */
Rhyme 0:6edcd7b8b324 91 void setSeconds(uint8_t data) ;
Rhyme 0:6edcd7b8b324 92
Rhyme 0:6edcd7b8b324 93 /**
Rhyme 0:6edcd7b8b324 94 * get seconds
Rhyme 0:6edcd7b8b324 95 * @param none
Rhyme 0:6edcd7b8b324 96 * @returns uint8_t seconds (0..59)
Rhyme 0:6edcd7b8b324 97 */
Rhyme 0:6edcd7b8b324 98 uint8_t getSeconds(void) ;
Rhyme 0:6edcd7b8b324 99
Rhyme 0:6edcd7b8b324 100 /**
Rhyme 0:6edcd7b8b324 101 * set minutes
Rhyme 0:6edcd7b8b324 102 * @param data uint8_t value to assign (0..59)
Rhyme 0:6edcd7b8b324 103 */
Rhyme 0:6edcd7b8b324 104 void setMinutes(uint8_t data) ;
Rhyme 0:6edcd7b8b324 105
Rhyme 0:6edcd7b8b324 106 /**
Rhyme 0:6edcd7b8b324 107 * get minutes
Rhyme 0:6edcd7b8b324 108 * @param none
Rhyme 0:6edcd7b8b324 109 * @returns uint8_t minutes (0..59)
Rhyme 0:6edcd7b8b324 110 */
Rhyme 0:6edcd7b8b324 111 uint8_t getMinutes(void) ;
Rhyme 0:6edcd7b8b324 112
Rhyme 0:6edcd7b8b324 113 /**
Rhyme 0:6edcd7b8b324 114 * set hours
Rhyme 0:6edcd7b8b324 115 * @param data uint8_t value to assign (0..23)
Rhyme 0:6edcd7b8b324 116 */
Rhyme 0:6edcd7b8b324 117 void setHours(uint8_t data) ;
Rhyme 0:6edcd7b8b324 118
Rhyme 0:6edcd7b8b324 119 /**
Rhyme 0:6edcd7b8b324 120 * get hours
Rhyme 0:6edcd7b8b324 121 * @param none
Rhyme 0:6edcd7b8b324 122 * @returns uint8_t hours (0..23)
Rhyme 0:6edcd7b8b324 123 */
Rhyme 0:6edcd7b8b324 124 uint8_t getHours(void) ;
Rhyme 0:6edcd7b8b324 125
Rhyme 0:6edcd7b8b324 126 /**
Rhyme 0:6edcd7b8b324 127 * set days
Rhyme 0:6edcd7b8b324 128 * @param data uint8_t value to assing (0..31)
Rhyme 0:6edcd7b8b324 129 */
Rhyme 0:6edcd7b8b324 130 void setDays(uint8_t data) ;
Rhyme 0:6edcd7b8b324 131
Rhyme 0:6edcd7b8b324 132 /**
Rhyme 0:6edcd7b8b324 133 * get days
Rhyme 0:6edcd7b8b324 134 * @param none
Rhyme 0:6edcd7b8b324 135 * @returns uint8_t days (0..31)
Rhyme 0:6edcd7b8b324 136 */
Rhyme 0:6edcd7b8b324 137 uint8_t getDays(void) ;
Rhyme 0:6edcd7b8b324 138
Rhyme 0:6edcd7b8b324 139 /**
Rhyme 0:6edcd7b8b324 140 * set day of week
Rhyme 0:6edcd7b8b324 141 * @param data
Rhyme 0:6edcd7b8b324 142 * @note 0: Sunday, 1: Monday, 2: Tuesday,
Rhyme 0:6edcd7b8b324 143 * @note 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday
Rhyme 0:6edcd7b8b324 144 */
Rhyme 0:6edcd7b8b324 145 void setWeekdays(uint8_t data) ;
Rhyme 0:6edcd7b8b324 146
Rhyme 0:6edcd7b8b324 147 /**
Rhyme 0:6edcd7b8b324 148 * get day of week
Rhyme 0:6edcd7b8b324 149 * @param none
Rhyme 0:6edcd7b8b324 150 * @returns uint8_t day of week
Rhyme 0:6edcd7b8b324 151 */
Rhyme 0:6edcd7b8b324 152 uint8_t getWeekdays(void) ;
Rhyme 0:6edcd7b8b324 153
Rhyme 0:6edcd7b8b324 154 /**
Rhyme 0:6edcd7b8b324 155 * set months
Rhyme 0:6edcd7b8b324 156 * @param data value to assign (1..12)
Rhyme 0:6edcd7b8b324 157 */
Rhyme 0:6edcd7b8b324 158 void setMonths(uint8_t data) ;
Rhyme 0:6edcd7b8b324 159
Rhyme 0:6edcd7b8b324 160 /**
Rhyme 0:6edcd7b8b324 161 * get months
Rhyme 0:6edcd7b8b324 162 * @param none
Rhyme 0:6edcd7b8b324 163 * @returns uint8_t monts (1..12)
Rhyme 0:6edcd7b8b324 164 */
Rhyme 0:6edcd7b8b324 165 uint8_t getMonths(void) ;
Rhyme 0:6edcd7b8b324 166
Rhyme 0:6edcd7b8b324 167 /**
Rhyme 0:6edcd7b8b324 168 * set years
Rhyme 0:6edcd7b8b324 169 * @param data lower 2 digits of the year.
Rhyme 0:6edcd7b8b324 170 * @note Currently 20xx is assumed.
Rhyme 0:6edcd7b8b324 171 */
Rhyme 0:6edcd7b8b324 172 void setYears(uint8_t data) ;
Rhyme 0:6edcd7b8b324 173
Rhyme 0:6edcd7b8b324 174 /**
Rhyme 0:6edcd7b8b324 175 * get Years
Rhyme 0:6edcd7b8b324 176 * @param none
Rhyme 0:6edcd7b8b324 177 * @returns uint8_t years
Rhyme 0:6edcd7b8b324 178 */
Rhyme 0:6edcd7b8b324 179 uint8_t getYears(void) ;
Rhyme 0:6edcd7b8b324 180
Rhyme 0:6edcd7b8b324 181 /**
Rhyme 0:6edcd7b8b324 182 * set Minute Alarm
Rhyme 0:6edcd7b8b324 183 * @param uint8_t data AE_BIT(0x80) is enable,
Rhyme 0:6edcd7b8b324 184 * @note rest of 7bit is 3bit and 4bit BCD value (00..59)
Rhyme 0:6edcd7b8b324 185 */
Rhyme 0:6edcd7b8b324 186 void setMinuteAlarm(uint8_t data) ;
Rhyme 0:6edcd7b8b324 187
Rhyme 0:6edcd7b8b324 188 /**
Rhyme 0:6edcd7b8b324 189 * get Minute Alarm
Rhyme 0:6edcd7b8b324 190 * @param none
Rhyme 0:6edcd7b8b324 191 * @returns uint8_t Minute Alarm
Rhyme 0:6edcd7b8b324 192 */
Rhyme 0:6edcd7b8b324 193 uint8_t getMinuteAlarm(void) ;
Rhyme 0:6edcd7b8b324 194
Rhyme 0:6edcd7b8b324 195 /**
Rhyme 0:6edcd7b8b324 196 * set Hour Alarm
Rhyme 0:6edcd7b8b324 197 * @param uint8_t data AE_BIT(0x80) is enable
Rhyme 0:6edcd7b8b324 198 * @note rest of 6bit is 2bit and 4bit BCD value (00..23)
Rhyme 0:6edcd7b8b324 199 */
Rhyme 0:6edcd7b8b324 200 void setHourAlarm(uint8_t data) ;
Rhyme 0:6edcd7b8b324 201
Rhyme 0:6edcd7b8b324 202 /**
Rhyme 0:6edcd7b8b324 203 * get Hour Alarm
Rhyme 0:6edcd7b8b324 204 * @param none
Rhyme 0:6edcd7b8b324 205 * @returns Hour Alarm
Rhyme 0:6edcd7b8b324 206 */
Rhyme 0:6edcd7b8b324 207 uint8_t getHourAlarm(void) ;
Rhyme 0:6edcd7b8b324 208
Rhyme 0:6edcd7b8b324 209 /**
Rhyme 0:6edcd7b8b324 210 * set Day Alarm
Rhyme 0:6edcd7b8b324 211 * @param uint8_t data AE_BIT(0x80) is enable
Rhyme 0:6edcd7b8b324 212 * @note rest of 6bit is 2bit and 4bit BCD value (00..31)
Rhyme 0:6edcd7b8b324 213 */
Rhyme 0:6edcd7b8b324 214 void setDayAlarm(uint8_t data) ;
Rhyme 0:6edcd7b8b324 215
Rhyme 0:6edcd7b8b324 216 /**
Rhyme 0:6edcd7b8b324 217 * get Day Alarm
Rhyme 0:6edcd7b8b324 218 * @param none
Rhyme 0:6edcd7b8b324 219 * @returns uint8_t Day Alarm
Rhyme 0:6edcd7b8b324 220 */
Rhyme 0:6edcd7b8b324 221 uint8_t getDayAlarm(void) ;
Rhyme 0:6edcd7b8b324 222
Rhyme 0:6edcd7b8b324 223 /**
Rhyme 0:6edcd7b8b324 224 * set day of week alarm
Rhyme 0:6edcd7b8b324 225 * @param uint8_t data AE_BIT(0x80) is enable
Rhyme 0:6edcd7b8b324 226 * @note rest of 3bit is BCD value (0..6)
Rhyme 0:6edcd7b8b324 227 */
Rhyme 0:6edcd7b8b324 228 void setWeekdayAlarm(uint8_t data) ;
Rhyme 0:6edcd7b8b324 229
Rhyme 0:6edcd7b8b324 230 /**
Rhyme 0:6edcd7b8b324 231 * get day of week alarm
Rhyme 0:6edcd7b8b324 232 * @param none
Rhyme 0:6edcd7b8b324 233 * @returns day of week alarm
Rhyme 0:6edcd7b8b324 234 */
Rhyme 0:6edcd7b8b324 235 uint8_t getWeekdayAlarm(void) ;
Rhyme 0:6edcd7b8b324 236
Rhyme 0:6edcd7b8b324 237 /**
Rhyme 0:6edcd7b8b324 238 * set CLKOUT Frequency
Rhyme 0:6edcd7b8b324 239 * @param uint8_t data FE_BIT(0x80) is enable
Rhyme 0:6edcd7b8b324 240 * @note bit[1] FD1, bit[0] FD0 to select FREQ.
Rhyme 0:6edcd7b8b324 241 * @note CLKOUT outputs only when CLKOE pin is "H"
Rhyme 0:6edcd7b8b324 242 * @note and FE_BIT is 1.
Rhyme 0:6edcd7b8b324 243 * @note FD1=0, FD0=0 : 32768 Hz,
Rhyme 0:6edcd7b8b324 244 * @note FD1=0, FD0=1 : 1024 Hz,
Rhyme 0:6edcd7b8b324 245 * @note FD1=1, FD0=0 : 32 Hz
Rhyme 0:6edcd7b8b324 246 * @note FD1=1, FD0=1 : 1 Hz
Rhyme 0:6edcd7b8b324 247 * @note When STOP_BIT is high, only 32768 Hz will be output
Rhyme 0:6edcd7b8b324 248 * @note and other freq clock will not be generated.
Rhyme 0:6edcd7b8b324 249 */
Rhyme 0:6edcd7b8b324 250 void setCLKOUTFrequency(uint8_t data) ;
Rhyme 0:6edcd7b8b324 251
Rhyme 0:6edcd7b8b324 252 /**
Rhyme 0:6edcd7b8b324 253 * get CLKOUT Frequency
Rhyme 0:6edcd7b8b324 254 * @param none
Rhyme 0:6edcd7b8b324 255 * @returns uint8_t CLKOUT Frequency
Rhyme 0:6edcd7b8b324 256 * @note please refer to setCLKOUTFrequency comment
Rhyme 0:6edcd7b8b324 257 * @note and Datasheet for details
Rhyme 0:6edcd7b8b324 258 */
Rhyme 0:6edcd7b8b324 259 uint8_t getCLKOUTFrequency(void) ;
Rhyme 0:6edcd7b8b324 260
Rhyme 0:6edcd7b8b324 261 /**
Rhyme 0:6edcd7b8b324 262 * set Timer Control
Rhyme 0:6edcd7b8b324 263 * @param uint8_t data TE_BIT (0x80) is enable
Rhyme 0:6edcd7b8b324 264 * @note bit[1] TD1, bit[0] TD0
Rhyme 0:6edcd7b8b324 265 * @note please refer to the Datasheet for the details
Rhyme 0:6edcd7b8b324 266 */
Rhyme 0:6edcd7b8b324 267 void setTimerControl(uint8_t data) ;
Rhyme 0:6edcd7b8b324 268
Rhyme 0:6edcd7b8b324 269 /**
Rhyme 0:6edcd7b8b324 270 * get Timer Control
Rhyme 0:6edcd7b8b324 271 * @pram none
Rhyme 0:6edcd7b8b324 272 * @returns uint8_t Timer Control register value
Rhyme 0:6edcd7b8b324 273 */
Rhyme 0:6edcd7b8b324 274 uint8_t getTimerControl(void) ;
Rhyme 0:6edcd7b8b324 275
Rhyme 0:6edcd7b8b324 276 /**
Rhyme 0:6edcd7b8b324 277 * set Timer
Rhyme 0:6edcd7b8b324 278 * @param uint8_t data preset value for the count down timer
Rhyme 0:6edcd7b8b324 279 * @note please refer to the Datasheet for the details
Rhyme 0:6edcd7b8b324 280 */
Rhyme 0:6edcd7b8b324 281 void setTimer(uint8_t data) ;
Rhyme 0:6edcd7b8b324 282
Rhyme 0:6edcd7b8b324 283 /**
Rhyme 0:6edcd7b8b324 284 * get Timer
Rhyme 0:6edcd7b8b324 285 * @param none
Rhyme 0:6edcd7b8b324 286 * @returns uint8_t timer value
Rhyme 0:6edcd7b8b324 287 */
Rhyme 0:6edcd7b8b324 288 uint8_t getTimer(void) ;
Rhyme 0:6edcd7b8b324 289
Rhyme 0:6edcd7b8b324 290 /**
Rhyme 0:6edcd7b8b324 291 * stop RTC
Rhyme 0:6edcd7b8b324 292 * @note assert the STOP_BIT of the control1 register
Rhyme 0:6edcd7b8b324 293 */
Rhyme 0:6edcd7b8b324 294 void stop(void) ;
Rhyme 0:6edcd7b8b324 295
Rhyme 0:6edcd7b8b324 296 /**
Rhyme 0:6edcd7b8b324 297 * start RTC
Rhyme 0:6edcd7b8b324 298 * @note clear the STOP_BIT of the control1 register
Rhyme 0:6edcd7b8b324 299 */
Rhyme 0:6edcd7b8b324 300 void start(void) ;
Rhyme 0:6edcd7b8b324 301
Rhyme 0:6edcd7b8b324 302 private:
Rhyme 0:6edcd7b8b324 303 I2C m_i2c;
Rhyme 0:6edcd7b8b324 304 int m_addr;
Rhyme 0:6edcd7b8b324 305 void readRegs(int addr, uint8_t * data, int len);
Rhyme 0:6edcd7b8b324 306 void writeRegs(uint8_t * data, int len);
Rhyme 0:6edcd7b8b324 307
Rhyme 0:6edcd7b8b324 308 };
Rhyme 0:6edcd7b8b324 309
Rhyme 0:6edcd7b8b324 310
Rhyme 0:6edcd7b8b324 311 #endif /* _RTC8564_H_ */