diff options
| author | Ulf Lilleengen <[email protected]> | 2025-12-18 17:31:16 +0100 |
|---|---|---|
| committer | Ulf Lilleengen <[email protected]> | 2025-12-18 17:32:45 +0100 |
| commit | 01d8543bc71d003b6f3aad50d17ff4fd0fa7461a (patch) | |
| tree | 8cbc3a344ebfd7e5842da1f5b7bc70cc608af29c /embassy-nrf | |
| parent | b5b49cbcf3a991bf6d434b0870da50f3ee722612 (diff) | |
fix: avoid hang if calling now() before syscounter is enabled
If the time driver now() is called before the syscounter is enabled on nrf54,
it would hang. The fix checks if syscounter is enabled, and returns 0
if not.
Diffstat (limited to 'embassy-nrf')
| -rw-r--r-- | embassy-nrf/CHANGELOG.md | 2 | ||||
| -rw-r--r-- | embassy-nrf/src/time_driver.rs | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/embassy-nrf/CHANGELOG.md b/embassy-nrf/CHANGELOG.md index 0d7bfb5f0..921835417 100644 --- a/embassy-nrf/CHANGELOG.md +++ b/embassy-nrf/CHANGELOG.md | |||
| @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 8 | <!-- next-header --> | 8 | <!-- next-header --> |
| 9 | ## Unreleased - ReleaseDate | 9 | ## Unreleased - ReleaseDate |
| 10 | 10 | ||
| 11 | - bugfix: avoid hang if calling now() before syscounter is enabled on nrf54 | ||
| 12 | |||
| 11 | ## 0.9.0 - 2025-12-15 | 13 | ## 0.9.0 - 2025-12-15 |
| 12 | 14 | ||
| 13 | - changed: apply trimming values from FICR.TRIMCNF on nrf53/54l | 15 | - changed: apply trimming values from FICR.TRIMCNF on nrf53/54l |
diff --git a/embassy-nrf/src/time_driver.rs b/embassy-nrf/src/time_driver.rs index 35f65bd64..21d94cc30 100644 --- a/embassy-nrf/src/time_driver.rs +++ b/embassy-nrf/src/time_driver.rs | |||
| @@ -79,6 +79,10 @@ fn calc_now(period: u32, counter: u32) -> u64 { | |||
| 79 | #[cfg(feature = "_grtc")] | 79 | #[cfg(feature = "_grtc")] |
| 80 | fn syscounter() -> u64 { | 80 | fn syscounter() -> u64 { |
| 81 | let r = rtc(); | 81 | let r = rtc(); |
| 82 | if !r.mode().read().syscounteren() { | ||
| 83 | return 0; | ||
| 84 | } | ||
| 85 | |||
| 82 | r.syscounter(0).active().write(|w| w.set_active(true)); | 86 | r.syscounter(0).active().write(|w| w.set_active(true)); |
| 83 | loop { | 87 | loop { |
| 84 | let countl: u32 = r.syscounter(0).syscounterl().read(); | 88 | let countl: u32 = r.syscounter(0).syscounterl().read(); |
