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

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 實(shí)現(xiàn)語音壓縮算法的高速硬件平臺(tái)

          實(shí)現(xiàn)語音壓縮算法的高速硬件平臺(tái)

          作者: 時(shí)間:2009-12-17 來源:網(wǎng)絡(luò) 收藏

            固件程序由以下文件組成[5]:
            FX2.h共同的FX2常數(shù)、宏、數(shù)據(jù)類型以及函數(shù)庫內(nèi)庫函數(shù)的原型框架。
            FX2regs.h FX2寄存器的聲明及位屏蔽常數(shù)
            Fw.c 框架源代碼
            Ti6713HPI2cy13.c 用戶函數(shù)掛鉤的相關(guān)定義
            Gpif.c 由GPIF_Designer生成,用以匹配HPIC、HPIA、HPID時(shí)序
            Dscr.a51 USB描述符表的范例
            Ezusb.libEZ-USB函數(shù)庫目標(biāo)代碼
            USBJmpTb.OBJUSB中斷向量表和GPIF中斷源
            其中Fw.c、Ti6713HPI2cy13.c和Gpif.c是固件程序的核心內(nèi)容。
            在Fw.c中主要包括任務(wù)分配器(TD)函數(shù)和設(shè)備請(qǐng)求(DR)函數(shù)。Ti6713HPI2cy13.c中定義這些關(guān)鍵函數(shù)。Gpif.c由GPIF_Designer生成,本設(shè)計(jì)將GPIF_Designer的4組波形分別定義為:第一半字寫、第二半字寫、FIFO寫和FIFO讀。其中前兩組波形配合任務(wù)分配器函數(shù)TD_Poll()完成DSP中寄存器HPIC和HPIA的寫,后兩組波形配合TD_Poll()完成自增模式下HPID的讀寫。波形的設(shè)計(jì)要嚴(yán)格遵守HPI總線訪問時(shí)序。
          在TD_Init()中設(shè)置整體狀態(tài)變量的初始值并規(guī)定各種端點(diǎn)資源的使用(包含中斷)以及配置外圍接口的輸入輸出。為匹配HPI通信所需數(shù)據(jù)總線寬度,寄存器EPxFIFOCFG中 WORDWIDE位置1。PORTB配置為FD[7:0],PORTD配置為FD[15:8]。為了達(dá)到最大的USB2.0帶寬,設(shè)計(jì)中將AUTOOUT/AUTOIN位置1。主機(jī)與主控制器被直接連接,CPU被旁路,OUT FIFO自動(dòng)從主機(jī)提交到FIFO。
            TD_Init()定義中的程序片段:
            ……
            EP2CFG=0xA0;  //端點(diǎn)2可用、輸出、數(shù)據(jù)流、512 B、
                      //4倍緩沖模式
            SYNCDELAY;
            EP4CFG=0x00;  //端點(diǎn)4不可用
            SYNCDELAY;
            EP6CFG=0xE0;  //端點(diǎn)2可用、輸入、數(shù)據(jù)流、512 B、4倍緩沖模式
            SYNCDELAY;
            EP8CFG=0x00;  //端點(diǎn)8不可用
            SYNCDELAY;
            FIFORESET=0x80; //暫不接受主機(jī)請(qǐng)求
            SYNCDELAY;
            FIFORESET=0x02; //將EP2 FIFO恢復(fù)為缺省狀態(tài)
            SYNCDELAY;
            FIFORESET=0x06; //將EP6 FIFO恢復(fù)為缺省狀態(tài)
            SYNCDELAY;
            FIFORESET=0x00;  //重新開放主機(jī)請(qǐng)求
            SYNCDELAY;
            EP2FIFOCFG=0x01; //
            SYNCDELAY;
            EP2FIFOCFG=0x11;  //數(shù)據(jù)寬度16 bit、AUTOOUT模式
            SYNCDELAY;
            EP6FIFOCFG=0x09;  //數(shù)據(jù)寬度16 bit、AUTOIN模式
            SYNCDELAY;
            ……
            TD_Poll()中最核心部分在于完成寫HPIC寄存器、寫HPIA寄存器、以自增模式讀寫HPID。
            (1)寫HPIC寄存器。
            EP0BCL=0;     //激活EP0緩沖器以接收主機(jī)的下一個(gè)請(qǐng)求
            while(EP01STAT bmEP0BSY);//等待EP0空閑可用
            while(!HPI_RDY);  //等待HPI準(zhǔn)備好接收數(shù)據(jù)
            IOA=bmHPIC;    //PA2、PA3選通HPIC
            GPIFWFSELECT=0xB9;  //選擇寫入第一個(gè)半字的GPIF波形
            GPIF_SingleByteWrite(EP0BUF[0],EP0BUF[1]);
                          //寫入一個(gè)16 bit半字
            其中GPIF_SingleByteWrite()定義為:
            void GPIF_SingleByteWrite(BYTE gdatah,BYTE gdatal)
            {
             while( !(GPIFTRIG 0x80) ) {;} //輪詢GPIFTRIG.7
                             //Done位查看上一次事務(wù)是否完成
            XGPIFSGLDATLX=gdatal; //高8位寫入XGPIFSGLDATLX
            XGPIFSGLDATH=gdatah; //低8位寫入XGPIFSGLDATH
            }
            對(duì)于16位模式,把高8位寫入XGPIFSGLDATLX,低8位寫入XGPIFSGLDATH就可以自動(dòng)啟動(dòng)一個(gè)單向?qū)懯聞?wù)。當(dāng)這個(gè)事務(wù)完成時(shí),GPIFTRIG.7 Done置1,觸發(fā)GPIFdone中斷,68013使XGPIFSGLDATLX和XGPIFSGLDATH中的數(shù)據(jù)出現(xiàn)在16位數(shù)據(jù)總線FD[15:0]上。
            (2)寫HPIA寄存器。
            與寫HPIC基本相同,只是將IOA=bmHPIA,使PA2、PA3選通HPIA。
            (3)自增模式下寫HPID。
            if(GPIFTRIG 0x80)      //檢查當(dāng)前GIPF是否空閑
            {
            if (!(EP24FIFOFLGS 0x02 ) )  //檢查外圍是否有
                            //數(shù)據(jù)等待傳入EP2,EP2非空
            {
            IOA=bmHPID_AUTO;     //PA2、PA3選通自增模式HPID
            while(!HPI_RDY);       //等待HPI準(zhǔn)備好傳輸數(shù)據(jù)
            SYNCDELAY;
            GPIFTCB1=EP2FIFOBCH;
            SYNCDELAY;
            GPIFTCB0=EP2FIFOBCL;   //將EP2FIFO中字節(jié)數(shù)設(shè)置為TC的值
            SYNCDELAY;
            GPIFTRIG=GPIF_EP2;     //寫寄存器GPIFTRIG觸發(fā) EP2 OUT事務(wù)
            SYNCDELAY;
            while( !( GPIFTRIG 0x80 ) );  //等待本次事務(wù)處理完畢
            SYNCDELAY;
            }
            }
            (4)自增模式下讀HPID。
            與自增模式下寫HPID寫過程基本相同。不同點(diǎn)在于:事務(wù)計(jì)數(shù)器的值不是端點(diǎn)6中字節(jié)的個(gè)數(shù),而是應(yīng)當(dāng)由主機(jī)方通過控制端點(diǎn)EP0告知FX2;讀EP6前要檢查EP6 FIFO非滿,觸發(fā)時(shí)將GPIFTRIG設(shè)置成EP6IN。
          3.1.2 固件代碼的存儲(chǔ)位置
            本設(shè)計(jì)將固件代碼存在主機(jī)中,設(shè)備上電以后由下面要介紹的驅(qū)動(dòng)程序?qū)⒐碳螺d到FX2片內(nèi)RAM后執(zhí)行,這一過程也就是重枚舉。這種方法便于系統(tǒng)的調(diào)試和升級(jí),用戶可以根據(jù)自己的需要將相應(yīng)驅(qū)動(dòng)下載到PC上,從而使設(shè)備呈現(xiàn)出不同的屬性功能,并可以進(jìn)行適當(dāng)?shù)能浬?jí)。這種方法對(duì)片外EEPROM或ROM的存儲(chǔ)空間要求很低,便于實(shí)現(xiàn),使用靈活。
            另外還可以把固件代碼固化到一片EEPROM中,上電后FX2通過I2C總線下載到片內(nèi)RAM后執(zhí)行;或者把程序固化到一片ROM中充當(dāng)外部程序存儲(chǔ)器,連接到FX2總線上。
          3.2 設(shè)備驅(qū)動(dòng)程序
            設(shè)備驅(qū)動(dòng)程序提供用戶訪問設(shè)備的接口。EZ-USB系列芯片都具有通過下載固件和重枚舉的方式來動(dòng)態(tài)改變?cè)O(shè)備特性的能力,這就需要一個(gè)特殊的具有下載固件并完成設(shè)備重枚舉功能的設(shè)備驅(qū)動(dòng)程序,也可以叫做固件下載驅(qū)動(dòng)程序。Cypress公司發(fā)布的EZ-USB軟件開發(fā)包中提供了一個(gè)固件下載驅(qū)動(dòng)程序的模版,即EZ-LoaderDriver。通過它可以方便地將自己的固件程序嵌入固件下載驅(qū)動(dòng)程序。主要步驟包括:(1)設(shè)定固件下載前后兩次枚舉的不同VID和PID;(2)修改ezloader中source文件的目標(biāo)名稱;(3)修改Dscr.a51中的VID、PID;(4)利用ezloader提供的工具將用Keil編寫固件所生成的.hex文件轉(zhuǎn)換成.sys文件;(5)編寫與.sys文件相對(duì)應(yīng)的安裝信息文件(.inf);(6)修改EEPROM,將VID、PID寫入,并設(shè)置成C0引導(dǎo)加載模式。
          3.3 主機(jī)應(yīng)用程序
            為提高開發(fā)速度,本設(shè)計(jì)的主機(jī)應(yīng)用程序在Cypress公司提供的USB Control Pane的基礎(chǔ)上加以修改,增添了讀取存儲(chǔ)和分析音頻文件(主要是.wav文件)的功能。
          3.4 DSP數(shù)據(jù)處理程序
            將G.723.1公布的低碼率以C與匯編混合編程的方法[4]移植到TMS320C6713,并加以調(diào)整優(yōu)化。
            本系統(tǒng)開發(fā)旨在為G.723.1以及G.729等常用的低碼率標(biāo)準(zhǔn)提供運(yùn)行及測試的。DSP系統(tǒng)中的程序采用C與匯編混合編程的方法。實(shí)驗(yàn)表明,USB的數(shù)據(jù)帶寬完全可以滿足多路音頻數(shù)據(jù)實(shí)時(shí)處理的要求,并具有良好的穩(wěn)定性和適應(yīng)性,能夠達(dá)到所要求的通信質(zhì)量,實(shí)現(xiàn)較為完善的語音編解碼系統(tǒng)。

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

          上一頁 1 2 下一頁

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