Improved Radio Buffering and Initialization #19
+101
−120
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.
The radio TX FIFO was appending only 4 bytes at a time because the FIFO would sometimes overflow when adding bigger chunks. This change resolves that issue by adding hysteresis to the almost empty bit polling, which gets updated only with the TX clock of the radio.
Disabling the RX interrupt and switching to PLL tune mode was apparently causing intermittent data loss. A ping pong buffer makes it possible to leave the interrupt enabled such that the TDM loop can operate on one buffer while the RX interrupt operates on the other. Since the program does not copy any data, the buffer switching is efficient in terms of performance.
Sometimes after issuing ATZ the radio would fail to initialize properly; a fix is included to check the radio version only after the chip asserts CHIPRDY. The EZRADIOPRO Detailed Register Descriptions (AN440 rev 0.7, page 12) indicate that SPI operations should occur only after this occurs.