diff options
| author | Christian Perez Llamas <[email protected]> | 2022-11-29 01:09:47 +0100 |
|---|---|---|
| committer | Christian Perez Llamas <[email protected]> | 2022-11-29 01:09:47 +0100 |
| commit | 199504be564b231154e07c58bcc52b11afdc9fe7 (patch) | |
| tree | 88d66d98acf9edbdb23d869d81f453fd3b2eb0f1 /examples | |
| parent | 6b8ab32536bf2e831ec424b5aaf489bb1f53d017 (diff) | |
Optimization to be able to work with only 2 buffers
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/nrf/src/bin/i2s_waveform.rs | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/examples/nrf/src/bin/i2s_waveform.rs b/examples/nrf/src/bin/i2s_waveform.rs index 81858ff59..13b1300ea 100644 --- a/examples/nrf/src/bin/i2s_waveform.rs +++ b/examples/nrf/src/bin/i2s_waveform.rs | |||
| @@ -12,7 +12,8 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 12 | 12 | ||
| 13 | type Sample = i16; | 13 | type Sample = i16; |
| 14 | 14 | ||
| 15 | const NUM_SAMPLES: usize = 6000; | 15 | const NUM_BUFFERS: usize = 2; |
| 16 | const NUM_SAMPLES: usize = 50; | ||
| 16 | 17 | ||
| 17 | #[embassy_executor::main] | 18 | #[embassy_executor::main] |
| 18 | async fn main(_spawner: Spawner) { | 19 | async fn main(_spawner: Spawner) { |
| @@ -30,31 +31,27 @@ async fn main(_spawner: Spawner) { | |||
| 30 | let irq = interrupt::take!(I2S); | 31 | let irq = interrupt::take!(I2S); |
| 31 | let mut output_stream = I2S::master(p.I2S, irq, p.P0_25, p.P0_26, p.P0_27, master_clock, config).output(p.P0_28); | 32 | let mut output_stream = I2S::master(p.I2S, irq, p.P0_25, p.P0_26, p.P0_27, master_clock, config).output(p.P0_28); |
| 32 | 33 | ||
| 33 | let mut buffers: [i2s::AlignedBuffer<Sample, NUM_SAMPLES>; 3] = [ | 34 | let mut buffers: [i2s::AlignedBuffer<Sample, NUM_SAMPLES>; NUM_BUFFERS] = |
| 34 | i2s::AlignedBuffer::default(), | 35 | [i2s::AlignedBuffer::default(); NUM_BUFFERS]; |
| 35 | i2s::AlignedBuffer::default(), | ||
| 36 | i2s::AlignedBuffer::default(), | ||
| 37 | ]; | ||
| 38 | 36 | ||
| 39 | let mut waveform = Waveform::new(1.0 / sample_rate as f32); | 37 | let mut waveform = Waveform::new(1.0 / sample_rate as f32); |
| 40 | 38 | ||
| 41 | waveform.process(&mut buffers[0]); | 39 | waveform.process(&mut buffers[0]); |
| 42 | waveform.process(&mut buffers[1]); | ||
| 43 | 40 | ||
| 44 | output_stream.start(&buffers[0]).await.expect("I2S Start"); | 41 | output_stream.start(&buffers[0]).await.expect("I2S Start"); |
| 45 | 42 | ||
| 46 | let mut index = 1; | 43 | let mut index = 1; |
| 47 | loop { | 44 | loop { |
| 45 | waveform.process(&mut buffers[index]); | ||
| 46 | |||
| 48 | if let Err(err) = output_stream.send_from_ram(&buffers[index]).await { | 47 | if let Err(err) = output_stream.send_from_ram(&buffers[index]).await { |
| 49 | error!("{}", err); | 48 | error!("{}", err); |
| 50 | } | 49 | } |
| 51 | 50 | ||
| 52 | index += 1; | 51 | index += 1; |
| 53 | if index >= 3 { | 52 | if index >= NUM_BUFFERS { |
| 54 | index = 0; | 53 | index = 0; |
| 55 | } | 54 | } |
| 56 | |||
| 57 | waveform.process(&mut buffers[index]); | ||
| 58 | } | 55 | } |
| 59 | } | 56 | } |
| 60 | 57 | ||
| @@ -67,7 +64,8 @@ struct Waveform { | |||
| 67 | 64 | ||
| 68 | impl Waveform { | 65 | impl Waveform { |
| 69 | fn new(inv_sample_rate: f32) -> Self { | 66 | fn new(inv_sample_rate: f32) -> Self { |
| 70 | let carrier = SineOsc::new(); | 67 | let mut carrier = SineOsc::new(); |
| 68 | carrier.set_frequency(110.0, inv_sample_rate); | ||
| 71 | 69 | ||
| 72 | let mut freq_mod = SineOsc::new(); | 70 | let mut freq_mod = SineOsc::new(); |
| 73 | freq_mod.set_frequency(8.0, inv_sample_rate); | 71 | freq_mod.set_frequency(8.0, inv_sample_rate); |
