單片機(jī)DSP實(shí)驗(yàn)指導(dǎo)書_第1頁
單片機(jī)DSP實(shí)驗(yàn)指導(dǎo)書_第2頁
單片機(jī)DSP實(shí)驗(yàn)指導(dǎo)書_第3頁
單片機(jī)DSP實(shí)驗(yàn)指導(dǎo)書_第4頁
單片機(jī)DSP實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、DSP原理及應(yīng)用實(shí) 驗(yàn) 指 導(dǎo) 書楊宣兵 編 寫適用專業(yè):電子信息工程 _電子科學(xué)與技術(shù) 信息工程 通信工程 信息與通信工程學(xué)院2011 年 5 月前 言DSP原理與應(yīng)用是電子信息類專業(yè)信號(hào)與信息處理方向的一門專業(yè)必修課,同時(shí)也是其他電類專業(yè)的一門重要的選修課。課程以DSP芯片原理及基于DSP芯片的應(yīng)用系統(tǒng)開發(fā)為主要內(nèi)容,介紹了DSP芯片原理與開發(fā)工具及軟硬件開發(fā)方法。開設(shè)必要的課程實(shí)驗(yàn),使學(xué)生加深對(duì)DSP原理與片上資源應(yīng)用的掌握,掌握DSP項(xiàng)目開發(fā)流程、開發(fā)方法、開發(fā)平臺(tái)CCS的基本使用、DSP對(duì)外設(shè)控制方法以及經(jīng)典數(shù)字信號(hào)處理算法的DSP工程實(shí)現(xiàn)等。培養(yǎng)學(xué)生將數(shù)字信號(hào)處理理論應(yīng)用到實(shí)際項(xiàng)目

2、中的工程意識(shí)與工程開發(fā)能力。通過本課程實(shí)驗(yàn),提高學(xué)生分析問題、解決問題的能力和基于DSP的嵌入式系統(tǒng)開發(fā)的實(shí)際動(dòng)手能力,為學(xué)生步入社會(huì)奠定工程開發(fā)基礎(chǔ)。對(duì)不同專業(yè)根據(jù)實(shí)驗(yàn)教學(xué)大綱進(jìn)行實(shí)驗(yàn)項(xiàng)目選擇。實(shí)驗(yàn)項(xiàng)目設(shè)置與內(nèi)容提要序號(hào)實(shí)驗(yàn)項(xiàng)目實(shí)驗(yàn)學(xué)時(shí)每組人數(shù)實(shí)驗(yàn)類型實(shí)驗(yàn)要求內(nèi) 容 提 要1基本算術(shù)運(yùn)算的DSP實(shí)現(xiàn)41驗(yàn)證必修1、CCS基本操作;2、DSP應(yīng)用程序結(jié)構(gòu)和開發(fā)流程;3、基于DSP開發(fā)環(huán)境(Simulator)完成16位定點(diǎn)加、減、乘、除運(yùn)算。2數(shù)字振蕩器的設(shè)計(jì)與實(shí)現(xiàn)41設(shè)計(jì)必修1、CCS圖形工具使用;2、基于C語言和匯編語言混合程序設(shè)計(jì);3、定時(shí)器等外設(shè)資源的應(yīng)用;4、簡(jiǎn)單算法(迭代)的實(shí)現(xiàn)。

3、3BSP串口通信實(shí)現(xiàn)42綜合必修1、McBSP串口操作;2、VC54XX片上ROM資源的使用;4FIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)實(shí)現(xiàn)42設(shè)計(jì)選修1、McBSP串口操作與串口中斷服務(wù)程序編寫;2、AD/DA操作;3、FIR濾波器實(shí)現(xiàn)的特殊指令應(yīng)用;4、CCS高級(jí)調(diào)試工具使用。5TMS320VC5402的Bootloader設(shè)計(jì)與實(shí)現(xiàn)4510設(shè)計(jì)必修1、編程完成對(duì)外設(shè)I/O端口的控制,實(shí)現(xiàn)流水燈功能;2、完成從COFF文件到啟動(dòng)表的轉(zhuǎn)換;3、完成程序的固化與脫離上位機(jī)控制的獨(dú)立運(yùn)行。6快速傅立葉變換實(shí)現(xiàn)42綜合選修1、輔助寄存器使用,位倒序?qū)ぶ贩绞綉?yīng)用等;2、FFT算法的編程實(shí)現(xiàn);3、CCS探針和圖形工

4、具使用。7外部設(shè)備控制實(shí)驗(yàn)41綜合任選1、熟悉外部中斷使用與中斷服務(wù)程序編寫方法;2、掌握對(duì)外設(shè)端口的操作方法;3、掌握外設(shè)的控制方法(包括鍵盤、LED、步進(jìn)電機(jī)、LCD等);8雙音多頻信號(hào)編碼器設(shè)計(jì)22設(shè)計(jì)選修掌握DTMF信號(hào)的產(chǎn)生原理;掌握DTMF信號(hào)產(chǎn)生的DSP實(shí)現(xiàn)方法;9雙音多頻信號(hào)解碼器設(shè)計(jì)42設(shè)計(jì)選修掌握DTMF信號(hào)的解碼算法原理;掌握DTMF信號(hào)解碼算法的DSP實(shí)現(xiàn)方法;目 錄實(shí)驗(yàn)一 基本算術(shù)運(yùn)算的DSP實(shí)現(xiàn)1實(shí)驗(yàn)二 數(shù)字振蕩器的設(shè)計(jì)與實(shí)現(xiàn).9實(shí)驗(yàn)三 BSP 串口通信實(shí)現(xiàn)16實(shí)驗(yàn)四 FIR 數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn).25實(shí)驗(yàn)五 TMS320VC5402 的Bootloader設(shè)計(jì)與實(shí)

5、現(xiàn).34實(shí)驗(yàn)六 快速傅立葉變換(FFT)的實(shí)現(xiàn).45實(shí)驗(yàn)七 外部中斷、按鍵、LED控制實(shí)驗(yàn).67實(shí)驗(yàn)八 雙音多頻DTMF信號(hào)產(chǎn)生.70實(shí)驗(yàn)九 雙音多頻DTMF信號(hào)解碼.76附錄一 DES5402PP-U性能介紹82附錄二CCS驅(qū)動(dòng)程序的安裝83附錄三DES5402PP-U功能詳細(xì)介紹87附錄四 DES5402PP-U板上設(shè)置、狀態(tài)顯示、跳線一覽表93實(shí)驗(yàn)一: 基本算術(shù)運(yùn)算的DSP實(shí)現(xiàn) 實(shí)驗(yàn)學(xué)時(shí):4實(shí)驗(yàn)類型:驗(yàn)證實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康?、掌握CCS的配置與基本使用方法;2、掌握C54X匯編語言程序結(jié)構(gòu),掌握基于CCS開發(fā)平臺(tái)Simulator采用匯編指令完成16位定點(diǎn)加減乘除運(yùn)算程序設(shè)計(jì)并對(duì)

6、運(yùn)算結(jié)果進(jìn)行評(píng)價(jià);二、實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)學(xué)習(xí)使用定點(diǎn)DSP實(shí)現(xiàn)16位定點(diǎn)加、減、乘、除運(yùn)算的基本方法和編程技巧。三、實(shí)驗(yàn)原理、方法和手段1定點(diǎn)DSP中數(shù)據(jù)表示方法 C54X是16位的定點(diǎn)DSP。一個(gè)16位的二進(jìn)制數(shù)既可以表示一個(gè)整數(shù),也可以表示一個(gè)小數(shù)。當(dāng)它表示一個(gè)整數(shù)時(shí),其最低位(D0)表示,D1位表示,次高位(D14)表示。如果表示一個(gè)有符號(hào)數(shù)時(shí),最高位(D15)為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)。例如,07FFFH表示最大的正數(shù)32767(十進(jìn)制),而0FFFFH表示最大的負(fù)數(shù)-1(負(fù)數(shù)用2的補(bǔ)碼方式顯示)。當(dāng)需要表示小數(shù)時(shí),小數(shù)點(diǎn)的位置始終在最高位后,而最高位(D15)表示符號(hào)位。這樣次高位

