工學(xué)DSP原理及應(yīng)用下_第1頁(yè)
工學(xué)DSP原理及應(yīng)用下_第2頁(yè)
工學(xué)DSP原理及應(yīng)用下_第3頁(yè)
工學(xué)DSP原理及應(yīng)用下_第4頁(yè)
工學(xué)DSP原理及應(yīng)用下_第5頁(yè)
已閱讀5頁(yè),還剩221頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

工學(xué)DSP原理及應(yīng)用下第1頁(yè)/共226頁(yè)7.1.1程序存儲(chǔ)器地址生成程序存儲(chǔ)器中存放指令代碼、參數(shù)表和立即數(shù)。程序地址產(chǎn)生邏輯(PAGEN),

包括以下5個(gè)寄存器(如圖7-1所示):

程序計(jì)數(shù)器(PC);重復(fù)計(jì)數(shù)器(RC);塊重復(fù)計(jì)數(shù)器(BRC);塊重復(fù)起始地址寄存器(RSA);塊重復(fù)結(jié)束地址寄存器(REA)。第2頁(yè)/共226頁(yè)圖7-1程序地址產(chǎn)生邏輯(PAGEN)寄存器返回本節(jié)第3頁(yè)/共226頁(yè)7.1.2條件操作表7-1條件指令中的各種條件第4頁(yè)/共226頁(yè)表7-2多條件指令中的條件組合第一組第二組A類(lèi)B類(lèi)A類(lèi)B類(lèi)C類(lèi)EQOVTCCBIONEQNOVNTCNCNBIOLT

LEQ

GT

GEQ

返回本節(jié)第5頁(yè)/共226頁(yè)7.1.3分支轉(zhuǎn)移表7-3無(wú)條件分支轉(zhuǎn)移指令指令說(shuō)明周期數(shù)(非延遲/延遲)B[D]用指令中給出的地址加載PC4/2BACC[D]用指定累加器(A或B)的低16位作為地址加載PC6/4第6頁(yè)/共226頁(yè)表7-4條件分支轉(zhuǎn)移指令指令說(shuō)明周期數(shù)

(條件滿(mǎn)足/不滿(mǎn)足)非延遲延遲BC[D]如果指令中的條件滿(mǎn)足,就用指令中給出的地址加載PC5/33/3BANZ[D]如果所選擇的輔助寄存器不等于0,就用指令中給出的地址加載PC(用于循環(huán))4/22/2第7頁(yè)/共226頁(yè)表7-5遠(yuǎn)分支轉(zhuǎn)移指令指令說(shuō)明周期數(shù)(非

延遲/延遲)FB[D]可以轉(zhuǎn)移到由指令所給定的23位地址(C5402為20位地址)4/2FBACC[D]可以轉(zhuǎn)移到指定累加器所給定的23位地址(C5402為20位地址)6/4返回本節(jié)第8頁(yè)/共226頁(yè)7.1.4調(diào)用與返回表7-6無(wú)條件調(diào)用與返回指令第9頁(yè)/共226頁(yè)表7-7條件調(diào)用與返回指令第10頁(yè)/共226頁(yè)表7-8遠(yuǎn)調(diào)用和遠(yuǎn)返回指令返回本節(jié)第11頁(yè)/共226頁(yè)7.1.5重復(fù)操作1.單條指令的重復(fù)操作RPT(重復(fù)執(zhí)行下一條指令)和RPTZ(累加器清0后重復(fù)執(zhí)行下一條指令)可重復(fù)執(zhí)行其后的一條指令,重復(fù)的次數(shù)是指令操作數(shù)加1,這個(gè)值保存在16位的重復(fù)計(jì)數(shù)寄存器(RC)中,這個(gè)值只能由重復(fù)指令(RPT或RPTZ)加載,而不能編程設(shè)置RC寄存器中的值,一次給定指令重復(fù)執(zhí)行的最大次數(shù)是65536。第12頁(yè)/共226頁(yè)2.塊重復(fù)操作指令塊重復(fù)指令RPTB用于將一個(gè)碼塊重復(fù)執(zhí)行N+1次,N是裝入塊重復(fù)計(jì)數(shù)器(BRC)的值。一個(gè)碼塊可以有一條或多條指令。單條重復(fù)指令執(zhí)行時(shí)關(guān)閉所有可屏蔽中斷,而塊重復(fù)操作執(zhí)行期間可以響應(yīng)中斷。

返回本節(jié)第13頁(yè)/共226頁(yè)7.1.6TMS320C54x中斷系統(tǒng)1.中斷類(lèi)型C54x支持軟件中斷和硬件中斷。軟件中斷由程序指令產(chǎn)生(INTR、TRAP或RESET)。硬件中斷由設(shè)備的一個(gè)信號(hào)產(chǎn)生,包括兩種類(lèi)型:①外部硬件中斷由外部中斷口的信號(hào)觸發(fā);②內(nèi)部硬件中斷由片內(nèi)外設(shè)的信號(hào)觸發(fā)。無(wú)論是硬件中斷還是軟件中斷,都屬于以下兩種類(lèi)型:(1)可屏蔽中斷(2)非屏蔽中斷第14頁(yè)/共226頁(yè)表7-9C5402中斷源的中斷向量及硬件中斷優(yōu)先權(quán)第15頁(yè)/共226頁(yè)第16頁(yè)/共226頁(yè)2.中斷標(biāo)志寄存器(IFR)和中斷屏蔽寄存器(IMR)中斷標(biāo)志寄存器(IFR)是存儲(chǔ)器映象的CPU寄存器。如圖7-2所示為C5402中斷標(biāo)志寄存器(IFR)結(jié)構(gòu)圖。中斷屏蔽寄存器(IMR)也是存儲(chǔ)器映象的CPU寄存器,用來(lái)屏蔽外部和內(nèi)部的可屏蔽中斷,其結(jié)構(gòu)圖同IFR完全一致。

第17頁(yè)/共226頁(yè)圖7-2中斷標(biāo)志寄存器(IFR)結(jié)構(gòu)圖第18頁(yè)/共226頁(yè)3.中斷響應(yīng)過(guò)程(如圖7-3所示)(1)接受中斷請(qǐng)求。

(2)響應(yīng)中斷。(3)執(zhí)行中斷服務(wù)程序(ISR)。第19頁(yè)/共226頁(yè)圖7-3中斷操作流程圖第20頁(yè)/共226頁(yè)4.重新映象中斷向量地址C54x的中斷向量表是可重定位的,即在DSP復(fù)位時(shí),中斷向量表的起始地址固定為0FF80H,復(fù)位后,此表的起始地址可由用戶(hù)指定。中斷向量可重新被映象到程序存儲(chǔ)器的任何一個(gè)128字頁(yè)開(kāi)始的地方(除保留區(qū)域外)。中斷向量地址由PMST中的中斷向量指針I(yè)PTR(9位)和中斷向量號(hào)(0~31)左移兩位后組成。如圖7-4所示。第21頁(yè)/共226頁(yè)中斷向量號(hào)

左移兩位后中斷向量地址圖7-4中斷向量地址的產(chǎn)生返回本節(jié)第22頁(yè)/共226頁(yè)7.1.7堆棧的使用堆棧被用于保存中斷程序、調(diào)用子程序的返回地址,也用于保護(hù)和恢復(fù)用戶(hù)指定的寄存器和數(shù)據(jù),還可用于程序調(diào)用時(shí)的參數(shù)傳遞。返回地址是由DSP自動(dòng)保存的。

用戶(hù)編寫(xiě)的壓棧指令和出棧指令將指定的內(nèi)容壓入和彈出堆棧,SP總是指向最后壓入堆棧的數(shù)據(jù),壓棧之前SP減1,出棧之后SP加1。

第23頁(yè)/共226頁(yè)C54x支持軟件堆棧,在用戶(hù)指定的存儲(chǔ)區(qū)開(kāi)辟一塊存儲(chǔ)區(qū)作為堆棧存儲(chǔ)器。堆棧的定義及初始化步驟為:1)聲明具有適當(dāng)長(zhǎng)度的未初始化段;2)將堆棧指針指向棧底;3)在鏈接命令文件(.cmd)中將堆棧段放入內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)。

返回本節(jié)第24頁(yè)/共226頁(yè)7.2數(shù)據(jù)塊傳送C54x有10條數(shù)據(jù)傳送指令,為:數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器:

