aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-08-03 11:25:51 +0000
committerGitHub <[email protected]>2023-08-03 11:25:51 +0000
commit2c96fe917de6e0120053e80d8da5a98d0d0f35d0 (patch)
tree0ced425ec4261c9d0e43c0c87f9edb11562515b1 /tests
parentb42a7ebd8c6f7b54aa4715cdb0721785892d5ae6 (diff)
parenta6b8f3d99478266b4f110e9c150ce3add5c3ffc6 (diff)
Merge pull request #1675 from pennae/rp-adc
rp: add dma-from-adc
Diffstat (limited to 'tests')
-rw-r--r--tests/rp/src/bin/adc.rs73
1 files changed, 60 insertions, 13 deletions
diff --git a/tests/rp/src/bin/adc.rs b/tests/rp/src/bin/adc.rs
index e659844ae..d6d58f0c0 100644
--- a/tests/rp/src/bin/adc.rs
+++ b/tests/rp/src/bin/adc.rs
@@ -6,7 +6,7 @@ mod common;
6 6
7use defmt::*; 7use defmt::*;
8use embassy_executor::Spawner; 8use embassy_executor::Spawner;
9use embassy_rp::adc::{Adc, Config, InterruptHandler, Pin}; 9use embassy_rp::adc::{Adc, Channel, Config, InterruptHandler, Sample};
10use embassy_rp::bind_interrupts; 10use embassy_rp::bind_interrupts;
11use embassy_rp::gpio::Pull; 11use embassy_rp::gpio::Pull;
12use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
@@ -22,12 +22,12 @@ async fn main(_spawner: Spawner) {
22 22
23 { 23 {
24 { 24 {
25 let mut p = Pin::new(&mut p.PIN_26, Pull::Down); 25 let mut p = Channel::new_pin(&mut p.PIN_26, Pull::Down);
26 defmt::assert!(adc.blocking_read(&mut p).unwrap() < 0b01_0000_0000); 26 defmt::assert!(adc.blocking_read(&mut p).unwrap() < 0b01_0000_0000);
27 defmt::assert!(adc.read(&mut p).await.unwrap() < 0b01_0000_0000); 27 defmt::assert!(adc.read(&mut p).await.unwrap() < 0b01_0000_0000);
28 } 28 }
29 { 29 {
30 let mut p = Pin::new(&mut p.PIN_26, Pull::Up); 30 let mut p = Channel::new_pin(&mut p.PIN_26, Pull::Up);
31 defmt::assert!(adc.blocking_read(&mut p).unwrap() > 0b11_0000_0000); 31 defmt::assert!(adc.blocking_read(&mut p).unwrap() > 0b11_0000_0000);
32 defmt::assert!(adc.read(&mut p).await.unwrap() > 0b11_0000_0000); 32 defmt::assert!(adc.read(&mut p).await.unwrap() > 0b11_0000_0000);
33 } 33 }
@@ -35,21 +35,21 @@ async fn main(_spawner: Spawner) {
35 // not bothering with async reads from now on 35 // not bothering with async reads from now on
36 { 36 {
37 { 37 {
38 let mut p = Pin::new(&mut p.PIN_27, Pull::Down); 38 let mut p = Channel::new_pin(&mut p.PIN_27, Pull::Down);
39 defmt::assert!(adc.blocking_read(&mut p).unwrap() < 0b01_0000_0000); 39 defmt::assert!(adc.blocking_read(&mut p).unwrap() < 0b01_0000_0000);
40 } 40 }
41 { 41 {
42 let mut p = Pin::new(&mut p.PIN_27, Pull::Up); 42 let mut p = Channel::new_pin(&mut p.PIN_27, Pull::Up);
43 defmt::assert!(adc.blocking_read(&mut p).unwrap() > 0b11_0000_0000); 43 defmt::assert!(adc.blocking_read(&mut p).unwrap() > 0b11_0000_0000);
44 } 44 }
45 } 45 }
46 { 46 {
47 { 47 {
48 let mut p = Pin::new(&mut p.PIN_28, Pull::Down); 48 let mut p = Channel::new_pin(&mut p.PIN_28, Pull::Down);
49 defmt::assert!(adc.blocking_read(&mut p).unwrap() < 0b01_0000_0000); 49 defmt::assert!(adc.blocking_read(&mut p).unwrap() < 0b01_0000_0000);
50 } 50 }
51 { 51 {
52 let mut p = Pin::new(&mut p.PIN_28, Pull::Up); 52 let mut p = Channel::new_pin(&mut p.PIN_28, Pull::Up);
53 defmt::assert!(adc.blocking_read(&mut p).unwrap() > 0b11_0000_0000); 53 defmt::assert!(adc.blocking_read(&mut p).unwrap() > 0b11_0000_0000);
54 } 54 }
55 } 55 }
@@ -57,24 +57,71 @@ async fn main(_spawner: Spawner) {
57 // gp29 is connected to vsys through a 200k/100k divider, 57 // gp29 is connected to vsys through a 200k/100k divider,
58 // adding pulls should change the value 58 // adding pulls should change the value
59 let low = { 59 let low = {
60 let mut p = Pin::new(&mut p.PIN_29, Pull::Down); 60 let mut p = Channel::new_pin(&mut p.PIN_29, Pull::Down);
61 adc.blocking_read(&mut p).unwrap() 61 adc.blocking_read(&mut p).unwrap()
62 }; 62 };
63 let none = { 63 let none = {
64 let mut p = Pin::new(&mut p.PIN_29, Pull::None); 64 let mut p = Channel::new_pin(&mut p.PIN_29, Pull::None);
65 adc.blocking_read(&mut p).unwrap() 65 adc.blocking_read(&mut p).unwrap()
66 }; 66 };
67 let up = { 67 let up = {
68 let mut p = Pin::new(&mut p.PIN_29, Pull::Up); 68 let mut p = Channel::new_pin(&mut p.PIN_29, Pull::Up);
69 adc.blocking_read(&mut p).unwrap() 69 adc.blocking_read(&mut p).unwrap()
70 }; 70 };
71 defmt::assert!(low < none); 71 defmt::assert!(low < none);
72 defmt::assert!(none < up); 72 defmt::assert!(none < up);
73 } 73 }
74 {
75 let temp = convert_to_celsius(
76 adc.read(&mut Channel::new_temp_sensor(&mut p.ADC_TEMP_SENSOR))
77 .await
78 .unwrap(),
79 );
80 defmt::assert!(temp > 0.0);
81 defmt::assert!(temp < 60.0);
82 }
74 83
75 let temp = convert_to_celsius(adc.read_temperature().await.unwrap()); 84 // run a bunch of conversions. we'll only check gp29 and the temp
76 defmt::assert!(temp > 0.0); 85 // sensor here for brevity, if those two work the rest will too.
77 defmt::assert!(temp < 60.0); 86 {
87 // gp29 is connected to vsys through a 200k/100k divider,
88 // adding pulls should change the value
89 let mut low = [0u16; 16];
90 let mut none = [0u8; 16];
91 let mut up = [Sample::default(); 16];
92 adc.read_many(
93 &mut Channel::new_pin(&mut p.PIN_29, Pull::Down),
94 &mut low,
95 &mut p.DMA_CH0,
96 )
97 .await
98 .unwrap();
99 adc.read_many(
100 &mut Channel::new_pin(&mut p.PIN_29, Pull::None),
101 &mut none,
102 &mut p.DMA_CH0,
103 )
104 .await
105 .unwrap();
106 adc.read_many_raw(&mut Channel::new_pin(&mut p.PIN_29, Pull::Up), &mut up, &mut p.DMA_CH0)
107 .await;
108 defmt::assert!(low.iter().zip(none.iter()).all(|(l, n)| *l >> 4 < *n as u16));
109 defmt::assert!(up.iter().all(|s| s.good()));
110 defmt::assert!(none.iter().zip(up.iter()).all(|(n, u)| (*n as u16) < u.value()));
111 }
112 {
113 let mut temp = [0u16; 16];
114 adc.read_many(
115 &mut Channel::new_temp_sensor(&mut p.ADC_TEMP_SENSOR),
116 &mut temp,
117 &mut p.DMA_CH0,
118 )
119 .await
120 .unwrap();
121 let temp = temp.map(convert_to_celsius);
122 defmt::assert!(temp.iter().all(|t| *t > 0.0));
123 defmt::assert!(temp.iter().all(|t| *t < 60.0));
124 }
78 125
79 info!("Test OK"); 126 info!("Test OK");
80 cortex_m::asm::bkpt(); 127 cortex_m::asm::bkpt();