7、(D14)表示,然后是,最低位(D0)表示。所以04000H表示小數(shù)0.5,01000H表示小數(shù),而0001H表示16位定點(diǎn)DSP能表示的最小的小數(shù)(有符號(hào))=0.000030517578125。在后面的實(shí)驗(yàn)中,除非有特別說明,我們指的都是有符號(hào)數(shù)。在C54X中,將一個(gè)小數(shù)用16位定點(diǎn)格式來表示的方法是用乘以該小數(shù),然后取整。從上面的分析可以看出,在DSP中一個(gè)16進(jìn)制的數(shù)可以表示不同的十進(jìn)制數(shù),或者是整數(shù),或者是小數(shù)(如果表示小數(shù),必定小于1),但僅僅是在做整數(shù)乘除或小數(shù)乘除時(shí),系統(tǒng)對(duì)它們的處理才是有所區(qū)別的,而在加減運(yùn)算時(shí),系統(tǒng)都當(dāng)成整數(shù)來處理。 2實(shí)現(xiàn)16定點(diǎn)加法 C54X中提供了多條用

8、于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于無符號(hào)數(shù)的加法運(yùn)算,ADDC用于帶進(jìn)位的加法運(yùn)算(如32位擴(kuò)展精度加法),而ADDM專用于立即數(shù)的加法。在本實(shí)驗(yàn)中,我們可以使用下列代碼來說明加法運(yùn)算:ldtemp1,a;將變量temp1裝入寄存器Aaddtemp2,a;將變量temp2與寄存器A相加,結(jié)果放入A中stla,add_result ;將結(jié)果(低16位)存入變量add_result中。注意,這里完成計(jì)算temp3=temp1+temp2,我們沒有特意考慮temp1和temp2是整數(shù)還是小數(shù),在加法和下面的減法中整數(shù)運(yùn)算和定點(diǎn)的小數(shù)運(yùn)算都是一樣的。3實(shí)現(xiàn)16位定點(diǎn)

9、減法C54X中提供了多條用于減法的指令,如SUB,SUBB,SUBC和SUBS。其中SUBS用于無符號(hào)數(shù)的減法運(yùn)算,SUBB用于帶進(jìn)位的減法運(yùn)算(如32位擴(kuò)展精度的減法),而SUBC為移位減,DSP中的除法就是用該指令來實(shí)現(xiàn)的。SUB指令與ADD指令一樣,有許多的尋址方式,其詳細(xì)使用說明請(qǐng)查閱TI文檔。在本實(shí)驗(yàn)中,我們可以使用下列代碼來說明減法運(yùn)算:stm#temp1,ar3;將變量temp1的地址裝入ar3寄存器stm#temp3,ar2;將變量temp3的地址裝入ar3寄存器sub*ar2+, *ar3,b ;將變量temp3左移16位同時(shí)變量temp1也左移;16位,然后相減,結(jié)果放入寄

10、存器B(高16位)中,;同時(shí)ar2加1。sthb,sub_result;將相減的結(jié)果(高16位)存入變量sub_result。4實(shí)現(xiàn)16定點(diǎn)整數(shù)乘法 在C54X中提供了大量的乘法運(yùn)算指令,其結(jié)果都是32位,放在A或B寄存器中。乘數(shù)在C54X的乘法指令很靈活,可以是T寄存器、立即數(shù)、存貯單元和A或B寄存器的高16位。在C54X中,一般對(duì)數(shù)據(jù)的處理都當(dāng)做有符號(hào)數(shù),如果是無符號(hào)數(shù)乘時(shí),請(qǐng)使用MPYU指令。這是一條專用于無符號(hào)數(shù)乘法運(yùn)算的指令,而其它指令都是有符號(hào)數(shù)的乘法。在本實(shí)驗(yàn)中,我們使用下列代碼來說明整數(shù)乘法運(yùn)算:rsbx FRCT;清FRCT標(biāo)志,準(zhǔn)備整數(shù)乘ldtemp1,T;將變量temp1

11、裝入T寄存器mpytemp2,a;完成temp2*temp1,結(jié)果放入A寄存器(32位)例如,當(dāng)temp1=1234H(十進(jìn)制的4660),temp2=9876H(十進(jìn)制的-26506),乘法的結(jié)果在A寄存器中為0F8A343F8H(十進(jìn)制的-123517960)。這是一個(gè)32位的結(jié)果,需要兩個(gè)內(nèi)存單元來存放結(jié)果:stha,mpy_I_h;將結(jié)果(高16位)存入變量mpy_I_hstla,mpy_I_l;將結(jié)果(低16位)存入變量mpy_I_l當(dāng)temp1=10H(十進(jìn)制的16),temp2=05H(十進(jìn)制的5),乘法結(jié)果在A寄存器中為00000050H(十進(jìn)制的80)。對(duì)于這種情況,僅僅需要

12、保存低16位即可:stla,mpy_I_l;將結(jié)果(低16位)存入變量mpy_I_l5實(shí)現(xiàn)16定點(diǎn)小數(shù)乘法 在C54X中,小數(shù)的乘法與整數(shù)乘法基本一致,只是由于兩個(gè)有符號(hào)的小數(shù)相乘,其結(jié)果的小數(shù)點(diǎn)的位置在次高的后面,所以必須左移一位,才能得到正確的結(jié)果。C54X中提供了一個(gè)狀態(tài)位FRCT,將其設(shè)置為1時(shí),系統(tǒng)自動(dòng)將乘積結(jié)果左移移位。但注意整數(shù)乘法時(shí)不能這樣處理,所以上面的實(shí)驗(yàn)中一開始便將FRCT清除。兩個(gè)小數(shù)(16位)相乘后結(jié)果為32位,如果精度允許的話,可以只存高16位,將低16位丟棄,這樣仍可得到16位的結(jié)果。在本實(shí)驗(yàn)中,我們使用下列代碼來說明小數(shù)乘法運(yùn)算:ssbxFRCT;FRCT=1,

13、準(zhǔn)備小數(shù)乘法ldtemp1,16,a;將變量temp1裝入寄存器A的高16位mpyatemp2;完成temp2乘寄存器A的高16位,結(jié)果在B中;同時(shí)將temp2裝入T寄存器sthb,mpy_f;將乘積結(jié)果的高16位存入變量mpy_f例如,temp1=temp2=4000H(十進(jìn)制的0.5),兩數(shù)相乘后結(jié)果為20000000(十進(jìn)制的=0.25)。再如,temp1=0ccdH(十進(jìn)制的0.1),temp2=0599aH(十進(jìn)制的0.7),兩數(shù)相乘后B寄存器的內(nèi)容為08f5f0a4H(十進(jìn)制的0.07000549323857)。如果僅保存結(jié)果的高16位08f5H(十進(jìn)制的0.06997680664

14、063)。有時(shí)為了提高精度,可以使用RND或使用MPYR指令對(duì)低16位做四舍五入的處理。6實(shí)現(xiàn)16定點(diǎn)整數(shù)除法 在C54X中沒有提供專門的除法指令,一般有兩種方法來完成除法。一種是用乘法來代替,除以某個(gè)數(shù)相當(dāng)于乘以其倒數(shù),所以先求出其倒數(shù),然后相乘。這種方法對(duì)于除以常數(shù)特別適用。另一種方法是使用SUBC指令,重復(fù)16次減法完成除法運(yùn)算。下面我們以temp1/temp2為例,說明如何使用SUBC指令實(shí)現(xiàn)整數(shù)除法。其中變量temp1為被除數(shù),temp2為除數(shù),結(jié)果即商存放在變量temp3中。在完成整數(shù)除法時(shí),先判斷結(jié)果的符號(hào)。方法是將兩數(shù)相乘,保存A或B的高16位以便判斷結(jié)果的符號(hào)。然后只做兩個(gè)正

