Skip to content

Commit f49f87f

Browse files
timnicolash2zero
authored andcommitted
update Wire lib
1 parent 8f25513 commit f49f87f

File tree

1 file changed

+50
-8
lines changed

1 file changed

+50
-8
lines changed

libraries/Wire/Wire_nRF52.cpp

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
151151
{
152152
return 0;
153153
}
154+
uint32_t start;
154155

155156
size_t byteRead = 0;
156157
rxBuffer.clear();
@@ -162,22 +163,42 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
162163
_p_twim->RXD.MAXCNT = quantity;
163164
_p_twim->TASKS_STARTRX = 0x1UL;
164165

165-
while(!_p_twim->EVENTS_RXSTARTED && !_p_twim->EVENTS_ERROR);
166+
start = millis();
167+
while(!_p_twim->EVENTS_RXSTARTED && !_p_twim->EVENTS_ERROR) {
168+
if (millis() - start >= 3) {
169+
return 0;
170+
}
171+
}
166172
_p_twim->EVENTS_RXSTARTED = 0x0UL;
167173

168-
while(!_p_twim->EVENTS_LASTRX && !_p_twim->EVENTS_ERROR);
174+
start = millis();
175+
while(!_p_twim->EVENTS_LASTRX && !_p_twim->EVENTS_ERROR) {
176+
if (millis() - start >= 3) {
177+
return 0;
178+
}
179+
}
169180
_p_twim->EVENTS_LASTRX = 0x0UL;
170181

171182
if (stopBit || _p_twim->EVENTS_ERROR)
172183
{
173184
_p_twim->TASKS_STOP = 0x1UL;
174-
while(!_p_twim->EVENTS_STOPPED);
185+
start = millis();
186+
while(!_p_twim->EVENTS_STOPPED) {
187+
if (millis() - start >= 3) {
188+
return 0;
189+
}
190+
}
175191
_p_twim->EVENTS_STOPPED = 0x0UL;
176192
}
177193
else
178194
{
179195
_p_twim->TASKS_SUSPEND = 0x1UL;
180-
while(!_p_twim->EVENTS_SUSPENDED);
196+
start = millis();
197+
while(!_p_twim->EVENTS_SUSPENDED) {
198+
if (millis() - start >= 3) {
199+
return 0;
200+
}
201+
}
181202
_p_twim->EVENTS_SUSPENDED = 0x0UL;
182203
}
183204

@@ -212,6 +233,7 @@ void TwoWire::beginTransmission(uint8_t address) {
212233
// 4 : Other error
213234
uint8_t TwoWire::endTransmission(bool stopBit)
214235
{
236+
uint32_t start;
215237
transmissionBegun = false ;
216238

217239
// Start I2C transmission
@@ -224,24 +246,44 @@ uint8_t TwoWire::endTransmission(bool stopBit)
224246

225247
_p_twim->TASKS_STARTTX = 0x1UL;
226248

227-
while(!_p_twim->EVENTS_TXSTARTED && !_p_twim->EVENTS_ERROR);
249+
start = millis();
250+
while(!_p_twim->EVENTS_TXSTARTED && !_p_twim->EVENTS_ERROR) {
251+
if (millis() - start >= 3) {
252+
return 4;
253+
}
254+
}
228255
_p_twim->EVENTS_TXSTARTED = 0x0UL;
229256

257+
start = millis();
230258
if (txBuffer.available()) {
231-
while(!_p_twim->EVENTS_LASTTX && !_p_twim->EVENTS_ERROR);
259+
while(!_p_twim->EVENTS_LASTTX && !_p_twim->EVENTS_ERROR) {
260+
if (millis() - start >= 3) {
261+
return 4;
262+
}
263+
}
232264
}
233265
_p_twim->EVENTS_LASTTX = 0x0UL;
234266

235267
if (stopBit || _p_twim->EVENTS_ERROR)
236268
{
237269
_p_twim->TASKS_STOP = 0x1UL;
238-
while(!_p_twim->EVENTS_STOPPED);
270+
start = millis();
271+
while(!_p_twim->EVENTS_STOPPED) {
272+
if (millis() - start >= 3) {
273+
return 4;
274+
}
275+
}
239276
_p_twim->EVENTS_STOPPED = 0x0UL;
240277
}
241278
else
242279
{
243280
_p_twim->TASKS_SUSPEND = 0x1UL;
244-
while(!_p_twim->EVENTS_SUSPENDED);
281+
start = millis();
282+
while(!_p_twim->EVENTS_SUSPENDED) {
283+
if (millis() - start >= 3) {
284+
return 4;
285+
}
286+
}
245287
_p_twim->EVENTS_SUSPENDED = 0x0UL;
246288
}
247289

0 commit comments

Comments
 (0)