MVDKSmem,dmad MVKDdmad,Smem MVDDXmem,Ymem數(shù)據(jù)存儲(chǔ)器MMR:

MVDMdmad,MMR MVMDMMR,dmad MVMMmmr,mmr返回首頁(yè)第25頁(yè)/共226頁(yè)程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器:MVPDPmad,SmemMVDPSmem,PmadREADASmemWRITASmem第26頁(yè)/共226頁(yè)1.編寫(xiě)匯編源程序?yàn)?/p>

.mmregs.def_c_int00.dataTBL:.word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19.word1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1PROM: .usect"PROM",20.bssa,20.bssx,20.bssy,20DATA: .usect "DATA",20.text第27頁(yè)/共226頁(yè)_c_int00bstartnopnopstart:STM: #a,AR1;a[20]={0,1,2,3,4,5,6,7,8,9,10, ;11,12,13,14,15,16,17,18,19} RPT #39 ;x[20]={1,1,1,1,1,1,1,1,1,1MVPD TBL,*AR1+;1,1,1,1,1,1,1,1,1,1}STM#x,AR2;將數(shù)據(jù)存儲(chǔ)器中的數(shù)組x[20]復(fù)制到數(shù)組y[20] STM #y,AR3RPT #19MVDD*AR2+,*AR3+ 第28頁(yè)/共226頁(yè)STM#a,AR1;將數(shù)據(jù)存儲(chǔ)器中的a[20]寫(xiě)入到程序存儲(chǔ)器PROMLD #PROM,ASTM #19,AR3LOOPP:WRITA*AR1+ADD #1,A,ABANZ LOOPP,*AR3-LD#PROM-1,A;讀程序存儲(chǔ)器PROM中20個(gè)數(shù)據(jù)存入數(shù)據(jù)存儲(chǔ)器DATASTM #DATA,AR1ST #19,BRCRPTBLOOP2ADD#1,A,ALOOP2:READA*AR1+;該指令為單字指令WAIT: NOPBWAIT第29頁(yè)/共226頁(yè)2.建立匯編源程序點(diǎn)擊CCSC5000圖標(biāo),進(jìn)入CCS環(huán)境,再點(diǎn)擊File→New→SourceFile菜單命令,打開(kāi)一個(gè)空白文檔,將匯編源程序逐條輸入。單擊File→Save菜單命令,出現(xiàn)如圖7-5所示的窗口,選擇D:\ProgramFiles\ti\myprojcets\mymove子目錄,在“文件名”一欄中輸入mymove,并選擇保存類(lèi)型為AssemblySourceFiles(*.asm),單擊“保存”按鈕,以上匯編程序被存盤(pán)。第30頁(yè)/共226頁(yè)3.建立鏈接命令文件點(diǎn)擊File→New→SourceFile菜單命令,打開(kāi)一個(gè)空白文檔,逐條輸入鏈接命令文件。mymove.obj-omymove.out-mmymove.mapMEMORY{PAGE0: RAM:origin=1000h,length=800h RAM1:origin=2000h,length=300hPAGE1: DARAM1:origin=0100h,length=100hDARAM2:origin=0200h,length=100h}第31頁(yè)/共226頁(yè)SECTIONS{.data:>RAM PAGE0.text:>RAM PAGE0PROM : >RAM1PAGE0.bss :>DARAM1PAGE1DATA :>DARAM2PAGE1}點(diǎn)擊File→Save菜單命令,如圖7-5所示,選擇D:\ProgramFiles\ti\myprojcets\mymove子目錄,在“文件名”一欄中輸入mymove,并選擇保存類(lèi)型為T(mén)ICommandLanguageFile(*.cmd),單擊“保存”按鈕,以上鏈接命令程序被存盤(pán)。第32頁(yè)/共226頁(yè)4.創(chuàng)建一個(gè)新工程在Project菜單中選擇New項(xiàng),彈出ProjectCreation(工程創(chuàng)建)窗口,如圖7-6所示。在Project一欄鍵入mymove,然后單擊“完成”按鈕,CCS將創(chuàng)建一個(gè)名為mymove.pjt的工程,此文件保存了工程的設(shè)置信息及工程中的文件引用情況。第33頁(yè)/共226頁(yè)圖7-5保存匯編源程序圖7-6工程創(chuàng)建窗口第34頁(yè)/共226頁(yè)5.將有關(guān)文件添加到工程中從Project菜單中選取AddFilestoProject命令,選擇文件mymove.asm,雙擊將mymove.asm添加到工程中。點(diǎn)擊Project→AddFilestoProject菜單命令,將mymove.cmd添加到工程文件中。逐層打開(kāi)如圖7-7所示。雙擊mymove.asm打開(kāi)文件,可以觀察和修改mymove.asm文件的內(nèi)容。

第35頁(yè)/共226頁(yè)6.匯編、編譯和鏈接產(chǎn)生.out文件點(diǎn)擊Project菜單中的RebuildAll。請(qǐng)注意在監(jiān)視窗口顯示的匯編、編譯和鏈接的相關(guān)信息。如果沒(méi)有錯(cuò)誤,將產(chǎn)生mymove.out文件;如果有錯(cuò),在監(jiān)視窗口以紅色字體顯示出錯(cuò)行,用鼠標(biāo)雙擊該行,光標(biāo)跳將至源程序相應(yīng)的出錯(cuò)行。修改錯(cuò)誤后,重新匯編、鏈接。第36頁(yè)/共226頁(yè)7.加載并運(yùn)行.out文件執(zhí)行菜單命令File→LoadProgram,選擇mymove.out并打開(kāi),將RebuildAll生成的程序加載到DSP中。CCS將自動(dòng)打開(kāi)一個(gè)反匯編窗口,顯示加載程序的反匯編指令。點(diǎn)擊Debug→Run菜單命令運(yùn)行程序,單步執(zhí)行程序則點(diǎn)擊Debug→StepInto菜單命令,或按F8鍵。第37頁(yè)/共226頁(yè)8.觀察運(yùn)行結(jié)果點(diǎn)擊View→Memory菜單命令,將出現(xiàn)如圖7-8所示的選項(xiàng)窗口,將Address改為0x0100,單擊OK按鈕,將在匯編窗口顯示選定的數(shù)據(jù)空間的內(nèi)容。當(dāng)結(jié)果數(shù)據(jù)錯(cuò)誤時(shí),可檢查源程序并進(jìn)行修改。修改完畢,可重新匯編、鏈接,再加載運(yùn)行.out文件,直到結(jié)果正確。返回本節(jié)第38頁(yè)/共226頁(yè)7.3定點(diǎn)數(shù)的基本算術(shù)運(yùn)算7.3.1加法、減法和乘法運(yùn)算7.3.2定點(diǎn)除法運(yùn)算返回首頁(yè)第39頁(yè)/共226頁(yè)7.3.1加法、減法和乘法運(yùn)算1.定點(diǎn)DSP中數(shù)據(jù)表示方法定點(diǎn)DSP芯片的數(shù)值表示是基于2的補(bǔ)碼表示形式。數(shù)的定標(biāo)有Q表示法和S表示法,表7-10列出了16位數(shù)的16種Q表示和S表示,以及它們所能表示的十進(jìn)制數(shù)范圍。16位中有一個(gè)符號(hào)位、Q個(gè)小數(shù)位和15-Q個(gè)整數(shù)位來(lái)表示一個(gè)數(shù)。

第40頁(yè)/共226頁(yè)表7-10Q表示、S表示及數(shù)值范圍第41頁(yè)/共226頁(yè)圖7-9DSP定點(diǎn)運(yùn)算中小數(shù)的表示第42頁(yè)/共226頁(yè)2.16位定點(diǎn)加法和16位定點(diǎn)減法C54x中提供了多條用于加法的指令,如ADD、ADDC、ADDM和ADDS。其中,ADDS用于無(wú)符號(hào)數(shù)的加法運(yùn)算,ADDC用于帶進(jìn)位的加法運(yùn)算而ADDM專(zhuān)用于立即數(shù)的加法。

