關鍵詞:增強并行口(EPP) ADSP2181 EPLD
利用計算機進行數據采集與控制一直都是研究的熱點。大部分數據采集與控制系統都是做成插卡的形式;然而,對于日益普及應用的筆記本電腦而言,由于沒有提供擴展插槽,不能夠直接做成插卡的形式,因此就需要充分利用筆記本提供的外圍接口,例如并口、串口等來實現。由于串口速度的限制,對于速度比較高的數據采集與控制系統,往往采用計算機的并口。這幾年在國內已經有很多大在做利用增強型并行口(EPP)與外界進行通信這方面的工作,但大部分都是與一些簡單外圍電路的通信與控制(例如FIFO、A/D轉換器),很少有人涉及到與DSP的通信。我們所設計的并口與ADSP2181的接口,為和外圍復雜電路進行通信提供了一種途徑。
一、EPP并口
最常見的計算機并口模式是SPP模式(標準并行口)。該模式數據傳輸是單向的,如果要完成數據的輸入就不得利用狀態(tài)線。故讀入一個數據就需要進行好幾次的I/O讀周期,因此傳輸速度就不可能做到很高,僅能做到150KB/s。其外圍設計電路并不比EPP簡單,因此SPP在數據采集與控制系統中很少應用。
1992年,intel、Xicom與Zenith公司共同制定了EPP1.7標準,并在隨后的時間里對該增值修訂與完善。對于EPP標準而言,現在主要有EPP1.7與EPP1.9兩種標準;對于用戶而言,它們在具體的應用中并沒有什么不匹配的地方。
EPP協議與標準并行口兼容而且能夠完成雙向數據傳輸的協議。它提供了四種數據傳送周期:數據讀周期、數據寫周期、地址讀周期、地址寫周期。數據周期一般用于主機與外設之間進行數據傳送;地址周期一般用于傳送地址、通道、命令和控制等信息。在實際操作中,兩者并沒有太大的區(qū)別。幾乎可以把地址周期看到另外一種的數據周期。僅有的區(qū)別將在后面說明。
表1給出了EPP協議中各引腳的信號的定義與描述。
表1 EPP中各引腳的定義與描述
EPP信號名 | EPP信號方向 | EPP信號描述 | 對應并口引腳 |
Nwrite | 輸出 | 低電平寫,高電平讀 | 1 |
Ndatastb | 輸出 | 低有效,進行數據讀寫 | 14 |
Naddstb | 輸出 | 低有效,進行地址讀寫 | 17 |
Ninit | 輸出 | 低有效,得置外設 | 16 |
Intr | 輸入 | 外設斷,外設對機產生中斷請求 | 10 |
Nwait | 輸入 | 低有效,外設響應信號 | 11 |
AD[0..7] | 雙向 | 雙向數據/地址總線 | 2~9 |
用戶定義 | 輸入 | 用戶可靈活定義 | 12 |
用戶定義 | 輸入 | 用戶可靈活定義 | 13 |
用戶定義 | 輸入 | 用戶可靈活定義 | 15 |
圖1是EPP數據讀周期的時序圖。讀操作是在一個I/O周期內完成的。這就是說用EPP傳輸數據,可以達到500KB~2MB/s的傳輸速率。由于Nwait是互鎖形式的握手信號,故數據的傳輸以接口的最慢的設備來進行,可以是主機,也可以是外設。因此設計外圍電路就比較靈活。
EPP模式是在BIOS里進行設置的。需要設置的主要是基地址以及中斷號。基地址最好設置成378H或278H,而不要設置成3BCH,因為3BFH后面的端口可能為其它設備所占用。EPP共有8個I/O地址端口(假如基地址為378H);378H為SPP的數據口;379H為SPP的狀態(tài)口;37AH為控制口;37BH為地址讀寫口;37HC為數據讀寫口;37DH~37FH可以由用戶定義,主要用作16bit與32bit I/O數據讀寫輔助口。通過對端口基地址+4的I/O讀寫就可以產生EPP的數據讀寫周期,對基地址+3的I/O讀寫就可以產生EPP的地址讀寫周期。奪址讀寫周期與數據讀寫周期的主要區(qū)別就是數據讀寫可以做32bit與16bit的I/O讀寫,而地址讀寫周期只能夠做8bit的I/O讀寫(主要因為它沒有輔助的端口)。在C語言里面,可以用端口讀寫函數outportb()、inportb()、outport()、inport()來實現EPP的讀寫操作,相應的控制信號由計算機自動產生。
二、ADSP2181的IDMA接口
ADSP2181是AD公司制造的ADSP21XX定點DSP系列的一種。它的指令周期為30ns,足以滿足信號的實時處理。它內部有16MB的程序存儲區(qū)(PM)與16MB的數據存儲區(qū)(DM)。外圍接口可以通過IDMA與I/O的方式對存儲區(qū)進行訪問。其IDMA操作的最大優(yōu)點IDMA的讀寫操作并不影響ADSP2181程序的運行。但是需要注意的是ADSP2181與外設不能夠同時對同一個存儲區(qū)進行讀寫,否則,會引起數據紊亂。
IDMA端口主要有以下幾個信號線:nIRD(輸入、讀選通)、nIWR(輸入、寫選通)、nIS(輸入、IDMA選通)、IAL(輸入、地址鎖存使能)、IDA0~15(地址/數據復用線)、nIACK(輸出、DSP響應信號)。
IDAM讀寫的初始地址與存儲區(qū)的類型由ADSP2181內部專門的寄存器來控制。每進行一次讀寫,則該初始地址就自動加1。該寄存器呵以由ADSP2181來設置,也可以由外設電路通過IDMA操作來完成。
IDMA讀周期的時序圖如圖2所示。IDMA寫周期的時序圖如圖3所示。需要注意的是在IDMA讀周期中,nIWR為高電平,IAL為低電平,在IDMA寫周期時序中,nIRD為高電平,IAL為低電平。
三、接口電路以及整體設計的考慮
圖4是我們設計的接口電路框圖。并口控制線包括Ndatastb、Naddstb、Ninit;DSP控制線包括nIS、nWRITE、nREAD、IAL。
其中可編程邏輯器件是該電路的核心器件。由于并口只能進行8bit的讀寫操作,而ADSP2181是16bit的總線,因此若要進行通信,必須設計好組合邏輯。如果采用分立元件,則電路比較復雜,調試起來比較麻煩,并且電路固定好以后,不可能進行其它方式的通信;而采用可編程邏輯器件EPLD,只需要修改器件的邏輯與更改外部引腳的定義就可以實現其它傳輸協議,如ECP或者其它并口的通信,并且調試起來也比較方便。
我們所選用的可編程邏輯器件是Altera公司的EPM7128S系列。它有2500個可用門,128個宏單元、2個全局時鐘,可以完成EPP與ECP電路的邏輯設計。同時支持在線編程,可以很方便地對程序進行下載。該器件用MAXPLUS II系列的軟件進行編程,這種軟件支持圖形、語言等多種設計文件。
由于采用可編程器件,因此電路還可以采用ECP協議。ECP協議支持DMA的傳輸方式。最主要的是在進行大批量的數據傳輸的時候可以節(jié)省很多系統資源;但在傳輸速度上并沒有大的提高。該協議設計起來比EPP協議復雜很多,需要開發(fā)相應的硬件驅動程序。因此在我們設計的電路中,仍然采用EPP協議來實現。
四、EPP并口傳輸速度的測試
讀寫程序是用VxD編寫的。VxD(Virtual Device Driver)是用來擴展Windows操作系統功能的程序,也是一個管理硬件設備或者已安裝軟件等系統資源的32位可執(zhí)行程序,并可以使得幾個應用程序同時使用這些資源。Windows通過使用VxD允許基于Windows的應用程序實現多任務。VxD在與Windows的連接工作中處理樹熊怕,并在不影響其它應用程序執(zhí)行的情況下為特定的應用程序執(zhí)行I/O操作。由于設備接收工作中處理中斷,并在影響其它應用程序執(zhí)行的情況下為特定的應用程序執(zhí)行I/O操作。
測試結果如表2所列。
表2 各種方式讀速率的比較
方式1(字節(jié)讀寫) | 方式二(字讀寫) | 方式三(雙字讀寫) | 方式四(字讀寫) | |
平均速率/(KB/s) | 850 | 950 | 1050 | 800 |
方式一:VxD編程中以字節(jié)來讀;
方式二:VxD編程中以字來讀;
方式三:VxD編程中以雙字來讀;
方式四:用C語言的inport()函數進行讀寫。
由于我們只關心從DSP中讀的速率,從表2中看出可以做到1050KB/s的速率,基本滿足我們要求。對于用C語言來編寫并口操作的程序可以通過嵌套匯編來提高傳輸速度。
總結
采用EPP協議設計計算機與外設的通信是一種新穎的設計方法。在設計電路時采用可編程器件來設計控制邏輯將是電子設計的一個趨勢,將使電路的擴充性與靈活性得到很大的提高。