aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Plowman <[email protected]>2024-02-16 17:24:58 +0000
committerFrank Plowman <[email protected]>2024-02-16 17:24:58 +0000
commitbcb0be21c180d4107e636083f5a1543a1f51447b (patch)
tree20d869076985d342475e234cd0f2afc41d95939b
parent26fc17e8a7db0957896db28cb2299ab9cf89aea5 (diff)
embassy-nrf: Fix PDM gain register value derivation
Co-authored-by: Sol Harter <[email protected]>
-rw-r--r--embassy-nrf/src/pdm.rs18
1 files changed, 9 insertions, 9 deletions
diff --git a/embassy-nrf/src/pdm.rs b/embassy-nrf/src/pdm.rs
index 24fa29a4a..64d414d8f 100644
--- a/embassy-nrf/src/pdm.rs
+++ b/embassy-nrf/src/pdm.rs
@@ -4,6 +4,7 @@
4 4
5use core::future::poll_fn; 5use core::future::poll_fn;
6use core::marker::PhantomData; 6use core::marker::PhantomData;
7use core::mem;
7use core::sync::atomic::{compiler_fence, Ordering}; 8use core::sync::atomic::{compiler_fence, Ordering};
8use core::task::Poll; 9use core::task::Poll;
9 10
@@ -145,15 +146,14 @@ impl<'d, T: Instance> Pdm<'d, T> {
145 } 146 }
146 147
147 fn _set_gain(r: &crate::pac::pdm::RegisterBlock, gain_left: I7F1, gain_right: I7F1) { 148 fn _set_gain(r: &crate::pac::pdm::RegisterBlock, gain_left: I7F1, gain_right: I7F1) {
148 let gain_left = gain_left 149 let gain_to_bits = |gain: I7F1| -> u8 {
149 .saturating_add(I7F1::from_bits(40)) 150 let gain = gain.saturating_add(I7F1::from_bits(0x28))
150 .saturating_to_num::<u8>() 151 .to_bits()
151 .clamp(0, 0x50); 152 .clamp(0, 0x50);
152 let gain_right = gain_right 153 unsafe { mem::transmute(gain) }
153 .saturating_add(I7F1::from_bits(40)) 154 };
154 .saturating_to_num::<u8>() 155 let gain_left = gain_to_bits(gain_left);
155 .clamp(0, 0x50); 156 let gain_right = gain_to_bits(gain_right);
156
157 r.gainl.write(|w| unsafe { w.gainl().bits(gain_left) }); 157 r.gainl.write(|w| unsafe { w.gainl().bits(gain_left) });
158 r.gainr.write(|w| unsafe { w.gainr().bits(gain_right) }); 158 r.gainr.write(|w| unsafe { w.gainr().bits(gain_right) });
159 } 159 }