15、數(shù)的除法,最后修正結(jié)果的符號(hào)。為了實(shí)現(xiàn)兩個(gè)數(shù)相除,先將被除數(shù)裝入A或B的低16位,接著重復(fù)執(zhí)行SUBC指令,用除數(shù)重復(fù)減16次后,除法運(yùn)算的商在累加器的低16位,余數(shù)在高16位。詳細(xì)代碼如下:ldtemp1,T;將被除數(shù)裝入T寄存器mpytemp2,A;除數(shù)與被除數(shù)相乘,結(jié)果放入A寄存器ldtemp2,B;將除數(shù)temp2裝入B寄存器的低16位absB;求絕對(duì)值stlB,temp2;將B寄存器的低16位存回temp2ldtemp1,B;將被除數(shù)temp1裝入B寄存器的低16位absB;求絕對(duì)值rpt#15;重復(fù)SUBC指令16次subctemp2,b;使用SUBC指令完成除法運(yùn)算bcddiv_

16、end,agt;延時(shí)跳轉(zhuǎn),先執(zhí)行下面兩條指令,然后判斷A,;若A0,則跳轉(zhuǎn)到標(biāo)號(hào)div_end,結(jié)束除法運(yùn)算stlB,quot_i;將商(B寄存器的低16位)存入變量quot_isthB,remain_i;將余數(shù)(B寄存器的高16位)存入變量remain_ixorB;若兩數(shù)相乘的結(jié)果為負(fù),則商也應(yīng)為負(fù)。先;將B寄存器清0subquot_i,B;將商反號(hào)stlB,quot_i;存回變量quot_i中div_end:上面給出的是整數(shù)除法的通用程序,在實(shí)際應(yīng)用中可以根據(jù)具體情況做簡(jiǎn)化。如正數(shù)除法可以直接將被除數(shù)temp1裝入B寄存器的低16位,然后用SUBC指令循環(huán)減除數(shù)temp2,減完后B寄存器中

17、低16位為商,高16位為余數(shù),不用判斷符號(hào),從而節(jié)省時(shí)間。例如temp1=10H(十進(jìn)制的16),temp2=5,兩數(shù)相除后商為3(在B寄存器的低16位),余數(shù)為1(在B寄存器的高16位)。7實(shí)現(xiàn)16定點(diǎn)小數(shù)除法 在C54X中實(shí)現(xiàn)16位的小數(shù)除法與前面的整數(shù)除法基本一致,也是使用循環(huán)的SUBC指令來完成。但有兩點(diǎn)需要注意:第一,小數(shù)除法的結(jié)果一定是小數(shù)(小于1),所以被除數(shù)一定小于除數(shù)。這與整數(shù)除法正好相反。所以在執(zhí)行SUBC指令前,應(yīng)將被除數(shù)裝入A或B寄存器的高16位,而不是低16位。其結(jié)果的格式與整數(shù)除法一樣,A或B寄存器的高16位為余數(shù),低16位為商。第二,與小數(shù)乘法一樣,應(yīng)考慮符號(hào)位對(duì)

18、結(jié)果小數(shù)點(diǎn)的影響。所以應(yīng)對(duì)商右移一位,得到正確的有符號(hào)數(shù)。其詳細(xì)代碼如下:ldtemp1,T;將被除數(shù)裝入T寄存器mpytemp2,A;除數(shù)與被除數(shù)相乘,結(jié)果放入A寄存器ldtemp2,B;將除數(shù)temp2裝入B寄存器的低16位absB;求絕對(duì)值stlB,temp2;將B寄存器的低16位存回temp2ldtemp1,16,B;將被除數(shù)temp1裝入B寄存器的高16位absB;求絕對(duì)值rpt#15;重復(fù)SUBC指令16次subctemp2,b;使用SUBC指令完成除法運(yùn)算and#0ffffh,B;將B寄存器的高16位清為0。這時(shí)余數(shù)被;丟棄,僅保留商bcddiv_end,agt;延時(shí)跳轉(zhuǎn),先執(zhí)行

19、下面兩條指令,然后判斷A,; 若A0,則跳轉(zhuǎn)到標(biāo)號(hào)div_end,結(jié)束除法運(yùn)算stlB,-1,quot_f;將商右移一位后存入變量quot_f,右移是為了;修正符號(hào)位xorB;若兩數(shù)相乘的結(jié)果為負(fù),則商也應(yīng)為負(fù)。先將B;寄存器清0subquot_f,B;將商反號(hào)stlB,quot_f;存回變量quot_f中div_end: 注意,上面的C54X的16位定點(diǎn)有符號(hào)小數(shù)除法通用程序沒有保留余數(shù),商保存在變量temp3中。舉一個(gè)例子,當(dāng)temp1=2cccH(十進(jìn)制的0.35),temp2=55c2H(十進(jìn)制的0.67),兩數(shù)相除的結(jié)果為temp3=42dcH(十進(jìn)制的0 x42dc0.52233)

20、。四、實(shí)驗(yàn)條件PC機(jī), DES5402PP-U實(shí)驗(yàn)系統(tǒng)(若使用,需要將CCS配置為硬件仿真器)五、實(shí)驗(yàn)步驟本實(shí)驗(yàn)需要使用C54X匯編語言實(shí)現(xiàn)加、減、乘、除的基本運(yùn)算,并通過DES的存貯器顯示窗口觀察結(jié)果。實(shí)驗(yàn)分兩步完成:(1).編寫實(shí)驗(yàn)程序代碼本實(shí)驗(yàn)的匯編源程序代碼主要分為六個(gè)部分:加法、減法、整數(shù)乘法、小數(shù)乘法、整數(shù)除法和小數(shù)除法。每個(gè)部分后面都有一條需要加斷點(diǎn)的標(biāo)志語句:nop 當(dāng)執(zhí)行到這條加了斷點(diǎn)的語句時(shí),程序?qū)⒆詣?dòng)暫停。這時(shí)你可以通過“存貯器窗口”檢查計(jì)算結(jié)果。當(dāng)然你看到的結(jié)果都是十六進(jìn)制的數(shù)。 (2).在simulator上調(diào)試運(yùn)行,并觀察結(jié)果 在完成實(shí)驗(yàn)程序代碼的輸入,并在CCS集

21、成開發(fā)環(huán)境采用編譯器對(duì)各模塊進(jìn)行編譯并連接后,就可以在simulator上調(diào)試運(yùn)行。步驟如下:將CCS配置為C5402 simulator,啟動(dòng)CCS。新建工程exer1.prj,將編寫的主程序文件、CMD文件、中斷向量表添加到工程,對(duì)各模塊進(jìn)行編譯,然后rebuild,生成.out輸出文件。c.在CCS界面單擊菜單欄File下面的“Load”選項(xiàng),并在彈出的File Name對(duì)話框中選擇Debug文件夾下面的exer1.out裝入基本算術(shù)運(yùn)算實(shí)驗(yàn)程序,這時(shí)應(yīng)能在“反匯編”窗口看到程序代碼。d. 用鼠標(biāo)選中“Memory”窗口,并在其中選擇要查看的存貯器地址段:0 x0800 x08e。e.