C54x中提供了多條用于減法的指令,如SUB、SUBB、SUBC和SUBS。其中,SUBS用于無(wú)符號(hào)數(shù)的減法運(yùn)算,SUBB用于帶進(jìn)位的減法運(yùn)算,而SUBC為條件減法指令。第43頁(yè)/共226頁(yè)3.16位定點(diǎn)整數(shù)乘法C54x中提供了大量的乘法運(yùn)算指令,其結(jié)果都是32位,放在累加器A或B中。乘數(shù)在C54x的乘法指令中很靈活,可以是T寄存器、立即數(shù)、存儲(chǔ)單元和累加器A或B的高16位。在C54x中,一般對(duì)數(shù)據(jù)的處理都當(dāng)做有符號(hào)數(shù),如果是無(wú)符號(hào)數(shù)相乘,使用MPYU指令,這是一條專(zhuān)門(mén)用于無(wú)符號(hào)數(shù)乘法運(yùn)算的指令,其他指令都是有符號(hào)數(shù)的乘法。

第44頁(yè)/共226頁(yè)4.Q15定點(diǎn)小數(shù)乘法運(yùn)算兩個(gè)16位整數(shù)相乘,乘積總是“向左增長(zhǎng)”,這就意味著多次相乘后乘積將會(huì)很快超出定點(diǎn)器件的數(shù)據(jù)范圍。而且要將32位乘積保存到數(shù)據(jù)存儲(chǔ)器,就要耗費(fèi)兩個(gè)機(jī)器周期以及兩個(gè)字的程序和RAM單元。然而,兩個(gè)Q15的小數(shù)相乘,乘積總是“向右增長(zhǎng)”,這就意味著超出定點(diǎn)器件數(shù)據(jù)范圍的將是不太感興趣的部分。

第45頁(yè)/共226頁(yè)5.混合表示法有些情況下,運(yùn)算過(guò)程中為了既滿(mǎn)足數(shù)值的動(dòng)態(tài)范圍又保證一定的精度,必須采用Q0與Q15之間的表示方法。在做加、減運(yùn)算時(shí),如果兩個(gè)操作數(shù)的定標(biāo)不一樣,在運(yùn)算前要進(jìn)行小數(shù)點(diǎn)的調(diào)整,為保證運(yùn)算精度,需要使Q值小的數(shù)調(diào)整為與另一個(gè)數(shù)的Q值一樣大。返回本節(jié)第46頁(yè)/共226頁(yè)7.3.2定點(diǎn)除法運(yùn)算在一般的DSP中,沒(méi)有專(zhuān)門(mén)的除法指令。同樣,在C54x中也沒(méi)有提供專(zhuān)門(mén)的除法指令。一般有兩種方法來(lái)完成除法。一種是用乘法來(lái)代替,除以某個(gè)數(shù)相當(dāng)于乘以其倒數(shù),所以先求出其倒數(shù),然后相乘。這種方法對(duì)于除以常數(shù)特別適用。另一種方法是使用條件減法SUBC指令,加上重復(fù)指令RPT#15,重復(fù)16次減法完成無(wú)符號(hào)數(shù)除法運(yùn)算。兩種不同情況下的除法程序。1.|被除數(shù)|<|除數(shù)|,商為小數(shù)2.|被除數(shù)|≥|除數(shù)|,商為整數(shù)返回本節(jié)第47頁(yè)/共226頁(yè)7.4長(zhǎng)字運(yùn)算和并行運(yùn)算7.4.1長(zhǎng)字運(yùn)算7.4.2并行運(yùn)算返回首頁(yè)第48頁(yè)/共226頁(yè)7.4.1長(zhǎng)字運(yùn)算C54x可以利用長(zhǎng)操作數(shù)(32位)進(jìn)行長(zhǎng)字運(yùn)算。如下所示為長(zhǎng)字指令:

DLD Lmem,dst;dst=LmemDST src,Lmem ;Lmem=srcDADD Lmem,src[,dst] ;dst=src+LmemDSUB Lmem,src[,dst];dst=src–LmemDRSUB Lmem,src[,dst];dst=Lmem-src返回本節(jié)第49頁(yè)/共226頁(yè)7.4.2并行運(yùn)算并行運(yùn)算,就是同時(shí)利用D總線(xiàn)和E總線(xiàn)。其中,D總線(xiàn)用來(lái)執(zhí)行加載或算術(shù)運(yùn)算,E總線(xiàn)用來(lái)存放先前的結(jié)果。在不引起硬件資源沖突的情況下,C54x允許某些指令并行執(zhí)行(即同時(shí)執(zhí)行),以提高執(zhí)行速度。并行指令有并行加載——存儲(chǔ)指令、并行加載——乘法指令、并行存儲(chǔ)——乘法指令,以及并行存儲(chǔ)——加/減法指令,所有并行指令都是單字單周期指令。

返回本節(jié)第50頁(yè)/共226頁(yè)7.5FIR濾波器的DSP實(shí)現(xiàn)7.5.1線(xiàn)性緩沖區(qū)法7.5.2循環(huán)緩沖區(qū)法7.5.3系數(shù)對(duì)稱(chēng)FIR濾波器的DSP實(shí)現(xiàn)返回首頁(yè)第51頁(yè)/共226頁(yè)數(shù)字濾波是DSP的最基本應(yīng)用,利用MAC(乘、累加)指令和循環(huán)尋址可以方便地完成濾波運(yùn)算。兩種常用的數(shù)字濾波器:FIR(有限沖激響應(yīng))濾波器和IIR(無(wú)限沖激響應(yīng))濾波器的DSP實(shí)現(xiàn)。設(shè)FIR濾波器的系數(shù)為h(0),h(1),...,h(N-1),X(n)表示濾波器在n時(shí)刻的輸入,則n時(shí)刻的輸出為:

(7-1)第52頁(yè)/共226頁(yè)其對(duì)應(yīng)的濾波器傳遞函數(shù)為:如圖7-10所示為橫截型(又稱(chēng)直接型或卷積型)FIR數(shù)字濾波器的結(jié)構(gòu)圖。圖7-10橫截型FIR數(shù)字濾波器的結(jié)構(gòu)圖(7-2)第53頁(yè)/共226頁(yè)線(xiàn)性緩沖區(qū)法又稱(chēng)延遲線(xiàn)法。其方法是:對(duì)于n=N的FIR濾波器,在數(shù)據(jù)存儲(chǔ)器中開(kāi)辟一個(gè)N單元的緩沖區(qū),存放最新的N個(gè)樣本;濾波時(shí)從最老的樣本開(kāi)始,每讀一個(gè)樣本后,將此樣本向下移位;讀完最后一個(gè)樣本后,輸入最新樣本至緩沖區(qū)的頂部。以上過(guò)程,可以用N=6的線(xiàn)性緩沖區(qū)示意圖來(lái)說(shuō)明,如圖7-11所示

