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