@@ -219,13 +219,16 @@ static bool InitFifo(Fifo_t * fifo, uint8_t * pDataBuffer, uint16_t bufferSize)
219
219
static uint16_t AvailableDataCount (Fifo_t * fifo)
220
220
{
221
221
uint16_t size = 0 ;
222
+ CORE_DECLARE_IRQ_STATE;
222
223
224
+ CORE_ENTER_ATOMIC ();
223
225
// if equal there is no data return 0 directly
224
226
if (fifo->Tail != fifo->Head )
225
227
{
226
228
// determine if a wrap around occurred to get the right data size avalaible.
227
229
size = (fifo->Tail < fifo->Head ) ? (fifo->MaxSize - fifo->Head + fifo->Tail ) : (fifo->Tail - fifo->Head );
228
230
}
231
+ CORE_EXIT_ATOMIC ();
229
232
230
233
return size;
231
234
}
@@ -249,10 +252,12 @@ static void WriteToFifo(Fifo_t * fifo, uint8_t * pDataToWrite, uint16_t SizeToWr
249
252
VerifyOrDie (fifo != nullptr );
250
253
VerifyOrDie (pDataToWrite != nullptr );
251
254
VerifyOrDie (SizeToWrite <= fifo->MaxSize );
255
+ CORE_DECLARE_IRQ_STATE;
252
256
253
257
// Overwrite is not allowed
254
258
if (RemainingSpace (fifo) >= SizeToWrite)
255
259
{
260
+ CORE_ENTER_ATOMIC ();
256
261
uint16_t nBytesBeforWrap = (fifo->MaxSize - fifo->Tail );
257
262
if (SizeToWrite > nBytesBeforWrap)
258
263
{
@@ -267,6 +272,7 @@ static void WriteToFifo(Fifo_t * fifo, uint8_t * pDataToWrite, uint16_t SizeToWr
267
272
}
268
273
269
274
fifo->Tail = (fifo->Tail + SizeToWrite) % fifo->MaxSize ; // increment tail with wraparound
275
+ CORE_EXIT_ATOMIC ();
270
276
}
271
277
}
272
278
@@ -280,8 +286,11 @@ static uint16_t RetrieveFromFifo(Fifo_t * fifo, uint8_t * pData, uint16_t SizeTo
280
286
VerifyOrDie (fifo != nullptr );
281
287
VerifyOrDie (pData != nullptr );
282
288
VerifyOrDie (SizeToRead <= fifo->MaxSize );
289
+ CORE_DECLARE_IRQ_STATE;
283
290
284
291
uint16_t ReadSize = std::min (SizeToRead, AvailableDataCount (fifo));
292
+
293
+ CORE_ENTER_ATOMIC ();
285
294
uint16_t nBytesBeforWrap = (fifo->MaxSize - fifo->Head );
286
295
287
296
if (ReadSize > nBytesBeforWrap)
@@ -295,6 +304,7 @@ static uint16_t RetrieveFromFifo(Fifo_t * fifo, uint8_t * pData, uint16_t SizeTo
295
304
}
296
305
297
306
fifo->Head = (fifo->Head + ReadSize) % fifo->MaxSize ; // increment tail with wraparound
307
+ CORE_EXIT_ATOMIC ();
298
308
299
309
return ReadSize;
300
310
}
0 commit comments