7.5.1線(xiàn)性緩沖區(qū)法第54頁(yè)/共226頁(yè)圖7-11N=6的線(xiàn)性緩沖區(qū)示意圖返回本節(jié)第55頁(yè)/共226頁(yè)7.5.2循環(huán)緩沖區(qū)法圖7-12說(shuō)明了使用循環(huán)尋址實(shí)現(xiàn)FIR濾波器的方法。對(duì)于N級(jí)FIR濾波器,在數(shù)據(jù)存儲(chǔ)區(qū)開(kāi)辟一個(gè)稱(chēng)為滑窗的具有N個(gè)單元的緩沖區(qū),滑窗中存放最新的N個(gè)輸入樣本值。每次輸入新的樣本時(shí),新的樣本將改寫(xiě)滑窗中最老的數(shù)據(jù),其他數(shù)據(jù)則不需要移動(dòng)。第56頁(yè)/共226頁(yè)圖7-12FIR濾波器循環(huán)緩沖區(qū)存儲(chǔ)器圖第57頁(yè)/共226頁(yè)【例7-12】用循環(huán)緩沖區(qū)和雙操作數(shù)尋址方法編寫(xiě)實(shí)現(xiàn)FIR濾波的程序。1.FIR濾波器設(shè)計(jì)設(shè)計(jì)一個(gè)FIR低通濾波器,通帶邊界頻率為1500Hz,通帶波紋小于1dB;阻帶邊界頻率為2000Hz,阻帶衰減大于40dB;采樣頻率為8000Hz。FIR濾波器的設(shè)計(jì)可以用MATLAB窗函數(shù)法進(jìn)行。第58頁(yè)/共226頁(yè)2.產(chǎn)生濾波器輸入信號(hào)的文件按照通常的程序調(diào)試方法,先用Simulator逐步調(diào)試各子程序模塊,再用硬件仿真器在實(shí)際系統(tǒng)中與硬件儀器聯(lián)調(diào)。使用CCS的Simulator進(jìn)行濾波器特性測(cè)試時(shí),需要輸入時(shí)間信號(hào)x(n)。本例設(shè)計(jì)一個(gè)采樣頻率Fs為8000Hz,輸入信號(hào)頻率為1000Hz和2500Hz的合成信號(hào),通過(guò)設(shè)計(jì)的低通濾波器將2500Hz信號(hào)濾掉,余下1000Hz信號(hào)。第59頁(yè)/共226頁(yè)3.編寫(xiě)FIR數(shù)字濾波器的匯編源程序FIR數(shù)字濾波器匯編程序fir.asm如下:************一個(gè)FIR濾波器源程序fir.asm*****************.mmregs.globalstart.def start,_c_int00INDEX .set 1KS .set256 ;輸入樣本數(shù)據(jù)個(gè)數(shù)COEF_FIR .sect"COEF_FIR" ;FIR濾波器系數(shù)N .set17 ;FIR濾波器階數(shù)第60頁(yè)/共226頁(yè).word0,158,264,-290,-1406,-951,3187,9287,12272.word9287,3187,-951,-1406,-290,264,158,0.dataINPUT .copy"firin.inc" ;輸入數(shù)據(jù)在數(shù)據(jù)區(qū)0x2400OUTPUT .space 1024 ;輸出數(shù)據(jù)在數(shù)據(jù)區(qū)0x2500COEFTAB .usect "FIR_COEF",NDATABUF .usect "FIR_BFR",NBOS .usect "STACK",0FhTOS .usect "STACK",1.text.asg AR0,INDEX_P第61頁(yè)/共226頁(yè).asg AR4,DATA_P ;輸入數(shù)據(jù)x(n)循環(huán)緩沖區(qū)指針.asg AR5,COEF_P ;FIR系數(shù)表指針.asg AR6,INBUF_P ;模擬輸入數(shù)據(jù)指針.asg AR7,OUTBUF_P;FIR濾波器輸出數(shù)據(jù)指針_c_int00bstartnopnopstart: SSBx FRCT ;小數(shù)乘法編程時(shí),設(shè)置FRCT(小數(shù)方式)位MVPD #COEF_FIR,*COEF_P+STM #INDEX,INDEX_P 第62頁(yè)/共226頁(yè)STM #DATABUF,DATA_P ;數(shù)據(jù)循環(huán)緩沖區(qū)清零RPTZ A,#N-1STL A,*DATA_P+ STM #(DATABUF+N-1),DATA_P;數(shù)據(jù)循環(huán)緩沖區(qū)指針指向x[n-(N-1)]STM #COEFTAB,COEF_P STM #COEFTAB,COEF_P ;將FIR系數(shù)從程序存儲(chǔ)器移到數(shù)據(jù)存儲(chǔ)器RPT #N-1FIR_TASK:STM #INPUT,INBUF_PSTM #OUTPUT,OUTBUF_P

第63頁(yè)/共226頁(yè)STM #KS-1,BRC RPTBD LOOP-1STM #N,BK ;FIR循環(huán)緩沖區(qū)大小LD *INBUF_P+,A ;裝載輸入數(shù)據(jù)FIR_FILTER: ;FIR濾波運(yùn)算STL A,*DATA_P+% ;用最新的樣本值替代最舊的樣本值RPTZ A,N-1MAC *DATA_P+0%,*COEF_P+0%,A STH A,*OUTBUF_P+LOOP:EEND B EEND.end第64頁(yè)/共226頁(yè)4.編寫(xiě)FIR濾波器鏈接命令文件對(duì)應(yīng)以上匯編程序的鏈接命令文件fir.cmd如下:fir.obj-m fir.map-o fir.outMEMORY{PAGE0: ROM1(RIX) :ORIGIN=0080H,LENGTH=100HPAGE1: INTRAM1(RW):ORIGIN=2400H,LENGTH=0200HINTRAM2(RW):ORIGIN=2600H,LENGTH=0100H第65頁(yè)/共226頁(yè)INTRAM3(RW):ORIGIN=2700H,LENGTH=0100H B2B(RW) :ORIGIN=0070H,LENGTH=10H}SECTIONS{.text : {}>ROM1 PAGE0 .data: {}>INTRAM1PAGE1FIR_COEF:{}>INTRAM2PAGE1FIR_BFR:{}>INTRAM3PAGE1.stack: {}>B2B PAGE1}第66頁(yè)/共226頁(yè)5.CCS集成開(kāi)發(fā)環(huán)境下上機(jī)操作過(guò)程(1)在CCS上建立fir工程并運(yùn)行fir.out程序。

(2)觀察輸入信號(hào)的波形及頻譜(如圖7-13~7-15所示)。(3)觀察輸出信號(hào)的波形及頻譜(如圖7-16、7-17所示)。第67頁(yè)/共226頁(yè)圖7-13Graph屬性設(shè)置窗口第68頁(yè)/共226頁(yè)圖7-14輸入信號(hào)的時(shí)域波形圖7-15輸入信號(hào)的頻譜圖第69頁(yè)/共226頁(yè)圖7-16濾波器輸出信號(hào)時(shí)域波形圖7-17濾波器輸出信號(hào)頻譜圖返回本節(jié)第70頁(yè)/共226頁(yè)7.5.3系數(shù)對(duì)稱(chēng)FIR濾波器的DSP實(shí)現(xiàn)1.在數(shù)據(jù)存儲(chǔ)器中開(kāi)辟兩個(gè)循環(huán)緩沖區(qū):New循環(huán)緩沖區(qū)中存放N/2=4個(gè)新數(shù)據(jù)(設(shè)N=8);Old循環(huán)緩沖區(qū)中存放4個(gè)老數(shù)據(jù)。循環(huán)緩沖區(qū)的長(zhǎng)度為N/2。緩沖區(qū)指針AR2指向New緩沖區(qū)中最新的數(shù)據(jù);AR3指向Old緩沖區(qū)中最老的數(shù)據(jù),并在程序存儲(chǔ)器中設(shè)置系數(shù)表,如圖7-18所示。第71頁(yè)/共226頁(yè)2.(AR2)+(AR3)→AH(累加器A的高位)(AR2)-1→AR2,(AR3)-1→AR33.將累加器B清0,重復(fù)執(zhí)行以下操作N/2次(i=0,1,2,3):(AH)×系數(shù)ai+(B)→B,系數(shù)指針(PAR)加1(AR2)+(AR3)→AH,AR2和AR3減1并保存或輸出結(jié)果(結(jié)果在BH中)。第72頁(yè)/共226頁(yè)4.修正數(shù)據(jù)指針將AR2和AR3分別指向New緩沖區(qū)中最新的數(shù)據(jù)和Old緩沖區(qū)中最老的數(shù)據(jù)。用New緩沖區(qū)最老的數(shù)據(jù)替代Old緩沖區(qū)中最老的數(shù)據(jù),如圖7-18中箭頭所示。Old緩沖區(qū)指針減1。5.輸入一個(gè)新的數(shù)據(jù)替代New緩沖區(qū)中最老的數(shù)據(jù)重復(fù)執(zhí)行步驟2~5。返回本節(jié)第73頁(yè)/共226頁(yè)7.6IIR數(shù)字濾波器的DSP實(shí)現(xiàn)IIR數(shù)字濾波器的傳遞函數(shù)H(z)為:其對(duì)應(yīng)的差分方程為:例如,對(duì)于直接形式的二階IIR數(shù)字濾波器,其結(jié)構(gòu)如圖7-19所示,編程時(shí),可以分別開(kāi)辟四個(gè)緩沖區(qū),存放輸入、輸出變量和濾波器的系數(shù),如圖7-20所示。(7-4)(7-3)返回首頁(yè)第74頁(yè)/共226頁(yè)圖7-19直接形式的二階IIR數(shù)字濾波器第75頁(yè)/共226頁(yè)圖7-20存放輸入、輸出變量和濾波器系數(shù)的緩沖區(qū)第76頁(yè)/共226頁(yè)【例7-15】設(shè)計(jì)一個(gè)三階的切比雪夫Ⅰ型帶通數(shù)字濾波器,其采樣頻率Fs=16kHz,其通頻帶3.2kHz<f<4.8kHz,內(nèi)損耗不大于1dB;f<2.4kHz和f>5.6kHz為阻帶,其衰減大于20dB。1.IIR濾波器的設(shè)計(jì)在MATLAB中設(shè)計(jì)IIR濾波器,程序?yàn)椋簑p=[3.2,4.8];ws=[2.4,5.6];rp=1;rs=20[n,wn]=cheb1ord(wp/8,ws/8,rp,rs)[b,a]=cheby1(n,rp,wn)

