embassy_rp: improve calculate_pio_clock_divider #5061
+55
−6
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 current implementation of
calculate_pio_clock_divideronly computes an integer divider, which is a missed opportunity since the return type explicitly represents an 8-bit fractional part.This implementation ensures that the fractional part of the clock divider is accurately calculated. It uses additional u32 division/mod operations; I think this is preferable to one u64 division, but that would work as well. I don't have a great understanding of how division works on rp2040, so any advice is welcome.
Other changes:
constand public, so if anyone wants to hardcode the system frequency they can avoid any runtime computation.inlineattributes because the function has grown quite a bit.Fixes #5048.