aboutsummaryrefslogtreecommitdiff
path: root/examples/mcxa/src/bin/adc_interrupt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/mcxa/src/bin/adc_interrupt.rs')
-rw-r--r--examples/mcxa/src/bin/adc_interrupt.rs65
1 files changed, 65 insertions, 0 deletions
diff --git a/examples/mcxa/src/bin/adc_interrupt.rs b/examples/mcxa/src/bin/adc_interrupt.rs
new file mode 100644
index 000000000..d2cda631c
--- /dev/null
+++ b/examples/mcxa/src/bin/adc_interrupt.rs
@@ -0,0 +1,65 @@
1#![no_std]
2#![no_main]
3
4use embassy_executor::Spawner;
5use embassy_time::{Duration, Ticker};
6use hal::adc::{Adc, InterruptHandler, LpadcConfig, TriggerPriorityPolicy};
7use hal::bind_interrupts;
8use hal::clocks::PoweredClock;
9use hal::clocks::config::Div8;
10use hal::clocks::periph_helpers::{AdcClockSel, Div4};
11use hal::config::Config;
12use hal::pac::adc1::cfg::{Pwrsel, Refsel};
13use hal::pac::adc1::cmdl1::Mode;
14use hal::pac::adc1::ctrl::CalAvgs;
15use hal::peripherals::ADC1;
16use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _};
17
18bind_interrupts!(struct Irqs {
19 ADC1 => InterruptHandler<ADC1>;
20});
21
22#[embassy_executor::main]
23async fn main(_spawner: Spawner) {
24 let mut config = Config::default();
25 config.clock_cfg.sirc.fro_lf_div = Div8::from_divisor(1);
26
27 let p = hal::init(config);
28
29 defmt::info!("ADC interrupt Example");
30
31 let adc_config = LpadcConfig {
32 enable_in_doze_mode: true,
33 conversion_average_mode: CalAvgs::Average128,
34 enable_analog_preliminary: true,
35 power_up_delay: 0x80,
36 reference_voltage_source: Refsel::Option3,
37 power_level_mode: Pwrsel::Lowest,
38 trigger_priority_policy: TriggerPriorityPolicy::ConvPreemptImmediatelyNotAutoResumed,
39 enable_conv_pause: false,
40 conv_pause_delay: 0,
41 power: PoweredClock::NormalEnabledDeepSleepDisabled,
42 source: AdcClockSel::FroLfDiv,
43 div: Div4::no_div(),
44 };
45 let mut adc = Adc::new_async(p.ADC1, p.P1_10, Irqs, adc_config).unwrap();
46
47 adc.do_offset_calibration();
48 adc.do_auto_calibration();
49 adc.set_resolution(Mode::Data16Bits);
50
51 defmt::info!("ADC configuration done...");
52 let mut ticker = Ticker::every(Duration::from_millis(100));
53
54 loop {
55 ticker.next().await;
56 match adc.read().await {
57 Ok(value) => {
58 defmt::info!("ADC value: {}", value);
59 }
60 Err(e) => {
61 defmt::error!("ADC read error: {:?}", e);
62 }
63 }
64 }
65}