設(shè)計(jì)結(jié)果為:第77頁(yè)/共226頁(yè)N=3wn=0.40000.6000b0=0.0114747 a0=1.000000b1=0 a1=0b2=-0.034424 a2=2.13779b3=0 a3=0b4=0.034424 a4=1.76935b5=0 a5=0b6=-0.0114747 a6=0.539758第78頁(yè)/共226頁(yè)2.產(chǎn)生濾波器輸入信號(hào)的文件使用CCS的Simulator進(jìn)行濾波器特性的測(cè)試時(shí),需要輸入時(shí)間信號(hào)x(n)。

#include<stdio.h>#include<math.h>voidmain(){inti;doublef[256];FILE*fp;if((fp=fopen("iirin.inc","wt"))==NULL) { printf("can'topenfile!\n"); return; }第79頁(yè)/共226頁(yè)fprintf(fp,"INPUT:.sect%cINPUT%c\n",'"','"');for(i=0;i<=255;i++){ f[i]=sin(2*3.14159*i*4000/16000)+sin(2*3.14159*i*6500/16000); fprintf(fp,".word %1d\n",(long)(f[i]*32768/2)); }fclose(fp);}第80頁(yè)/共226頁(yè)該程序?qū)a(chǎn)生名為iirin.inc的輸入信號(hào)程序,內(nèi)容如下:INPUT: .sect "INPUT".word 0.word 25486.word -15136.word -314.word -11585.word 19580.word 6270.word -30006.word 16383 然后,在DSP匯編語(yǔ)言程序中通過(guò).copy匯編命令將生成的數(shù)據(jù)文件iirin.inc復(fù)制到匯編程序中,作為IIR濾波器的輸入數(shù)據(jù)。第81頁(yè)/共226頁(yè)3.直接型IIR數(shù)字濾波器匯編源程序的編寫(xiě)直接型IIR數(shù)字濾波器匯編程序diir.asm如下:********直接型IIR數(shù)字濾波器通用程序**********.title"diir.asm".mmregs.global start.def start,_c_int00N .set 16 .copy "iirin.inc" ;輸入信號(hào)x(n)數(shù)據(jù)table ;IIR濾波器系數(shù).word63,0,-188,0,188,0,-63 .word0,11675,0,9663,0,2948.data

第82頁(yè)/共226頁(yè)BN .usect "BN",N+1AN .usect "AN",N+1INBUF.usect "INBUF",256;輸入緩沖區(qū)在數(shù)據(jù)區(qū)0x2400OUTPUT.usect"OUTPUT",256;輸出緩沖區(qū)在數(shù)據(jù)區(qū)0x2600.text.asg AR0,INDEX_P.asg AR2,XN_P.asg AR3,ACOFF_P.asg AR4,YN_P.asg AR5,BCOFF_P _c_int00bstartnopnopstart: SSBX FRCT第83頁(yè)/共226頁(yè)SSBX OVMSSBX SXM STM #BN+N,AR1 RPT #NMVPD #table,*AR1-;;將bi由程序區(qū)存放到數(shù)據(jù)區(qū)STM #AN+N-1,AR1RPT #N-1MVPD #table+N+1,*AR1- ;將ai由程序區(qū)存放到數(shù)據(jù)區(qū)STM #OUTPUT,AR1RPTZ A,#255STL A,*AR1+;輸出數(shù)據(jù)緩沖區(qū)清零STM #INBUF,AR1RPT #255MVPD #INPUT,*AR1+ ;將輸入數(shù)據(jù)由程序區(qū)

第84頁(yè)/共226頁(yè)STM #OUTPUT,YN_P STM #INBUF,XN_P STM #N-1,INDEX_P STM #255,BRC RPTB LOOP-1IIR: SUBA,A STM #BN,BCOFF_P STM #AN,ACOFF_P RPT #N-1 ;計(jì)算前向通道

MAC *XN_P+,*BCOFF_P+,A MAC *XN_P,*BCOFF_P,A 第85頁(yè)/共226頁(yè)MAR*XN_P-0 ;將AR2指針指向x(n-N) RPT #N-1 ;計(jì)算反饋通道

MAC *YN_P+,*ACOFF_P+,A STH A,*YN_P-0 ;保存y(n)LOOP:EENDB EEND .end第86頁(yè)/共226頁(yè)4.IIR濾波器鏈接命令文件的編寫(xiě)對(duì)應(yīng)以上匯編程序的鏈接命令文件diir.cmd如下:diir.obj-odiir.out-mdiir.mapMEMORY{PAGE0:ROM:ORIGIN=0080H,LENGTH=1000HPAGE1:SPRAM: ORIGIN=0060H,LENGTH=0020HDARAM: ORIGIN=0080H,LENGTH=1380HRAM1: ORIGIN=2400H,LENGTH=0200HRAM2: ORIGIN=2600H,LENGTH=0200H}SECTIONS第87頁(yè)/共226頁(yè){.text :>ROM PAGE0.data :>DARAMPAGE1BN :>DARAMPAGE1AN :>DARAMPAGE1INBUF :>RAM1PAGE1OUTPUT :>RAM2PAGE1}返回本節(jié)第88頁(yè)/共226頁(yè)7.7FFT運(yùn)算的DSP實(shí)現(xiàn)7.7.1基二實(shí)數(shù)FFT運(yùn)算的算法7.7.2FFT運(yùn)算模擬信號(hào)的產(chǎn)生及輸入7.7.3實(shí)序列FFT匯編源程序及鏈接命令文件7.7.4觀察信號(hào)時(shí)域波形及其頻譜返回首頁(yè)第89頁(yè)/共226頁(yè)7.7.1基二實(shí)數(shù)FFT運(yùn)算的算法該算法主要分為以下四步。第一步,輸入數(shù)據(jù)的組合和位倒序把輸入序列作位倒序是為了在整個(gè)運(yùn)算最后的輸出中得到的序列是自然順序。如圖7-21所示。第二步,N點(diǎn)復(fù)數(shù)FFT在DATA數(shù)據(jù)處理緩沖器里進(jìn)行N點(diǎn)復(fù)數(shù)FFT運(yùn)算。如圖7-22所示。第90頁(yè)/共226頁(yè)第三步,分離復(fù)數(shù)FFT的輸出為奇部分和偶部分分離FFT輸出為RP、RM、IP和IM四個(gè)序列,即偶實(shí)數(shù)、奇實(shí)數(shù)、偶虛數(shù)和奇虛數(shù)四部分。第四步,產(chǎn)生2N點(diǎn)的復(fù)數(shù)FFT輸出序列產(chǎn)生2N=256個(gè)點(diǎn)的復(fù)數(shù)輸出,它與原始的256個(gè)點(diǎn)的實(shí)輸入序列的DFT一致。如圖7-24所示。返回本節(jié)第91頁(yè)/共226頁(yè)7.7.2FFT運(yùn)算模擬信號(hào)的產(chǎn)生及輸入產(chǎn)生模擬輸入信號(hào)可以有兩種方法,第一種方法是用C語(yǔ)言程序產(chǎn)生mdata.inc文件,然后,在DSP匯編語(yǔ)言程序中通過(guò).copy匯編命令將生成的數(shù)據(jù)文件mdata.inc復(fù)制到匯編程序中,如例7-12和例7-15,數(shù)據(jù)起始地址標(biāo)號(hào)為INPUT,段名為INPUT。第二種方法是首先建立與輸入信號(hào)對(duì)應(yīng)的數(shù)據(jù)流文件mdata.dat,其數(shù)據(jù)格式如下:165110100x1f400x1f40

