• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      利用計(jì)算機(jī)并口ECP模式實(shí)現(xiàn)計(jì)算機(jī)對(duì)外圍設(shè)備的控制及數(shù)據(jù)采集

      2009-01-06 04:55葉青青
      關(guān)鍵詞:外設(shè)緩沖器字節(jié)

      葉青青

      [中圖分類(lèi)號(hào)]R562.25[文獻(xiàn)標(biāo)識(shí)碼]A[文章編號(hào)]1007-9416(2009)11-0121-04

      1 并行口簡(jiǎn)介

      并行口是PC機(jī)的常用接口。并行口由4根控制線,5根狀態(tài)線及8根數(shù)據(jù)線構(gòu)成。并行口位于PC機(jī)背面,通常為D-25針母座,也有的是D-25針公座。并行口有5種向下兼容的操作模式,分別是:兼容模式(Compatibility Mode)、半模式(Nibble Mode)、BYTE模式(Byte Mode)、EPP模式(EPP Mode)和ECP.模式(ECP Mode)。兼容模式(SPP)、半模式、Byte模式均是軟件握手,速率只有50KByte/s,最多也就是150KByte/s。EPP、ECP模式都是硬件握手,傳輸速率相近,速率最高可達(dá)2Mbyt/s。EPP模式5根狀態(tài)線中只用了2條,因而在實(shí)時(shí)雙向通信中能力顯得不足,且ECP模式可以使用FIFO緩沖器來(lái)發(fā)送/接收數(shù)據(jù)同時(shí)在Windows下還可以使用DMA通道來(lái)移動(dòng)數(shù)據(jù),因而ECP模式更適用。

      2 ECP說(shuō)明

      (1)ECP協(xié)議里有一個(gè)叫做Run Length Encoding的簡(jiǎn)單壓縮配置,它的最大壓縮比率是64:1,且它對(duì)發(fā)送重復(fù)單一字節(jié)的數(shù)據(jù)采用計(jì)數(shù)和COPY一個(gè)字節(jié)的方式工作,計(jì)的數(shù)確定重復(fù)字節(jié)的個(gè)數(shù)。例如,要發(fā)送出25個(gè)‘A,首先發(fā)送24緊隨其后是‘A。外圍設(shè)備接收到之后通過(guò)計(jì)數(shù)24及‘A恢復(fù)出25個(gè)‘A, 這對(duì)于像掃描儀、打印機(jī)那樣數(shù)據(jù)比較長(zhǎng)的外設(shè)來(lái)說(shuō),是非常好的并行接口。

      壓縮的 Byte在數(shù)據(jù)處理路徑上有別于其它Byte,它作為指令被送到ECP的地址FIFO端口(ECP Address FIFO),發(fā)送到Address FIFO寄存器的字節(jié)可能是兩種東西,一是壓縮數(shù)據(jù)長(zhǎng)度的計(jì)數(shù),二是字符的ASCI碼。壓縮Byte的MSB為1,那么其它7個(gè)BIT(BIT0—BIT6)代表的就是字符的ASCI碼;如果壓縮Byte的BIT7為0,那么在其它BIT位傳輸?shù)木褪且粋€(gè)壓縮數(shù)據(jù)長(zhǎng)度的計(jì)數(shù)。

      (2) ECP硬件特性

      普通計(jì)算機(jī)只有一個(gè)并行接口,ECP、SPP、EPP只是并行接口的幾種工作模式,它們之間的差異就在于引腳

      功能分配的不同,軟件運(yùn)行的方式不同。SPP是軟件握手,EPP、ECP是硬件握手,但ECP和EPP硬件握手的方式還不同。ECP向后兼容SPP、EPP,當(dāng)它工作在SPP模式時(shí),并行端口上的每個(gè)數(shù)據(jù)線的用途與工作在SPP模式下并行口上的數(shù)據(jù)線的用途完全相同。當(dāng)它工作在EPP模式時(shí),并行端口上的每個(gè)數(shù)據(jù)線的用途與工作在EPP模式下并行口上的數(shù)據(jù)線的用途完全相同。當(dāng)計(jì)算機(jī)工作在ECP模式下時(shí),25腳并行接口各引腳功能定義如下表:

      (4)ECP軟件寄存器

      表格2列出了ECP寄存器的內(nèi)容。前三個(gè)寄存器和SPP寄存器幾乎完全相同,只是控制端口寄存器的Bit5位特殊,在ECP模式里它控制并行口的收發(fā)方向,進(jìn)而影響ECR寄存器的FIFO Full及FIFO Empty Bit位。

      當(dāng)并行口工作在SPP模式時(shí),基地址通常被稱(chēng)為數(shù)據(jù)端口或數(shù)據(jù)寄存器,它使用簡(jiǎn)單,用于把數(shù)據(jù)放到并行口的數(shù)據(jù)線上(PINS2—9)。在標(biāo)準(zhǔn)SPP模式下,這個(gè)寄存器通常只負(fù)責(zé)把數(shù)據(jù)寫(xiě)到并口上,如果你想讀這個(gè)寄存器,只能讀到上一次發(fā)出的數(shù)據(jù)。然而如果你的并口是雙向的(Byte Mode),就可以在這個(gè)地址上接收數(shù)據(jù)。當(dāng)并行口工作在ECP模式時(shí),基地址+0用作地址FIFO(見(jiàn)表1、表2)。

      基地址+1 稱(chēng)為狀態(tài)端口或狀態(tài)寄存器,不可寫(xiě)。狀態(tài)端口的高5位直接反映并行口的5條狀態(tài)線(引腳10,11,12,13,15)的狀態(tài),Bit2是顯示IRQ的狀態(tài)位,Bit1、Bit0是保留位。請(qǐng)注意BIT7位(BUSY)低電平有效,例如,如果寄存器的第7位是‘0,那就意味著并行口的第11腳加入的是+5V,同樣如果BIT2(NIRQ)是‘1那一定沒(méi)有中斷發(fā)生,詳見(jiàn)表格3。

      控制端口(基地址+2)又稱(chēng)為控制寄存器。在具體使用它時(shí),讀是沒(méi)有意義的,一般用作只寫(xiě),詳見(jiàn)表格4。

      基地址+402h :

      基地址+402h是ECP的擴(kuò)展控制寄存器(ECR),ECR設(shè)定在那一種模式ECP端口就將工作在那一種模式。

      ECR的高三位字節(jié)用于選擇操作模式,共有7種模式,但并不是所有主機(jī)的并口硬件都支持這些模式,EPP就是其中一例。

      Standard Mode :選擇這種模式,將使ECP端口工作于SPP標(biāo)準(zhǔn)模式,但不包含雙向功能。

      Byte Mode / PS/2 Mode :ECP端口工作于SPP的雙向模式。

      Parallel Port FIFO Mode :此種模式任何數(shù)據(jù)都可寫(xiě)入DATA FIFO,端口使用SPP握手把FIFO中的DATA送給外圍設(shè)備,而握手過(guò)程是由硬件產(chǎn)生的。這對(duì)于非ECP的外設(shè)如打印機(jī)是非常有用的,你可以有一些ECP的特性如FIFO緩沖器、硬件握手,它是用已有的SPP握手而非ECP握手。

      ECP FIFO Mode :ECP使用的標(biāo)準(zhǔn)模式。這種模式使用的是已經(jīng)講述過(guò)的ECP握手。

      EPP Mode/Reserved :對(duì)于有些計(jì)算機(jī),這種模式就是使ECP端口工作于EPP模式;而在有些計(jì)算機(jī)里這種模式仍作為保留模式。

      Reserved :保留模式。

      Configuration Mode :在這個(gè)模式里共有兩個(gè)配置寄存器可以用(CNFGA及CNFGB),它們都有指定的地址。

      FIFO test mode:用于測(cè)試FIFO緩沖器的性能也用于確定這些功能的正確性。當(dāng)端口處于這種模式時(shí),任何寫(xiě)進(jìn)TEST FIFO(BASE+400H)的字節(jié)都被放進(jìn)FIFO緩沖器里,任何從TESTFIFO寄存器里讀出的字節(jié)都是取自FIFO緩沖器。你可以使用ECR的FIFO Full及FIFO Empty的Bit位來(lái)確定FIFO緩沖器的性能,通常FIFO緩沖器有16個(gè)字節(jié)的深度。

      ECR的其它BIT位在ECP操作端口中也起到非常重要的作用,ECP中斷BIT(BIT4)位使能中斷,DMA Enable Bit (Bit 3)使能直接內(nèi)存的存取的。如果ECP?Service Bit (Bit 2)被置高說(shuō)明一個(gè)中斷請(qǐng)求已開(kāi)始。不同計(jì)算機(jī)并行口使用的芯片往往不同,而不同芯片的ECP Service Bit位的復(fù)位方法可能是不同的,有些芯片需要你置0該Bit位,而有些芯片只需對(duì)ECR讀一次就可實(shí)現(xiàn)對(duì)ECP Service Bit位的復(fù)位。

      FIFO Full (Bit 1) and FIFO Empty (Bit 0)顯示FIFO緩沖器的狀態(tài)。由于這兩個(gè)Bit位是在并行口數(shù)據(jù)傳輸方向已確定的條件下取得的,所以這里無(wú)需考慮Control Register的Bit5位。如果BIT0(FIFO Empty)置為1,那么FIFO緩沖器為空;如果BIT1置為1,那么FIFO緩沖器為滿;如果這兩個(gè)BIT位都不為1的話,說(shuō)明有數(shù)據(jù)在FIFO里但它不滿,這兩個(gè)BIT位可用在FIFO Test Mode,用以測(cè)定FIFO緩沖器的容量。

      基地址 + 400h為ECP的配置寄存器A,有關(guān)ECP端口的一些內(nèi)容都可以在配置寄存器A里得到。MSB確定中斷方式:邊沿或電平觸發(fā),這主要依賴(lài)于你使用的并行卡。BIT4—6位列出了卡上的總線寬度,一些卡只有8位數(shù)據(jù)寬度,而有些卡卻有32或16位的數(shù)據(jù)寬度。為了使你的并行卡發(fā)揮最大的效能,可以先利用軟件讀出這些BIT位的狀態(tài),以此決定輸出端口的最大字的數(shù)據(jù)寬度(見(jiàn)表5)。

      配置寄存器的低三位,用于主機(jī)的恢復(fù)。為了從一個(gè)錯(cuò)誤中恢復(fù),軟件必須知道有多少個(gè)字節(jié)已送出,而獲取已送出字節(jié)的方法是查看暫存于FIFO的字節(jié)數(shù)。

      有些外設(shè)的輸入端口可能有以Byte為單位的移位寄存器,需要并行口FIFO滿之后才將數(shù)據(jù)發(fā)送給外設(shè),Bit2就是確定并口是否FIFO滿之后再傳輸?shù)腂it位。還有,并行口只有8位寬度,而你需要傳輸字長(zhǎng)16位或32位的指令,如果是這種情況,并行端口的字仍然能夠送出。字長(zhǎng)可能是1Byte、2Byte或4Byte,而在發(fā)生錯(cuò)誤時(shí)整個(gè)字的一些Byte可能還未送出,此時(shí)配置寄存器的Bite0和Bite1位就指明了剩余在FIFO里的Byte數(shù)量,繼而可以將剩余的Byte全部送出。

      基地址+401h為配置寄存器B (cnfgB),是可讀/寫(xiě)寄存器。一些并行口可以利用軟件配置CnfgB從而設(shè)置IRQ和DMA資源。而有些端口則需設(shè)置BIO或在并行卡上跳線來(lái)設(shè)置IRQ和DMA,因此此時(shí)ConfgB為只讀。

      配置寄存器的Bit 7設(shè)為1時(shí),選擇使用RLE壓縮輸出數(shù)據(jù),在發(fā)送之前主機(jī)將壓縮數(shù)據(jù),復(fù)位之后壓縮數(shù)據(jù)將被發(fā)送到外圍設(shè)備,BIT6將反饋IRQJ腳的狀態(tài)。有些設(shè)備不僅僅把IRQ用做反映并行口的狀態(tài),還用于診斷沖突(見(jiàn)表6)。

      BIT5到BIT3提供了端口IRQ分配的狀態(tài),同樣BIT2到BIT0提供了DMA通道狀態(tài)。我們可以讀/寫(xiě)前面提及的BIT位,但對(duì)于跳線的并行卡,只能讀它的狀態(tài)。

      3 并行口ECP模式與外設(shè)通信實(shí)例

      計(jì)算機(jī)實(shí)現(xiàn)對(duì)AT89C51單片機(jī)的控制,單片機(jī)上傳一組數(shù)據(jù)給計(jì)算機(jī)處理。單片機(jī)與計(jì)算機(jī)的所有對(duì)接端口需加10K上拉電阻(見(jiàn)圖1、圖2、圖3)。

      計(jì)算機(jī)C語(yǔ)言:

      #define ECPAddr 0x0378

      #define ECPState 0x0379

      #define ECPContr0x037A

      #define DataFIFO0x0778

      #define ConfigRegB 0x0779

      #define ECR0x077A

      #include >

      /******************************** 下傳3452 *********************************/

      outp (ECR, 0x60);

      outp (ECPContr, 0x04);//進(jìn)入1284傳輸模式

      outp(DataFIFO,3); outp(DataFIFO,4);outp(DataFIFO,5);outp(DataFIFO,2);m= inp(ECR)&0x01;

      while(m==0x00)//如果數(shù)據(jù)未完全移出循環(huán)等待

      {

      m= inp(ECR)&0x01;Outtime++;

      if( Outtime>1024)

      {

      state = 0x10;//“通信失敗”顯示

      break;

      }

      }

      Outtime=0;

      outp (ECPContr, 0x3c);//退出1284傳輸模式

      /********************************** End*********************************/

      /*************************** 接收100個(gè)數(shù)據(jù)*****************************/

      outp (ECR, 0x60);

      outp (ECPContr, 0x21);//0x21

      for(i=0;i<=99;i++)

      {

      m= inp(ECR)&0x01;

      while(m==0x01)//如果數(shù)據(jù)為空循環(huán)等待

      {

      m= inp(ECR)&0x01;

      Outtime++;

      if( Outtime>1024)

      {

      i=100;//退出本次100個(gè)讀數(shù)

      break;

      }

      }

      y[i]=inp (DataFIFO)/10.0-3.5;

      }//數(shù)據(jù)完全讀入后,nreverse Request并未置高

      outp (ECPContr, 0x0c);//退出1284傳輸模式并口17腳此時(shí)為低電平

      /*********************************End ********************************/

      上述程序片段是本人利用LabWindows軟件制作的,經(jīng)過(guò)實(shí)際測(cè)試,這里為限制篇幅而略去了一些變量的定義、控制。

      單片機(jī)C語(yǔ)言:

      sbit HostCLK=P2^0;sbit PeriphReq = P2^2;sbit PeriphCLK=P2^5;sbit HostACK=P2^1;

      sbit PeriphACK=P2^6;sbit nReverReq=P2^3; sbit nACKRever = P2^7;sbit ACT1284=P2^4;

      while(ACT1284&&nReverReq;==0)//主機(jī)未下傳指令之前等待

      { }

      PeriphACK=1;//外設(shè)應(yīng)答置高停止接收數(shù)據(jù)

      PeriphACK=0;//外設(shè)應(yīng)答置低準(zhǔn)備接收數(shù)據(jù)計(jì)算機(jī)只有查詢到此信號(hào)為低電平才將數(shù)據(jù)移入總線。

      for(j=0;j<=3;j++)

      {

      while(HostCLK)

      {}

      PeriphACK = 1;

      while(HostCLK==0)

      {}

      DATA[j]=P0;//HostCLK上升沿將數(shù)據(jù)移入單片機(jī)

      PeriphACK = 0;//外設(shè)應(yīng)答置低結(jié)束一個(gè)讀周期

      }

      While (nReverReq)//主機(jī)沒(méi)有上傳數(shù)據(jù)請(qǐng)求循環(huán)等待

      { }

      if((DATA[0]==3)&&(DATA[1]==4)&&(DATA[2]==5)&&(DATA[3]==2))

      {

      nACKRever=0;//響應(yīng)主機(jī)上傳數(shù)據(jù)的請(qǐng)求

      PeriphACK=1;//通知主機(jī)送出的是數(shù)據(jù)防止主機(jī)誤操作移出數(shù)據(jù)

      for(j=0;j<=99;j++)

      {

      P0=j;

      PeriphCLKC=0;//通知主機(jī)總線上的數(shù)據(jù)是有效數(shù)據(jù)

      while(HostACK==0)//主機(jī)未響應(yīng)有效數(shù)數(shù)據(jù)前循環(huán)等待

      { }

      PeriphCLKC=1;//正沿將數(shù)據(jù)移入主機(jī)

      while(HostACK)//主機(jī)未響應(yīng)已讀入數(shù)據(jù)之前循環(huán)等待

      { }

      }

      }

      上述程序段因篇幅所限略去了一些變量的定義、賦值。

      計(jì)算機(jī)的并行口ECP模式傳輸速率最高可達(dá)2Mbyt/s,可實(shí)現(xiàn)實(shí)時(shí)通信。它成本低,在短距離數(shù)據(jù)傳輸及控制中是非常理想的通信方式。在辦公、工業(yè)控制中得到廣泛的應(yīng)用。

      [參考文獻(xiàn)]

      [1] http://www.beyondlogic.org/spp/parallel.pdf

      [2] Http://www.deyondlogic.org/ecp/ecp.htm

      [3] LabWindows/CVI8 Help

      猜你喜歡
      外設(shè)緩沖器字節(jié)
      No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
      重載貨車(chē)用緩沖器選型的研究及分析
      No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
      簡(jiǎn)談MC7字節(jié)碼
      面向TIA和緩沖器應(yīng)用的毫微微安偏置電流運(yùn)放可實(shí)現(xiàn)500MHz增益帶寬
      Microchip推出具備雙ADC外設(shè)的全新器件,擴(kuò)展其低成本8位PIC?單片機(jī)產(chǎn)品線
      車(chē)輛緩沖器故障及選型
      ——以冶金企業(yè)為例
      外設(shè)天地行情
      外設(shè)天地行情
      外設(shè)天地行情
      莆田市| 江源县| 南澳县| 汉阴县| 郯城县| 祁连县| 连云港市| 鹿邑县| 达孜县| 徐汇区| 林甸县| 社会| 夏津县| 贵南县| 即墨市| 宜兴市| 英吉沙县| 桐乡市| 来安县| 惠东县| 平顶山市| 新河县| 平果县| 杨浦区| 托克托县| 广丰县| 岳阳县| 伊宁县| 民丰县| 安远县| 湘西| 五河县| 安西县| 大田县| 洞口县| 阿巴嘎旗| 广饶县| 永德县| 定边县| 咸宁市| 嘉兴市|