24 lines
604 B
Rust
24 lines
604 B
Rust
use crate::arch::port::write_u8;
|
|
|
|
const PIT_CHANNEL_0: u16 = 0x40;
|
|
const PIT_COMMAND: u16 = 0x43;
|
|
|
|
const CHANNEL_0: u8 = 0b00 << 6;
|
|
// access mode = lobyte/hibyte
|
|
const LOW_HIGH: u8 = 0b11 << 4;
|
|
// interrupt on terminal count
|
|
const MODE_0: u8 = 0b000 << 1;
|
|
const BINARY: u8 = 0;
|
|
|
|
pub const PIT_FREQUENCY: u64 = 1_193_182;
|
|
pub const PIT_CALIBRATION_COUNT: u16 = u16::MAX;
|
|
|
|
pub fn start_pit_one_shot(count: u16) {
|
|
unsafe {
|
|
write_u8(PIT_COMMAND, CHANNEL_0 | LOW_HIGH | MODE_0 | BINARY);
|
|
|
|
write_u8(PIT_CHANNEL_0, count as u8);
|
|
write_u8(PIT_CHANNEL_0, (count >> 8) as u8);
|
|
}
|
|
}
|