unsafe { let tim2 = &*device::TIM2::PTR; tim2.cnt().write(|w|w.bits(0)); asm::nop(); asm::nop(); let mut last = tim2.cnt().read().bits(); let mut stats = StatisticsTracker::new(None); loop { let mut now = tim2.cnt().read().bits(); let delta = now as i64 - last as i64; last = now; asm::bkpt(); if delta < 0 || now > 4_000_000 { asm::bkpt(); (&stats as *const StatisticsTracker).read_volatile(); continue; } if now < 2_000_000 { continue; } stats.consume(delta); asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop();asm::nop(); (&stats as *const StatisticsTracker).read_volatile(); } }