From 2d5c2192a1c112b6fe3234121840dd6bb208de9c Mon Sep 17 00:00:00 2001 From: Benjamin Koch <bbbsnowball@gmail.com> Date: Sat, 13 May 2023 01:47:59 +0200 Subject: [PATCH] add simple Rust program with mostly the pinout, so far --- firmware/rust1/src/bin/heizung.rs | 88 +++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 firmware/rust1/src/bin/heizung.rs diff --git a/firmware/rust1/src/bin/heizung.rs b/firmware/rust1/src/bin/heizung.rs new file mode 100644 index 0000000..e80c23c --- /dev/null +++ b/firmware/rust1/src/bin/heizung.rs @@ -0,0 +1,88 @@ +#![no_std] +#![no_main] +#![feature(type_alias_impl_trait)] + +use defmt::*; +use embassy_executor::Spawner; +use embassy_rp::gpio; +use embassy_time::{Duration, Timer}; +use embassy_rp::gpio::{Input, Level, Output, Pull}; +use embassy_rp::i2c::{self}; +use embassy_rp::interrupt; +use embedded_hal_async::i2c::I2c; +use embassy_rp::peripherals::UART0; +use embassy_rp::uart::{self, Async, UartRx, UartTx, Parity}; +use {defmt_rtt as _, panic_probe as _}; + + + +#[embassy_executor::main] +async fn main(_spawner: Spawner) { + let p = embassy_rp::init(Default::default()); + + // pinout: + let mut drive1 = Output::new(p.PIN_0, Level::Low); + let mut drive2 = Output::new(p.PIN_1, Level::Low); + //let LED_W = p.PIN_2; + let ws2812_display = p.PIN_2; + //let LED_Y = p.PIN_3; + let mut en_measure_current = Output::new(p.PIN_3, Level::Low); + let mut led_b = Output::new(p.PIN_4, Level::Low); + let mut led_g = Output::new(p.PIN_5, Level::Low); + let mut led_r = Output::new(p.PIN_6, Level::Low); + let matrix_in1 = Input::new(p.PIN_7, Pull::Up); + let sbu1 = p.PIN_8; + let sbu2 = p.PIN_9; + let vbus_det = p.PIN_10; + let button_boot2 = Input::new(p.PIN_11, Pull::Up); + let sda = p.PIN_12; + let scl = p.PIN_13; + let ws2811_red_in = Input::new(p.PIN_14, Pull::None); + let tx_en = p.PIN_15; + let tx = p.PIN_16; + let rx = p.PIN_17; + let matrix_in2 = Input::new(p.PIN_18, Pull::Up); + let reed3 = Input::new(p.PIN_19, Pull::Up); + let reed4 = Input::new(p.PIN_20, Pull::Up); + let reed2 = Input::new(p.PIN_21, Pull::Up); + let reed1 = Input::new(p.PIN_22, Pull::Up); + let matrix_in3 = Input::new(p.PIN_23, Pull::Up); + let digout1 = p.PIN_24; + let digout2 = p.PIN_25; + let analog_in1 = p.PIN_26; + let current2 = p.PIN_27; + let current1 = p.PIN_28; + let measure_vcc = p.PIN_29; + + info!("set up i2c "); + let i2c_irq = interrupt::take!(I2C0_IRQ); + let mut i2c_config = i2c::Config::default(); + i2c_config.frequency = 400_000; + let mut i2c = i2c::I2c::new_async(p.I2C0, scl, sda, i2c_irq, i2c_config); + + // use 19200 baud in 8E1 mode - not great but Modbus default + let mut uart_config = uart::Config::default(); + uart_config.baudrate = 19200; + uart_config.parity = Parity::ParityEven; + let uart_rx = UartRx::new( + p.UART0, + rx, + interrupt::take!(UART0_IRQ), + p.DMA_CH1, + uart_config, + ); + + loop { + info!("led on!"); + led_b.set_high(); + Timer::after(Duration::from_secs(1)).await; + + info!("led off!"); + led_b.set_low(); + Timer::after(Duration::from_secs(1)).await; + } + + // dummy read to fix Mode paraemter of UartRx + let buf = [0; 1]; + let x = uart_rx.read(&mut buf).await; +} -- GitLab