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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TMS320VC5410A I/O口的多種擴(kuò)展與I2C接口模擬

          TMS320VC5410A I/O口的多種擴(kuò)展與I2C接口模擬

          ——
          作者:兵器工業(yè)第58研究所 左顥睿 時(shí)間:2007-01-26 來(lái)源:《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》 收藏

          ti公司的dsp芯片tms320vc5410a(簡(jiǎn)稱(chēng)5410a)是性能卓越的低功耗定點(diǎn)16位dsp,在嵌入式系統(tǒng)中有著廣泛應(yīng)用,5410a沒(méi)有專(zhuān)門(mén)的通用i/o引腳,僅有xf引腳可以作為單向輸出,/bio引腳作為單向輸入,同時(shí)5410a的片上外設(shè)沒(méi)有i2c接口,所以,當(dāng)5410a需要控制外圍芯片或與其他芯片進(jìn)行通信時(shí)(如i2c通信),必須擴(kuò)展通用i/o口,本文首先介紹5410通用i/o口的多種擴(kuò)展方式,然后針對(duì)每種擴(kuò)展方式實(shí)現(xiàn)與語(yǔ)音芯片tlv320aic23的i2c通信。

          1 通用i/o口的多種擴(kuò)展方式

          1.1 使用多通道緩沖串行接口擴(kuò)展通用 i/o口

          5410a具有3個(gè)多通道緩沖串行(簡(jiǎn)稱(chēng)mcbsp)接口,每個(gè)mcbsp接口有6個(gè)引腳,在通常情況下,可以靈活地與外圍設(shè)備進(jìn)行串行通信。在需要的時(shí)候,可以配置為通用i/o口。

          mcbsp的6個(gè)引腳分別是bclkr、bclkx、bfsr、bfsx、bdr和bdx,通過(guò)配置mcbsp的子寄存器pcr來(lái)實(shí)現(xiàn)通用i/o口的擴(kuò)展,下面對(duì)圖1所示的pcr寄存器的配置進(jìn)行闡述。

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

          1)15位與16位。保留。

          2)第13位xioen和12位rioen,控制著mcbsp的功能,分別對(duì)應(yīng)著3個(gè)引腳,xioen控制bclkx、bfsx和bdx,rioen控制bclkr、bfsr和bdr,其中bdx只能作為單向輸出,bdr只能作為單向輸入,當(dāng)這兩位置0時(shí),mcbsp作為普通的串行接口與外部通信,當(dāng)這兩位置1時(shí),把mcbsp置為通用i/o口。xioen和rioen對(duì)引腳的控制是分開(kāi)的,例如xioen=1,rioen=0時(shí),bclkx、bfsx和bdx三個(gè)引腳是作為同月i/o口的,而bclkr、bfsr和bdr依然可以作為通用串行口的接收。

          3)11位-8位,控制著相應(yīng)引腳的輸入/輸出,配置為輸入時(shí)置0,配置為輸出時(shí)置1,例如bclkr引腳為輸出,則置第8位clkrm為1,bclkx引腳為輸入,則置第9位clkxm為0。

          4)第7位與6位,與通用i/o口無(wú)關(guān)。

          5)第5位lx_state,作為bdx引腳的輸出控制,置1輸出高電平,置0輸出低電平。

          6)第4位dr_state,表示bdr引腳的輸入狀態(tài),讀入1表示輸入高電平,讀入0表示輸入低電平。

          7)第3-0位,在輸出時(shí)控制著相應(yīng)引腳的高低電平,而作為輸入時(shí),可以從對(duì)應(yīng)引腳讀出電平的高低狀態(tài),在這里要注意:在配置mcbsp為通用i/o口時(shí),要首先停止串行接口的收發(fā),即配置spcr1中的rrst位為0,spcr2中的xrst位為0。

          1.2 使用主機(jī)接口(hpi)擴(kuò)展通用i/o口

          5410a具有增強(qiáng)型8位和16位主機(jī)接口(簡(jiǎn)稱(chēng)hpi),通常情況下用來(lái)與主機(jī)進(jìn)行高速率的數(shù)據(jù)通信,需要時(shí)可以禁止主機(jī)接口的功能,擴(kuò)展為通用i/o口。
          hpi接口有8位數(shù)據(jù)線hd0-h(huán)d7可以用來(lái)作為通用i/o口,通用i/o口的擴(kuò)展是通過(guò)兩個(gè)專(zhuān)用寄存器gpiocr(通用i/o口控制寄存器)和gpiosr(通用i/o口狀態(tài)寄存器)的控制來(lái)實(shí)現(xiàn)的。下面對(duì)圖2和圖3所示的兩個(gè)寄存器的配置進(jìn)行闡述。


          圖2和圖3中的dir7-dir0和hd7-h(huán)d0引腳一一對(duì)應(yīng),gpiocr用來(lái)控制通用i/o口的讀/寫(xiě)方向。當(dāng)7-0中的某一位置0時(shí),對(duì)應(yīng)的引腳配置為輸入,當(dāng)置為1時(shí),對(duì)應(yīng)引腳配置為輸出,例如dir7置為0時(shí),dh7作為輸入引腳,dir6置為1時(shí),dh6作為輸出引腳,gpiosr在作為輸出時(shí)是用來(lái)控制i/o口的高低電平,置為1高電平,置0為低電平,在作為輸入時(shí),相應(yīng)的位用來(lái)反應(yīng)對(duì)應(yīng)引腳上的電平狀態(tài)。在這里要注意:在配置hpi接口為通用i/o口時(shí),在硬件設(shè)計(jì)上需要將5410a的第92引腳(hpiena)懸空或者接地,來(lái)禁止hpi接口。

          1.3 使用xio2接口擴(kuò)展通用i/o口

          5410具有片上增強(qiáng)型外部并行接口(xio2),該接口具有23位地址線(a22-a0)和16位數(shù)據(jù)線(d15-d0),通常該接口用來(lái)與sram或其他并行設(shè)備進(jìn)行通信,在需要的時(shí)候可以被用作通用i/o口來(lái)使用。作為i/o口使用時(shí),使用portw合powtr指令來(lái)發(fā)出和讀入數(shù)據(jù)。在這里需要注意的是,23根地址線只能作為輸出引腳,16位數(shù)據(jù)線可以被用作通用雙向i/o引腳來(lái)使用。

          2 模擬i2c接口與tlv320aic23的通信

          2.1 i2c接口和tlv320aic23簡(jiǎn)介

          i2c(inter-integrated circuit)總線是一種由philips公司開(kāi)發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。i2c總線是由數(shù)據(jù)線sda和時(shí)鐘scl構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù),在cpu與被控ic之間,ic與ic之間進(jìn)行雙向傳送。各種被控制電路均并聯(lián)在這條總線上,但就象電話機(jī)一樣只有撥通各自的號(hào)碼才能工作,所以每個(gè)電路和模塊都有唯一的地址。i2c總線主要的優(yōu)點(diǎn)是其簡(jiǎn)單性和有效性,由于接口直接在組件之上,因此i2c總線占用的空間非常小,減少了電路板的空間和芯片引腳的數(shù)量,降低了互聯(lián)成本,總線的長(zhǎng)度可高達(dá)25英尺,i2c總線的另一個(gè)優(yōu)點(diǎn)是:支持多主控(multimastering),任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線,圖4給出了與i2c接口通信的數(shù)據(jù)流程。有關(guān)i2c總線的詳細(xì)資料請(qǐng)查閱參考文獻(xiàn)[1]。

          tlv320aic23(簡(jiǎn)稱(chēng)aic23)是ti公司推出的一款高性能的立體聲音頻編/解碼芯片,可以在8-96khz的頻率范圍內(nèi)提供16位、20位、24位和32位的采樣,adc和dac的輸出信噪比可以分別達(dá)到90db和100db;具有很低的功耗,回放模式下功率僅為23mw,省電模式下更是小于15μw,因此aic23是一款非常理想的音頻模擬i/o器件,可以很好地應(yīng)用在數(shù)字音頻領(lǐng)域,有關(guān)aic23的詳細(xì)資料請(qǐng)查閱參考文獻(xiàn)[2],aic23的配置有spi和i2c兩種方式,這里介紹以通用i/o口模擬i2c通信來(lái)配置aic23。aic23的i2c時(shí)序圖如圖5所示。

          2.2 用mcbsp接口作為通用i/o模擬i2c接口

          使用mcbsp和aic23的i2c接口的原理如圖6所示,在這里使用5410a的mcbsp1的bclkx1和bfsx1引腳與aic23的sclk和sdin引腳連接。bclkx1作為i2c的時(shí)鐘,bfsx1作為i2c的數(shù)據(jù)線。需要注意的是,必須把a(bǔ)ic23的mode引腳接地。才能選中aic23的i2c模式;而且當(dāng)cs引腳為低電平時(shí),aic23的i2c地址為0011010。在3種接口方式中,5410a都作為i2c總線上的主設(shè)備,aic23作為i2c總線上的從設(shè)備。

          使用mcbsp端口擴(kuò)展通用i/o口時(shí),每次都要先寫(xiě)入pcr寄存器的入口地址0eh,然后才能操作pcr寄存器。

          2.3 使用hpi接口作為通用i/o模擬i2c接口

          使用hpi接口和aic23的i2c接口的原理如圖7所示,在這里使用5410a的hd0和hd1引腳與aic23的sclk和sdin引腳連接,hd1作為i2c的時(shí)鐘,hd0作為i2c的數(shù)據(jù)線,要注意的是,必須把5410a的hpiena引腳接地,才能將hpi端口作為通用i/o口使用。

          使用hpi端口擴(kuò)展通用i/o口時(shí),首先要配置控制寄存器確定端口的輸入/輸出方式,然后再操作數(shù)據(jù)寄存器。

          2.4 使用xio2接口作為通用i/o模擬i2c接口

          使用xi02接口和aic23的i2c接口的原理如圖8所示,在這里使用5410a的a0和d0引腳與aic23的sclk和sdin引腳連接,a0作為i2c的時(shí)鐘,d0作為i2c的數(shù)據(jù)線。需要注意的是:5410a的a0引腳只能作為輸出,在這種情況下,5410a只能作為i2c總線上的主設(shè)備。

          2.5 三種擴(kuò)展方法的比較

          上述介紹的3種方法中,使用mcbsp接口來(lái)擴(kuò)展通用i/o口,有配置靈活,收發(fā)端口可以獨(dú)立操作,最多4個(gè)引腳(bclkr、bclkx、bfsr和bfsx)可以作為雙向i/o口的優(yōu)點(diǎn)。但是從程序代碼的長(zhǎng)度也可以看到,編程比較煩瑣,而且引腳數(shù)較少,使用起來(lái)不太方便,使用hpi接口來(lái)擴(kuò)展通用i/o口,由于有專(zhuān)用的寄存器來(lái)控制通用i/o口擴(kuò)展,具有配置靈活控制方便的優(yōu)點(diǎn),而且全部8個(gè)引腳都可以作為雙向i/o口使用,但是hpi接口作為通用i/o口后,就不再具有hpi功能,如果i/o引腳需要不多,則會(huì)造成資源的浪費(fèi),而且在某些dsp芯片(如tms320vc5410)上不支持hpi作為通用i/o口使用。使用xio2接口擴(kuò)展通用i/o口,具有引腳多(有38個(gè)引腳,)操作方便的優(yōu)點(diǎn),但是xio2接口一般都是和sram或其他并行設(shè)備進(jìn)行通信使用,復(fù)用xio2接口作通用i/o口時(shí)要格外謹(jǐn)慎,而且作為i/o口時(shí)地址線只能單向輸出,應(yīng)用起來(lái)具有局限性,所以在擴(kuò)展通用i/o口的時(shí)候,需要根據(jù)系統(tǒng)的需要選擇擴(kuò)展的方式。

          結(jié)語(yǔ)

          ti公司的c5000系列dsp多都沒(méi)有專(zhuān)用的通用i/o引腳,本文介紹的3種方法可以有效地?cái)U(kuò)展dsp的通用i/o口,在設(shè)計(jì)時(shí)可以靈活地選擇擴(kuò)展方式,其中hpi擴(kuò)展方式適用于支持?jǐn)U展功能的芯片,mcbsp擴(kuò)展方式和xio2擴(kuò)展方式適用于大多數(shù)c5000系列芯片,使用這些方法,可以省掉外圍的控制電路和芯片,降低系統(tǒng)成本和功耗,具有較高的實(shí)用價(jià)值。



          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();