22、在反匯編窗口中在每個(gè)“nop”指令處都設(shè)一個(gè)斷點(diǎn),方法有兩種:1.用鼠標(biāo)單擊該指令將其點(diǎn)亮即可。2.在菜單欄中選擇“Break”Add”,然后在彈出的對(duì)話框中鍵入欲加斷點(diǎn)的地址即可。f. 單擊菜單欄下的“Run=F5”按鈕,啟動(dòng)執(zhí)行基本算術(shù)運(yùn)算程序,程序在執(zhí)行完加法運(yùn)算后自動(dòng)暫停。通過“CPU”窗口可以看到寄存器AHL的內(nèi)容為0 x46,這正是加法運(yùn)算的結(jié)果。同樣,在“Memory”窗口中,可以看到0 x81,0 x82,0 x88的內(nèi)容為分別為0012,0034,0 x46。執(zhí)行加法運(yùn)算后,將0 x81和0 x82的內(nèi)容相加,結(jié)果放在0 x88單元。g. 在“Memory”窗口中用鼠標(biāo)左鍵雙

23、擊0 x81單元,這時(shí)可以修改該內(nèi)存單元的內(nèi)容。輸入新的數(shù)據(jù)0 x0ffee(十進(jìn)制的-18),編輯內(nèi)容時(shí)請(qǐng)直接輸入FFEE(十六進(jìn)制),然后回車確認(rèn),便完成對(duì)0 x81單元的修改。h. 在“CPU” 窗口中修改PC值,方法也是鼠標(biāo)左鍵雙擊PC寄存器的內(nèi)容,輸入新的PC值0 x1805(編輯內(nèi)容時(shí)直接輸入1805),并用回車鍵確認(rèn)。i. 單擊菜單欄下的“Run=F5”按鈕,程序從當(dāng)前PC繼續(xù)運(yùn)行,重新計(jì)算0 x81和0 x82的和,結(jié)果在0 x88中。當(dāng)程序再次暫停時(shí),可以看到AHL寄存器和0 x88的內(nèi)容為0 x22(十進(jìn)制的34),這正是我們希望的結(jié)果:-18+52=34。 j. 單擊“R

24、un=F5”按鈕,程序從當(dāng)前PC繼續(xù)運(yùn)行,完成減法運(yùn)算。當(dāng)程序再次暫時(shí)(斷點(diǎn)位于0 x1813),可以看到0 x83和0 x84單元的內(nèi)容分別為FFEE和0012,B寄存器的內(nèi)容為ffdc0000,而0 x89的內(nèi)容為ffdc(十進(jìn)制-36),這正是我們希望的結(jié)果:。注意,該減法操作使用了輔助寄存器尋址,所以計(jì)算結(jié)果在B寄存器的高16位。 k. 單擊“Run=F5”按鈕,程序從當(dāng)前PC繼續(xù)運(yùn)行,完成整數(shù)乘法運(yùn)算。當(dāng)程序再次暫時(shí)(斷點(diǎn)位于0 x181d),可以看到0 x81和0 x82單元的內(nèi)容分別為0012和0034,A寄存器的內(nèi)容為000003A8,這正是我們希望的結(jié)果:18*52=936(

25、0 x3a8)。這時(shí)我們可以用1個(gè)16位的內(nèi)容單元來保存結(jié)果,如將A寄存器的低16位存入0 x8b單元。但如果將0 x81的內(nèi)容修改為0 x2000(十進(jìn)制的8192),在“CPU窗口”中將PC修改為1818,然后繼續(xù)運(yùn)行,重新計(jì)算乘法。當(dāng)程序完成乘法暫停時(shí),可以看到A寄存器的內(nèi)容為00068000,這也是一個(gè)正確的結(jié)果:8192*52=425984(0 x68000)。此時(shí)將無法用一個(gè)16位的存貯單元來保存A寄存器中的結(jié)果。l. 單擊“Run=F5”按鈕,程序從當(dāng)前PC繼續(xù)運(yùn)行,完成小數(shù)乘法運(yùn)算。當(dāng)程序再次暫停時(shí)(斷點(diǎn)位于0 x1826),可以看到0 x83和0 x84單元的內(nèi)容分別為400

26、0和b548,A寄存器的內(nèi)容為40000000,乘法的結(jié)果在B寄存器中為daa40000,這正是我們希望的結(jié)果:0.5*(-0.58374)=-0.29187(0 x0daa4)。對(duì)于小數(shù)乘法,一般情況都可以用1個(gè)16位的內(nèi)容單元將B寄存器的高16保存(如存入0 x8c單元)。m. 單擊“Run=F5”按鈕,程序從當(dāng)前PC繼續(xù)運(yùn)行,完成整數(shù)除法運(yùn)算。當(dāng)程序再次暫時(shí)(斷點(diǎn)位于0 x183b),可以看到0 x81,0 x82,0 x8d和0 x8e單元的內(nèi)容分別為0034,0012,FFFE和0010,這正是我們希望的結(jié)果:52除以-18,商為-2(0 xfffe) ,余數(shù)為16(0 x10)。n

27、. 單擊“Run=F5”按鈕,程序從當(dāng)前PC繼續(xù)運(yùn)行,完成小數(shù)除法運(yùn)算。當(dāng)程序再次暫停時(shí)(斷點(diǎn)位于0 x1852),可以看到0 x81,0 x82和0 x8f單元的內(nèi)容分別為4000,4ab8和6da3,這正是我們希望的結(jié)果:0.5/0.58374=0.8565457(0 x6da3)。o. 如果以上程序運(yùn)行不正確,請(qǐng)檢查代碼是否輸入正確,還可以在源代碼中插入斷點(diǎn)調(diào)試,注意對(duì)中間結(jié)果的觀察。六、實(shí)驗(yàn)報(bào)告要求1、實(shí)驗(yàn)前進(jìn)行預(yù)習(xí),初步編寫相應(yīng)實(shí)驗(yàn)程序代碼2實(shí)驗(yàn)時(shí)對(duì)實(shí)驗(yàn)代碼進(jìn)行調(diào)試,并不斷修改達(dá)到正確結(jié)果;3寫出本次實(shí)驗(yàn)的心得體會(huì)。七、思考題1、對(duì)直接尋址用法有什么體會(huì)?如果在直接尋址前遺漏對(duì)DP初

28、始化,對(duì)結(jié)果有什么影響?2、在小數(shù)乘法中使用了置FRCT標(biāo)志為1的指令。如果將該語句取消,那么B寄存器的結(jié)果是多少?想想什么時(shí)候應(yīng)該設(shè)置FRCT標(biāo)志?實(shí)驗(yàn)_2_:數(shù)字振蕩器的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)學(xué)時(shí): 4實(shí)驗(yàn)類型:設(shè)計(jì)實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康耐ㄟ^本實(shí)驗(yàn)的學(xué)習(xí),讓學(xué)生掌握多模塊程序設(shè)計(jì)方法,掌握定時(shí)器使用,掌握簡(jiǎn)單算法的DSP實(shí)現(xiàn)以及CCS環(huán)境下圖形工具的簡(jiǎn)單應(yīng)用。二、預(yù)習(xí)和參考(1)數(shù)字振蕩器原理設(shè)一個(gè)傳遞函數(shù)為正弦序列sinkT,其z變換為 H(z)=其中,A=2cosT, B=-1, C=sinT。設(shè)初始條件為0,求出上式的反Z變換得: yk=Ayk-1+Byk-2+Cxk-1這是一個(gè)二階差分

