8257 計數器暫存器
我們有四個計數器,範圍從 CR3-0,每個計數器包含 16 位。當 CR 被 16 位寬的處理器訪問時,暫存器的最低有效位元組和最高有效位元組以交替方式訪問,從最低有效位元組開始。此外,M/L* 觸發器在此提供幫助。關於使用 DMA 傳輸的位元組數的資訊包含在計數器暫存器中,在每次 DMA 資料傳輸中遞減 1。當計數器暫存器變為 0 時,最後一次 DMA 資料傳輸導致 8257 的終端計數 (TC) 輸出啟用。在四個通道中,只有一個輸出讀取 8257 的狀態埠由處理器讀取,以找出哪個通道負責啟用 8257 的輸出。
雖然計數器暫存器為 16 位寬,但僅使用暫存器的 14 位最低有效位來指定使用直接記憶體訪問方案傳輸的位元組數。因此,對於資料傳輸,最多可以程式設計 214 = 16K = 16,384 位元組。假設 N 是使用 DMA 資料傳輸要傳輸的位元組數,這裡我們必須在計數器暫存器的 14 位最低有效位中載入 (N-1) 個位元組。如果計數器暫存器在 14 位最低有效位中已載入 0 值,則在此過程中僅傳輸一個位元組。
DMA 傳輸的型別由計數器暫存器的最高兩位指定。它可以透過直接記憶體訪問讀取,也可以寫入 DMA 並進行驗證。下表有助於理解位 15 和位 14 的操作。
位 15 | 位 14 | 操作 |
---|---|---|
0 | 0 | DMA 驗證 |
0 | 1 | DMA 寫入 |
1 | 0 | DMA 讀取 |
1 | 1 | 非法 |
在給定表中,當位 15 等於 1 時,8257 生成 MR* 和 IOW* 訊號。當位 14 等於 1 時,它生成 MW* 和 IOR* 訊號。現在在下表中,當兩位位 15 和位 14 均為 0 時,DMA 執行驗證,當位 15 為 0 且位 14 為 1 時,DMA 讀取內容。當位 15 為 1 且位 14 為 0 時,DMA 寫入。當這兩位都為 1 時,這是一個非法操作,不會執行。
位 15 | 位 14 | 操作 |
---|---|---|
0 | 0 | DMA 驗證 |
0 | 1 | DMA 讀取 |
1 | 0 | DMA 寫入 |
1 | 1 | 非法 |
廣告