Detect rollover using positions rather than DMA flags #127
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I suspect that there is a timing issue with reading the flag then
clearing it in a non-atomic way. We can still use the flag to detect
overruns because it will never give a false positive, but it CAN give a
false negative it seems
Storing the position that we last witnessed the DMA as being at and
performing a wrap when that position is less than our current positon
gives a reliable detection and no fale overruns
We still examining the complete flag and the positions of the current
DMA pointer and our previous one to detect overruns since the fla will
never give a false positive
This is a fix for #104