copy from mbed

Committer:
irsanjul
Date:
Thu Jun 18 08:57:58 2020 +0000
Revision:
1:41dd31bbbe6d
Parent:
0:b7ac3add7d83
pcf8523

Who changed what in which revision?

UserRevisionLine numberNew contents of line
irsanjul 0:b7ac3add7d83 1 #ifndef PCF8523_H
irsanjul 0:b7ac3add7d83 2 #define PCF8523_H
irsanjul 0:b7ac3add7d83 3
irsanjul 0:b7ac3add7d83 4 #include "mbed.h"
irsanjul 0:b7ac3add7d83 5
irsanjul 0:b7ac3add7d83 6 #define address 0xD0
irsanjul 0:b7ac3add7d83 7
irsanjul 0:b7ac3add7d83 8 class PCF8523
irsanjul 0:b7ac3add7d83 9 {
irsanjul 0:b7ac3add7d83 10 public:
irsanjul 0:b7ac3add7d83 11
irsanjul 0:b7ac3add7d83 12 enum RegisterName
irsanjul 0:b7ac3add7d83 13 {
irsanjul 0:b7ac3add7d83 14 // Control Register | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
irsanjul 0:b7ac3add7d83 15 CTRL1 = 0x00, // Ctrl 1 |Cap Sel| T | Stop | SR | 12-24 | SIE | AIE | CIE |
irsanjul 0:b7ac3add7d83 16 CTRL2 = 0x01, // Ctrl 2 | WTAF | CTAF | CTBF | SF | AF | WTAIE | CTAIE | CTBIE |
irsanjul 0:b7ac3add7d83 17 CTRL3 = 0x02, // Ctrl 3 | PM [2:0] | X | BSF | BLF | BSIE | BLIE |
irsanjul 0:b7ac3add7d83 18
irsanjul 0:b7ac3add7d83 19 // Time and Date Register
irsanjul 0:b7ac3add7d83 20 SEC = 0x03, // Second | OS | ( 0 - 59 ) |
irsanjul 0:b7ac3add7d83 21 MIN = 0x04, // Minute | X | ( 0 - 59 ) |
irsanjul 0:b7ac3add7d83 22 HOUR = 0x05, // Hour | X | X | AM/PM | ( 1 - 12 ) |
irsanjul 0:b7ac3add7d83 23 // Hour | X | X | ( 0 - 23 ) |
irsanjul 0:b7ac3add7d83 24 DAY = 0x06, // Day | X | X | ( 1 - 31 ) |
irsanjul 0:b7ac3add7d83 25 WDAY = 0x07, // Day of week | X | X | X | X | X | ( 0 - 6 ) |
irsanjul 0:b7ac3add7d83 26 MONTH = 0x08, // month | X | X | X | ( 1 - 12 ) |
irsanjul 0:b7ac3add7d83 27 YEAR = 0x09, // year | ( 0 - 99 ) |
irsanjul 0:b7ac3add7d83 28
irsanjul 0:b7ac3add7d83 29 // Alarm register
irsanjul 0:b7ac3add7d83 30 MINALARM = 0x0A, // Minute | AEN_M | ( 0 - 59 ) |
irsanjul 0:b7ac3add7d83 31 HOURALARM = 0x0B, // Hour | AEN_H | X | ( 0 - 23 ) |
irsanjul 0:b7ac3add7d83 32 // Hour | AEN_H | X | AM/PM | ( 1 - 12 ) |
irsanjul 0:b7ac3add7d83 33 DAYALARM = 0x0C, // Day | AEN_D | X | ( 1 - 31 ) |
irsanjul 0:b7ac3add7d83 34 WDAYALARM = 0x0D, // Day of week | AEN_W | X | X | X | X | ( 0 - 6 ) |
irsanjul 0:b7ac3add7d83 35
irsanjul 0:b7ac3add7d83 36 // Offset Control Register
irsanjul 0:b7ac3add7d83 37 OFFSET = 0x0E, // OffSet ctrl | MODE | OFFSET |
irsanjul 0:b7ac3add7d83 38
irsanjul 0:b7ac3add7d83 39 // ClockOut adn Timer Register
irsanjul 0:b7ac3add7d83 40 TMRCLKOUT = 0x0F, // Timer Clk Out| TAM | TBM | COF | TAC | TBC |
irsanjul 0:b7ac3add7d83 41 TIMERAFR = 0x10, // Timer A Freq | X | X | X | X | X | TAQ |
irsanjul 0:b7ac3add7d83 42 TIMERARG = 0x11, // Timer A Reg | T_A [7:0] |
irsanjul 0:b7ac3add7d83 43 TIMERBFR = 0x12, // Timer B Freq | X | TBW | X | TBQ |
irsanjul 0:b7ac3add7d83 44 TIMERBRG = 0x13, // Timer B Reg | T_B [7:0] |
irsanjul 0:b7ac3add7d83 45 };
irsanjul 0:b7ac3add7d83 46
irsanjul 0:b7ac3add7d83 47 bool write(char adr, char data);
irsanjul 0:b7ac3add7d83 48 char read(char adr);
irsanjul 0:b7ac3add7d83 49 time_t now();
irsanjul 0:b7ac3add7d83 50 bool set_time(time_t time);
irsanjul 0:b7ac3add7d83 51 bool set_alarm(const struct tm &now, bool min_en=false, bool hour_en=false, bool mday_en=false);
irsanjul 0:b7ac3add7d83 52 bool enable_alarm(bool enable=false);
irsanjul 0:b7ac3add7d83 53 bool alarm_off(char buffer);
irsanjul 0:b7ac3add7d83 54 bool check_alarm();
irsanjul 0:b7ac3add7d83 55 bool IsConnected();
irsanjul 0:b7ac3add7d83 56 bool software_reset();
irsanjul 1:41dd31bbbe6d 57 bool Initialize(char adr, uint8_t val);
irsanjul 0:b7ac3add7d83 58
irsanjul 0:b7ac3add7d83 59 PCF8523(PinName scl, PinName sda);
irsanjul 0:b7ac3add7d83 60 ~PCF8523();
irsanjul 0:b7ac3add7d83 61
irsanjul 0:b7ac3add7d83 62 private:
irsanjul 0:b7ac3add7d83 63 I2C i2c;
irsanjul 0:b7ac3add7d83 64 char data[64];
irsanjul 0:b7ac3add7d83 65 char w[32];
irsanjul 0:b7ac3add7d83 66 char r[32];
irsanjul 0:b7ac3add7d83 67
irsanjul 0:b7ac3add7d83 68 static int bcdToDecimal(int bcd) {
irsanjul 0:b7ac3add7d83 69 return ((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F);
irsanjul 0:b7ac3add7d83 70 }
irsanjul 0:b7ac3add7d83 71
irsanjul 0:b7ac3add7d83 72 static int decimalToBcd(int dec) {
irsanjul 0:b7ac3add7d83 73 return (dec % 10) + ((dec / 10) << 4);
irsanjul 0:b7ac3add7d83 74 }
irsanjul 0:b7ac3add7d83 75 };
irsanjul 0:b7ac3add7d83 76
irsanjul 0:b7ac3add7d83 77 #endif