@@ -151,6 +151,7 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
151
151
{
152
152
return 0 ;
153
153
}
154
+ uint32_t start;
154
155
155
156
size_t byteRead = 0 ;
156
157
rxBuffer.clear ();
@@ -162,22 +163,42 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
162
163
_p_twim->RXD .MAXCNT = quantity;
163
164
_p_twim->TASKS_STARTRX = 0x1UL ;
164
165
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
+ }
166
172
_p_twim->EVENTS_RXSTARTED = 0x0UL ;
167
173
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
+ }
169
180
_p_twim->EVENTS_LASTRX = 0x0UL ;
170
181
171
182
if (stopBit || _p_twim->EVENTS_ERROR )
172
183
{
173
184
_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
+ }
175
191
_p_twim->EVENTS_STOPPED = 0x0UL ;
176
192
}
177
193
else
178
194
{
179
195
_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
+ }
181
202
_p_twim->EVENTS_SUSPENDED = 0x0UL ;
182
203
}
183
204
@@ -212,6 +233,7 @@ void TwoWire::beginTransmission(uint8_t address) {
212
233
// 4 : Other error
213
234
uint8_t TwoWire::endTransmission (bool stopBit)
214
235
{
236
+ uint32_t start;
215
237
transmissionBegun = false ;
216
238
217
239
// Start I2C transmission
@@ -224,24 +246,44 @@ uint8_t TwoWire::endTransmission(bool stopBit)
224
246
225
247
_p_twim->TASKS_STARTTX = 0x1UL ;
226
248
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
+ }
228
255
_p_twim->EVENTS_TXSTARTED = 0x0UL ;
229
256
257
+ start = millis ();
230
258
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
+ }
232
264
}
233
265
_p_twim->EVENTS_LASTTX = 0x0UL ;
234
266
235
267
if (stopBit || _p_twim->EVENTS_ERROR )
236
268
{
237
269
_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
+ }
239
276
_p_twim->EVENTS_STOPPED = 0x0UL ;
240
277
}
241
278
else
242
279
{
243
280
_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
+ }
245
287
_p_twim->EVENTS_SUSPENDED = 0x0UL ;
246
288
}
247
289
0 commit comments