29、方程,其單位沖擊響應(yīng)即為sinkT。利用單位沖擊函數(shù)xk-1的性質(zhì),即僅當(dāng)k=1時(shí),xk-1=1,代入上式得: k=0 y0 = Ay-1 + By-2 + 0 = 0 k=1 y1 = Ay0 + By-2 + c = c k=2 y2 = Ay1 + By0 + 0 = Ay1 k=3 y3 = Ay2 + By1 . k=n yn= Ayn-1 + Byn-2在k2以后,yk能用yk-1和yk-2算出,這是一個(gè)遞歸的差分方程。 根據(jù)上面的說明,我們可以開始數(shù)字振蕩器的設(shè)計(jì)。設(shè)該振蕩器的頻率為2kHz,采樣率為40kHz(通過定時(shí)器設(shè)置,每隔25us中斷一次,即產(chǎn)生一個(gè)yn),則遞歸的差分

30、方程系數(shù)為: A=2cosT=2cos (2 x PI x 2000 / 40000)=2 x 0.95105652 B=-1 C=sinT=sin (2 x PI x 2000 / 40000)=0.30901699為了便于定點(diǎn)DSP處理,我們將所有的系數(shù)除以2,然后用16位定點(diǎn)格式表示為:這便是本實(shí)驗(yàn)中產(chǎn)生2KHz正弦信號(hào)的三個(gè)系數(shù)。在本實(shí)驗(yàn)中,主程序在初始化時(shí)先計(jì)算出y1和y2,然后開放定時(shí)器中斷。以后每次進(jìn)入定時(shí)器中斷服務(wù)程序時(shí),利用前面的y1和y2,計(jì)算出新的有y0,通過CCS提供的圖形顯示工具,我們將在圖形窗口中看到一個(gè)正弦信號(hào)波形。下面是初始化和中斷服務(wù)程序代碼片段:初始化y1和

31、y2:ssbxFRCT;置FRCT=1,準(zhǔn)備進(jìn)行小數(shù)乘法運(yùn)算st#INIT_A,AA;將常數(shù)A裝入變量AAst#INIT_B,BB;將常數(shù)B裝入變量BBst#INIT_C,CC;將常數(shù)C裝入變量CCpshdCC;將變量CC壓入堆棧popdy2;初始化y2=CCldAA,T;裝AA到T寄存器mpyy2,a;y2乘系數(shù)A,結(jié)果放入A寄存器stha,y1;將A寄存器的高16位存入變量Y1中斷服務(wù)程序片段:ldBB,T;將系數(shù)B裝入T寄存器mpyy2,a;y2乘系數(shù)B,結(jié)果放入A寄存器ltdy1;將y1裝入T寄存器,同時(shí)復(fù)制到y(tǒng)2macAA,a;完成新正弦數(shù)據(jù)的計(jì)算,a寄存器中為; y1*AA+y2*

32、BBstha,1,y1;將新數(shù)據(jù)存入y1,因所有系數(shù)都除過2,;所以在保存結(jié)果時(shí)轉(zhuǎn)移一位,恢復(fù)數(shù)據(jù)正常大小。stha,1,y0;將新正弦數(shù)據(jù)存入y0 (2)C54X的定時(shí)器操作 C54X的片內(nèi)定時(shí)器利用CLKOUT時(shí)鐘計(jì)數(shù),用戶使用三個(gè)寄存器(TIM,PRD,TCR)來控制定時(shí)器,參見表2-1。在表2-2中列出了定時(shí)器控制寄存器的各個(gè)比特位的具體定義。VC5402的另一個(gè)定時(shí)器(定時(shí)器1)的控制寄存器分別為:0 x30(TIM1),0 x31(PRD1),0 x32(TCR1)。 表2-1 VC5402定時(shí)器0的相關(guān)寄存器寄存器地址名稱用途0024hTIM定時(shí)器寄存器,每計(jì)數(shù)一次自動(dòng)減1002

33、5hPRD定時(shí)器周期寄存器,當(dāng)TIM減為0后,CPU自動(dòng)將PRD的值裝入TIM0026hTCR定時(shí)器控制寄存器表2-2 定時(shí)器控制寄存器(TCR)bit概要比特 名稱 功 能15-12 保留 讀出時(shí)為011 Soft 該比特位與10位配合使用以決定定時(shí)器在使用仿真調(diào)試時(shí)狀態(tài)。 Soft=0 當(dāng)進(jìn)入仿真調(diào)試時(shí),定時(shí)器立即停止工作。 Soft=1 當(dāng)計(jì)數(shù)器被減為0后,停止工作。10 Free 該位與11位配合使用以決定定時(shí)器在使用仿真調(diào)試時(shí)狀態(tài)。 Free=0 根據(jù)11比特位決定定時(shí)器狀態(tài)。 Free=1 忽略11比特位,定時(shí)器不受影響。9-6 PSC 定時(shí)器預(yù)置計(jì)數(shù)器。當(dāng)PSC減為0后,CPU自

34、動(dòng)將TDDR裝入,然后TIM開始減1。5 TRB 定時(shí)器復(fù)位。當(dāng)TRB=1時(shí),CPU將PRD寄存器的值裝入TIM寄存器,將TDDR的值裝入PSC4 TSS 定時(shí)器啟停控制位。當(dāng)系統(tǒng)復(fù)位時(shí),TSS被清除,定時(shí)器立刻開始工作。 TSS=0 表示啟動(dòng)定時(shí)器 TSS=1 表示停止定時(shí)器0-3 TDDR 定時(shí)器擴(kuò)展周期。當(dāng)PSC減到0后,CPU自動(dòng)將TDDR的值裝入PSC,然后TIM減 1。所以整個(gè)定時(shí)器的周期寄存器可以有20個(gè)比特(PRD+TDDR)。 從上面的介紹可以看到定時(shí)器實(shí)際上可以有20個(gè)比特的周期寄存器。它對(duì)CLKOUT信號(hào)計(jì)數(shù),先將PSC減1,直到PSC為0,然后用TDDR重新裝入PSC,

35、同時(shí)將TIM減1,直到TIM減為0。這時(shí)CPU發(fā)出TINT中斷,同時(shí)在TOUT引腳輸出一個(gè)脈沖信號(hào),脈沖寬度為CLKOUT一致。然后用PRD重新裝入TIM,重復(fù)下去直到系統(tǒng)或定時(shí)器復(fù)位。因而定時(shí)器中斷的頻率由下面的公式?jīng)Q定: TINT的頻率= 其中tc表示CLKOUT的周期。定時(shí)器當(dāng)前的值可以通過讀取TIM寄存器和TCR寄存器的PSC比特位得到。下面是本實(shí)驗(yàn)中初始化定時(shí)器的程序片段: stm#10h,TCR;停止定時(shí)器stm#2499,PRD;設(shè)置PRD寄存器值為2499,TINT中斷頻率為 ; Foutclk /(2499+1)= 100MHz/2500 = 40 KHzstm#20h,TC

36、R; 重新裝入TIM和PSC,然后啟動(dòng)定時(shí)器 (3)C54X中斷的使用 在C54X中用戶可以通過中斷屏蔽寄存器IMR來決定開放或關(guān)閉一個(gè)中斷請(qǐng)求。圖2-1給出了C5402的IMR寄存器的各個(gè)比特位的定義。 圖2-1 C5402的IMR寄存器其中,HPINT表示HPI接口中斷,INT3-INT0為外部引腳產(chǎn)生的中斷,TXINT和TRINT為TDM串口的發(fā)送和接收中斷,BXINT0和BRINT0為BSP串口的發(fā)送和接收中斷,TINT0為定時(shí)器0中斷。在中斷屏蔽寄存器IMR中,1表示允許CPU響應(yīng)對(duì)應(yīng)的中斷,0表示禁止。當(dāng)然要CPU響應(yīng)中斷,ST1寄存器中的INTM還應(yīng)該為0(允許所有的中斷)。當(dāng)D

