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

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計應(yīng)用 > 用CH365實(shí)現(xiàn)PCI息線與DSP的通信

          用CH365實(shí)現(xiàn)PCI息線與DSP的通信

          作者: 時間:2007-12-11 來源:網(wǎng)絡(luò) 收藏
          摘要 針對數(shù)控機(jī)床控制發(fā)展中的新要求,提出并設(shè)計一種新型的控制方案。運(yùn)用總線,以提高控制效率和實(shí)時性;應(yīng)用CPLD解決雙口RAM的仲裁控制邏輯問題。在硬件設(shè)計完成之后,提出了雙向的軟件測試方法。
          關(guān)鍵詞 總線 雙口RAM CPLD


          引 言
          隨著數(shù)控技術(shù)與裝備的發(fā)展,特別是在通用微機(jī)數(shù)控領(lǐng)域,以PC+運(yùn)動控制器模式的開放式運(yùn)動控制系統(tǒng),已經(jīng)越來越引起人們的重視。這種開放式的數(shù)控系統(tǒng)能夠在多種平臺上運(yùn)行,可以和其他系統(tǒng)交互操作,并能給用戶提供一種統(tǒng)一風(fēng)格的交互方式;具有可互操作性、可移植性、檔次皆宜性和可互補(bǔ)性等特點(diǎn)。PC機(jī)技術(shù)引入運(yùn)動控制領(lǐng)域,從軟件和硬件方面為開放式運(yùn)動控制技術(shù)提供了新的發(fā)展空間和前進(jìn)方向。
          作為運(yùn)動控制器件的技術(shù)目前已趨于成熟,并成功地應(yīng)用于實(shí)際工業(yè)生產(chǎn)之中。TMS320C2407是美國TI(德州儀器)公司專為電機(jī)控制(DMC)應(yīng)用而推出的一種低價格、高性能的16位定點(diǎn)運(yùn)算DSP。該器件將高性能的DSP內(nèi)核和豐富的微控制器外設(shè)功能集于一身,為控制系統(tǒng)應(yīng)用提供了一種理想的解決方案。


          1 硬件電路總體設(shè)計方案
          PC機(jī)與DSP之間的目前比較常用的方法是通過RS232串行通信,但這種方式速度較慢,且無法實(shí)時控制,故考慮應(yīng)用PC機(jī)的接口來實(shí)施傳輸任務(wù)。PCI總線是一種高性能的32/64位地址、數(shù)據(jù)復(fù)用總線,它是一種獨(dú)立處理器的同步總線,可支持碎發(fā)傳送。其總線時鐘頻率為o~33MHz。在33MHz的工作頻率下達(dá)到了132MB/s的傳輸速度。PCI總線與其他主流總線相比,速度更快,實(shí)時性更好,可控性更佳,適用于高速實(shí)時的I/O控制卡;但由于PCI總線協(xié)議比較復(fù)雜,因此其接口電路起來并不容易,而采用通用PCI接口芯片就能很好地解決這一問題。
          目前市場上常見的PCI橋芯片主要有AMCC、PLX、CYPRESS以及南京沁恒電子公司的CH36X等系列產(chǎn)品。根據(jù)比較以及此系統(tǒng)的實(shí)際要求,選用南京沁恒電子公司的。此芯片具有如下特點(diǎn):支持I/O端口映射、存儲器映射、擴(kuò)展ROM以及中斷。將32位高速PCI總線轉(zhuǎn)換為簡便易用的類似于ISA總線的8位主動并行接口,用于制作低成本的基于PCI總線的計算機(jī)板卡,以及將原先基于ISA總線的板卡升級到PCI總線上。
          對本系統(tǒng)來說,PC機(jī)要發(fā)送控制指令和進(jìn)行大量的數(shù)據(jù)計算,數(shù)據(jù)交換應(yīng)盡可能占用較短的機(jī)時和較少的內(nèi)存空間。另外,PCI總線與DSP之間還要進(jìn)行大量、可靠的數(shù)據(jù)傳輸,它們均過多地占用CPU時間,導(dǎo)致CPU效率降低。使用雙口RAM交換信息,雙方將其當(dāng)作自己存儲器的一部分,可保證高速、可靠的數(shù)據(jù)通信。本系統(tǒng)選用的CY7C133,完全能夠滿足數(shù)據(jù)傳輸?shù)囊?。CY7C133是一款高速2K16位的雙口靜態(tài)RAM,允許2個(左、右)端口同時讀/寫數(shù)據(jù),每個端口具有獨(dú)立的控制信號線、地址線和數(shù)據(jù)線??筛咚俅嫒?shù)據(jù),最短存取時間為25ns,可與大多數(shù)高速處理器配合使用,而無須插入等待狀態(tài)。CY7C133除具有雙端口存取功能外,還具有標(biāo)識器功能,在數(shù)據(jù)傳送時可構(gòu)成多種接口形式。


          2 接口電路的實(shí)現(xiàn)
          2.1 雙口只AM的邏輯判斷
          雙口RAM允許2個CPU同時讀取任何存儲單元(包括同時讀同一地址單元),但不允許同時寫或一讀一寫同一地址單元,否則就會出現(xiàn)寫入值和讀出值不是期望值的混亂狀態(tài)。雖然CY7C133硬件本身帶有BUSY控制信號來協(xié)調(diào)兩端的訪問,但BUSY信號腳要求與兩側(cè)CPU的READY線相連,而CH365并不具有READY信號線,因此,需要引入仲裁邏輯控制模塊。常用的雙口RAM解決地址競爭的途徑有:令牌傳遞法、基于郵箱機(jī)制的INT中斷法以及插入等待周期的BUSY法等。在本系統(tǒng)中我們采用第2種方法。
          基于郵箱機(jī)制的INT中斷法的基本思想是:給每個端口分配一個地址作為郵箱,比如本系統(tǒng)可以令CH365使用00H,DSP使用8000H,這兩個地址用來裝載作為分配兩端口RAM使用權(quán)的依據(jù)數(shù)據(jù)。具體約定為:當(dāng)左端口CH365寫地址單元00H時,通過邏輯器件可實(shí)現(xiàn)右中斷DSP_TNT(DSP中斷)為低,向DSP發(fā)出中斷請求,DSP讀地址單元00H時,DSP_INT為高,復(fù)位CH365發(fā)出的中斷請求。同理,當(dāng)右端口寫地址單元8000H時,左中斷INT_REQ(CH365中斷)為低,可向左端口發(fā)出中斷請求;而當(dāng)左端口讀地址8000H時,INT_REQ為高,復(fù)位DSP發(fā)出的中斷請求。當(dāng)信箱內(nèi)容為00時,表示正在使用該方端口;當(dāng)信箱內(nèi)容為FFH時,表示結(jié)束使用該端口。因此,雙方在對端口的其他單元進(jìn)行讀寫操作開始時,需要向郵箱中寫入00H;操作結(jié)束,寫入FFH。如果沒有發(fā)生爭用,則直接進(jìn)行讀寫操作;否則,慢的一方產(chǎn)生中斷,并查詢對方郵箱,直到對方郵箱內(nèi)容為FFH。具體實(shí)現(xiàn)可借助CPLD來完成。
          2.2 總線擴(kuò)展的解決方案
          CH365的地址總線寬度是16位,數(shù)據(jù)總線寬度為8位,TMS320C2407的數(shù)據(jù)總線和地址總線的寬度均為16位,而CY7C133的數(shù)據(jù)總線寬度是16位,地址總線寬度是11位,所以DSP與CY7C133的接口并無特別之處;但是CH365與CY7C133之間的接口電路就需要對雙口RAM進(jìn)行總線擴(kuò)展了?;舅枷胧抢貌糠諧PLD實(shí)現(xiàn)鎖存器的功能,通過對使能信號的控制,把16位數(shù)據(jù)進(jìn)行分時讀寫,實(shí)現(xiàn)數(shù)據(jù)總線的擴(kuò)展,即利用鎖存器作為虛擬總線。此處選用EPM7032的CPLD來解決總線擴(kuò)展問題,其內(nèi)部電路如圖l所示。

          下面討論CH365對雙口RAM的讀寫過程。當(dāng)CH365對雙口RAM進(jìn)行讀數(shù)據(jù)時,設(shè)定此時A0為高電平,此時16位數(shù)據(jù)均從雙口RAM中讀出,由于高8位數(shù)據(jù)線與CH365的8位數(shù)據(jù)線直接相連,所以高8位數(shù)據(jù)被立即讀入CH365中。同時,根據(jù)圖1中各信號的相互邏輯關(guān)系可以得到,讀鎖存器(U1)的使能信號G有效(高電平),OEN無效(高電平),因而低8位數(shù)據(jù)被送入U1中鎖存起來。接著CH365再進(jìn)行一次讀操作,CH365_A0變成低電平,雙口RAM的片選信號變成無效電平,所以此次讀操作對雙口RAM不產(chǎn)生影響,而此時U1的使能信號G變成了無效電平,而OEN變成了有效電平,上次被鎖存的數(shù)據(jù)(即雙口RAM的低8位數(shù)據(jù))被送入CH365中,16位數(shù)據(jù)讀完成。當(dāng)CH365對雙口RAM進(jìn)行寫入操作時,設(shè)定此時CH365_A0為低電平,同樣可根據(jù)圖l判斷寫緩存器(U2)的使能信號G有效,而OEN無效,雙口RAM片選無效,因而數(shù)據(jù)被鎖存在U2中;接著CH365再進(jìn)行一次寫操作,由于CH365_A0變成高電平,雙口RAM片選有效,U2的片選無效,OEN為有效電平,故此時16位數(shù)據(jù)同時寫入雙口RAM。從上面的分析可知,利用最低地址位CH365_AO的不同電平,CH365通過兩次連續(xù)的讀或?qū)懖僮?,成功地?shí)現(xiàn)了對雙口RAM中數(shù)據(jù)的讀或?qū)?,只不過是讀入時是先讀入高8位,后讀入低8位;而寫入則是先寫入低8位,后寫入高8位。同時,兩片鎖存器不能出現(xiàn)同時被選中的情況.否則就會出現(xiàn)傳輸數(shù)據(jù)的混亂,導(dǎo)致傳輸錯誤。
          本系統(tǒng)的硬件電路原理(主要部分)如圖2所示。由于TMS320C2407(3.3V)與雙口RAM(5V)的電平差別,加入了電壓轉(zhuǎn)換器件SN74LVTHl6245A。

          3 PCI和DSP的通信
          在硬件電路實(shí)現(xiàn)之后,把完成的板卡插于PC機(jī)的PCI插槽。上電后,根據(jù)系統(tǒng)提示安裝CH365驅(qū)動程序,在正確安裝好硬件之后,就可以在VC環(huán)境下編寫和調(diào)試PCI和DSP的通信軟件。
          通過API函數(shù)編寫與DSP的相互數(shù)據(jù)交換程序,完成雙向的中斷申請和中斷響應(yīng),實(shí)現(xiàn)數(shù)據(jù)快速交換。
          3.1 CH365的雙向通信程序
          CH365支持PC機(jī)程序以單字節(jié)、雙字節(jié)(字)、四字節(jié)(雙字)為單位對I/O端口或者存儲器進(jìn)行讀寫。在多字節(jié)連續(xù)讀寫操作期間,CH365每讀寫完一個字節(jié)數(shù)據(jù)后,就會自動將偏移地址加l,以指向下一個字節(jié)的偏移地址。我們可以通過向I/0口的00H寫數(shù)據(jù)實(shí)現(xiàn)向DSP申請中斷,DSP在響應(yīng)中斷后通過讀00H清除上位機(jī)的中斷。其程序如下:

          3.2 DSP的雙向通信程序
          為了方便觀察數(shù)據(jù)傳輸結(jié)果,本測試中設(shè)定,DSP寫空間為Ox0400~Ox07FF,讀空間為OxO000~Ox03FF,即可以通過DSP程序?qū)崿F(xiàn)從前l(fā)K單元讀取數(shù)據(jù)再寫入后lK單元,然后把后寫入的數(shù)據(jù)與PC機(jī)寫入的數(shù)據(jù)進(jìn)行比較。如果吻合,則說明數(shù)據(jù)交換成功。圖3給出DSP的程序流程。
          通過雙向的軟件測試,結(jié)果顯示數(shù)據(jù)交換完全正確。

          結(jié)語
          隨著計算機(jī)技術(shù)和電子技術(shù)的發(fā)展,將運(yùn)算高速、功能強(qiáng)大的數(shù)字信號處理器應(yīng)用于運(yùn)動控制,可以實(shí)現(xiàn)復(fù)雜的控制算法和高精度、高速度、多軸聯(lián)動功能,在數(shù)控應(yīng)用中,將會占據(jù)越來越重要的地位。而快速、準(zhǔn)確的通信是這種運(yùn)動控制器的基礎(chǔ)。本文提出的通信方式,具有性能可靠,硬件結(jié)構(gòu)簡單,價格便宜的優(yōu)點(diǎn),有較好的應(yīng)用前景。



          關(guān)鍵詞: 通信 DSP PCI 實(shí)現(xiàn) CH365

          評論


          相關(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); })();