……返回本節(jié)第92頁(yè)/共226頁(yè)7.7.3實(shí)序列FFT匯編源程序及鏈接命令文件【例7-16】256點(diǎn)實(shí)序列FFT的DSP實(shí)現(xiàn)。256點(diǎn)實(shí)序列FFT匯編源程序如下:**************************************Radix-2,DIT,Real-inputFFTProgram**fft.asm**************************************.mmregs.globalreset,start,sav_sin,sav_idx,sav_grp.def start,_c_int00.data第93頁(yè)/共226頁(yè)DATA .space1024.copy"mdata1.inc";mdata1.inc為模擬輸入信號(hào)數(shù)據(jù),起始地址標(biāo)號(hào)INPUTN .set 128 ;復(fù)數(shù)點(diǎn)數(shù)LOGN .set 7;蝶形級(jí)數(shù)sav_grp .usect"tempv",3 ;定義組變量值sav_sin .set sav_grp+1 ;定義旋轉(zhuǎn)因子表sav_idx .set sav_grp+2OUTPUT .usect"OUTPUT",256;信號(hào)功率譜BOS .usect "stack",0Fh ;定義堆棧TOS .usect "stack",1.copy "twiddle1.inc";正弦表系數(shù)由twiddle1.inc文件給出,起始地址標(biāo)號(hào)TWI1第94頁(yè)/共226頁(yè).copy "twiddle2.inc";余弦表系數(shù)由twiddle2.inc文件給出,起始地址標(biāo)號(hào)TWI2.text_c_int00bstartnopnopstart:STM #TOS,SPLD #0,DPSSBX FRCT*****************************************************************返回本節(jié)第95頁(yè)/共226頁(yè)7.7.4觀察信號(hào)時(shí)域波形及其頻譜經(jīng)程序計(jì)算得到的信號(hào)功率譜放在數(shù)據(jù)存儲(chǔ)區(qū)0x2000開(kāi)始的256個(gè)單元中。在CCS中選擇View→Graph→Time/Frequency命令,選擇程序區(qū)0x9000開(kāi)始的256個(gè)單元中,DisplayType分別選擇為FFTMagnitude和SingleTime,則信號(hào)頻譜圖及其時(shí)域波形如圖7-25上半部分所示。將起始地址改為0x2000,page選項(xiàng)改為data,SamplingRate為256,DisplayType為SingleTime,如圖7-25。第96頁(yè)/共226頁(yè)圖7-25輸入信號(hào)時(shí)域波形、頻譜圖及其功率譜返回本節(jié)第97頁(yè)/共226頁(yè)第8章

TMS320C54x片內(nèi)外設(shè)及應(yīng)用實(shí)例8.1定時(shí)器8.2時(shí)鐘發(fā)生器8.3定時(shí)器/計(jì)數(shù)器編程舉例8.4多通道緩沖串口(McBSP)8.5多通道緩沖串口應(yīng)用實(shí)例8.6主機(jī)接口(HPI)8.7外部總線(xiàn)操作第98頁(yè)/共226頁(yè)8.1定時(shí)器定時(shí)器的組成框圖如圖8-1所示。它有3個(gè)存儲(chǔ)器映象寄存器:TIM、PRD和TCR。這3個(gè)寄存器在數(shù)據(jù)存儲(chǔ)器中的地址及其說(shuō)明如表8-1所示。定時(shí)器控制寄存器(TCR)位結(jié)構(gòu)如圖8-2所示,各控制位和狀態(tài)位的功能如表8-2所示。返回首頁(yè)第99頁(yè)/共226頁(yè)圖8-1定時(shí)器組成框圖第100頁(yè)/共226頁(yè)表8-1定時(shí)器的三個(gè)寄存器Timer0地址Timer1地址寄存器說(shuō)明0024H0030HTIM定時(shí)器寄存器,每計(jì)數(shù)一次自動(dòng)減10025H0031HPRD定時(shí)器周期寄存器,當(dāng)TIM減為0后,CPU自動(dòng)將PRD的值裝入TIM0026H0032HTCR定時(shí)器控制寄存器,包含定時(shí)器的控制和狀態(tài)位第101頁(yè)/共226頁(yè)15~1211109~6543~0保留softfreePSCTRBTSSTDDR圖8-2TCR位結(jié)構(gòu)圖第102頁(yè)/共226頁(yè)表8-2定時(shí)器控制寄存器(TCR)的功能返回本節(jié)第103頁(yè)/共226頁(yè)8.2時(shí)鐘發(fā)生器8.2.1硬件配置PLL8.2.2軟件可編程PLL返回首頁(yè)第104頁(yè)/共226頁(yè)8.2.1硬件配置PLL用于C541、C542、C543、C545和C546芯片。所謂硬件配置PLL,就是通過(guò)C54x的3個(gè)引腳CLKMD1、CLKMD2和CLKMD3的狀態(tài),選定時(shí)鐘方式,如表8-3所示。由表8-3可見(jiàn),不用PLL時(shí),CPU的時(shí)鐘頻率等于晶體振蕩器頻率或外部時(shí)鐘頻率的一半;若用PLL,CPU的時(shí)鐘頻率等于晶體振蕩器頻率或外部時(shí)鐘頻率乘以系數(shù)N(PLLN),使用PLL可以使用比CPU時(shí)鐘低的外部時(shí)鐘信號(hào),以減少高速開(kāi)關(guān)時(shí)鐘所造成的高頻噪聲。第105頁(yè)/共226頁(yè)表8-3時(shí)鐘方式的配置返回本節(jié)第106頁(yè)/共226頁(yè)8.2.2軟件可編程PLL軟件可編程PLL具有高度的靈活性,其時(shí)鐘定標(biāo)器提供各種時(shí)鐘乘法器系數(shù),并能直接接通和關(guān)斷PLL。PLL的鎖定定時(shí)器可以用于延遲轉(zhuǎn)換PLL的時(shí)鐘方式,直到鎖定為止。通過(guò)軟件編程,可以選用以下兩種時(shí)鐘方式(如表8-4~8-6、圖8-3所示)。

PLL方式,其比例系數(shù)共31種。靠鎖相環(huán)電路完成。分頻(DIV)方式,其比例系數(shù)為1/2和1/4,在此方式下,片內(nèi)PLL電路不工作以降低功耗。第107頁(yè)/共226頁(yè)表8-4復(fù)位時(shí)的時(shí)鐘方式(C5402)CLKMD1CLKMD2CLKMD3CLKMD寄存器時(shí)鐘方式000E007H乘15,內(nèi)部振蕩器工作,PLL工作0019007H乘10,內(nèi)部振蕩器工作,PLL工作0104007H乘5,內(nèi)部振蕩器工作,PLL工作1001007H乘2,內(nèi)部振蕩器工作,PLL工作110F007H乘1,內(nèi)部振蕩器工作,PLL工作1110000H乘1/2,內(nèi)部振蕩器工作,PLL不工作101F000H乘1/4,內(nèi)部振蕩器工作,PLL不工作011…保留第108頁(yè)/共226頁(yè)表8-5時(shí)鐘方式寄存器CLKMD各位域功能第109頁(yè)/共226頁(yè)表8-6比例系數(shù)與CLKMD的關(guān)系PLLNDIVPLLDⅣPLLMUL比例系數(shù)0X0~140.50X150.25100~14PLLMUL+110151110或偶數(shù)(PLLMUL+1)÷211奇數(shù)PLLMUL÷4第110頁(yè)/共226頁(yè)圖8-3PLL鎖定時(shí)間和CLKOUT頻率的關(guān)系返回本節(jié)第111頁(yè)/共226頁(yè)8.3定時(shí)器/計(jì)數(shù)器編程舉例【例8-1】設(shè)時(shí)鐘頻率為16.384MHz,在TMS320C5402的XF端輸出一個(gè)周期為2s的方波,方波的周期由片上定時(shí)器確定,采用中斷方法實(shí)現(xiàn)。1.定時(shí)器0的初始化(1)設(shè)置定時(shí)控制寄存器TCR(地址0026H)。(2)設(shè)置定時(shí)寄存器TIM(地址0024H)。(3)設(shè)置定時(shí)周期寄存器PRD(地址0025H)。返回首頁(yè)第112頁(yè)/共226頁(yè)2.定時(shí)器對(duì)C5402的主時(shí)鐘CLKOUT進(jìn)行分頻CLKOUT與外部晶體振蕩器頻率(在本系統(tǒng)中外部晶體振蕩器的頻率為16.384MHz)之間的關(guān)系由C5402的三個(gè)引腳CLKMD1、CLKMD2和CLKMD3的電平值決定,為使主時(shí)鐘頻率為16.384MHz,應(yīng)使CLKMD1=1、CLKMD2=1、CLKMD3=0,即PLL1。第113頁(yè)/共226頁(yè)3.中斷初始化(1)中斷屏蔽寄存器IMR中的定時(shí)屏蔽位TINT0置1,開(kāi)放定時(shí)器0中斷。(2)狀態(tài)控制寄存器ST1中的中斷標(biāo)志位INTM位清零,開(kāi)放全部中斷。第114頁(yè)/共226頁(yè)4.匯編源程序如下:.mmregs.def_c_int00STACK.usect"STACK",100ht0_cout .usect"vars",1;計(jì)數(shù)器t0_flag.usect“vars”,1;當(dāng)前XF輸出電平標(biāo)志。t0_flag=1,則XF=1;;t0_flag=0,則XF=0TVAL .set1639;16401061=1ms因中斷程序中計(jì)數(shù)器初值;t0_cout=1000,所以定時(shí)時(shí)間:1ms1000=1sTIM0 .set 0024H ;定時(shí)器0寄存器地址PRD0 .set 0025HTCR0 .set 0026H .data第115頁(yè)/共226頁(yè)TIMES .intTVAL ;定時(shí)器時(shí)間常數(shù) .text**********************************;中斷矢量表程序段_c_int00 bstart nop nopNMI rete ;非屏蔽中斷

