1#![no_std]
2#![no_main]
3
4use core::panic::PanicInfo;
5
6use hal_mik32::rcc::RCC;
7use hal_mik32::tsens::{ClockSource, Config, TSENS};
8use mik32_pac::Peripherals;
9
10const SENSOR_CLOCK_HZ: u32 = 40_000;
11const STARTUP_TIMEOUT: u32 = 100_000;
12const SAMPLE_DELAY_SPINS: u32 = 25_000;
13
14#[unsafe(no_mangle)]
15pub extern "C" fn main() -> ! {
16 let peripherals = Peripherals::take().unwrap();
17
18 let rcc_config = RCC::default();
19 RCC::init(&rcc_config);
20
21 let sensor_config = Config::default()
22 .clock_from_source(ClockSource::HSI32M)
23 .with_frequency(SENSOR_CLOCK_HZ);
24
25 let mut sensor = TSENS::new(peripherals.tsens, &rcc_config.clocks, sensor_config).unwrap();
26
27 let mut current_temperature_c = sensor.single_measurement(Some(STARTUP_TIMEOUT)).unwrap();
28 let mut min_temperature_c = current_temperature_c;
29 let mut max_temperature_c = current_temperature_c;
30
31 sensor.start_continuous();
32
33 loop {
34 current_temperature_c = sensor.get_temperature();
35
36 if current_temperature_c < min_temperature_c {
37 min_temperature_c = current_temperature_c;
38 }
39
40 if current_temperature_c > max_temperature_c {
41 max_temperature_c = current_temperature_c;
42 }
43
44 let _temperature_snapshot = (current_temperature_c, min_temperature_c, max_temperature_c);
45
46 delay(SAMPLE_DELAY_SPINS);
47 }
48}
49
50#[inline(always)]
51fn delay(spins: u32) {
52 for _ in 0..spins {
53 core::hint::spin_loop();
54 }
55}
56
57#[panic_handler]
58fn panic(_info: &PanicInfo) -> ! {
59 loop {
60 core::hint::spin_loop();
61 }
62}
63
64#[unsafe(no_mangle)]
65#[inline(never)]
66pub extern "C" fn trap_handler() {
67 loop {
68 core::hint::spin_loop();
69 }
70}