Programmable Interval Timer (PIT)
#OS
Frequency Dividers
より遅い周波数を得るために使われる
カウンターを使って実現される
Inputパルスがカウンタをデクリメントする
カウンタが0になったときにoutputに出力があり、カウンタがリセットされる
PITでのfrequency dividerのサイズは16ビット
最大値は65536 (0x10000)
0を設定すると65536を意味することになる
3チャンネルあるのでfrequency dividerも3つ持つ
カウンタがリセットされたときの振る舞いがoperation mode
Channel 0から2がある
Channel 0がIRQ0に接続されている
PICのIRQ0
Channel 1は未使用で多分存在しない
Channel 2はPCスピーカーに接続されている
code:txt
I/O port Usage
0x40 Channel 0 data port (read/write)
0x41 Channel 1 data port (read/write)
0x42 Channel 2 data port (read/write)
0x43 Mode/Command register (write only, a read is ignored)
Acces mode
PITは16bitある
lobyteは下位8bit, hibyteは上位8bit
両方がペアで16bit
下位、上位の順に来る
Operation mode
Rate generator
mode/command registerに書き込みがあったとき、出力シグナルはHighになり、PITはソフトウェアからreload registerがsetされるのを待つ
デクリメントされていく
down edge
現在のカウントが2から1になったとき、outputはlowになる
そのあと、現在のカウントはreload valueになり、以後繰り返し
reload valueは何時でも変更できるが影響を受けるのは現在のカウントがreloadされてから
IRQ0のTimer tickに使われる
参考
https://wiki.osdev.org/Programmable_Interval_Timer