nop nop nopSINT17 .space4*16 ;各軟件中斷SINT18 .space4*16SINT19 .space4*16SINT20 .space4*16SINT21 .space4*16第116頁(yè)/共226頁(yè)SINT22 .space4*16SINT23 .space4*16SINT24 .space4*16SINT25 .space4*16SINT26 .space4*16SINT27 .space4*16SINT28 .space4*16SINT29 .space4*16SINT30 .space4*16INT0 rsbx intm ;外中斷0中斷

rete nop nopINT1 rsbx intm ;外中斷1中斷

rete nop nopINT2 rsbx intm ;外中斷2中斷第117頁(yè)/共226頁(yè)rete nop

nopTINT:bd timer ;定時(shí)器中斷向量

nop nop nopRINT0: rete ;串口0接收中斷

nop nop nopXINT0: rete ;串口0發(fā)送中斷

nop nop nopSINT6 .space4*16 ;軟件中斷SINT7 .space4*16 ;軟件中斷第118頁(yè)/共226頁(yè)INT3: rete ;外中斷3中斷

nop nop nopHPINT: rete ;主機(jī)中斷

nop nop nopRINT1: rete ;串口1接收中斷

nop nop nopXINT1: rete ;串口1發(fā)送中斷

nop nop nop******************************************第119頁(yè)/共226頁(yè)start: LD #0,DP STM #STACK+100h,SP STM #07FFFh,SWWSR STM #1020h,PMST ST #1000,*(t0_cout);計(jì)數(shù)器設(shè)置為1000(1s) SSBX INTM ;關(guān)全部中斷

LD #TIMES,A READATIM0 ;初始化TIM,PRD READAPRD0 STM #669h,TCR0 ;初始化TCR0 STM #8,IMR;初始化IMR,使能timer0中斷

RSBX INTM ;開(kāi)放全部中斷WAIT: B WAIT**************************************第120頁(yè)/共226頁(yè);定時(shí)器0中斷服務(wù)子程序timer: ADDM #-1,*(t0_cout) ;計(jì)數(shù)器減1

CMPM *(t0_cout),#0 ;判斷是否為0

BC next,NTC ;不是0,退出循環(huán)

ST #1000,*(t0_cout);為0,設(shè)置計(jì)數(shù)器,并將XF取反

BITF t0_flag,#1 BC xf_out,NTC SSBX XF ST #0,t0_flag B nextxf_out: RSBX XF ST #1,t0_flagnext: RSBX INTM RETE .end第121頁(yè)/共226頁(yè)5.鏈接命令文件times.cmd如下:times.obj-otimes.out-mtimes.mapMEMORY{PAGE0:RAM1:origin=1000h,length=500hPAGE1:SPRAM1:origin=0060h,length=20h SPRAM2:origin=0100h,length=200h}SECTIONS{.text:>RAM1PAGE0.data:>RAM1PAGE0vars:>SPRAM1PAGE1STACK :>SPRAM2PAGE1}返回本節(jié)第122頁(yè)/共226頁(yè)8.4多通道緩沖串口(McBSP)8.4.1McBSP原理框圖及信號(hào)接口8.4.2McBSP控制寄存器8.4.3時(shí)鐘和幀同步8.4.4McBSP數(shù)據(jù)的接收和發(fā)送8.4.5有關(guān)的幾個(gè)概念返回首頁(yè)第123頁(yè)/共226頁(yè)8.4.1McBSP原理框圖及信號(hào)接口TMS320C54xx多通道緩沖串口(McBSP)由引腳、接收發(fā)送部分、時(shí)鐘及幀同步信號(hào)產(chǎn)生、多通道選擇以及CPU中斷信號(hào)和DMA同步信號(hào)組成,如圖8-4所示。表8-7給出了有關(guān)引腳的定義,McBSP通過(guò)這7個(gè)引腳為外部設(shè)備提供了數(shù)據(jù)通道和控制通道。McBSP通過(guò)DX和DR實(shí)現(xiàn)DSP與外部設(shè)備的通信和數(shù)據(jù)交換。

