-
Notifications
You must be signed in to change notification settings - Fork 2.1k
drivers/periph_timer: add timer_get_closest_freq()
#20581
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
096d2ad
to
555ab6a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested successfully with F030 and F302 Nucleos. I have more Nucleos to test with if required.
Also tested successfully with an nRF52840DK.
drivers/include/periph/timer.h
Outdated
* @brief Search the frequency supported by the timer that is closest to | ||
* a given target frequency, efficiently | ||
* | ||
* @param dev Timer to get the closest supported frequency for |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you decide to change it: The same is true for the description in
timer_query_freqs
😅
Can you address this as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can squash that change directly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successfully tested on a BOARD=z1
with MSP430 (will do the same for #20582)
You can squash the fixups. |
02db09a
to
c9861b2
Compare
Add an API to search for the frequency supported by a timer that is closest to the given target frequency. This is in fact non-trivial to get right, as pre-scaler registers can be 16 bit or even 32 bit in size, making a naive loop over all possible pre-scalers too expensive (computationally). Co-authored-by: mguetschow <mikolai.guetschow@tu-dresden.de>
c9861b2
to
8b77df4
Compare
Thx a lot! |
Contribution description
This provides a helper function that builds upon the
periph_timer_query_freqs
feature to find the frequency supported by a given timer that is closest to a given target frequency.This functionality isn't as straight forward to implement, as a naive implementation iterating over all supported pre-scalers will be prohibitively expensive when the pre-scaler register is 16 bit or even 32 bit wide.
Instead, a binary search is performed plus some corner case handling in case the target frequency cannot exactly be met, in which it is checked if the highest frequency below the target or the smallest above the target is closer.
Testing procedure
The test app was extended:
Issues/PRs references
None