From 028458d80bd71ad37a6c4e5406c46e77688b28ba Mon Sep 17 00:00:00 2001 From: Andy Killorin Date: Fri, 11 Jul 2025 23:39:21 -0500 Subject: [PATCH] serial recv arch --- src/main.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 9797ab8..0eac177 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,15 @@ #![no_std] #![no_main] +#![feature(abi_avr_interrupt)] +use core::mem::MaybeUninit; + +use arduino_hal::clock::MHz16; use arduino_hal::hal::port::*; +use arduino_hal::hal::usart::UsartReader; +use arduino_hal::pac::USART0; use arduino_hal::port::mode::*; -use embedded_hal::digital::OutputPin; +use arduino_hal::prelude::*; use panic_halt as _; fn shift_out(data_pin: &mut Pin, clock_pin: &mut Pin, data: &u8) { @@ -34,6 +40,16 @@ fn update_shift_register( latch_pin.set_high(); } +static mut UART_RX: MaybeUninit, Pin, MHz16>> = MaybeUninit::uninit(); + +#[avr_device::interrupt(atmega328p)] +fn USART_RX() { + let rx = unsafe{ &mut *UART_RX.as_mut_ptr() }; + + rx.read(); +} + + #[arduino_hal::entry] fn main() -> ! { let dp = arduino_hal::Peripherals::take().unwrap(); @@ -65,6 +81,18 @@ fn main() -> ! { let mut led = pins.d13.into_output(); + let mut serial = arduino_hal::default_serial!(dp, pins, 115200); + + avr_device::interrupt::disable(); + serial.listen(arduino_hal::hal::usart::Event::RxComplete); + + let (rx,tx) = serial.split(); + + unsafe { + UART_RX = MaybeUninit::new(rx); + avr_device::interrupt::enable(); + }; + loop { let mut shift_register = 0; const LEFT_FWD: u8 = 1 << 5; // 1a