湖南工業(yè)大學(xué)DSP實驗 報告_第1頁
湖南工業(yè)大學(xué)DSP實驗 報告_第2頁
湖南工業(yè)大學(xué)DSP實驗 報告_第3頁
湖南工業(yè)大學(xué)DSP實驗 報告_第4頁
湖南工業(yè)大學(xué)DSP實驗 報告_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

試驗一撥碼開關(guān)實驗—、實驗?zāi)康?.了解DSP開發(fā)系統(tǒng)的組成和結(jié)構(gòu)2.了解IO的基本編程方法二、實驗設(shè)備計算機,CCS3.1版本軟件,DSP仿真器,E300實驗箱,2812CPU板(新的)三、實驗原理8位的數(shù)字量輸入(由撥碼開關(guān)產(chǎn)生),當(dāng)撥碼打到靠近LED時為低。相反為高。通過74LS244(可讀)緩沖連接到DSP的數(shù)據(jù)總線的低8位。CPU通過讀指令讀取到撥碼開關(guān)產(chǎn)生的8位輸出的數(shù)字量,然后CPU通過寫指令把讀出的8位數(shù)字量寫入(0x0200)單元內(nèi),使連接到DSP的數(shù)據(jù)總線的低8位的74LS273的輸出端產(chǎn)生高低信號,此時LED燈產(chǎn)生亮滅。當(dāng)對應(yīng)LED燈點亮?xí)r說明輸出為低,熄滅時為高。數(shù)字量輸入輸出單元的資源分配如下:基地址:0000h(當(dāng)CS0為0時分配有效)數(shù)字量分配空間為數(shù)據(jù)空間地址:基地址+0x200(低8位,只讀)撥碼開關(guān)擴展工作原理:說明:74LS244片選號、74LS273片選信號和74LS273復(fù)位信號由E300上CPLD譯碼產(chǎn)生。本實驗使用DSP數(shù)據(jù)總線的低8位。本實驗的程序流程框圖:四、實驗步驟1.2812CPU板上的JUMP1的1和2腳短接,撥碼開關(guān)SW1的第二位置ON。2.E300板上的開關(guān)SW4的第一位置ON,其余OFF;SW5開關(guān)全部置ON;其余開關(guān)全部置OFF。3.運行CodeComposerStudio(CCS)(ccs3.1需要“DEBUG→Connect”)4.用“Project\Open”打開系統(tǒng)項目文件\e300.test\normal\DSP2801x_example\e300_02_swich\Exampla_281_swich.pjt;5.編譯全部文件并裝載\normal\DSP2801x_example\e300_02_swich\Exampla_281_swich.out;6.單擊“Debug\GoMain”跳到主程序的開始;7.單擊“Debug\RUN”運行程序8.任意撥動E300底板上的撥動開關(guān),觀察LED和撥動開關(guān)的對應(yīng)情況。(LED1-LED7分別對應(yīng)DSP數(shù)據(jù)總線的D0-D7);9.單擊“Debug\Halt”暫停持續(xù)運行,開關(guān)將對燈失去控制.10.關(guān)閉所有窗口,本實驗完。五、實驗結(jié)果設(shè)置好CCS的環(huán)境,打開本工程,編譯、下載、運行。調(diào)整數(shù)字輸入輸出單元的開關(guān)K1~K8,觀察LED1~LED8燈亮滅的變化為:撥動LED1~LED8燈相應(yīng)的開關(guān)K1~K8,則對應(yīng)的燈亮滅。修改后的實驗原程序:#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"http://DSP281xExamplesIncludeFilevoidmain(void){unsignedinttemp;temp=0;InitSysCtrl();//初始化PLL,WatchDog,使能外圍時鐘,該初始化文件在"DSP281x_SysCtrl.c"中DINT;//關(guān)閉CPU中斷//InitializePIEcontrolregisterstotheirdefaultstate.//ThedefaultstateisallPIEinterruptsdisabledandflags//arecleared.InitPieCtrl();IER=0x0000;//關(guān)閉中斷和清除所有中斷標(biāo)志IFR=0x0000;//InitializethePIEvectortablewithpointerstotheshellInterrupt//ServiceRoutines(ISR).InitPieVectTable();for(;;){asm("nop"); temp=*(int*)0x2200&0x0007;//讀入0x2200地址的開關(guān)量值并賦給temp switch(temp) {case0x0000: *(int*)0x2200=0x00fe;break; case0x0001: *(int*)0x2200=0x00fd;break;case0x0002: *(int*)0x2200=0x00fb;break; case0x0003: *(int*)0x2200=0x00f7;break; case0x0004: *(int*)0x2200=0x00ef;break; case0x0005: *(int*)0x2200=0x00df;break; case0x0006: *(int*)0x2200=0x00bf;break; case0x0007: *(int*)0x2200=0x007f;break; default:break;} asm("nop");//*(int*)0x2200=temp;//temp值輸出0x2200地址的LED燈 asm("nop");}}實驗二定時器實驗一、實驗?zāi)康?、熟悉F2812的CPU定時器;2、掌握F2812的CPU定時器的控制方法;3、學(xué)會使用CUP定時器中斷方式控制程序流程。二、實驗設(shè)備計算機,CCS3.1版軟件,DSP硬件仿真器,E300實驗箱,2812CPU板。實驗原理說明樣例實驗是采用CPU定時器來定時LED亮滅的。F2812的CPU定時器不同于事件管理器(EVA\EVB)中的通用定時器(GP)。F2812的CPU共有三個定時器,其中,CPU1定時器1和2被保留用作實驗操作系統(tǒng)OS例如DSPBIOS),CPU定時器0可以供用戶使用。定時器的一般操作如下:將周期寄存器PRDH:PRD中的值裝入32位計數(shù)器寄存器TIMI:TIM。然后計數(shù)器寄存器以F2812x的SYSCLKLT速率遞減。當(dāng)計數(shù)器減到0,就會產(chǎn)生一個定時器中斷輸出定時信號(一個中斷脈沖)。下圖為CPU定時器的內(nèi)部結(jié)構(gòu):樣例實驗的程序如下:實驗步驟和內(nèi)容1、F2812CPU板的JUPMI的1和2腳短接,撥碼開關(guān) SW1的第二位置ON;其余OFF。2、E300底板的開關(guān)SW4的第1位置ON,其余位置OFF。其余開關(guān)設(shè)置為OFF;3、運行CCS軟件,調(diào)入樣例程序,裝載并運行;(進入CCS界面后需要點“Debug--Connect”);加載“..\e300_03cpu_timer\Debug\Eample_281x_cpu_timer.out”5、單擊“Debug\Animate”運行,可觀察到LED1~LED8的變化規(guī)律:先LED1,8點亮—LED2,7D點亮—LED1,8熄滅—LED3,6點亮—LED2,7熄滅—LED4,5點亮—LED3,6熄滅—后LED4,5熄滅—L/ED3,6點亮—LED3,6熄滅—LED2,7點亮—LED2,7熄滅—LED1,8點亮。6、單擊“Debug\Halt”,暫停程序運行,LED燈停止閃爍;單擊“RUN”,LED燈又開始閃爍變化;結(jié)束試驗程序修改后的實驗原程序:#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"http://DSP281xExamplesIncludeFileinterruptvoidcpu_timer0_isr(void);voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod);voidmain(void){unsignedinttemp;temp=0;InitSysCtrl();DINT;InitPieCtrl();IER=0x0000;IFR=0x0000;InitPieVectTable();EALLOW;//ThisisneededtowritetoEALLOWprotectedregistersPieVectTable.TINT0=&cpu_timer0_isr;EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregistersInitCpuTimers();//Forthisexample,onlyinitializetheCpuTimersConfigCpuTimer(&CpuTimer0,100,100000);StartCpuTimer0();IER|=M_INT1;PieCtrlRegs.PIEIER1.bit.INTx7=1;EINT;//EnableGlobalinterruptINTMERTM;//EnableGlobalrealtimeinterruptDBGMfor(;;){temp=*(int*)0x2200&0x0001;if(temp==0){if(CpuTimer0.InterruptCount<1){asm("nop"); asm("nop");*(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;}elseif(CpuTimer0.InterruptCount<2){asm("nop"); asm("nop"); *(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<3){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<4){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<5){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<6){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<7){asm("nop"); asm("nop");*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<8){asm("nop");asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<9){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<10){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<11){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<12){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}else{CpuTimer0.InterruptCount=0;}}elseif(temp==1){if(CpuTimer0.InterruptCount<9){asm("nop"); asm("nop");*(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;}elseif(CpuTimer0.InterruptCount<8){asm("nop"); asm("nop"); *(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<3){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<4){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<5){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<6){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<7){asm("nop"); asm("nop");*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<8){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<9){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<10){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<11){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<12){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}else{CpuTimer0.InterruptCount=0;}}}}interruptvoidcpu_timer0_isr(void){CpuTimer0.InterruptCount++;PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;}試驗三鍵盤接口實驗(E300)—、實驗?zāi)康?.了解DSP開發(fā)系統(tǒng)的組成和結(jié)構(gòu)2.了解鍵盤的基本編程方法3.內(nèi)存觀察工具的使用二、實驗設(shè)備計算機,CCS3.1版本軟件,DSP仿真器,E300實驗箱,2812CPU板三、實驗原理本實驗程序由二部分組成:1.由外部中斷2產(chǎn)生中斷信號2.鍵值讀取程序:該部分有兩種方法進行鍵值的判斷。方法1:利用內(nèi)存觀察工具進行觀察方法2:利用LED1-LED8的亮滅對應(yīng)顯示鍵值。a)外部中斷2的應(yīng)用參照實驗二;b)內(nèi)存觀察鍵值:程序中定義了三個變量“W”“row”和“col”?!癢”代表是CPLD中鍵盤的掃描數(shù)值,“row”和“col”分別代表鍵盤的行和列,由行和列可以判定按鍵的位置。上述三個變量可以在觀察窗口中觀察的。c)利用LED燈顯示鍵值原理,參看實驗一。具體的LED燈顯示值以查表的形式讀出,請參看“e300_codec.h”庫文件。本實驗的CPLD地址譯碼說明:基地址:0x2000,當(dāng)?shù)装迤xCS1為低時,分配有效。CPU的數(shù)據(jù)空間:基地址+0x0200LED燈output8外部中斷用XINT2:由CPLD分配,中斷信號由鍵盤產(chǎn)生。中斷下降沿觸發(fā)。KEY_DAY_REG(R):基地址+0x0004;四、實驗步驟和內(nèi)容1.2812CPU板JUMP1的1和2腳短接,撥碼開關(guān)SW1的第二位ON;2.E300板上的開關(guān)SW4的第一位置ON,其余OFF;SW3的第四位置ON其余的SW置OFF;3.運行CodeComposerStudio(CCS)(ccs3.1需要“DEBUG→Connect”);4.打開系統(tǒng)項目文件\e300.test\normal\DSP281x_examples\e300_06_keyinterface\Example_281x_keyled.pjt;5.編譯全部文件并裝載“\Debug\keyled.out”文件;6.單擊“Debug\GoMain”跳到主程序的開始;7.指定位置設(shè)置斷點;View--〉WatchWindow打開變量觀察窗口;將變量“w”“row”和“col”添加到觀察窗口中,改變變量觀察窗口的顯示方式為HEX顯示;點擊“Debug--〉A(chǔ)nimate”全速運行,然后點擊E300板上鍵盤按鍵,觀察窗口中變量變化,同時LED1-LED8燈也相應(yīng)變化,指示鍵值。(注意程序中KEY_E和KEY_F分別代表鍵盤上的“*”和“#”鍵值。十六進制數(shù)代表的意義為:高4位為按鍵的行值,低4位為按鍵的列值。注意:“w”中的低八位表;11.關(guān)閉所有窗口,本實驗完畢。五、實驗程序框圖修改后的實驗原程序:#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"http://DSP281xExamplesIncludeFile#include"e300_codec.h"/****************************************************************/voidinit_xint2(void);interruptvoidxint2_isr(void);//中斷2中斷子程序voidread_data();//讀取數(shù)據(jù)子函數(shù)voidconv(void);//鍵盤數(shù)值轉(zhuǎn)換子函數(shù)interruptvoidcpu_timer0_isr(void);voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod);/************************定義全局變量****************************/unsignedintrow,col,w;inta=0;unsignedinttemp=0;/************************用到的子函數(shù)****************************/voidinit_xint2(){XIntruptRegs.XINT2CR.all=0x0001;//低電平觸發(fā)中斷}interruptvoidxint2_isr()//中斷2中斷子程序{a=1;//開總中斷//AcknowledgeinterrupttoreceivemoreinterruptsfromPIEgroup2PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;}interruptvoidcpu_timer0_isr(void){CpuTimer0.InterruptCount++;//Acknowledgethisinterrupttoreceivemoreinterruptsfromgroup1//CpuTimer0Regs.TCR.bit.TIF=1;PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;}/************************主函數(shù)********************************/voidmain(void){//PLL,WatchDog,enablePeripheralClocks//ThisexamplefunctionisfoundintheDSP281x_SysCtrl.cfile.InitSysCtrl();//DisableCPUinterruptsDINT;//InitializePIEcontrolregisterstotheirdefaultstate.//ThedefaultstateisallPIEinterruptsdisabledandflags//arecleared.InitPieCtrl();//DisableCPUinterruptsandclearallCPUinterruptflags:IER=0x0000;IFR=0x0000;//InitializethePIEvectortablewithpointerstotheshellInterrupt//ServiceRoutines(ISR).InitPieVectTable();EALLOW;//ThisisneededtowritetoEALLOWprotectedregistersPieVectTable.XINT2=&xint2_isr;PieVectTable.TINT0=&cpu_timer0_isr;EDIS;InitCpuTimers();//Forthisexample,onlyinitializetheCpuTimers//ConfigureCPU-Timer0tointerrupteverysecond://100MHzCPUFreq,1secondPeriod(inuSeconds)ConfigCpuTimer(&CpuTimer0,100,100000);StartCpuTimer0();init_xint2();PieCtrlRegs.PIEIER1.all=0x0050;IER|=M_INT1;EINT;//EnableGlobalinterruptINTMERTM;//EnableGlobalrealtimeinterruptDBGMfor(;;){if(a==1)//加軟件斷點{//a=0;temp=*(int*)0x2200&0x0001;if(temp==0){if(CpuTimer0.InterruptCount<1){asm("nop"); asm("nop");*(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;}elseif(CpuTimer0.InterruptCount<2){asm("nop"); asm("nop"); *(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<3){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<4){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<5){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<6){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<7){asm("nop"); asm("nop");*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<8){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<9){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<10){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<11){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<12){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}else{CpuTimer0.InterruptCount=0;}}elseif(temp==1){if(CpuTimer0.InterruptCount<9){asm("nop"); asm("nop");*(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;}elseif(CpuTimer0.InterruptCount<8){asm("nop"); asm("nop"); *(int*)0x2200=0x00fe; *(int*)0x2200=0x007f;*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<3){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<4){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<5){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<6){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<7){asm("nop"); asm("nop");*(int*)0x2200=0x00f7;*(int*)0x2200=0x00ef;}elseif(CpuTimer0.InterruptCount<8){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<9){asm("nop"); asm("nop");*(int*)0x2200=0x00fb;*(int*)0x2200=0x00df;}elseif(CpuTimer0.InterruptCount<10){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}elseif(CpuTimer0.InterruptCount<11){asm("nop"); asm("nop");*(int*)0x2200=0x00fd; *(int*)0x2200=0x00bf;}elseif(CpuTimer0.InterruptCount<12){asm("nop"); asm("nop"); *(int*)0x2200=0x00ff;}else{CpuTimer0.InterruptCount=0;}} read_data();//conv(); }else{}}}實驗建議本實驗程序采用外部中斷的方式來判斷鍵盤是否被按下,除了這種方法外,還可以根據(jù)鍵盤按下標(biāo)志位“KEY_FLAG”,利用查詢方式來編寫程序,“KEY_FLAG”是CPLD內(nèi)部狀態(tài)寄存器中的一個只讀位.CPLD內(nèi)部狀態(tài)寄存器:CPLD_ST試驗四A/D轉(zhuǎn)換實驗(E300)一、實驗?zāi)康?.了解DSP中A/D轉(zhuǎn)換模塊的特點;2.了解A/D轉(zhuǎn)換模塊的原理結(jié)構(gòu);3.掌握A/D轉(zhuǎn)換模塊的使用。二、實驗設(shè)備計算機,DSP仿真器,THRSC-2型實驗箱各一臺。三、實驗原理TMS320F2812的ADC模塊是一個12位分辨率、高達80ns轉(zhuǎn)換時間、具有流水線結(jié)構(gòu)的?!獢?shù)轉(zhuǎn)換器。此轉(zhuǎn)換器的模擬電路包括:前端模擬多路復(fù)用器(MUXs)、采樣/保持電路(S/H)、轉(zhuǎn)換核、電壓調(diào)節(jié)器以及其他模擬支持電路。數(shù)字電路包括:可編程轉(zhuǎn)換序列發(fā)生器、轉(zhuǎn)換結(jié)果寄存器、模擬電路接口、設(shè)備外圍總線接口以及其他片上模塊接口等,可以直接用于電機或運動控制場合。四、實驗內(nèi)容與步驟連接好仿真器、計算機與實驗箱,系統(tǒng)上電,實驗箱電源指示燈亮,仿真器上紅色指示燈亮,系統(tǒng)連接正常。打開CCS3.1軟件。圖1.6.3實驗程序流程圖1.圖1.6.3為A/D實驗程序流程圖:采集電位器電壓。A/D用16個通道采集當(dāng)前電壓值,取平均值,將十六進制數(shù)轉(zhuǎn)換成十進制數(shù),并處理成電壓量輸出給液晶屏顯示,循環(huán)上述操作。2.打開實驗程序dsp2812.1.6-ADC目錄下的工程ADC.pjt,點編譯、下載。按“F5”運行,液晶屏顯示當(dāng)前DSP的ADCINA2(對應(yīng)試驗箱A/D轉(zhuǎn)換單元的ADCINA)通道電壓值,調(diào)節(jié)A/D轉(zhuǎn)換單元的電位器,改變輸入電壓,顯示隨之變化,顯示電壓在0~3.3V之間。3.點“Halt”,停止程序運行,恢復(fù)程序指令初始值,并保存,關(guān)閉所有窗口,實驗完畢。修改后的實驗原程序:#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"http://DSP281xExamplesIncludeFileinterruptvoidadc_isr(void);Uint16LoopCount;Uint16ConversionCount;doubleinput1[256];doubleinput2[256];Uint16 a[4],b[4];Uint16sum1=0,sum2=0voidmain(void){InitSysCtrl();EALLOW;SysCtrlRegs.PLLCR.all=0x8;SysCtrlRegs.HISPCP.all=0x3;//HSPCLK=SYSCLKOUT/6EDIS;DINT;InitPieCtrl();IER=0x0000;IFR=0x0000;InitPieVectTable();EALLOW;//ThisisneededtowritetoEALLOWprotectedregisterPieVectTable.ADCINT=&adc_isr;EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregistersInitAdc();//Forthisexample,inittheADCPieCtrlRegs.PIEIER1.bit.INTx6=1;IER|=M_INT1;//EnableCPUInterrupt1EINT;//EnableGlobalinterruptINTMERTM;//EnableGlobalrealtimeinterruptDBGMLoopCount=0;ConversionCount=0;AdcRegs.ADCTRL1.bit.SEQ_CASC=1;AdcRegs.ADCMAXCONV.all=0x0007;//Setup2conv'sonSEQ1AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//SetupADCINA0as1stSEQ1conv.AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x0;//SetupADCINA2as2ndSEQ1conv.AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x0;AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x0;AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x2;AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x2;AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x2;AdcRegs.ADCCHSELSEQ2.bit.CONV07=0x2;AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;//EnableEVASOCtostartSEQ1AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;//EnableSEQ1interrupt(everyEOS)EvaRegs.T1CMPR=0x0380;//SetupT1comparevalueEvaRegs.T1PR=0x07FF;//SetupperiodregisterEvaRegs.GPTCONA.bit.T1TOADC=1;//EnableEVASOCinEVA01下溢中斷啟動ADCEvaRegs.T1CON.all=0x1042;//Enabletimer1compare(upcountmode)//WaitforADCinterruptfor(;;){*(int*)0x2200=0x0005;LoopCount++;}}interruptvoidadc_isr(void)Uint16i;//,j // while(AdcRegs.ADCST.bit.SEQ1_BSY!=0){}//等待AD轉(zhuǎn)換完成 a[0]=AdcRegs.ADCRESULT0>>4; a[1]=AdcRegs.ADCRESULT1>>4; a[2]=AdcRegs.ADCRESULT2>>4; a[3]=AdcRegs.ADCRESULT3>>4; b[0]=AdcRegs.ADCRESULT4>>4; b[1]=AdcRegs.ADCRESULT5>>4; b[2]=AdcRegs.ADCRESULT6>>4; b[3]=AdcRegs.ADCRESULT7>>4; for(i=0;i<4;i++) { sum1=sum1+a[i]; sum1=sum1/2; } for(i=0;i<4;i++) { sum2=sum2+b[i]; sum2=sum2/2; }input1[ConversionCount]=sum1/4095.0*3;input2[ConversionCount]=sum2/4095.0*3;//Mixing[ConversionCount]=input1[ConversionCount]+input2[ConversionCount];if(ConversionCount==256){ConversionCount=0;//加軟件斷點}elseConversionCount++;//ReinitializefornextADCsequenceAdcRegs.ADCTRL2.bit.RST_SEQ1=1;//ResetSEQ1AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//ClearINTSEQ1bitPieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//AcknowledgeinterrupttoPIEreturn;}實驗結(jié)果波形:

實驗五PWM波形產(chǎn)生實驗一、實驗?zāi)康?.了解PWM波的產(chǎn)生原理;2.掌握PWM波的使用方法。二、實驗設(shè)備計算機,DSP仿真器,THRSC-2型實驗箱,示波器,電機擴展板三、實驗原理1.事件管理器EVA模塊和EVB模塊中分別有3個全比較單元,EVA的3個全比較單元為:比較單元1、2和3;EVB的3個全比較單元為:比較單元4、5和6。每個比較單元都有兩個相應(yīng)的PWM輸出。比較單元的時基由通用定時器1(EVA模塊)和通用定時器3(EVB模塊)提供。當(dāng)比較操作使能時,GP定時器1和3可以工作在它的任何一種計數(shù)模式。3.PWM波形發(fā)生器有以下特征:z有5個獨立的PWM波形輸出,其中3個由比較單元產(chǎn)生,另外2個由GP定時器產(chǎn)生,3個比較單元PWM波形輸出還會產(chǎn)生3個附加的PWM波形輸出,即3個帶可編程死區(qū)控制的比較單元產(chǎn)生獨立的3對輸出。所以每個事件管理器總共有8個PWM波形輸出。z最小的死區(qū)寬度為1個CPU時鐘周期。z可編程的對稱、非對稱以及空間向量PWM波形。zPWM載波頻率的快速變化(具有雙緩沖比較寄存器)。zPWM脈寬的快速變化(具有雙緩沖比較寄存器)。四、實驗內(nèi)容與步驟連接好仿真器、計算機與實驗箱,電機擴展板排線接到實驗箱電機擴展接口上;系統(tǒng)上電,實驗箱電源指示燈亮,仿真器上紅色指示燈亮,系統(tǒng)連接正常。打開CCS3.1軟件。1.打開dsp2812.1.13-PWM目錄下的工程PWM.pjt,點編譯、下載。按“F5”運行,用示波器探頭觀測電機擴展板上的“PWM脈沖測試口”的PWM1、PWM2、PWM3、PWM4、PWM5和PWM6插針。6路PWM波中的PWM1、PWM3、PWM5占空比分別為:1:3、1:1、3:1;PWM2、PWM4、PWM6占空比分別為:3:1、1:1、1:3。采用雙蹤觀察,PWM1和PWM2輸出波形相互對稱,調(diào)寬波形,可以看到由于加入了死區(qū)時間,波形不是完全對稱。PWM3、PWM4和PWM5、PWM6同上。2.用戶可以修改文件“pwm.c”初始化函數(shù)“init_eva()”內(nèi)的初始化設(shè)置:定時器周期值(TIPR)、全比較器值(CMPR1、CMPR2、CMPR3)及死區(qū)控制寄存器(DBTCONA)的第5~7THRSC-2型DSP綜合實驗/開發(fā)系統(tǒng)天煌科技天煌教儀187位等(例如此時定時器初值EvaRegs.T1PR=0xEA8;比較寄存器1的值為EvaRegs.CMPR1=0x3AA;(設(shè)置PWM1為低有效EvaRegs.ACTRA.all=0x0999;設(shè)置死區(qū)定時器為不使能EvaRegs.DBTCONA.all=0x051C;則我們測到的PWM1輸出波形高低占空比為1:3=0x3AA:(0Xea8-0x3AA))。死區(qū)控制寄存器(DBTCONA)的第5~7分別為死區(qū)定時器1、2、3的使能位(用戶可以修改使能位:置1為使能死區(qū)定時器,置0為不使能死區(qū)定時器),用戶可以通過修改死區(qū)控制寄存器(DBTCONA)第5~7位的相應(yīng)位來改變相應(yīng)PWM波帶死區(qū)與不帶死區(qū)的輸出結(jié)果比較。重復(fù)上述操作。(各寄存器詳細(xì)說明參考該程序目錄下的2812_ev.pdf文檔說明)3.點“Halt”,停止程序運行,恢復(fù)程序指令初始值,并保存,關(guān)閉所有窗口,關(guān)閉電源,修改后的實驗原程序:#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"http://DSP281xExamplesIncludeFile//Prototypestatementsforfunctionsfoundwithinthiserruptvoidadc_isr(void);//Globalvariablesusedinthisexample:Uint16LoopCount;Uint16ConversionCount;Uint16input1[256];Uint16input2[256];Uint16Mixing[256];intc=0;//Prototypestatementsforfunctionsfoundwithinthisfile.voidinit_eva(void);//Globalcountsusedinthisexamplevoidmain(void){//InitializeSystemControl://PLL,WatchDog,enablePeripheralClocksInitSysCtrl();//Forthisexample,setHSPCLKtoSYSCLKOUT/6(25Mhzassuming150MhzSYSCLKOUT)EALLOW;SysCtrlRegs.PLLCR.all=0x8;SysCtrlRegs.HISPCP.all=0x3;//HSPCLK=SYSCLKOUT/6EDIS;//InitializeonlyGPAMUXandGPBMUXforthistestEALLOW;//EnablePWMpinsGpioMuxRegs.GPAMUX.all=0x003F;//EVAPWM1-6pinsEDIS;//ClearallinterruptsandinitializePIEvectortable://DisableCPUinterruptsDINT;//InitializePIEcontrolregisterstotheirdefaultstate.InitPieCtrl();//DisableCPUinterruptsandclearallCPUinterruptflags:IER=0x0000;IFR=0x0000;//InitializethePIEvectortablewithpointerstotheshellInterruptInitPieVectTable();EALLOW;//ThisisneededtowritetoEALLOWprotectedregisterPieVectTable.ADCINT=&adc_isr;EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregistersInitAdc();//Forthisexample,inittheADCPieCtrlRegs.PIEIER1.bit.INTx6=1;IER|=M_INT1;//EnableCPUInterrupt1EINT;//EnableGlobalinterruptINTMERTM;//EnableGlobalrealtime

溫馨提示

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

評論

0/150

提交評論