37、SP響應(yīng)中斷時(shí),PC指針指向中斷向量表中對(duì)應(yīng)中斷的地址,進(jìn)入中斷服務(wù)子程序。中斷向量表是C54X存放中斷服務(wù)程序的一段內(nèi)存區(qū)域,大小為80H。在中斷向量表中,每一個(gè)中斷占用4個(gè)字的空間,一般情況是將一條跳轉(zhuǎn)或延時(shí)跳轉(zhuǎn)指令存放于此。當(dāng)然,如果中斷服務(wù)程序很短(小于或等于4個(gè)字),可以直接放入該向量表。中斷向量表的位置可以通過修改基地址來改變,其基地址由PMST寄存器中的IPTR(15-7 bits)決定。中斷向量表的各中斷的偏移說明以及中斷向量地址的形成請(qǐng)參考教材以及教材附錄部分。例如C54x復(fù)位后其IPTR全為1,復(fù)位中斷的偏移量為0,所以中斷向量表起始位置在0FF80H,因而復(fù)位后程序從0F

38、F80H開始運(yùn)行。本實(shí)驗(yàn)的初始化程序讀取中斷向量表的啟始地址,然后設(shè)置PMST的高9位,以便DSP能正確響應(yīng)中斷,代碼如下: ld #0,dp;設(shè)置DP頁指針 ssbx intm;關(guān)閉所有中斷 ld #vector, a;讀出中斷向量(地址vector在中斷向量表程序中定義) and #0FF80h, a;保留高9位(IPTR) andm #007Fh, pmst;保留PMST的低7位 or pmst, a; stlm a, pmst;設(shè)置PMST(其中包括IPTR)三、實(shí)驗(yàn)要求基于DSP的定時(shí)器產(chǎn)生2KHz正弦波(采樣率為40KHz或者自定義,但必須滿足采樣定理),采樣CCS圖形查看工具查看

39、產(chǎn)生波形及其頻譜圖。四、實(shí)驗(yàn)條件PC機(jī), DES5402PP-U實(shí)驗(yàn)系統(tǒng)五、調(diào)試及結(jié)果測(cè)試本實(shí)驗(yàn)需要使用C54X匯編語言或C語言實(shí)現(xiàn)數(shù)字振蕩器,并通過CCS提供的圖形顯示窗口觀察輸出信號(hào)波形以及頻譜。實(shí)驗(yàn)分下面幾步完成: (1).根據(jù)確定數(shù)字振蕩器的頻率,計(jì)算并確定系數(shù)。 (2)啟動(dòng)CCS,新建工程文件,如文件名為sinewave.prj。選擇Project菜單中的Add File to Project選項(xiàng),將所編寫的匯編源程序exer2.asm、vec_table.asm和連接命令sinewave.cmd文件依次添加到工程文件中。注意,你可以在添加文件對(duì)話框中選擇顯示不同的文件類型來加快文件

40、選擇速度。你也可以使用鼠標(biāo)右鍵單擊工程文件名(如sinewave.prj)并選擇Add Files項(xiàng)來添加需要的文件。其中,exer2.asm包括初始化代碼和中斷服務(wù)程序,而vec_talbe.asm包含中斷向量表。 (3)選擇Project菜單中的Options選項(xiàng),或使用鼠標(biāo)右鍵單擊工程文件名(如sinewave.prj)并選擇Options項(xiàng)來修改或添加編譯、連接中使用的參數(shù)。例如,選擇Assembler窗口,選擇“Enable Symbolic Debug Infomation”以便使用匯編源代碼級(jí)調(diào)試(你可以在匯編源程序設(shè)置斷點(diǎn)等等)。選擇Linker窗口,在“Output File

41、name”欄中寫入輸出OUT文件的名字,如sine.out,你還可以設(shè)置生成的MAP文件名。 (4)完成編譯、連接,正確生成OUT文件。然后使用File菜單的“Load Program”選項(xiàng),將生成的OUT文件(如sine.out)裝入DSP的片內(nèi)存儲(chǔ)器。這時(shí)CCS將顯示程序的啟始地址_c_int00。 (5)選ViewGraphTime/Frequency打開圖形顯示設(shè)置窗口。在彈出的對(duì)話框中按圖2-2設(shè)置所示,主要修改“Start Address”為y0(y0為生成的正弦波輸出變量);“Acquisition Buffer Size”為1,“DSP Data Type”為“16-bit s

42、igned integer”。圖2-2 CCS圖形查看工具設(shè)置(6)在匯編源程序的中斷服務(wù)程序(_tint)中的“nop”語句處設(shè)置斷點(diǎn)。該行被加亮為洋紅色。選擇DebugAnimate,運(yùn)行程序,觀察輸出波形。數(shù)一數(shù)一個(gè)周期的正弦波有多少個(gè)點(diǎn)?算算頻率是否是2kHz?另外,想想Run和Animate兩種運(yùn)行方式的區(qū)別? (7)用右鍵單擊圖形顯示窗口,并選擇“Proporties”項(xiàng)以便修改顯示屬性。將“Display Type”項(xiàng)改為“FFT Magnitude”以便顯示信號(hào)頻譜。修改“Sampling Rate(Hz)”項(xiàng)為40000,然后退出。注意觀察生成的正弦波頻率。 (8)清除所有斷

43、點(diǎn),關(guān)閉除波形顯示窗口外的所有窗口,并關(guān)閉工程文件。(9)下面我們使用C語言完成本實(shí)驗(yàn)。新建一個(gè)工程文件,如sinewave_c.prj,并添加所編寫的timer.c,vec_table.asm源程序,再添加timer.cmd,再添加C使用的標(biāo)準(zhǔn)庫rts.lib。該文件應(yīng)該在CCS安裝目錄中。例如,若CCS安裝在d:ti下,則rts.lib應(yīng)該在d:tic5400cgtoolslib下。修改編譯、連接選項(xiàng),加入符號(hào)調(diào)試選項(xiàng),修改生成的OUT文件名,如timer.out。 (10).完成編譯、連接,正確生成OUT文件。然后使用File菜單的“Load Program”選項(xiàng),將生成的OUT文件(如

44、timer.out)裝入DSP的片內(nèi)存儲(chǔ)器。這時(shí)CCS將顯示程序的啟始地址_c_int00。 (11). 打開C源程序(timer.c)窗口,在中斷服務(wù)程序(函數(shù)tint())的“con_buf=0;”語句處增加一個(gè)斷點(diǎn)。同樣打開圖形顯示窗口,并將“Start Address”改為buf;“Acquisition Buffer Size”改為128,“Display Data Size”改為128,“DSP Data Type”為“32-bit floating point”。(12)選擇DebugAnimate,運(yùn)行程序,觀察輸出波形。數(shù)一數(shù)一個(gè)周期的正弦波有多少個(gè)點(diǎn)?算算頻率是否是2kHz

45、?同樣用右鍵單擊圖形顯示窗口,顯示信號(hào)頻譜。注意修改“Sampling Rate(Hz)”項(xiàng)為40000,然后退出。注意觀察生成的正弦波頻率。六、實(shí)驗(yàn)報(bào)告要求1、預(yù)習(xí)報(bào)告分析采用數(shù)字信號(hào)處理方法產(chǎn)生正弦波原理,復(fù)習(xí)定時(shí)器工作原理及中斷控制方法,考慮主程序、中斷向量表以及CMD模塊的編寫。2、實(shí)習(xí)記錄根據(jù)實(shí)習(xí)步驟,記錄實(shí)驗(yàn)結(jié)果圖形,考慮顯示圖形的設(shè)置。3、實(shí)驗(yàn)報(bào)告(1)匯出實(shí)驗(yàn)結(jié)果信號(hào)曲線圖及其頻譜圖。(2)進(jìn)行本次實(shí)驗(yàn)總結(jié)。七、思考題(1)本實(shí)驗(yàn)程序產(chǎn)生了一個(gè)2kHz的正弦信號(hào),請(qǐng)修改程序,產(chǎn)生一個(gè)頻率相同的余弦信號(hào)。為了驗(yàn)證產(chǎn)生的COS信號(hào),可以同時(shí)生成SIN和COS信號(hào),然后在兩個(gè)圖形窗口

