use nrf52832_hal::{nrf52832_pac::UARTE0};
use core::sync::atomic::{compiler_fence, Ordering::SeqCst};
pub(crate) fn start_read(rx_buffer: &mut [u8]) -> Result<(), nrf52832_hal::uarte::Error> {
let periph = unsafe { &*UARTE0::ptr() };
if rx_buffer.len() > u8::max_value() as usize {
return Err(nrf52832_hal::uarte::Error::TxBufferTooLong);
}
compiler_fence(SeqCst);
periph.rxd.ptr.write(|w|
unsafe { w.ptr().bits(rx_buffer.as_ptr() as u32) });
periph.rxd.maxcnt.write(|w|
unsafe { w.maxcnt().bits(rx_buffer.len() as _) });
periph.tasks_startrx.write(|w|
unsafe { w.bits(1) });
Ok(())
}
pub(crate) fn finalize_read() {
let periph = unsafe { &*UARTE0::ptr() };
periph.events_endrx.write(|w| w);
compiler_fence(SeqCst);
}