22 uint64_t total_ticks = ((uint64_t)
PIT_FREQ_HZ * ms + 999) / 1000;
24 while (total_ticks > 0) {
25 uint32_t chunk = (total_ticks > 0xFFFF) ? 0xFFFF : (uint32_t)total_ticks;
26 if (chunk == 0) chunk = 0xFFFF;
37 asm volatile(
"" :::
"memory");
39 uint16_t start = start_lo | ((uint16_t)start_hi << 8);
44 asm volatile(
"" :::
"memory");
46 uint16_t curr = curr_lo | ((uint16_t)curr_hi << 8);
48 uint16_t elapsed = (uint16_t)(start - curr);
49 if ((uint32_t)elapsed >= chunk)
break;
51 asm volatile(
"pause");