46、中顯示波形。它們應(yīng)該正好相差/2相位。重新設(shè)計(jì)和實(shí)現(xiàn)一個(gè)數(shù)字振蕩器,采樣頻率改為為20KHz,輸出正弦信號(hào)的頻率為4KHz。使用探針工具,用文件保存產(chǎn)生的正弦波數(shù)據(jù)。(4)在(1)題的基礎(chǔ)上,新建一個(gè)工程文件,使用VC5402的定時(shí)器1產(chǎn)生COS信號(hào),同時(shí)使用定時(shí)器0產(chǎn)生SIN信號(hào)。(5)在CCS中打開連接定位文件sinewave.cmd,看看中斷向量表是如何安排的?并使用MAP文件驗(yàn)證中斷向量表的具體地址。實(shí)驗(yàn)三: BSP串口通信實(shí)現(xiàn) 實(shí)驗(yàn)學(xué)時(shí): 4實(shí)驗(yàn)類型:綜合實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康?、本實(shí)驗(yàn)的主要目的是學(xué)習(xí)C54xx的McBSP串口的控制和使用,并利用VC5402的McBSP1串口實(shí)

47、現(xiàn)數(shù)據(jù)的收發(fā)。2、學(xué)會(huì)編寫串口通信程序,包括串口的初始化和發(fā)、送中斷服務(wù)程序的編寫。二、相關(guān)知識(shí)點(diǎn)串口結(jié)構(gòu)與工作原理、包括串口的初始化和發(fā)、送中斷服務(wù)程序的編寫三、實(shí)驗(yàn)原理、方法和手段(1)McBSP概述 McBSP與外設(shè)進(jìn)行數(shù)據(jù)傳輸是通過(DX)腳來發(fā)送,(RX)腳來接收,通信的時(shí)鐘與幀信號(hào)是由CLKX, CLKR, FSX, and FSR腳來控制。DSP的CPU或DMA從數(shù)據(jù)接收寄存器(DRR1,2)讀取接收數(shù)據(jù),發(fā)送時(shí)向數(shù)據(jù)發(fā)送寄存器(DXR1,2)寫數(shù)據(jù)。數(shù)據(jù)寫入(DXR1,2)后通過傳輸移位寄存器(XSR1,2) 移位輸出到DX上,同樣,從DR上接收的數(shù)據(jù)移位存儲(chǔ)到接收移位寄存器(

48、RSR1,2) 并拷貝到接收緩存寄存器(RBR1,2) ,然后,再由(RBR1,2)拷貝到DRR1,2,DRR1,2就可以由CPU或DMA來讀出。多級(jí)寄存器允許在通信時(shí)內(nèi)部和外部數(shù)據(jù)同時(shí)傳輸。C54XX對(duì)McBSP的控制由16位的控制寄存器實(shí)現(xiàn)。(2) McBSP控制寄存器 在圖3-1中給出了McBSP串口的所有控制寄存器。本實(shí)驗(yàn)使用VC5402的McBSP1串口,下面的說明以McBSP1為例。McBSP每個(gè)串口實(shí)際占用6個(gè)物理地址空間,例如McBSP1串口中數(shù)據(jù)發(fā)送寄存器為兩個(gè)(32bit),地址分別為0 x42和0 x43。本實(shí)驗(yàn)通過0 x43發(fā)送數(shù)據(jù)(16bit)。數(shù)據(jù)接收寄存器為兩個(gè)(

49、32bit),地址分別為0 x40和0 x41。本實(shí)驗(yàn)通過0 x41讀取串口接收數(shù)據(jù)(16bit)??刂萍拇嫫髡加脙蓚€(gè)地址:0 x48和0 x49,而McBSP串口控制寄存器總共有14個(gè),所以在訪問這些控制寄存器時(shí),先將要訪問的寄存器編號(hào)(子地址)寫入地址寄存器寄存器0 x48,然后在將數(shù)據(jù)寫入0 x49或從0 x49讀出相應(yīng)的數(shù)據(jù)。若要訪問另一個(gè)控制寄存器,又得些修改地址寄存器。串口控制寄存器1的詳細(xì)說明(SPCR1):子地址 - 0 x0 SPCR1設(shè)置McBSP串口的數(shù)字環(huán)回模式、 接收符號(hào)擴(kuò)展和校驗(yàn)?zāi)J?、Clock Stop模式、DX是否允許、A-bis 模式、接收中斷模式等,并給出接

50、收同步錯(cuò)誤、接收移位寄存器(RSR1,2)空、接收準(zhǔn)備好等狀態(tài)。本實(shí)驗(yàn)RJUST = 01 ,即接收數(shù)據(jù)不足16BIT時(shí)采用右對(duì)齊且符號(hào)位擴(kuò)展方式,另外接收中斷由RRDY信號(hào)RINTM=00。DLB = 0表示不使用數(shù)字環(huán)路。CLKSTP = 0X 表示時(shí)鐘停止模式,用于非SPI模式。DXENA = 0 表示禁止延時(shí)發(fā)送。ABIS = 0表示不使用A-bis模式。RSYNCERR = 0 表示不檢測(cè)同步錯(cuò)誤。該寄存器初始化值為0 x2000。在啟動(dòng)串口接收工作前應(yīng)將RRST為置1,即該寄存器為0 x2001。圖3-1 McBSP串口控制寄存器圖3-2 串口控制寄存器1串口控制寄存器2的詳細(xì)說明

51、(SPCR2):子地址 - 0 x1 SPCR2設(shè)置McBSP自由運(yùn)行模式、SOFT 模式、發(fā)送中斷模式,并給出發(fā)送同步錯(cuò)誤、發(fā)送移位寄存器(XSR1,2)空、發(fā)送準(zhǔn)備好等狀態(tài)。此外可以進(jìn)行發(fā)送復(fù)位、采樣率發(fā)生器復(fù)位、幀同步發(fā)生電路復(fù)位。本實(shí)驗(yàn)中FREE = 0 ,SOFT = 1 表示若使用仿真器調(diào)試時(shí)串口在發(fā)送完當(dāng)前字后暫停工作。若連續(xù)運(yùn)行,這兩個(gè)BIT位沒有影響。FRST = 0表示幀同步發(fā)生器復(fù)位,該BIT位工作時(shí)應(yīng)設(shè)為1。GRST =0表示采樣率發(fā)生器(即串口工作的時(shí)鐘)電路復(fù)位,工作中若該串口需要提供時(shí)鐘信號(hào)時(shí),應(yīng)設(shè)置為1。XINTM = 00表示串口的發(fā)送中斷由XRDY產(chǎn)生。XS

