1- #include " M5_BM8563 .h"
1+ #include " Unit_RTC .h"
22
3- BM8563::BM8563 () { _addr = DEVICE_ADDR; }
3+ Unit_RTC::Unit_RTC () {
4+ _addr = DEVICE_ADDR;
5+ }
46
5- BM8563::BM8563 (uint8_t addr) { _addr = addr; }
7+ Unit_RTC::Unit_RTC (uint8_t addr) {
8+ _addr = addr;
9+ }
610
7- void BM8563::begin () {
11+ /* ! @brief Initialize the RTC. */
12+ void Unit_RTC::begin () {
813 _wire = &Wire;
914 _wire->begin ();
1015 writeReg (0x00 , 0x00 );
1116 writeReg (0x01 , 0x00 );
1217 writeReg (0x0D , 0x00 );
1318}
1419
15- void BM8563::begin (TwoWire *wire) {
20+ /* ! @brief Initialize the RTC. */
21+ void Unit_RTC::begin (TwoWire *wire) {
1622 _wire = wire;
1723 _wire->begin ();
1824 writeReg (0x00 , 0x00 );
1925 writeReg (0x01 , 0x00 );
2026 writeReg (0x0D , 0x00 );
2127}
2228
23- void BM8563::begin (TwoWire *wire, uint8_t scl, uint8_t sda, uint32_t i2c_freq) {
29+ /* ! @brief Initialize the RTC. */
30+ void Unit_RTC::begin (TwoWire *wire, uint8_t scl, uint8_t sda,
31+ uint32_t i2c_freq) {
2432 _wire = wire;
25- _wire->begin (sda, scl, i2c_freq);
33+ _wire->begin (DEVICE_ADDR, sda, scl, i2c_freq);
2634 writeReg (0x00 , 0x00 );
2735 writeReg (0x01 , 0x00 );
2836 writeReg (0x0D , 0x00 );
2937}
3038
31- void BM8563::writeReg (uint8_t reg, uint8_t data) {
32- _wire->beginTransmission (0x51 );
39+ /* ! @brief Write data to register. */
40+ void Unit_RTC::writeReg (uint8_t reg, uint8_t data) {
41+ _wire->beginTransmission (DEVICE_ADDR);
3342 _wire->write (reg);
3443 _wire->write (data);
3544 _wire->endTransmission ();
3645}
3746
38- uint8_t BM8563::ReadReg (uint8_t reg) {
39- _wire->beginTransmission (0x51 );
47+ /* ! @brief Read data from register. */
48+ uint8_t Unit_RTC::ReadReg (uint8_t reg) {
49+ _wire->beginTransmission (DEVICE_ADDR);
4050 _wire->write (reg);
4151 _wire->endTransmission (false );
42- _wire->requestFrom (0x51 , 1 );
52+ _wire->requestFrom (DEVICE_ADDR , 1 );
4353 return _wire->read ();
4454}
4555
46- void BM8563::getBm8563Time (void ) {
47- _wire->beginTransmission (0x51 );
48- _wire->write (0x02 );
49- _wire->endTransmission (false );
50- _wire->requestFrom (0x51 , 7 );
51- while (_wire->available ()) {
52- _trdata[0 ] = _wire->read ();
53- _trdata[1 ] = _wire->read ();
54- _trdata[2 ] = _wire->read ();
55- _trdata[3 ] = _wire->read ();
56- _trdata[4 ] = _wire->read ();
57- _trdata[5 ] = _wire->read ();
58- _trdata[6 ] = _wire->read ();
59- }
60-
61- DataMask ();
62- Bcd2asc ();
63- Str2Time ();
64- }
65-
66- void BM8563::Str2Time (void ) {
56+ void Unit_RTC::Str2Time (void ) {
6757 Second = (asc[0 ] - 0x30 ) * 10 + asc[1 ] - 0x30 ;
6858 Minute = (asc[2 ] - 0x30 ) * 10 + asc[3 ] - 0x30 ;
6959 Hour = (asc[4 ] - 0x30 ) * 10 + asc[5 ] - 0x30 ;
@@ -76,7 +66,7 @@ void BM8563::Str2Time(void) {
7666 */
7767}
7868
79- void BM8563 ::DataMask () {
69+ void Unit_RTC ::DataMask () {
8070 _trdata[0 ] = _trdata[0 ] & 0x7f ; // 秒
8171 _trdata[1 ] = _trdata[1 ] & 0x7f ; // 分
8272 _trdata[2 ] = _trdata[2 ] & 0x3f ; // 时
@@ -95,7 +85,7 @@ void BM8563::DataMask() {
9585入口参数:
9686返 回 值:无
9787***********************************************************************/
98- void BM8563 ::Bcd2asc (void ) {
88+ void Unit_RTC ::Bcd2asc (void ) {
9989 uint8_t i, j;
10090 for (j = 0 , i = 0 ; i < 7 ; i++) {
10191 asc[j++] =
@@ -104,13 +94,13 @@ void BM8563::Bcd2asc(void) {
10494 }
10595}
10696
107- uint8_t BM8563 ::Bcd2ToByte (uint8_t Value) {
97+ uint8_t Unit_RTC ::Bcd2ToByte (uint8_t Value) {
10898 uint8_t tmp = 0 ;
10999 tmp = ((uint8_t )(Value & (uint8_t )0xF0 ) >> (uint8_t )0x4 ) * 10 ;
110100 return (tmp + (Value & (uint8_t )0x0F ));
111101}
112102
113- uint8_t BM8563 ::ByteToBcd2 (uint8_t Value) {
103+ uint8_t Unit_RTC ::ByteToBcd2 (uint8_t Value) {
114104 uint8_t bcdhigh = 0 ;
115105
116106 while (Value >= 10 ) {
@@ -121,14 +111,14 @@ uint8_t BM8563::ByteToBcd2(uint8_t Value) {
121111 return ((uint8_t )(bcdhigh << 4 ) | Value);
122112}
123113
124- void BM8563 ::getTime (rtc_time_type *RTC_TimeStruct) {
114+ void Unit_RTC ::getTime (rtc_time_type *RTC_TimeStruct) {
125115 // if()
126116 uint8_t buf[3 ] = {0 };
127117
128- _wire->beginTransmission (0x51 );
118+ _wire->beginTransmission (DEVICE_ADDR );
129119 _wire->write (0x02 );
130120 _wire->endTransmission (false );
131- _wire->requestFrom (0x51 , 3 );
121+ _wire->requestFrom (DEVICE_ADDR , 3 );
132122
133123 while (_wire->available ()) {
134124 buf[0 ] = _wire->read ();
@@ -141,12 +131,12 @@ void BM8563::getTime(rtc_time_type *RTC_TimeStruct) {
141131 RTC_TimeStruct->Hours = Bcd2ToByte (buf[2 ] & 0x3f ); // 时
142132}
143133
144- int BM8563 ::setTime (rtc_time_type *RTC_TimeStruct) {
134+ int Unit_RTC ::setTime (rtc_time_type *RTC_TimeStruct) {
145135 if (RTC_TimeStruct == NULL || RTC_TimeStruct->Hours > 24 ||
146136 RTC_TimeStruct->Minutes > 60 || RTC_TimeStruct->Seconds > 60 )
147137 return 0 ;
148138
149- _wire->beginTransmission (0x51 );
139+ _wire->beginTransmission (DEVICE_ADDR );
150140 _wire->write (0x02 );
151141 _wire->write (ByteToBcd2 (RTC_TimeStruct->Seconds ));
152142 _wire->write (ByteToBcd2 (RTC_TimeStruct->Minutes ));
@@ -155,13 +145,13 @@ int BM8563::setTime(rtc_time_type *RTC_TimeStruct) {
155145 return 1 ;
156146}
157147
158- void BM8563 ::getDate (rtc_date_type *RTC_DateStruct) {
148+ void Unit_RTC ::getDate (rtc_date_type *RTC_DateStruct) {
159149 uint8_t buf[4 ] = {0 };
160150
161- _wire->beginTransmission (0x51 );
151+ _wire->beginTransmission (DEVICE_ADDR );
162152 _wire->write (0x05 );
163153 _wire->endTransmission (false );
164- _wire->requestFrom (0x51 , 4 );
154+ _wire->requestFrom (DEVICE_ADDR , 4 );
165155
166156 while (_wire->available ()) {
167157 buf[0 ] = _wire->read ();
@@ -181,11 +171,11 @@ void BM8563::getDate(rtc_date_type *RTC_DateStruct) {
181171 }
182172}
183173
184- int BM8563 ::setDate (rtc_date_type *RTC_DateStruct) {
174+ int Unit_RTC ::setDate (rtc_date_type *RTC_DateStruct) {
185175 if (RTC_DateStruct == NULL || RTC_DateStruct->WeekDay > 7 ||
186176 RTC_DateStruct->Date > 31 || RTC_DateStruct->Month > 12 )
187177 return 0 ;
188- _wire->beginTransmission (0x51 );
178+ _wire->beginTransmission (DEVICE_ADDR );
189179 _wire->write (0x05 );
190180 _wire->write (ByteToBcd2 (RTC_DateStruct->Date ));
191181 _wire->write (ByteToBcd2 (RTC_DateStruct->WeekDay ));
@@ -203,7 +193,7 @@ int BM8563::setDate(rtc_date_type *RTC_DateStruct) {
203193 return 1 ;
204194}
205195
206- int BM8563 ::setAlarmIRQ (int afterSeconds) {
196+ int Unit_RTC ::setAlarmIRQ (int afterSeconds) {
207197 uint8_t reg_value = 0 ;
208198 reg_value = ReadReg (0x01 );
209199
@@ -234,7 +224,7 @@ int BM8563::setAlarmIRQ(int afterSeconds) {
234224 return afterSeconds * div;
235225}
236226
237- int BM8563 ::setAlarmIRQ (const rtc_time_type &RTC_TimeStruct) {
227+ int Unit_RTC ::setAlarmIRQ (const rtc_time_type &RTC_TimeStruct) {
238228 uint8_t irq_enable = false ;
239229 uint8_t out_buf[4 ] = {0x80 , 0x80 , 0x80 , 0x80 };
240230
@@ -267,8 +257,8 @@ int BM8563::setAlarmIRQ(const rtc_time_type &RTC_TimeStruct) {
267257 return irq_enable ? 1 : 0 ;
268258}
269259
270- int BM8563 ::setAlarmIRQ (const rtc_date_type &RTC_DateStruct,
271- const rtc_time_type &RTC_TimeStruct) {
260+ int Unit_RTC ::setAlarmIRQ (const rtc_date_type &RTC_DateStruct,
261+ const rtc_time_type &RTC_TimeStruct) {
272262 uint8_t irq_enable = false ;
273263 uint8_t out_buf[4 ] = {0x80 , 0x80 , 0x80 , 0x80 };
274264
@@ -308,11 +298,11 @@ int BM8563::setAlarmIRQ(const rtc_date_type &RTC_DateStruct,
308298 return irq_enable ? 1 : 0 ;
309299}
310300
311- void BM8563 ::clearIRQ () {
301+ void Unit_RTC ::clearIRQ () {
312302 uint8_t data = ReadReg (0x01 );
313303 writeReg (0x01 , data & 0xf3 );
314304}
315- void BM8563 ::disableIRQ () {
305+ void Unit_RTC ::disableIRQ () {
316306 clearIRQ ();
317307 uint8_t data = ReadReg (0x01 );
318308 writeReg (0x01 , data & 0xfC );
0 commit comments