> <@firefrommoonlight:matrix.org> The ISR should look something like this: > ```rust > static READ_BUF: Mutex> = Mutex::new(RefCell::new([0;10])); > static READ_I: Mutex> = Mutex::new(Cell::new(0)); > // .. > > #[interrupt] > /// Async USART read interrupt handler > fn USART1() { > unsafe{ (*pac::USART1::ptr()).rqr.modify(|_, w| w.rxfrq().set_bit() } > > free(|cs| { > let mut buf = READ_BUF.borrow(cs).borrow_mut(); > > let i = READ_I.borrow(cs); > > // Could put USART struct in a mutex too. > buf[i.get()] = unsafe{ (*pac::USART1::ptr()).dr.read().dr().bits() as u8; } > i.set(i.get() + 1); > }); > ``` firefrommoonlight: I'm following up on your example from before. Somehow I'm not allowed to write to the `rqr` register: ```rust 1. the method `modify` exists for struct `Reg`, but its trait bounds were not satisfied the following trait bounds were not satisfied: `Reg: Readable` ``` This is my code: ```rust unsafe { (*pac::USART1::ptr()).rqr.modify(|_, w| w.rxfrq().set_bit()) } ```