fn delay_us(&mut self, mut us: u32) {
    const MAX_MICROS: u32 = u32::MAX / NANOS_PER_MICRO;

    // Avoid potential overflow
    //  if micro -> nano conversion is too large
    while us > MAX_MICROS {
        us -= MAX_MICROS;
        self.delay_ns(MAX_MICROS * NANOS_PER_MICRO);
    }

    self.delay_ns(us * NANOS_PER_MICRO);
}