52、YNCERR = 0表示不檢測(cè)同步錯(cuò)。該寄存器初始化值為0 x100。當(dāng)串口工作時(shí),應(yīng)將XRST為置1,即該寄存器為0 x1c1。圖3-3 串口控制寄存器2(5) 引腳控制寄存器的詳細(xì)說明(PCR):子地址 - 0 x0e PCR設(shè)置McBSP傳輸幀同步模式、接收幀同步模式、發(fā)送時(shí)鐘模式、接收時(shí)鐘模式、發(fā)送幀同步信號(hào)的極性、接收幀同步信號(hào)的極性、發(fā)送時(shí)鐘極性、接收時(shí)鐘極性,并給出CLKS、DX、DR腳的狀態(tài)。此外PCR還定義發(fā)送和接收部分在復(fù)位時(shí)相應(yīng)引腳是否配置為通用 I/O。本實(shí)驗(yàn)中,XIOEN和RIOEN = 0表示DX,FSX,CLKX,DR,F(xiàn)SR,CLKR,CLKS都配置為串口而非通

53、用I/O引腳。FSXM = 1表示發(fā)送幀同步由采樣率發(fā)生器產(chǎn)生(請(qǐng)參考SRGR2寄存器的FSGM位)。FSRM = 0 表示接收幀同步由外部提供,因?yàn)镈ES5402PP實(shí)驗(yàn)板的FSXM與FSRM相連。CLKXM = 1 表示發(fā)送時(shí)鐘由內(nèi)部采樣率發(fā)生器產(chǎn)生。CLKRM = 0 表示接收時(shí)鐘由外部提供,同樣因?yàn)镃LKRM與CLKXM連在一起。FSXP = 1 表示發(fā)送幀同步低有效。FSRP = 1 表示接收幀同步低有效。CLKXP = 1 表示CLKX的上升沿發(fā)送數(shù)據(jù), CLKRP = 0 表示CLKR的下降沿接收數(shù)據(jù)。該寄存器初始化值為0 x0a0e。圖3-4 串口引腳控制寄存器PCR(6) 接

54、收控制寄存器1(RCR1)說明:子地址 - 0 x02RCR1設(shè)置McBSP接收時(shí)第一相(FIRST PHASE)的接收幀長度(從1個(gè)字到128個(gè)字、接收字長度(8、12、16、20、24、32bits)。本實(shí)驗(yàn)中設(shè)置位每幀1個(gè)字,字長16 bits。初始值為0 x0040。圖3-5 串口接收控制寄存器1(7) 接收控制寄存器2(RCR2)說明:子地址 - 0 x03 RCR2設(shè)置McBSP接收時(shí)是否允許第二相(RPHASE=1)。如果允許,設(shè)置McBSP接收時(shí)第二相的接收幀長度(從1個(gè)字到128個(gè)字、接收字長度(8、12、16、20、24、32bits)。此外, RCR2設(shè)置McBSP接收時(shí)

55、的接收壓縮模式、接收同步幀忽略模式、接收數(shù)據(jù)延遲。在本實(shí)驗(yàn)中,RPHASE = 0 表示只使用單相幀,RCOMPAND = 00表示接收數(shù)據(jù)不壓擴(kuò),且高位在前,RFIG = 0 表示不忽略接收幀同步信號(hào)。該寄存器初始化設(shè)置為0 x0040或0 x0。圖3-6 串口接收控制寄存器2 (8) 發(fā)送控制寄存器1(XCR1)說明:子地址 - 0 x04 XCR1設(shè)置McBSP發(fā)送時(shí)第一相(FIRST PHASE)的發(fā)送幀長度(從1個(gè)字到128個(gè)字、發(fā)送字長度(8、12、16、20、24、32bits)。本實(shí)驗(yàn)中設(shè)置位每幀1個(gè)字,字長16 bits。初始值為0 x0040。圖3-7 串口發(fā)送控制寄存器1

56、(9) 發(fā)送控制寄存器2(XCR2)說明:子地址 - 0 x05 XCR2設(shè)置McBSP發(fā)送時(shí)是否允許第二相(XPHASE=1)。如果允許,設(shè)置McBSP時(shí)第二相的發(fā)送幀長度(從1個(gè)字到128個(gè)字、發(fā)送字長度(8、12、16、20、24、32bits)。此外, XCR2設(shè)置McBSP發(fā)送時(shí)的發(fā)送壓縮模式、發(fā)送同步幀忽略模式、發(fā)送數(shù)據(jù)延遲。本實(shí)驗(yàn)不允許使用第二相(XPHASE=0),初始設(shè)置為 0 x0。圖3-8 串口發(fā)送控制寄存器2(10)采樣率發(fā)生器(串口時(shí)鐘產(chǎn)生)寄存器SRGR1:子地址 - 0 x06 采樣率發(fā)生器寄存器1(SRGR1)設(shè)置幀正脈沖寬度和數(shù)據(jù)位時(shí)鐘分頻( CLKG與輸入C

57、LK頻率之比,約定值為1)。本實(shí)驗(yàn)中雖然將FWID設(shè)置為1,即幀同步脈沖寬度=2,但被忽略了(參見后面幀同步發(fā)生控制寄存器設(shè)置)。時(shí)鐘分頻寄存器=200(0 xC8),表示設(shè)置串口時(shí)鐘為CLKG=100M /200=500K Hz。本實(shí)驗(yàn)中設(shè)置為0 x1c8。圖3-9 串口采樣率控制寄存器1(11) 采樣率發(fā)生器(幀同步信號(hào)產(chǎn)生)控制寄存器SRGR2:子地址 - 0 x07 采樣率發(fā)生器寄存器2(SRGR2)設(shè)置采樣率發(fā)生器時(shí)鐘同步模式、CLKS的極性、采樣率發(fā)生器輸入時(shí)鐘選擇、幀周期分頻。本實(shí)驗(yàn)中,GSYNC=0 表示采樣率發(fā)生器是否同步,因CLKSM=1,固該bit不用。CLKSP = 0

58、表示 CLKS的上升沿產(chǎn)生CLKG和FSG。因CLKSM=1該BIT也不用。CLKSM = 1表示采樣率發(fā)生器由CPU時(shí)鐘驅(qū)動(dòng)。FSGM = 0表示幀同步信號(hào)由發(fā)送位移寄存器自動(dòng)產(chǎn)生,忽略FPER和FWID,固FPER =0。所以該寄存器初始化值為0 x2000。圖3-10 串口采樣率控制寄存器2(12)串口的初始化 本實(shí)驗(yàn)的串口初始化包括兩個(gè)部分:串口收發(fā)中斷的設(shè)置和串口寄存器的初始化。根據(jù)前面的介紹,DES5402PP實(shí)驗(yàn)板的串口1設(shè)置為單相幀,字長為16bit,發(fā)送CLOCK由內(nèi)部CPU時(shí)鐘產(chǎn)生,頻率為500KHz,并輸出。同時(shí)串口接收時(shí)鐘也使用該信號(hào)。發(fā)送幀同步信號(hào)由發(fā)送位移寄存器自動(dòng)

59、產(chǎn)生,同時(shí)也提供給串口接收電路。具體設(shè)置參見下面的代碼:;*; The following codes are used to initalize McBSP1 !; When Transmit, this DES5402PP makes CLK,FS ! the other; DES5402PP receives the CLK,FS ! ;* stm #0,MCBSP1_SPSA ; choose SPCR11 stm #2000h,MCBSP1_SPSD; receive sign_extend in DRR stm #1,MCBSP1_SPSA ; choose SPCR20 stm

60、#100h,MCBSP1_SPSD ; stm #2,MCBSP1_SPSA ; choose RCR10 stm #40h,MCBSP1_SPSD ; 16 bits each word stm #3,MCBSP1_SPSA ; choose RCR20 stm #40h,MCBSP1_SPSD stm #4,MCBSP1_SPSA ; choose XCR10 stm #40h,MCBSP1_SPSD ; 16 bits each word stm #5,MCBSP1_SPSA ; choose XCR20 stm #0,MCBSP1_SPSD stm #6,MCBSP1_SPSA ; c

溫馨提示

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

評(píng)論

0/150

提交評(píng)論