在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>主機配件>cpu>

增強型并行端口EPP編程 - 全文

2011年11月23日 13:54 本站整理 作者:秩名 用戶評論(0

  1、引言

  標準并行端口SPP(Standard Parallet Port)為大家所熟知,但是基于SPP的擴展經(jīng)常受到一些限制,如傳輸前進行“忙信號”的查詢和傳輸后狀態(tài)的握手,導致傳輸速率降低;再則數(shù)據(jù)線是單向的,由狀態(tài)線完成的數(shù)據(jù)輸入需要進行字節(jié)的拼接,因此又降低了數(shù)據(jù)的傳輸速率。

  增強型并行端口協(xié)議從根本上改變了這一狀況,它不但與SPP兼容,又能進行雙向的高速數(shù)據(jù)傳輸。它的握手信號由硬件完成,數(shù)據(jù)傳輸速率最高可達到ISA總線的速度。

  2、SPP簡介

  2.1、EPP讀寫周期及信號定義

  增強型并行端口協(xié)議最初是由Intel、Xircom和Zenith Data System公司發(fā)起并制定的,它后以后的IEEE1284標準都極大的改善了并行端口的性能。EPP協(xié)議提供了數(shù)據(jù)寫、數(shù)據(jù)讀、地址寫、地址讀四種數(shù)據(jù)傳輸周期。

  數(shù)據(jù)周期用于主機和外設間的數(shù)據(jù)傳輸,地址周期用于傳送地址、通道、命令和控制信息。表1列出EPP與SPP信號的定義及相互關系。

  表1、EPP信號描述

  SPP信號EPP信號方向EPP信號描述

  nSTROBEnWRITE輸出低有效,表示寫操作。高電平讀周期

  nAUTOFEEDnDATASTB輸出低有效,表示數(shù)據(jù)的讀寫操作正在進行

  nSELECTINnADDRSTB輸出低有效,表示地址的讀寫操作正在進行

  nINITnRESET輸出低有效,外設復位

  nIACKnINTR輸入外設中斷,用于對主機產生一個中斷

  BUSYnWAIT輸入握手信號 ,低表示可以開始一個周期(置選通),高表示可以結束一個周期(清選通)

  D[8:1]AD[8:1]雙向雙向地址/數(shù)據(jù)線

  PE用戶定義輸入每種外設有不同的使用

  SELECT用戶定義輸入每種外設有不同的使用

  nERROR用戶定義輸入每種外設有不同的使用

  

?

  附圖是EPP數(shù)據(jù)寫周期的時序圖。因它的握手信號由硬件完成,整個數(shù)據(jù)傳輸過程發(fā)生在一個ISA I/O周期內,因而使用EPP傳送數(shù)據(jù),協(xié)調可以獲得500KB/S~2MB/S的傳輸率。

  2.2、EPP端口及寄存器

  EPP占用并行口基地址+0~+7共8個相鄰的I/O映像地址。基地址+3是EPP的地址口,對它進行I/O操作便產生地址周期;基地址+4是EPP的數(shù)據(jù)口,對它進行8位I/O讀寫操作,便產生數(shù)據(jù)讀寫周期。如軟件使用16位或32位的I/O操作,則會用到基地址+4~+7映像地址。對基地址+0~+2的操作與SPP相同,這就保證了與SPP的兼容性。但由于EPP為雙向端口,其寄存器的內容比SPP有所增加(如表2所示)。

  口地址端口名BIT0BIT1BIT2BIT3BIT4BIT5BIT6BIT7

  基地址+0數(shù)據(jù)口D0D1D2D3D4D5D6D7

  基地址+1狀態(tài)口TIEMOUT00nERRSLCTPEnACKnBUSY

  基地址+2控制口STROBEAUTOFDnINITSLCIRQEPCD00

  基地址+3EPP地址口D0D1D2D3D4D5D6D7

  基地址+4EPP數(shù)據(jù)口0D0D1D2D3D4D5D6D7

  基地址+5EPP數(shù)據(jù)口1D0D1D2D3D4D5D6D7

  基地址+6EPP數(shù)據(jù)口2D0D1D2D3D4D5D6D7

  基地址+7EPP數(shù)據(jù)口3D0D1D2D3D4D5D6D7

  新增的位如下:

  (1)TIMEOUT位:邏輯“1”表示EPP讀寫操作時發(fā)生超時錯誤;邏輯“0”表示無超時發(fā)生。

  (2)PCD位(Parallel Control Direction并行口方向控制):在雙向傳輸種,PCD位為“0”時進行寫操作;為“1”時進行讀操作,8位數(shù)據(jù)線處于讀狀態(tài)。

  2.3、EPP1.9和EPP1.7

  EPP1.7是指Xircom 1.7版的提案,Intel在最初的82360 I/O控制器中使用這一協(xié)議,而那時IEEE1284標準還沒建立起來。EPP1.7與IEEE1284標準所規(guī)定的EPP1.9的區(qū)別在于,EPP1.7在讀寫周期開始時,nDATASTROBE或nADDRSTROBE置位時不考慮nWAIT信號的狀態(tài)。這意味著外設不能通過清nWAIT來推遲一個EPP周期的開始。因而服從1284標準的外設可以在EPP1.7的主機上工作,而EPP1.7的外設不能在服從1284 標準的主機上工作。

  EPP控制芯片中的看門狗時鐘會防止系統(tǒng)鎖死。一般來講,EPP1.9在讀寫周期開始10us后,如果nWAIT仍沒有響應,則發(fā)生TIMEOUT錯誤,狀態(tài)寄存器的第0位TIMEOUT為“1”,EPP周期終止;而EPP1.7則是在EPP讀寫周期開始10us后仍未結束時,置TIMEOUT為“1”。

  3、EPP編程方法

  3.1、EPP模式的設置與基地址的選擇

  由于EPP控制芯片的生產廠家不同,具體的編程方式也有所不同,因而EPP協(xié)議對該模式的設置和檢測沒有統(tǒng)一的規(guī)定。比較實用的設置方式是在系統(tǒng)的CMOS中選擇含有EPP模式的選項,再選擇EPP協(xié)議的類型EPP1.7或EPP1.9,由系統(tǒng)完成對EPP芯片的設置。

  并行端口的地址也可在CMOS中設置,如果操作系統(tǒng)為Windows 9x,可以在其中“控制面板”的“系統(tǒng)”窗口中設置。值得注意的是,基地址一般使用378H或278H,而不使用3BCH。因為EPP要求8個相鄰的I/O端口,而3C0H可能為VGA設備所占用。

  3.2、傳輸方向控制

  并行端口的8位數(shù)據(jù)線在EPP模式下為雙向數(shù)據(jù)線,數(shù)據(jù)傳輸方向由控制寄存器(基地址+2)的第5位控制。該位置“1” 時,禁止數(shù)據(jù)輸出,可以從外部數(shù)據(jù)線上讀取信號。改位置“0”時,可以執(zhí)行EPP的寫操作,如地址寫或數(shù)據(jù)寫操作。

  3.3、數(shù)據(jù)、地址的讀寫操作

  EPP模式設置后,數(shù)據(jù)傳輸非常簡單,只需簡單的端口讀寫即可實現(xiàn),其C語言指令如下:

  寫一個字節(jié)的數(shù)據(jù):outportb(base_addr+4,data)

  寫一個字節(jié)的地址:outportb(base_addr+3,value)

  讀一個字節(jié)的數(shù)據(jù):data=inportb(base_addr+4)

  讀一個字節(jié)的地址:value=inportb(base_addr+3)

  3.4、狀態(tài)檢查及TIMEOUT位清除

  每一次讀寫后,應檢查狀態(tài)寄存器是否發(fā)生錯誤(如超時錯誤TIMEOUT)。如果TIMEOUT位被置位,下一次EPP數(shù)據(jù)和地址口的讀寫操作都將無效,因而每次EPP操作后對該位的檢測時必要的。TIMEOUT位為狀態(tài)寄存器(基地址+1)的第0位,對該位TIMEOUT標志的清除,不同的控制芯片使用不同的方法,這對編程不利。有的向該位寫“1”,可以清除TIMEOUT標志,寫“0”對該位無影響;有的對狀態(tài)寄存器進行讀操作,就可以清除該位;還有的是寫“0”清除該標志。所以通用的方法是讀狀態(tài)寄存器后,TIMEOUT位如果置位,先向該位寫“1”,再寫“0”。這樣,無論哪種芯片都可以保證對該位的清除。

  3.5、16位、32位數(shù)據(jù)的讀寫操作

  EPP的8位數(shù)據(jù)口共有4個:基地址+4~+7,在其中任意一個端口上進行8位I/O寫指令(如匯編語言的out,或C語言中的outportb函數(shù)),都會發(fā)生EPP的數(shù)據(jù)周期,與外設傳遞數(shù)據(jù)。這4個數(shù)據(jù)口的另一種用法是,使用16/32位輸出指令,2個或4個字節(jié)就會自動的按順序傳送給外設。例如使用匯編指令outsd向第一個EPP數(shù)據(jù)口寫一個雙字,雖然只用了一條I/O指令,但外設收到了這雙字的4個字節(jié)。值得注意的是,外設不是一次收到32位的數(shù)據(jù),而是分4次收到,在EPP模式下,數(shù)據(jù)寬度仍是8位。另外,地址口只能使用8位I/O指令,不能一次傳遞 16位或32位地址。

  3.6、Windows 3.x/Windows 9x環(huán)境下的編程

  Windows 3.x/Windows 9x環(huán)境下對硬件操作的最好方法是使用虛擬設備驅動程序VxD(virtual device driver),它可以使用DDK或C開發(fā),對端口的操作可以得到系統(tǒng)級的保護,并能得到快速的中斷響應。另一種和硬件打交道的方法是使用OCX或ActiveX控件,在32位的Visual Basic中就能實現(xiàn)。但是這些方法需要較多的編程經(jīng)驗,所采用的編程語言也受到很大限制,一般的軟件人員不易實現(xiàn)。使用 Windows API也可以實現(xiàn)硬件操作,例如通過API調用可以實現(xiàn)對串口和打印機的操作。但是Windows API沒有一般性的端口操作函數(shù),不適用于 EPP的編程。

  實用而有效的方法是對EPP進行直接I/O操作,并將相關函數(shù)生成動態(tài)連接庫DLL,供應用程序調用。在并口不被其他程序使用的情況下,對EPP執(zhí)行直接I/O讀寫是沒有問題的。由于Windows編程語言都支持對DLL的調用,因而程序員可以使用他所熟悉的語言(包括不支持直接I/O的VB)編寫應用程序,實現(xiàn)EPP的操作。

  下面給出在32位的Delphi中,通過內嵌匯編代碼實現(xiàn)的EPP端口讀寫的input32.dll源程序。

  library input32;

  uses sysutils;

  //向端口寫一個字節(jié)

  procedure function out32(portaddress, value: smallint);stdcall;export;

  var

  bytevalue: byte;

  begin

  bytevalue := byte(value);

  asm

  push dx

  mov dx,portaddress //寫bytevalue到portaddress

  mov al,bytevalue

  out x,al

  pop dx

  end; end;

  //從端口讀一個字節(jié),br> function in32(portaddress: smallint):smallint;stdcall;export;

  var

  bytevalue: byte;

  begin

  asm

  push dx

  mov dx,portaddress //從portaddress讀bytevalue

  in al,dx

  mov bytevalue,al

  pop dx

  end;

  in32 := smallint(bytevalue) and $00ff;

  end;

  exports

  in32,out32;

  begin

  end.

上一頁12全文

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發(fā)表人:小蘭 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?
      主站蜘蛛池模板: miya亚洲私人影院在线 | 天天看天天爽 | 国产最新网站 | 国产黄色小视频网站 | 一区二区三区高清不卡 | 色婷婷色婷婷 | 人人干狠狠操 | 日本免费不卡视频 | 国产乱辈通伦影片在线播放亚洲 | 午夜影视啪啪免费体验区深夜 | 日本一区三区二区三区四区 | 一级中文字幕乱码免费 | 失禁h啪肉尿出来高h | 天天做天天爽天天谢 | ts国产 | 四虎地址8848最新章节 | 天天舔天天摸 | 亚洲合集综合久久性色 | 免费一级欧美片在线观免看 | 欧美视频图片 | 色视频在线免费看 | 一区二区三区在线观看视频 | 午夜看黄网站免费 | 久久黄色精品视频 | 成人xxxxx| 色综合久久网女同蕾丝边 | 欧美福利视频网 | 日日干狠狠干 | 三级黄色免费 | 久久手机看片你懂的日韩1024 | 亚洲aa| 美女扒尿口给男人桶到爽 | 久久综合九色综合欧美播 | videsgratis欧美另类 | 曰本在线 | 四虎在线最新地址公告 | 5566成人免费视频观看 | 精品久久久久久婷婷 | 亚洲美女高清一区二区三区 | 黄色毛片免费进入 | 激情五月社区 |