关于 Intel 8253/8254
Intel 8253/8254是一個可編程定時/計數(shù)器(PIT-Programmable Interval Timer)芯片,用于處理計算機中的精確時間延遲。該芯片提供了 3個獨立的16位計數(shù)器通道。每個通道可工作在不同的工作方式下, 并且這些工作方式均可以使用軟件來設置。
對于PC/AT及其兼容微機系統(tǒng)采用的是8254芯片。Linux 0.11操作系統(tǒng)只對通道0進行了重新設置,使得該計數(shù)器工作在方式3下,并且每間隔10毫秒發(fā)出一個信號以產(chǎn)生中斷請求信號(IRQ0)。這個間隔定時產(chǎn)生的中斷請求就是Linux 0.11內(nèi)核工作的脈搏,它用于定時切換當前執(zhí)行的任務和統(tǒng)計每個任務使用的系統(tǒng)資源量(時間)。
1、Intel 8253 (8254)芯片功能
Intel 8253 (或 8254)是一個可編程定時/計數(shù)器(PIT-Programmable Interval Timer)芯片,用于解決計算機中通常碰到的時間控制問題,即在軟件的控制下產(chǎn)生精確的時間延遲。該芯片提供了3個獨立的16位計數(shù)器通道。每個通道可工作在不同的工作方式下,并且這些工作方式均可以使用軟件來設置。
8254是8253的更新產(chǎn)品,主要功能基本一樣,只是8254芯片増加了回讀命令。在下面描述中我們用8253來代稱8253和8254兩種芯片,僅在它們功能有區(qū)別處再特別加以指出。
2、端口說明
對于PC/AT及其兼容微機系統(tǒng),采用的是8254芯片。3個計數(shù)器的輸入時鐘頻率都是 1.193180MHz。PC/AT微機中8254芯片連接示意圖如下。
其中A1、A0管腳被連接到系統(tǒng)地址線A1、A0上。并且當系統(tǒng)地址線A9–A2信號是0b00100 00時會選擇8254芯片,因此PC/AT系統(tǒng)中8254芯片的IO端口地址范圍是0x40—0x43。其中0x40~0x42分別對應計數(shù)器通道0~2,0x43對應控制字寄存器寫端口。
3、編程方法
當系統(tǒng)剛上電時,8253的狀態(tài)是未知的。通過向8253寫入一個控制字和一個初始計數(shù)值,我們就可以對想要使用的一個計數(shù)器進行編程。對于不使用的計數(shù)器我們可以不必對其編程。
在CPU執(zhí)行寫操作時,若A1,A0線為11 (此時在PC微機上對應端口 0x43),那么控制字會被寫入控制字寄存器中。而控制字的內(nèi)容會指定正在編程的計數(shù)器通道。
通道0、1、2分別對應PC機端口 0x40、0x41和0x42,當控制字寫完后,就可以向某個通道寫入初始計數(shù)值。
注意:在寫入操作時,必須首先寫入控制字,然后再寫入初始計數(shù)值。初始計數(shù)值必須根據(jù)控制字中設定的格式寫入(二進制或BCD碼格式)。在計數(shù)器開始工作時,我們?nèi)匀荒茈S時向指定計數(shù)器重新寫入新的初始值,這并不會影響已設置的計數(shù)器的工作方式。
1、控制字的格式
控制字的格式如下圖所示。
movb $0x36, %almovl $0x43, %edxoutb %al, %dx以上代碼用于向端口0x43寫入控制字0x36,對照上圖,得知選中通道0,先讀寫低字節(jié)再讀寫高字節(jié),工作方式3,采用二進制計數(shù)。
2、工作方式三——方波發(fā)生器方式
工作方式一共有6種,這里僅說明方式3,因為Linux-0.11用的就是這種方式。
方式3:方波發(fā)生器方式(Square Wave Mode)
該方式輸出的是方波。如果初始計數(shù)值是N, 那么方波的頻率是輸入時鐘的N分之一。該方式的特點是方波占空比約為1比1 (當N為奇數(shù)時略有差異),并且在計數(shù)器遞減過程中若重新設置新的初始值,這個初始值要到前一個計數(shù)完成后才起作用。
在工作方式3下,方波的頻率是輸入時鐘頻率的N分之一,又因為計數(shù)器的輸入時鐘頻率是 1.193180MHz=1193180Hz,所以
1193180/N = 方波的頻率(Hz)如果想讓計數(shù)器每10ms(=100Hz)發(fā)出一個方波上升沿用以產(chǎn)生中斷請求信號的話,那么N=1193180/100.
Linux 0.11操作系統(tǒng)只對8254的計數(shù)器通道0進行了重新設置,使得該計數(shù)器工作在方式3下,計數(shù)初始值采用二進制,并且初始計數(shù)值被設置為LATCH (1193180/100)。即讓計數(shù)器0每間隔10毫秒發(fā)出一個方波上升沿以產(chǎn)生中斷請求信號(IRQ0)。
movl $11931, %eax # timer frequency 100 HZ movl $0x40, %edxoutb %al, %dx # 先寫低字節(jié)movb %ah, %aloutb %al, %dx # 再寫高字節(jié)繼續(xù)上文的代碼,在寫入控制字后,要寫入初始計數(shù)值。因為控制字選擇了0通道,所以寫初始計數(shù)值的端口是0x40. 如果要產(chǎn)生100Hz的方波,那么寫入的初始值是1193180/100 ,約等于 11931。
總結
以上是生活随笔為你收集整理的关于 Intel 8253/8254的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android心电数据分析,Androi
- 下一篇: 浅谈尾递归的优化