端口(Port)是接口電路中能被CPU直接訪問的寄存器(端口是寄存器,寄存器是存儲器,容量小速度快)。CPU經過這些地址即端口向接口電路中的寄存器發送命令,讀取狀態和傳送數據,所以,一個接口能夠有幾個端口,如狀態口、數據口和命令口,分別對應於狀態寄存器、數據寄存器和命令寄存器。編程
● 狀態端口
狀態端口(State Port)主要用來指示外部設備的當前狀態。每種狀態用一個二進制位表示,每一個外部設備能夠有幾個狀態位,它們可被CPU讀取,以測試或檢查外部設備的狀態,決定程序的流程。通常接口電路中常見的狀態位有準備就緒位(Ready)、外部設備忙位(Busy)、錯誤位(Error)等。post
● 數據端口測試
數據端口(Data Port)用以存放外部設備送往CPU的數據以及CPU輸出到外部設備去的數據。這些數據是主機和外部設備之間交換的最基本信息,長度通常爲1-4字節。數據端口主要起數據緩衝做用。編碼
● 命令端口spa
命令端口(Command Port)也稱控制端口(Control Port),用來存放CPU向接口發出的各類命令和控制字,以便控制接口或設備的動做。接口功能不一樣,接口芯片的結構也就不一樣,控制字的格式和內容天然各不相同。通常可編程接口芯片每每具備工做方式命令字、操做命令字等。設計
一般所說的I/O操做是指對I/0端口的操做,而不是對I/O設備的操做,即CPU所訪問的是與I/O設備相關的端口,而不是I/O設備自己。而I/O操做也就是CPU對端口寄存器的讀寫操做。CPU對數據端口進行一次讀或寫操做也就是與該接口鏈接的外部設備進行一次數據傳送;CPU對狀態端口進行一次讀操做,就能夠得到外部設備或接口自身的狀態代碼;CPU把若干位控制代碼寫入控制端口,則意味着對該接口或外部設備發出一個控制命令,要求該接口或外部設備按規定的要求工做。blog
I/O端口的編址方式主要有兩種:內存與I/O端口統一編址和I/O端口單獨編址。接口
統一編址是指在整個存儲空間中劃分出一部分地址空間給外設端口使用,即把每個I/O端口看做一個存儲單元,與存儲單元同樣編址,訪問存儲器的全部指令都可用來訪問I/O端口,不用設置專門的I/O指令,因此稱爲存儲器映射I/O編址方式,地址空間分佈狀況如圖1-9所示 。 摩托羅拉公司的MC6800及68HC05等處理器就採用了這種方式訪問I/O設備。
這種方式的優勢:內存
這種方式的缺點是路由
獨立編址是指對系統中的I/O端口單獨編址,與內存單元的地址空間相互分開,各自獨立,採用專門的I/O指令來訪問具備獨立空間的I/O端口,地址空間分佈狀況如圖1-10所示 。8086/8088系統中就採用這種編址方式。
優勢:
以上這兩種I/O編址方式各有利弊,不一樣類型的CPU可根據外部設備特色採用不一樣的編制方式。
項目名:
設計一個有6組I/O端口地址的譯碼電路
項目要求與目的:
(1)項目要求:經過項目瞭解74LS138譯碼器進行地址譯碼的方法和工做原理。
(2)項目目的:
●瞭解74LS138譯碼器的真值表。
●瞭解用譯碼器設計I/O端口地址的方法。
項目說明:
74LS138譯碼器有8個輸出,本項目只用其中6個。而地址線的高5位A5~A9通過74LS138譯碼器,分別產生DMA控制器8237A、中斷控制器8259A、定時/計數器825四、並行接口8255A等接口芯片的片選信號,而地址線的低5位A0~A4做爲接口芯片內部寄存器的訪問地址。由74LS138譯碼器真值表可知,當地址爲000~01XH時,使輸出爲低,選中8237A,因爲低位地址線A0~A3已接8237A,故8237A的端口地址爲000H~01FH。其餘端口與此同理,如8259A的片選地址是02X~03XH,端口地址爲020~03FH。
項目電路圖:
一個有6組I/O端口地址的譯碼電路如圖1-9所示。電路由地址總線、控制總線、74LS138譯碼器和門電路等組成。
I/O端口地址分配
不一樣類型的微機系統採用不一樣的I/O地址編排方式,I/O地址空間的劃分也各不相同。對80x86而言,採用獨立編排方式,I/O端口地址的16位,最大尋址範圍爲64K個地址。可是,在IBM-PC機及其兼容機的設計中,主板上只用了10位I/O端口地址線,所以支持的I/O端口數位1024個,地址空間爲0000H~03FFH,而且把前512個端口分配給了主板,後512個端口分配給了擴展槽上的常規外設。後來在PC/AT系統中,做了一些調整,其中前256個端口(000~0FFH)供系統板上的I/O接口芯片使用,如表1-2所示。後768(100~3FFH)供擴展槽上的I/O接口控制卡使用,如表1-2所示。按照I/O設備的配置狀況,I/O接口的硬件分爲以下兩類。
(1) 系統板上的I/O接口
系統板上的I/O接口也稱爲板內接口,尋址到的都是可編程大規模集成電路,完成相應的板內接口操做。如定時/計數器、中斷控制器、DMA控制器、並行接口等。隨着大規模集成電路的發展,因此I/O接口芯片或控制器都已經集成在一片或幾片大規模集成電路芯片中,造成了主板芯片組,並命名爲南/北橋、MCH/ICH等。表1-2所示的各類接口芯片,雖然在主板上不能看見,可是仍然完整地存在於主板芯片組中(通常都在南橋中),其板內地址也保持不變。
(2)擴展卡上的I/O接口
擴展卡主要是指插接在主板插槽上的接口卡,經過系統總線與CPU系統相連。這些擴展卡通常由若干個集成電路按必定得邏輯組成一個部件,如軟驅卡、硬驅卡、圖形卡、聲卡、打印卡、串行通訊卡等,如表1-3所示。
I/O端口地址譯碼
微機系統中有多個接口存在,接口內部每每包含多個端口,CPU是經過地址對不一樣的端口加以區分的。把CPU送出的地址轉變爲芯片選擇和端口區分依據的就是地址譯碼電路。每當CPU執行輸入輸出指令時,就進入I/O端口讀寫週期,此時首先是端口地址有效,而後是I/O讀寫控制信號TOR或有效,這樣就能夠很好的把端口地址譯碼產生的譯碼信號同或結合起來,一同控制對I/O端口讀或者寫。接口地址譯碼方法不少,下面主要介紹兩種。
(1)用門電路進行I/O端口地址譯碼
門電路譯碼就是採用與門、與非門、反相器及或非門等簡單邏輯門器件,如74LS20、74LS30、74LS3二、74LS0八、74LS04等,構成譯碼電路。這是一種最基本的I/O端口地址譯碼方法,下面經過舉例來講明設計方法。
【例1-5】 使用74LS20/30/32和74LS04設計I/O端口地址爲2F8H的只讀譯碼電路。
分析:若要產生2F8H端口地址,則譯碼電路的輸入地址就應具備如表1-4所示的值。
設計:按照表1-4中地址表的值,採用門電路就能夠設計出譯碼電路,如圖1-10(a)所示。
圖1-10(a)中AEN信號必須參加譯碼,由於AEN爲高電平時,I/O處於DMA方式,或信號由DMA控制器發出;AEN爲低電平時,I/O處於正常方式,或信號由CPU發出。由於該接口電路中I/O處於正常方式,AEN必須爲低電平,故用AEN信號參加譯碼來區分這兩種方式。
同理可設計出能執行讀/寫操做的2E2H端口地址的譯碼電路,如圖1-10(b)所示。
(2)譯碼器進行I/O端口地址譯碼
若接口電路中須要使用多個端口地址,則可採用譯碼器來進行譯碼。譯碼器的型號有不少,經常使用的譯碼器有3-8譯碼器74LS138;4-16譯碼器74LS154;雙2-4譯碼器74LS13九、74LS155等。下面經過舉例來講明設計方法。
【例1-6】 使用74LS138設計一個系統板是上接口芯片的I/O端口地址譯碼電路,而且讓每一個接口芯片內部的端口數目爲32個。
分析:因爲系統板上的I/O端口地址分配在000~0FFH範圍內,故只使用低8位地址線,這意味着A9和A8兩位應賦0值。爲了讓每一個被選中的芯片內部擁有32個端口,只要留出5根低地址線不參加譯碼,其他的高位地址線做爲74LS138的輸入線,參加譯碼,或做爲74LS138的控制線與AEN一塊兒,控制74LS138的譯碼是否有效。由上述分析,能夠獲得譯碼電路輸入地址線的值,如表1-5所示。
對於譯碼器74LS138的分析有兩點:一是它的控制信號線G一、和。只有當知足控制信號線G1爲高電平, ==0時,74LS138才能進行譯碼。二是譯碼的邏輯關係,即輸入(C,B,A)與輸入(Y0~Y7)的對應關係。74LS138輸入/輸出的邏輯關係,如表1-6所示。
從表1-6可知,若知足控制條件,即G1爲高電平, ==0,則由輸入端C、B、A的編碼來決定輸出:CBA=000,則爲低電平,其餘輸出端爲高電平;CBA=001,爲低電平,其餘輸出端爲高電平;…;CBA=111,爲低電平,其餘輸出端爲高電平。由此可分別產生8個譯碼輸出信號(低電平)。若控制條件不知足,則輸出全「1」,不產生譯碼輸出信號,即譯碼無效。