<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用ispLSI實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)間的通信

          利用ispLSI實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)間的通信

          作者: 時(shí)間:2012-02-07 來源:網(wǎng)絡(luò) 收藏

          結(jié)構(gòu)簡(jiǎn)單、開發(fā)方便,能夠滿足各種應(yīng)用領(lǐng)域的需求,在工業(yè)控制及自動(dòng)化裝置中得到了廣泛的應(yīng)用。它既可以單獨(dú)使用,也可以多片協(xié)同工作或作為的信號(hào)預(yù)處理器,在這種情況下,問題就成了限制系統(tǒng)性能的瓶頸。通常使用的方式有串行和并行兩種,串行方式硬件結(jié)構(gòu)簡(jiǎn)單但數(shù)據(jù)傳輸速率低,不適合大批量數(shù)據(jù)的傳送;并行方式下使用最多的中斷方式,以期提高CPU效率。但中斷方式也存在不少問題,除了具體的中斷服務(wù)外,保護(hù)、恢復(fù)斷點(diǎn)和寄存器的內(nèi)容、查取中斷向量等也占用不少CPU時(shí)間,如果數(shù)據(jù)較長(zhǎng),傳送一組數(shù)據(jù)CPU會(huì)被多次中斷,大量的斷點(diǎn)和寄存器的保護(hù)、恢復(fù)等工作特別影響CPU 效率。為了解決這一問題,本文提出了一種新的方式,稱之為中斷查詢方式,并在系統(tǒng)可編程邏輯器件 ispLIS1016了通信接口。

          本文引用地址:http://www.ex-cimer.com/article/172175.htm

          1 通信原理  

          中斷查詢方式的實(shí)質(zhì)是中斷方式和查詢方式的結(jié)合:通信雙方由中斷方式進(jìn)入數(shù)據(jù)傳送狀態(tài),之后雙方在中斷內(nèi)查詢方式完成數(shù)據(jù)傳送,直至一組數(shù)據(jù)傳送完畢,各自退出中斷服務(wù)。

          基于這種方式,通信接口應(yīng)具有數(shù)據(jù)鎖存、狀態(tài)控制和中斷產(chǎn)生等功能。如圖1—1所示為接口框圖,數(shù)據(jù)鎖存由鎖存器m和鎖存器s完成,分別鎖存送往主的數(shù)據(jù);中斷和狀態(tài)信號(hào)由狀態(tài)控制器形成,包括中斷信號(hào)(INTm和INTs),數(shù)據(jù)鎖存器m滿(FULLm)、鎖存器s滿(FULLs),以及數(shù)據(jù)傳送完畢(ENDm和ENDs)等狀態(tài),供通信雙方查詢;通信數(shù)據(jù)和各狀態(tài)信號(hào)均通過數(shù)據(jù)總線傳送,通信雙方讀數(shù)據(jù)還是讀狀態(tài)由各自的地址譯碼器控制,通過數(shù)據(jù)選擇器選擇;數(shù)據(jù)的三態(tài)輸出由數(shù)據(jù)緩沖器。我們以發(fā)送數(shù)據(jù)為例說明數(shù)據(jù)傳送過程:當(dāng)計(jì)算機(jī)將數(shù)據(jù)寫入鎖存器s時(shí),狀態(tài)控制器產(chǎn)生一中斷請(qǐng)求信號(hào)INTs,并置狀態(tài)FULLs=1、ENDs=0;單片機(jī)響應(yīng)中斷后便查詢方式接收數(shù)據(jù),查詢狀態(tài)信息FULLs和ENDs,每次FULLs=1時(shí)讀取一個(gè)數(shù)據(jù),同時(shí)該讀信號(hào)通過狀態(tài)控制器使FULLs清0,并產(chǎn)生中斷信號(hào)INTm;由于處于發(fā)送狀態(tài),計(jì)算機(jī)進(jìn)入中斷后,先檢查 FULLs,等待FULLs=0后向數(shù)據(jù)鎖存器s寫數(shù)據(jù)(僅為利用該寫信號(hào))將ENDs置位并退出中斷,單片機(jī)查到FULLs=0但ENDs=1后停止接收數(shù)據(jù)也退出中斷,一次通信完成。

          可見,利用這種方式進(jìn)行數(shù)據(jù)傳送,無(wú)論數(shù)據(jù)量多大,每次數(shù)據(jù)傳送過程中CPU只響應(yīng)一次中斷,與單一的中斷方式比較,節(jié)約了CPU的中斷響應(yīng)時(shí)間,對(duì)于大批量數(shù)據(jù)的傳送,不僅效率高,而且數(shù)據(jù)量可任意改變,使用非常靈活。

          68.jpg

          2 接口功能的  

          由圖1—1所示的框圖可以看出,上述中斷查詢接口不僅需要具有鎖存器和緩沖器的數(shù)據(jù)通道,還要有中斷、狀態(tài)控制及地址譯碼和數(shù)據(jù)選擇邏輯,電路是比較復(fù)雜的。但是,可編程邏輯器件和電子設(shè)計(jì)自動(dòng)化工具的出現(xiàn),使得復(fù)雜電路可在單片可編程邏輯器件上實(shí)現(xiàn),不僅使設(shè)計(jì)簡(jiǎn)化,而且使硬件設(shè)計(jì)象軟件一樣易于修改。針對(duì)前述中斷查詢接口,我們采用LATTICE的在系統(tǒng)可編程邏輯器件is-pLSI1016實(shí)現(xiàn)其功能。這樣,該接口的設(shè)計(jì)就轉(zhuǎn)化為對(duì)其電路描述文件的設(shè)計(jì),可以采用原理圖或 HDL硬件描述語(yǔ)言。與原理圖比較,硬件描述語(yǔ)言不僅設(shè)計(jì)、閱讀和保存方便,而且易于仿真和進(jìn)行邏輯綜合,更適合對(duì)復(fù)雜電路的描述。因此我們采用 ABEL-HDL硬件描述語(yǔ)言進(jìn)行設(shè)計(jì)。

          在Synario環(huán)境中,對(duì)選定的器件加入ABEL-HDL資源文件,輸入相應(yīng)的模塊名和文件名后,便可打開ABEL-HDL語(yǔ)言編輯窗口[2]。

          利用ABEL語(yǔ)言進(jìn)行電路設(shè)計(jì)的關(guān)鍵在于各信號(hào)的定義和相應(yīng)的邏輯描述。就前述接口而言,地址總線、數(shù)據(jù)總線、讀、寫及中斷信號(hào)均直接與通信雙方的 CPU相連,顯然應(yīng)定義為引腳(pin);而數(shù)據(jù)鎖存器及各狀態(tài)信號(hào)通過數(shù)據(jù)選擇器與數(shù)據(jù)總線相聯(lián),故為節(jié)點(diǎn)(node),如表2—1所示。其中,A、 D、RD、WR、Q分別表示地址線、數(shù)據(jù)線、讀、寫及數(shù)據(jù)鎖存器輸出信號(hào),下標(biāo)m和s分別表示主計(jì)算機(jī)和單片機(jī);表中將數(shù)據(jù)輸出定義為緩沖器(buffer)是為了直接利用1016各I/O腳的三態(tài)輸出功能,以省去圖1—1中的數(shù)據(jù)緩沖器。另外,狀態(tài)信號(hào)FULL和END應(yīng)為具有異步清零和置位功能的寄存器,以存貯數(shù)據(jù)交換過程中相應(yīng)的狀態(tài)信息,但是在可編程邏輯器件中設(shè)計(jì)異步控制是復(fù)雜和浪費(fèi)資源的,本文將它們?cè)O(shè)計(jì)為基本的RS 觸發(fā)器,故定義了相應(yīng)的反向輸出節(jié)點(diǎn)FUL1和EN1。

          67.jpg

          ABEL語(yǔ)言設(shè)計(jì)文件中各信號(hào)的邏輯關(guān)系可以多種方式給出,本設(shè)計(jì)主要采用寄存器和RS觸發(fā)器等,故以采用邏輯方程為宜。由前述接口原理可以看出,該接口的通信雙方均需3個(gè)端口:數(shù)據(jù)輸入/輸出口、狀態(tài)口及END信號(hào)置位口。設(shè)主計(jì)算機(jī)對(duì)應(yīng)的口地址為300H、308H和310H,單片機(jī)的3個(gè)口地址分別為8000H、8010H和8020H,對(duì)照?qǐng)D1—1所示的框圖和接口的工作原理,電路的ABEL語(yǔ)言方程可以按功能塊給出。

          數(shù)據(jù)鎖存器是數(shù)據(jù)可靠傳送的基礎(chǔ),對(duì)主計(jì)算機(jī)而言,向300H單元寫入數(shù)據(jù)就是將數(shù)據(jù)寫入鎖存器s中,也就是說鎖存器s的輸入信號(hào)為主計(jì)算機(jī)的數(shù)據(jù)總線,時(shí)鐘為主計(jì)算機(jī)對(duì)300H單元的寫信號(hào),對(duì)應(yīng)的ABEL語(yǔ)言方程可表示為:

          66.jpg

          線和數(shù)據(jù)線的集合。為減少系統(tǒng)的片外接線,式(2—1)將鎖存器Qs的輸入定義為三態(tài)數(shù)據(jù)輸出的引腳(.pin),在保證接口功能的前提下,實(shí)現(xiàn)了在is-pLSI1016片內(nèi)Qs輸入端與數(shù)據(jù)總線的連接。

          數(shù)據(jù)選擇器根據(jù)通信雙方對(duì)不同地址的讀取選擇不同信號(hào),其ABEL語(yǔ)言方程為:
          Ds.oe=!RDs&((ADRs==^h8000)#(ADRs==^h8010));(2—3)
          when(ADRs==^h8000)then Ds=Qs;else when(ADRs==^h8010)then Ds=STs; (2—4)

          式中,STs=[FULLs,F(xiàn)ULLm,ENDs,ENDm,x,x,x,x,x,x,x,x,x,x,x,x],12個(gè)任意值x的引入是為了使STs與數(shù)據(jù)總線寬度匹配。由于省去了圖1—1的數(shù)據(jù)緩沖器,數(shù)據(jù)選擇器的輸出即為數(shù)據(jù)總線,故其三態(tài)控制端為單片機(jī)讀數(shù)據(jù)(8000H)和讀狀態(tài)(8010H)信號(hào)的“或”信號(hào)。

          狀態(tài)信號(hào)是數(shù)據(jù)正確傳送的保證,也是通信雙方讀寫數(shù)據(jù)的依據(jù)。從時(shí)序上講,F(xiàn)ULLs的置位和清零由Qs的寫信號(hào)和讀信號(hào)觸發(fā),即FULLs由方程(2—5)和(2—6)確定:
          !FULLs=(?。ˋDRm==^h300)#WRm)&  FUL1s;(2—5)
          !FUL1s=(?。ˋDRs==^h8000)#RDs)&  FULLs;(2—6)
          其中FUL1s為FULLs的反相輸出端。ENDs的清零與FULLs的置位同時(shí)產(chǎn)生,但其置位必須由主計(jì)算機(jī)寫310H單元觸發(fā),故ENDs的ABEL語(yǔ)言方程為:
          !ENDs=(?。ˋDRm==^h310)#WRm)&EN1s;
          (2—7)
          !EN1s=(?。ˋDRm==^h300)#WRm)&ENDs;  

          顯然,無(wú)論是主計(jì)算機(jī)將數(shù)據(jù)寫入Qs,還是主計(jì)算機(jī)將數(shù)據(jù)從Qm中讀走,INTs都應(yīng)置位,因此INTs=FULLs+FULLm,但這樣若FULLm為零則INTs將始終為1,無(wú)法產(chǎn)生中斷。為解決這一問題,我們將INTs的方程寫為:

          INTs=FULLs#?。‵ULLm#ENDm);(2—9)

          使其在ENDm為零時(shí)按INTs=FULLs+FULLm運(yùn)算,只要由軟件上控制,保證每次通信前雙方的狀態(tài)為:ENDs=ENDm=1,F(xiàn)ULLs=FULLm=0,即可實(shí)現(xiàn)正確的中斷和通信。顯然,利用同樣的方法不難寫出主計(jì)算機(jī)一方各信號(hào)的邏輯關(guān)系,本文不再累述。

          通過以上設(shè)計(jì),我們實(shí)現(xiàn)了主計(jì)算機(jī)與多個(gè)80C196單片機(jī)系統(tǒng)之間的數(shù)據(jù)通信,將各80C196系統(tǒng)置于主計(jì)算機(jī)的總線擴(kuò)展槽中,使整個(gè)系統(tǒng)不僅通信速度快,而且性能穩(wěn)定可靠,效果良好。

          [參考文獻(xiàn)]
          [1] 劉樂善等.微型計(jì)算機(jī)接口技術(shù)原理及使用.華中理工大學(xué)出版社,1996.3
          [2] 黃正瑾.在系統(tǒng)編程技術(shù)及其應(yīng)用[M].東南大學(xué)出版社,1997.8



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();