aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorChristian Perez Llamas <[email protected]>2022-11-29 01:09:47 +0100
committerChristian Perez Llamas <[email protected]>2022-11-29 01:09:47 +0100
commit199504be564b231154e07c58bcc52b11afdc9fe7 (patch)
tree88d66d98acf9edbdb23d869d81f453fd3b2eb0f1 /examples
parent6b8ab32536bf2e831ec424b5aaf489bb1f53d017 (diff)
Optimization to be able to work with only 2 buffers
Diffstat (limited to 'examples')
-rw-r--r--examples/nrf/src/bin/i2s_waveform.rs20
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
13type Sample = i16; 13type Sample = i16;
14 14
15const NUM_SAMPLES: usize = 6000; 15const NUM_BUFFERS: usize = 2;
16const NUM_SAMPLES: usize = 50;
16 17
17#[embassy_executor::main] 18#[embassy_executor::main]
18async fn main(_spawner: Spawner) { 19async 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
68impl Waveform { 65impl 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);