第124頁(yè)/共226頁(yè)圖8-4McBSP原理框圖第125頁(yè)/共226頁(yè)表8-7McBSP引腳說(shuō)明引腳I/O/Z說(shuō)明DRI串行數(shù)據(jù)接收DXO/Z串行數(shù)據(jù)發(fā)送CLKRI/O/Z接收數(shù)據(jù)位時(shí)鐘CLKXI/O/Z發(fā)送數(shù)據(jù)位時(shí)鐘FSRI/O/Z接收幀同步FSXI/O/Z發(fā)送幀同步CLKSI外部時(shí)鐘輸入第126頁(yè)/共226頁(yè)表8-8McBSP內(nèi)部信號(hào)說(shuō)明信號(hào)說(shuō)明RINT接收中斷,送往CPUXINT發(fā)送中斷,送往CPUREVTDMA接收到同步事件XEVT向DMA發(fā)出事件同步REVTADMA接收到同步事件AXEVTA向DMA發(fā)出事件同步A返回本節(jié)第127頁(yè)/共226頁(yè)8.4.2McBSP控制寄存器1.控制寄存器及其映射地址表8-9列出了McBSP控制寄存器及其映射地址。子塊數(shù)據(jù)寄存器SPSDx用于指定對(duì)應(yīng)子地址寄存器中數(shù)據(jù)的讀寫(xiě),其內(nèi)部連接方式如圖8-5所示。這種方法的好處是可以將多個(gè)寄存器映射到一個(gè)較小的存儲(chǔ)空間。第128頁(yè)/共226頁(yè)表8-9McBSP控制寄存器及其映射地址第129頁(yè)/共226頁(yè)圖8-5子地址映射示意圖第130頁(yè)/共226頁(yè)2.串行口的配置串口控制寄存器(SPCR1、SPCR2)和引腳控制寄存器(PCR)用于對(duì)串口進(jìn)行配置,接收控制寄存器(RCR1、RCR2)和發(fā)送控制寄存器(XCR1、XCR2)分別對(duì)接收和發(fā)送操作進(jìn)行控制。(1)串口控制寄存器(SPCR1、SPCR2)串口控制寄存器1(SPCR1)結(jié)構(gòu)如圖8-6所示,表8-10為SPCR1控制位功能說(shuō)明。串口控制寄存器2(SPCR2)結(jié)構(gòu)如圖8-7所示,表8-11為SPCR2控制位功能說(shuō)明。(2)引腳控制寄存器(PCR)。引腳控制寄存器(PCR)結(jié)構(gòu)如圖8-8所示,表8-12為PCR控制位功能說(shuō)明。第131頁(yè)/共226頁(yè)圖8-6串口控制寄存器1(SPCR1)第132頁(yè)/共226頁(yè)表8-10SPCR1控制位功能說(shuō)明第133頁(yè)/共226頁(yè)第134頁(yè)/共226頁(yè)圖8-7串口控制寄存器2(SPCR2)第135頁(yè)/共226頁(yè)表8-11SPCR2控制位功能說(shuō)明第136頁(yè)/共226頁(yè)第137頁(yè)/共226頁(yè)圖8-8引腳控制寄存器(PCR)第138頁(yè)/共226頁(yè)表8-12PCR控制位功能說(shuō)明第139頁(yè)/共226頁(yè)(3)接收控制寄存器(RCR[1,2])。結(jié)構(gòu)如圖8-9所示,表8-13所示為RCR1控制位功能說(shuō)明,表8-14所示為RCR2控制位功能說(shuō)明。(4)發(fā)送控制寄存器(XCR[1,2])。發(fā)送控制寄存器(XCR[1,2])結(jié)構(gòu)如圖8-10所示,表8-15所示為XCR1控制位功能說(shuō)明,表8-16所示為XCR2控制位功能說(shuō)明。第140頁(yè)/共226頁(yè)第141頁(yè)/共226頁(yè)第142頁(yè)/共226頁(yè)(a)RCR1(b)RCR2圖8-9接收控制寄存器(RCR[1,2])第143頁(yè)/共226頁(yè)表8-13RCR1控制位功能說(shuō)明第144頁(yè)/共226頁(yè)表8-14RCR2控制位功能說(shuō)明第145頁(yè)/共226頁(yè)(a)XCR1(b)XCR2圖8-10發(fā)送控制寄存器(XCR[1,2])第146頁(yè)/共226頁(yè)表8-15XCR1控制位功能說(shuō)明第147頁(yè)/共226頁(yè)表8-16XCR2控制位功能說(shuō)明返回本節(jié)第148頁(yè)/共226頁(yè)8.4.3時(shí)鐘和幀同步采樣率發(fā)生器由三級(jí)時(shí)鐘分頻組成,如圖8-11所示,可以產(chǎn)生可編程的CLKG(數(shù)據(jù)位時(shí)鐘)信號(hào)和FSG(幀同步時(shí)鐘)信號(hào)。CLKG和FSG是McBSP的內(nèi)部信號(hào),用于驅(qū)動(dòng)接收/發(fā)送時(shí)鐘信號(hào)(CLKR/X)和幀同步信號(hào)(FSR/X)。采樣率發(fā)生器時(shí)鐘既可以由內(nèi)部的CPU時(shí)鐘驅(qū)動(dòng)(CLKSM=1),也可以由外部時(shí)鐘源驅(qū)動(dòng)(CLKSM=0)。采樣率發(fā)生器寄存器SRGR[1,2]控制著采樣率發(fā)生器的各種操作,其結(jié)構(gòu)如圖8-12所示。表8-17所示為SRGR1控制位功能說(shuō)明,表8-18所示為SRGR2控制位功能說(shuō)明。第149頁(yè)/共226頁(yè)圖8-11采樣率發(fā)生器框圖第150頁(yè)/共226頁(yè)(a)采樣率發(fā)生器寄存器1(SRGR1)(b)采樣率發(fā)生器寄存器2(SRGR2)圖8-12采樣率發(fā)生器寄存器SRGR[1,2]結(jié)構(gòu)圖第151頁(yè)/共226頁(yè)表8-17SRGR1控制位功能說(shuō)明第152頁(yè)/共226頁(yè)表8-18SRGR2控制位功能說(shuō)明第153頁(yè)/共226頁(yè)圖8-13可編程幀周期和幀脈沖寬度返回本節(jié)第154頁(yè)/共226頁(yè)8.4.4McBSP數(shù)據(jù)的接收和發(fā)送數(shù)據(jù)的接收是通過(guò)三級(jí)緩沖完成的,例如,通過(guò)設(shè)置SPCR1寄存器的RINTM=00b,則可由RRDY信號(hào)驅(qū)動(dòng)產(chǎn)生接收中斷信號(hào)RINT,TMS320C54xxCPU響應(yīng)中斷,讀取DRR中的數(shù)據(jù)。接收時(shí)序如圖8-14所示。數(shù)據(jù)的發(fā)送通過(guò)兩級(jí)緩沖完成,通過(guò)設(shè)置SPCR2寄存器的XINTM=00b,可由XRDY驅(qū)動(dòng)產(chǎn)生發(fā)送中斷信號(hào)XINT,TMS320C54xxCPU響應(yīng)中斷,將下一個(gè)發(fā)送數(shù)據(jù)寫(xiě)入DXR中,隨后XRDY降為0。發(fā)送時(shí)序如圖8-15所示。第155頁(yè)/共226頁(yè)圖8-14數(shù)據(jù)的接收第156頁(yè)/共226頁(yè)圖8-15數(shù)據(jù)的發(fā)送返回本節(jié)第157頁(yè)/共226頁(yè)8.4.5有關(guān)的幾個(gè)概念1.相的概念在McBSP中,幀同步信號(hào)表示一次數(shù)據(jù)傳輸?shù)拈_(kāi)始。幀同步信號(hào)之后的數(shù)據(jù)流可以有兩個(gè)相——相1和相2。相的個(gè)數(shù)(1或2)可以通過(guò)設(shè)置RCR2和XCR2中的(R/X)PHASE位來(lái)實(shí)現(xiàn)。每幀的字?jǐn)?shù)和每字的位數(shù)分別由(R/X)FRLEN[1,2]和(R/X)WDLEN[1,2]決定(如圖8-6、8-18所示)。

第158頁(yè)/共226頁(yè)圖8-16例8-2的圖第159頁(yè)/共226頁(yè)圖8-17例8-3的圖第160頁(yè)/共226頁(yè)2.?dāng)?shù)據(jù)延遲每一幀都是從幀同步信號(hào)有效時(shí)到來(lái)的第一個(gè)時(shí)鐘周期開(kāi)始的。實(shí)際的數(shù)據(jù)接收或傳輸開(kāi)始時(shí)刻相對(duì)于幀的開(kāi)始時(shí)刻可以有延時(shí),這一延時(shí)稱(chēng)為數(shù)據(jù)延遲,用RDATDLY和XDATDLY分別指定接收和發(fā)送的數(shù)據(jù)延遲。可編程數(shù)據(jù)延遲的范圍為0、1、2個(gè)時(shí)鐘周期([R/X]DATDLY=00b–10b),如圖8-18所示。第161頁(yè)/共226頁(yè)圖8-18數(shù)據(jù)延遲第162頁(yè)/共226頁(yè)3.SPI協(xié)議:McBSP時(shí)鐘停止模式SPI協(xié)議是一種主從配置的、支持一個(gè)主方、一個(gè)或多個(gè)從方的串行通信協(xié)議,一般使用4條信號(hào)線(xiàn):串行移位時(shí)鐘線(xiàn)(SCK)、主機(jī)輸入/從機(jī)輸出線(xiàn)(MISO)、主機(jī)輸出/從機(jī)輸入線(xiàn)(MOSI)、低電平有效的使能信號(hào)線(xiàn)()。如圖8-19~8-22所示、表8-19、20所示。第163頁(yè)/共226頁(yè)圖8-19McBSP作為SPI模式的主設(shè)備第164頁(yè)/共226頁(yè)圖8-20McBSP作為SPI模式的從設(shè)備第165頁(yè)/共226頁(yè)圖8-21CLKSTP=10b、CLKXP=0時(shí)鐘停止模式1的時(shí)序圖第166頁(yè)/共226頁(yè)圖8-22CLKSTP=11b、CLKXP=1時(shí)鐘停止模式4的時(shí)序圖第167頁(yè)/共226頁(yè)表8-19McBSP寄存器位域設(shè)置(SPI模式的主設(shè)備)第168頁(yè)/共226頁(yè)表8-20McBSP寄存器位域設(shè)置(SPI模式的從設(shè)備)返回本節(jié)第169頁(yè)/共226頁(yè)8.5多通道緩沖串口應(yīng)用實(shí)例8.5.1TLV1572高速串行ADC與TMS320C5402接口設(shè)計(jì)8.5.2TLC5617串行DAC與

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論