RTC_NXP_Arduino 0.4.0
LED driver device operation sample code for Arduino
Loading...
Searching...
No Matches
PCF85263A.cpp
1#include "RTC_NXP.h"
2
3PCF85263A::PCF85263A( uint8_t i2c_address ) : I2C_device( i2c_address )
4{
5}
6
8{
9}
10
11void PCF85263A::begin( void )
12{
13}
14
15void PCF85263A::set( struct tm* now_tmp )
16{
17 // refer datasheet 7.2.6
18
19 time_t now_time;
20 struct tm* cnv_tmp;
21 uint8_t bf[ 10 ];
22
23 bf[ 0 ] = 0x01;
24 bf[ 1 ] = 0xA4;
25 bf[ 2 ] = 0;
26 bf[ 3 ] = dec2bcd( now_tmp->tm_sec );
27 bf[ 4 ] = dec2bcd( now_tmp->tm_min );
28 bf[ 5 ] = dec2bcd( now_tmp->tm_hour );
29 bf[ 6 ] = dec2bcd( now_tmp->tm_mday );
30 bf[ 8 ] = dec2bcd( now_tmp->tm_mon + 1 );
31 bf[ 9 ] = dec2bcd( now_tmp->tm_year - 100 );
32
33 now_time = mktime( now_tmp );
34 cnv_tmp = localtime( &now_time );
35 bf[ 5 ] = dec2bcd( cnv_tmp->tm_wday );
36
37 reg_w( Stop_enable, bf, sizeof( bf ) );
38 reg_w( Stop_enable, 0x00 );
39}
40
42{
43 return reg_r( Seconds ) & 0x80;
44}
45
46void PCF85263A::alarm( alarm_setting digit, int val )
47{
48 alarm( digit, val, 0 );
49}
50
51void PCF85263A::alarm( alarm_setting digit, int val, int int_sel )
52{
53 if ( WEEKDAY == digit ) {
54 Serial.println("*** 'WEEKDAY' for PCF85263A is unsupported alarm setting ***");
55 return;
56 }
57
58 set_alarm( digit, val, int_sel );
59}
60
61void PCF85263A::alarm( alarm_setting_85263A digit, int val, int int_sel )
62{
63 set_alarm( digit, val, int_sel );
64}
65
66void PCF85263A::set_alarm( int digit, int val, int int_sel )
67{
68 uint8_t en;
69
70 en = ((val & 80) ? 0x0 : 0x1) << digit;
71
72 reg_w( Second_alarm1 + digit, dec2bcd( val ) );
73 bit_op8( Alarm_enables, ~en, en );
74
75 uint8_t en_bit = (digit < 5) ? 0x10 : 0x80;
76 bit_op8( INTA_enable + int_sel, ~en_bit, en_bit );
77}
78
80{
81 reg_w( Alarm_enables, 0x00 );
82}
83
85{
86 bit_op8( INTA_enable, ~0x18, 0x18 );
87 bit_op8( INTB_enable, ~0x18, 0x18 );
88}
89
90uint8_t PCF85263A::int_clear( void )
91{
92 uint8_t status = reg_r( Flags );
93
94 reg_w( Flags, ~status );
95 return status;
96}
97
98time_t PCF85263A::rtc_time( void )
99{
100 struct tm now_tm;
101 uint8_t bf[ 8 ];
102
103 reg_r( _100th_seconds, bf, sizeof( bf ) );
104
105 now_tm.tm_sec = bcd2dec( bf[ 1 ] );
106 now_tm.tm_min = bcd2dec( bf[ 2 ] );
107 now_tm.tm_hour = bcd2dec( bf[ 3 ] );
108 now_tm.tm_mday = bcd2dec( bf[ 4 ] );
109 now_tm.tm_mon = bcd2dec( bf[ 6 ] ) - 1;
110 now_tm.tm_year = bcd2dec( bf[ 7 ] ) + 100;
111 now_tm.tm_isdst = 0;
112
113 return mktime( &now_tm );
114}
115
117{
118 bit_op8( Function, ~0x60, sel << 5 );
119 bit_op8( Function, ~0x60, sel << 5 );
120
121 bit_op8( INTA_enable + int_sel, ~0x40, (sel ? 1 : 0) << 6 );
122}
123
124void PCF85263A::pin_congfig( inta cfg_a, intb cfg_b )
125{
126 bit_op8(Pin_IO, ~0x0F, (cfg_b << 2) | cfg_a);
127}
128
129void PCF85263A::ts_congfig( int setting )
130{
131 bit_op8( Pin_IO, 0x0F, setting );
132 bit_op8( INTA_enable, ~0x04, 0x04 );
133}
134
135time_t PCF85263A::timestamp( int num )
136{
137 struct tm ts_tm;
138 uint8_t bf[ 6 ];
139 const int offset = 6;
140
141 reg_r( TSR1_seconds + offset * num, bf, sizeof( bf ) );
142
143 ts_tm.tm_sec = bcd2dec( bf[ 0 ] );
144 ts_tm.tm_min = bcd2dec( bf[ 1 ] );
145 ts_tm.tm_hour = bcd2dec( bf[ 2 ] );
146 ts_tm.tm_mday = bcd2dec( bf[ 3 ] );
147 ts_tm.tm_mon = bcd2dec( bf[ 4 ] ) - 1;
148 ts_tm.tm_year = bcd2dec( bf[ 5 ] ) + 100;
149 ts_tm.tm_isdst = 0;
150
151 return mktime( &ts_tm );
152
153
154}
void pin_congfig(inta cfg_a, intb cfg_b)
Definition: PCF85263A.cpp:124
void alarm_disable(void)
Definition: PCF85263A.cpp:84
void ts_congfig(int setting)
Definition: PCF85263A.cpp:129
void alarm(alarm_setting digit, int val)
Definition: PCF85263A.cpp:46
void periodic_interrupt_enable(periodic_int_select sel, int int_sel=0)
Definition: PCF85263A.cpp:116
uint8_t int_clear(void)
Definition: PCF85263A.cpp:90
virtual ~PCF85263A()
Definition: PCF85263A.cpp:7
time_t timestamp(int num)
Definition: PCF85263A.cpp:135
void begin(void)
Definition: PCF85263A.cpp:11
alarm_setting_85263A
Definition: RTC_NXP.h:580
bool oscillator_stop(void)
Definition: PCF85263A.cpp:41
PCF85263A(uint8_t i2c_address=(0xA2 > > 1))
Definition: PCF85263A.cpp:3
void alarm_clear(void)
Definition: PCF85263A.cpp:79
periodic_int_select
Definition: RTC_NXP.h:592
time_t rtc_time(void)
Definition: PCF85263A.cpp:98
void set(struct tm *now_tm)
Definition: PCF85263A.cpp:15
alarm_setting
Definition: RTC_NXP.h:35
static uint8_t dec2bcd(uint8_t v)
Definition: RTC_NXP.cpp:24
static uint8_t bcd2dec(uint8_t v)
Definition: RTC_NXP.cpp:19