欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      DSP實(shí)驗(yàn)報(bào)告+心得體會(huì)

      時(shí)間:2019-05-12 14:28:45下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《DSP實(shí)驗(yàn)報(bào)告+心得體會(huì)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《DSP實(shí)驗(yàn)報(bào)告+心得體會(huì)》。

      第一篇:DSP實(shí)驗(yàn)報(bào)告+心得體會(huì)

      學(xué)

      實(shí) 驗(yàn) 報(bào) 告

      級(jí)

      07電本(1)班

      學(xué)號(hào)

      2007050344 姓

      名 楊寶輝

      同組人

      獨(dú)立

      實(shí)驗(yàn)日期

      2010-5-18

      室溫

      大氣壓

      成 績(jī)

      基礎(chǔ)實(shí)驗(yàn)

      一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)設(shè)備

      三、實(shí)驗(yàn)原理 浮點(diǎn)數(shù)的表達(dá)和計(jì)算是進(jìn)行數(shù)字信號(hào)處理的基本知識(shí);產(chǎn)生正弦信號(hào)是數(shù)字信號(hào)處理1.一臺(tái)裝有CCS軟件的計(jì)算機(jī); 2.DSP實(shí)驗(yàn)箱的TMS320F2812主控板; 3.DSP硬件仿真器。1.掌握CCS實(shí)驗(yàn)環(huán)境的使用;

      2.掌握用C語言編寫DSP程序的方法。

      中經(jīng)常用到的運(yùn)算;C語言是現(xiàn)代數(shù)字信號(hào)處理表達(dá)的基礎(chǔ)語言和通用語言。寫實(shí)現(xiàn)程序時(shí)需要注意兩點(diǎn):(1)浮點(diǎn)數(shù)的范圍及存儲(chǔ)格式;(2)DSP的C語言與ANSI C語言的區(qū)別。

      四、實(shí)驗(yàn)步驟

      1.打開CCS 并熟悉其界面;

      2.在CCS環(huán)境中打開本實(shí)驗(yàn)的工程(Example_base.pjt),編譯并重建.out 輸出文件,然后通過仿真器把執(zhí)行代碼下載到DSP芯片中;

      3. 把X0 , Y0 和Z0添加到Watch窗口中作為觀察對(duì)象(選中變量名,單擊鼠標(biāo)右鍵,在彈出菜單中選擇“Add Watch Window”命令);

      4. 選擇view->graph->time/frequency…。設(shè)置對(duì)話框中的參數(shù): 其中“Start Address”設(shè)為“sin_value”,“Acquisition buffer size”和“Display Data size”都設(shè)為“100”,并且把“DSP Data Type”設(shè)為“32-bit floating point”,設(shè)置好后觀察信號(hào)序列的波形(sin函數(shù),如圖);

      5. 單擊運(yùn)行;

      6. 觀察三個(gè)變量從初始化到運(yùn)算結(jié)束整個(gè)過程中的變化;觀察正弦波形從初始化到運(yùn)算結(jié)束整個(gè)過程中的變化;

      7. 修改輸入序列的長(zhǎng)度或初始值,重復(fù)上述過程。

      五、實(shí)驗(yàn)心得體會(huì)

      通過本次實(shí)驗(yàn),加深了我對(duì)DSP的認(rèn)識(shí),使我對(duì)DSP實(shí)驗(yàn)的操作有了更進(jìn)一步的理解?;菊莆樟薈CS實(shí)驗(yàn)環(huán)境的使用,并能夠使用C語言進(jìn)行簡(jiǎn)單的DSP程序設(shè)計(jì)。從軟件的安裝到使用軟件進(jìn)行程序設(shè)計(jì)與仿真,鍛煉了自己的動(dòng)手能力,也遇到了不少的坎坷,例如芯片的選擇,不能因?yàn)槁闊┒÷栽摬襟E,否則將會(huì)運(yùn)行出錯(cuò)。

      附錄實(shí)驗(yàn)程序: #include “math.h” #include “stdio.h” #define N 100 #define pi 3.14159

      float sin_value[100];float X0,Y0,Z0;

      void main(void){

      int i;

      for(i=0;i

      sin_value[i]=0;

      X0=0.5;

      /* 0.100 0000 0000 0000 */

      Y0=0.5;

      /* 0.100 0000 0000 0000 */

      Z0=X0*Y0;

      /* 00.01 0000 0000 0000 0000 0000 0000 0000 */

      for(i=0;i

      sin_value[i]=100*(sin(2*pi*i/N));}

      學(xué)

      實(shí) 驗(yàn) 報(bào) 告

      級(jí)

      07電本(1)班

      學(xué)號(hào)

      2007050344姓

      名 楊寶輝 同組人

      獨(dú)立

      實(shí)驗(yàn)日期

      2010-5-20

      室溫

      大氣壓

      成 績(jī)

      數(shù)碼管控制實(shí)驗(yàn)

      一、實(shí)驗(yàn)?zāi)康?1.2.3.熟悉2812的指令系統(tǒng); 熟悉74HC573的使用方法。熟悉DSP的IO操作使用方法。

      二、實(shí)驗(yàn)設(shè)備

      1.一臺(tái)裝有CCS2000軟件的計(jì)算機(jī);

      2.插上2812主控板的DSP實(shí)驗(yàn)箱; 3.DSP硬件仿真器。

      三、實(shí)驗(yàn)原理 此模塊由數(shù)碼管和四個(gè)鎖存器組成。數(shù)碼管為共陰極型的。數(shù)據(jù)由2812模塊的低八位輸入,鎖存器的控制信號(hào)由2812模塊輸出,但經(jīng)由CPLD模塊譯碼后再控制對(duì)應(yīng)的八個(gè)

      四、實(shí)驗(yàn)步驟 1.把2812模塊小板插到大板上;

      2.在CCS2000環(huán)境中打開本實(shí)驗(yàn)的工程編譯Example_7segled.prj,生成輸出文件,通過仿真器把執(zhí)行代碼下載到DSP芯片;

      3.運(yùn)行程序;數(shù)碼管會(huì)顯示1~8的數(shù)字。

      4.參考源代碼自行修改程序改變顯示樣式。

      五、實(shí)驗(yàn)心得體會(huì)

      通過本次實(shí)驗(yàn)中,基本掌握了2812的指令系統(tǒng)的特點(diǎn),并能夠了解并熟悉74HC573的使用方法,進(jìn)一步加深了對(duì)DSP的認(rèn)識(shí)。同時(shí),通過實(shí)驗(yàn)操作DSP的IO操作使用方法,對(duì)于DSP的IO操作可以熟悉的運(yùn)用,學(xué)到更多的知識(shí)。

      程序見附錄:

      #include “include/DSP281x_Device.h”

      // DSP281x Headerfile Include File #include “include/DSP281x_Examples.h”

      // DSP281x Examples Include File // Prototype statements for functions found within this file.void delay_loop(void);void Gpio_select(void);// Global variable for this example short codetab[17]= {0x4020,0x6cc0,0x5800,0x4840,0x6440,0xC040,0xC000,0x4cc0, 0x4000,0x4040,0x4400,0xE000,0xD080,0xE800,0xD000,0xD400,0xffff};main(){

      short i;

      // Step 1.Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP281x_SysCtrl.c file.InitSysCtrl();

      // Specific clock setting for this example:

      EALLOW;

      EDIS;// Step 2.Initalize GPIO:

      // This example function is found in the DSP281x_Gpio.c file and // illustrates how to set the GPIO to it's default state.// InitGpio();// Skipped for this example // For this example use the following configuration:

      Gpio_select();// Step 3.Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts

      DINT;// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags // are cleared.// This function is found in the DSP281x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:

      IER = 0x0000;

      IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines(ISR).// This will populate the entire table, even if the interrupt // is not used in this example.This is useful for debug purposes.// The shell ISR routines are found in DSP281x_DefaultIsr.c.// This function is found in DSP281x_PieVect.c.InitPieVectTable();// Step 4.Initialize all the Device Peripherals: // This function is found in DSP281x_InitPeripherals.c // InitPeripherals();// Not required for this example

      InitXintf();// For this example, init the Xintf // Step 5.User specific code, enable interrupts:

      GpioDataRegs.GPADAT.all=0;

      Reg01=0x00;

      GpioDataRegs.GPADAT.all=0;

      Reg02=0x00;

      GpioDataRegs.GPADAT.all=0;

      Reg03=0x00;

      GpioDataRegs.GPADAT.all=0;

      Reg04=0x00;

      while(1)

      {

      for(i=0;i<17;i++)

      {

      GpioDataRegs.GPADAT.all

      Reg01=0x00;

      delay_loop();

      }

      for(i=0;i<17;i++)

      {

      GpioDataRegs.GPADAT.all

      Reg02=0x00;

      delay_loop();

      }

      for(i=0;i<17;i++)

      {

      GpioDataRegs.GPADAT.all

      Reg03=0x00;

      delay_loop();

      }

      for(i=0;i<17;i++)

      {

      GpioDataRegs.GPADAT.all

      Reg04=0x00;

      delay_loop();

      }

      } }

      void delay_loop(){

      =~codetab[i];=~codetab[i];=~codetab[i];=~codetab[i];

      short

      i,j;

      for(i = 0;i < 32767;i++)

      {for(j = 0;j < 10;j++);} }

      void Gpio_select(void){

      Uint16 var1;

      Uint16 var2;

      Uint16 var3;

      var1= 0x0000;

      var2= 0xFFFF;

      var3= 0x0000;

      EALLOW;GpioMuxRegs.GPAMUX.all=var1;

      // sets GPIO Muxs as I/Os

      // sets GPIO DIR as outputs

      // sets the Input qualifier values

      GpioMuxRegs.GPBMUX.all=var1;

      GpioMuxRegs.GPDMUX.all=var1;

      GpioMuxRegs.GPFMUX.all=var1;

      GpioMuxRegs.GPEMUX.all=var1;

      GpioMuxRegs.GPGMUX.all=var1;

      GpioMuxRegs.GPADIR.all=var2;

      // GPIO PORTs as output

      // GPIO DIR select GPIOs as output

      GpioMuxRegs.GPBDIR.all=var2;

      GpioMuxRegs.GPDDIR.all=var2;

      GpioMuxRegs.GPEDIR.all=var2;

      GpioMuxRegs.GPFDIR.all=var2;

      GpioMuxRegs.GPGDIR.all=var2;

      GpioMuxRegs.GPAQUAL.all=var3;

      GpioMuxRegs.GPBQUAL.all=var3;

      GpioMuxRegs.GPDQUAL.all=var3;

      GpioMuxRegs.GPEQUAL.all=var3;

      EDIS;} // No more.// Set GPIO input qualifier values 龍

      學(xué)

      實(shí) 驗(yàn) 報(bào) 告

      級(jí)

      07電本(1)班

      學(xué)號(hào)

      2007050344 姓

      名 楊寶輝

      同組人

      獨(dú)立

      實(shí)驗(yàn)日期

      2010-5-25

      室溫

      大氣壓

      成 績(jī)

      交通燈控制實(shí)驗(yàn)

      一、實(shí)驗(yàn)?zāi)康?/p>

      1.熟悉2812的指令系統(tǒng); 2.熟悉74HC573的使用方法。3.熟悉DSP的IO操作使用方法。

      二、實(shí)驗(yàn)設(shè)備

      1.一臺(tái)裝有CCS2000軟件的計(jì)算機(jī);

      2.插上2812主控板的DSP實(shí)驗(yàn)箱; 3.DSP硬件仿真器。

      三、實(shí)驗(yàn)原理

      此模塊由發(fā)光二極管和一個(gè)鎖存器組成。

      數(shù)據(jù)由2812模塊的低八位輸入,鎖存器的控制信號(hào)由2812模塊輸出,但經(jīng)由CPLD模塊譯碼后再控制鎖存器。

      四、實(shí)驗(yàn)步驟

      1.把2812模塊小板插到大板上;

      2.在CCS2000環(huán)境中打開本實(shí)驗(yàn)的工程編譯Example_crossled.prj,生成輸出文件,通過仿真器把執(zhí)行代碼下載到DSP芯片; 3.運(yùn)行程序,發(fā)光二極管按交通燈方式點(diǎn)亮熄滅。

      4.參考源代碼,自行修改程序,實(shí)現(xiàn)不同的交通燈控制方式。

      五、實(shí)驗(yàn)心得體會(huì)

      通過次實(shí)驗(yàn)中,使我掌握了 2812的指令系統(tǒng)和74HC573的使用方法。同時(shí),使我掌握了DSP的IO操作使用方法。

      實(shí)驗(yàn)程序見附錄: 附錄:

      #include “include/DSP281x_Device.h”

      // DSP281x Headerfile Include File #include “include/DSP281x_Examples.h”

      // DSP281x Examples Include File // Prototype statements for functions found within this file.void delay_loop(void);void Gpio_select(void);// Global variable for this example main(){ // Step 1.Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP281x_SysCtrl.c file.InitSysCtrl();

      // Specific clock setting for this example:

      EALLOW;

      EDIS;// Step 2.Initalize GPIO:

      // This example function is found in the DSP281x_Gpio.c file and // illustrates how to set the GPIO to it's default state.// InitGpio();// Skipped for this example

      // For this example use the following configuration:

      Gpio_select();

      // Step 3.Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts

      DINT;// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags // are cleared.// This function is found in the DSP281x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:

      IER = 0x0000;

      IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines(ISR).// This will populate the entire table, even if the interrupt // is not used in this example.This is useful for debug purposes.// The shell ISR routines are found in DSP281x_DefaultIsr.c.// This function is found in DSP281x_PieVect.c.InitPieVectTable();// Step 4.Initialize all the Device Peripherals: // This function is found in DSP281x_InitPeripherals.c // InitPeripherals();// Not required for this example

      InitXintf();// For this example, init the Xintf // Step 5.User specific code, enable interrupts:

      while(1)

      {

      GpioDataRegs.GPADAT.all

      =0xdc80;

      Reg00=0x00;

      delay_loop();

      GpioDataRegs.GPADAT.all

      =0xec40;

      Reg00=0x00;

      delay_loop();

      GpioDataRegs.GPADAT.all

      =0xf0c0;

      Reg00=0x00;

      delay_loop();

      GpioDataRegs.GPADAT.all

      =0xec40;

      Reg00=0x00;

      delay_loop();

      } }

      void delay_loop(){

      short

      i,j;

      for(i = 0;i < 32767;i++)

      {for(j = 0;j < 50;j++);} } void Gpio_select(void){

      Uint16 var1;

      Uint16 var2;

      Uint16 var3;

      var1= 0x0000;

      var2= 0xFFFF;

      var3= 0x0000;

      EALLOW;GpioMuxRegs.GPAMUX.all=var1;

      // sets GPIO Muxs as I/Os // sets GPIO DIR as outputs // sets the Input qualifier values

      GpioMuxRegs.GPBMUX.all=var1;

      GpioMuxRegs.GPDMUX.all=var1;

      GpioMuxRegs.GPFMUX.all=var1;

      GpioMuxRegs.GPEMUX.all=var1;

      GpioMuxRegs.GPGMUX.all=var1;

      GpioMuxRegs.GPADIR.all=var2;// GPIO PORTs as output

      // GPIO DIR select GPIOs as output

      GpioMuxRegs.GPBDIR.all=var2;

      GpioMuxRegs.GPDDIR.all=var2;

      GpioMuxRegs.GPEDIR.all=var2;

      GpioMuxRegs.GPFDIR.all=var2;

      GpioMuxRegs.GPGDIR.all=var2;

      GpioMuxRegs.GPAQUAL.all=var3;

      GpioMuxRegs.GPBQUAL.all=var3;

      GpioMuxRegs.GPDQUAL.all=var3;

      GpioMuxRegs.GPEQUAL.all=var3;

      EDIS;

      }

      // Set GPIO input qualifier values //============================= // No more.//=============================

      學(xué)

      實(shí) 驗(yàn) 報(bào) 告

      級(jí)

      07電本(1)班

      學(xué)號(hào)

      2007050344 姓

      名 楊寶輝

      同組人

      獨(dú)立

      實(shí)驗(yàn)日期

      2010-05-27

      室溫

      大氣壓

      成 績(jī)

      步進(jìn)電機(jī)控制實(shí)驗(yàn)

      一、實(shí)驗(yàn)?zāi)康?1.2.二、實(shí)驗(yàn)設(shè)備

      1.一臺(tái)裝有CCS軟件的計(jì)算機(jī); 2.DSP實(shí)驗(yàn)箱(插上電機(jī)模塊);

      3.DSP硬件仿真器; 4.示波器。

      三、實(shí)驗(yàn)原理

      步進(jìn)電機(jī)工作原理,給步進(jìn)脈沖電機(jī)就轉(zhuǎn),不給脈沖電機(jī)就不轉(zhuǎn),步進(jìn)脈沖的頻率越高,步進(jìn)控制電機(jī)就轉(zhuǎn)的越快;改變各相的通電方式可以改變電機(jī)的運(yùn)行方式;改變通電順序可以控制步進(jìn)電機(jī)的運(yùn)行方式;改變通電順序可以控制步進(jìn)電機(jī)的正反轉(zhuǎn)。

      步進(jìn)電機(jī)的控制問題可以總結(jié)為兩點(diǎn): 1.產(chǎn)生工作方式需要的時(shí)序脈沖;

      2.控制步進(jìn)電機(jī)的速度使它始終遵循加速-勻速-減速的規(guī)律工作。掌握2812通用IO口的使用方法; 掌握2812對(duì)步進(jìn)電機(jī)的控制。

      對(duì)于I/O口有二類寄存器:

      1.控制寄存器和數(shù)據(jù)方向寄存器,使用方法如下:首先確定引腳的功能,即IO控制器寄存器,為1表示引腳功能是原模塊的功能,否則為IO功能。

      2.如果引腳被配置為IO功能,就需要確定它的方向:輸入還是輸出。為1表示是輸出引腳,否則是輸入引腳。對(duì)于IO功能的輸入或輸出是通過讀寫相應(yīng)的數(shù)據(jù)方向寄存器來實(shí)現(xiàn)。輸入引腳對(duì)應(yīng)讀操作;輸出引腳對(duì)應(yīng)寫操作。

      四、實(shí)驗(yàn)步驟

      1.連接好DSP開發(fā)系統(tǒng);

      2.本實(shí)驗(yàn)工程文件(Example_stepmotor.pjt),編譯,下載程序到DSP; 運(yùn)行程序,用觀察步進(jìn)電機(jī)運(yùn)行方向和速度的變化;

      五、實(shí)驗(yàn)心得體會(huì)

      通過本次實(shí)驗(yàn)對(duì)于2812通用的IO口進(jìn)一步熟悉實(shí)驗(yàn),使我基本掌握了2812通用的IO口的使用方法,加深了對(duì)IO口的認(rèn)識(shí)。本次實(shí)驗(yàn)的主要目的是通過2812對(duì)步進(jìn)機(jī)的的控制,開始對(duì)于程序的設(shè)計(jì)沒有頭緒,通過查閱步進(jìn)機(jī)控制的原理,結(jié)合有關(guān)資料才正式設(shè)計(jì)出程序,基本掌握了2812對(duì)步進(jìn)機(jī)的控制,也更加熟悉了對(duì)DSP程序的設(shè)計(jì),受益匪淺。

      程序:

      #include “include/DSP281x_Device.h”

      // DSP281x Headerfile Include File #include “include/DSP281x_Examples.h”

      // DSP281x Examples Include File // Prototype statements for functions found within this file.void delay_loop(void);void Gpio_select(void);// Global variable for this example short codetab[17]= {0x0001,0x0002,0x0004,0x0008,0x0008,0x0004,0x0002,0x0001, 0x0001,0x0002,0x0004,0x0008,0x0001,0x0002,0x0004,0x0008,0x0000};main(){

      short i,j;// Step 1.Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP281x_SysCtrl.c file.InitSysCtrl();// Specific clock setting for this example:

      EALLOW;

      EDIS;// Step 2.Initalize GPIO:

      // This example function is found in the DSP281x_Gpio.c file and // illustrates how to set the GPIO to it's default state.// InitGpio();// Skipped for this example // For this example use the following configuration:

      Gpio_select();// Step 3.Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts

      DINT;// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags // are cleared.// This function is found in the DSP281x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:

      IER = 0x0000;

      IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines(ISR).// This will populate the entire table, even if the interrupt // is not used in this example.This is useful for debug purposes.// The shell ISR routines are found in DSP281x_DefaultIsr.c.// This function is found in DSP281x_PieVect.c.InitPieVectTable();// Step 4.Initialize all the Device Peripherals: // This function is found in DSP281x_InitPeripherals.c // InitPeripherals();// Not required for this example

      InitXintf();// For this example, init the Xintf // Step 5.User specific code, enable interrupts:

      GpioDataRegs.GPADAT.all=0;

      Reg06=0x00;

      while(1)

      {

      for(j=0;j<400;j++)

      {

      for(i=0;i<4;i++)

      {

      GpioDataRegs.GPADAT.all

      Reg06=0x00;

      delay_loop();

      }

      }

      for(j=0;j<400;j++)

      {

      for(i=4;i<8;i++)

      {

      GpioDataRegs.GPADAT.all

      Reg06=0x00;

      delay_loop();

      }

      }

      } } void delay_loop(){

      short

      i,j;

      for(i = 0;i < 1000;i++)

      {for(j = 0;j < 10;j++);} } void Gpio_select(void){

      Uint16 var1;

      Uint16 var2;

      =codetab[i];=codetab[i];

      Uint16 var3;

      var1= 0x0000;

      var2= 0xFFFF;

      var3= 0x0000;

      EALLOW;GpioMuxRegs.GPAMUX.all=var1;

      // sets GPIO Muxs as I/Os

      // sets GPIO DIR as outputs

      // sets the Input qualifier values

      GpioMuxRegs.GPBMUX.all=var1;

      GpioMuxRegs.GPDMUX.all=var1;

      GpioMuxRegs.GPFMUX.all=var1;

      GpioMuxRegs.GPEMUX.all=var1;

      GpioMuxRegs.GPGMUX.all=var1;GpioMuxRegs.GPADIR.all=var2;

      // GPIO PORTs as output

      // GPIO DIR select GPIOs as output

      GpioMuxRegs.GPBDIR.all=var2;

      GpioMuxRegs.GPDDIR.all=var2;

      GpioMuxRegs.GPEDIR.all=var2;

      GpioMuxRegs.GPFDIR.all=var2;

      GpioMuxRegs.GPGDIR.all=var2;

      GpioMuxRegs.GPAQUAL.all=var3;

      GpioMuxRegs.GPBQUAL.all=var3;

      GpioMuxRegs.GPDQUAL.all=var3;

      GpioMuxRegs.GPEQUAL.all=var3;

      EDIS;

      }

      // Set GPIO input qualifier values //============================= // No more.//=============================

      學(xué)

      實(shí) 驗(yàn) 報(bào) 告

      級(jí)

      07電本(1)班

      學(xué)號(hào)

      2007050344 姓

      名 楊寶輝

      同組人 獨(dú)立

      實(shí)驗(yàn)日期

      2010-6-1

      室溫

      大氣壓

      成 績(jī)

      直流電機(jī)控制實(shí)驗(yàn)

      一、實(shí)驗(yàn)?zāi)康?1.2.二、實(shí)驗(yàn)設(shè)備 1.一臺(tái)裝有CCS軟件的計(jì)算機(jī); 2.DSP實(shí)驗(yàn)箱;

      要求學(xué)生掌握2812 PWM的使用方法; 掌握2812對(duì)直流電機(jī)的控制。

      3.DSP硬件仿真器; 4.示波器。

      三、實(shí)驗(yàn)原理

      電機(jī)模塊的原理圖如下

      四、實(shí)驗(yàn)步驟

      3.連接好DSP開發(fā)系統(tǒng);

      4.本實(shí)驗(yàn)工程文件(Example_dcmotor.pjt),編譯,下載程序到DSP; 5.運(yùn)行程序,用觀察直流電機(jī)運(yùn)行方向和速度的變化;

      五、實(shí)驗(yàn)心得體會(huì)

      通過本次實(shí)驗(yàn),認(rèn)識(shí)了PWM的使用方法,通過親身體驗(yàn),初步掌握了2812對(duì)PWM的控制使用方法,加深了對(duì)PWM的認(rèn)識(shí)。本次實(shí)驗(yàn)的主要目的是通過2812對(duì)直流電機(jī)的控制,開始對(duì)于程序的設(shè)計(jì)沒有頭緒,通過查閱直流電機(jī)的原理,結(jié)合有關(guān)資料才正式設(shè)計(jì)出程序,基本掌握了2812對(duì)直流電機(jī)的控制,也更加熟悉了對(duì)DSP程序的設(shè)計(jì),受益匪淺。

      附:實(shí)驗(yàn)程序:

      #include “include/DSP281x_Device.h”

      // DSP281x Headerfile Include File #include “include/DSP281x_Examples.h”

      // DSP281x Examples Include File // Prototype statements for functions found within this file.void init_eva(void);void init_evb(void);void delay_loop();// Global variable for this example main()

      { unsigned short i;// Step 1.Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP281x_SysCtrl.c file.InitSysCtrl();// Specific clock setting for this example:

      EALLOW;

      EDIS;// Step 2.Initalize GPIO:

      // This example function is found in the DSP281x_Gpio.c file and // illustrates how to set the GPIO to it's default state.// InitGpio();// Skipped for this example // Initialize only GPAMUX and GPBMUX for this test

      EALLOW;

      // Enable PWM pins

      GpioMuxRegs.GPAMUX.all = 0x00FF;// EVA PWM 1-6 pins

      GpioMuxRegs.GPBMUX.all = 0x00FF;// EVB PWM 7-12 pins

      EDIS;// Step 3.Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts

      DINT;// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags // are cleared.// This function is found in the DSP281x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:

      IER = 0x0000;

      IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines(ISR).// This will populate the entire table, even if the interrupt // is not used in this example.This is useful for debug purposes.// The shell ISR routines are found in DSP281x_DefaultIsr.c.// This function is found in DSP281x_PieVect.c.InitPieVectTable();// Step 4.Initialize all the Device Peripherals: // This function is found in DSP281x_InitPeripherals.c // InitPeripherals();// Not required for this example

      InitXintf();// For this example, init the Xintf // Step 5.User specific code, enable interrupts:

      init_eva();

      //init_evb();

      while(1)

      {

      for(i=0;i<65535;i+=1000)

      {

      Reg06=0;

      EvbRegs.CMPR6 = i;

      delay_loop();

      }

      } } void delay_loop(){

      short

      i,j;

      for(i = 0;i < 1000;i++)

      {for(j = 0;j < 10;j++);} } void init_eva(){ // EVA Configure T1PWM, T2PWM, PWM1-PWM6 // Initalize the timers

      // Initalize EVA Timer1

      EvaRegs.T1PR = 0xFFFF;

      // Timer1 period

      EvaRegs.T1CMPR = 0x3C00;

      // Timer1 compare

      EvaRegs.T1CNT = 0x0000;

      // Timer1 counter

      // TMODE = continuous up/down

      // Timer enable

      // Timer compare enable

      EvaRegs.T1CON.all = 0x1042;

      // Initalize EVA Timer2

      EvaRegs.T2PR = 0x0FFF;

      // Timer2 period

      EvaRegs.T2CMPR = 0x03C0;

      // Timer2 compare

      EvaRegs.T2CNT = 0x0000;

      // Timer2 counter

      // TMODE = continuous up/down

      // Timer enable

      // Timer compare enable

      EvaRegs.T2CON.all = 0x1042;

      // Setup T1PWM and T2PWM

      // Drive T1/T2 PWM by compare logic

      EvaRegs.GPTCONA.bit.TCMPOE = 1;

      // Polarity of GP Timer 1 Compare = Active low

      EvaRegs.GPTCONA.bit.T1PIN = 1;

      // Polarity of GP Timer 2 Compare = Active high

      EvaRegs.GPTCONA.bit.T2PIN = 2;

      // Enable compare for PWM1-PWM6

      //EvaRegs.CMPR1 = 0x0C00;

      //EvaRegs.CMPR2 = 0x3C00;

      EvaRegs.CMPR3 = 0xFC00;

      // Compare action control.Action that takes place

      // on a cmpare event

      // output pin 1 CMPR1active low

      // output pin 3 CMPR2active low

      // output pin 5 CMPR3active low

      EvaRegs.ACTRA.all = 0x0666;

      EvaRegs.DBTCONA.all = 0x0000;// Disable deadband

      EvaRegs.COMCONA.all = 0xA600;}

      void init_evb(){ // EVB Configure T3PWM, T4PWM and PWM7-PWM12 // Step 1active high

      // output pin 2 CMPR4active high

      // output pin 4 CMPR5active high

      // output pin 6 CMPR6x000 0000 0011 0000

      EDIS;// Step 3.Initialize PIE vector table:

      // The PIE vector table is initialized with pointers to shell Interrupt

      // Service Routines(ISR).The shell routines are found in DSP281x_DefaultIsr.c.// Insert user specific ISR code in the appropriate shell ISR routine in

      // the DSP28_DefaultIsr.c file.// Disable and clear all CPU interrupts:

      DINT;IER = 0x0000;IFR = 0x0000;

      // Initialize Pie Control Registers To Default State:

      // This function is found in the DSP281x_PieCtrl.c file.// InitPieCtrl();PIE is not used for this example

      // Initialize the PIE Vector Table To a Known State:

      // This function is found in DSP281x_PieVect.c.// This function populates the PIE vector table with pointers

      // to the shell ISR functions found in DSP281x_DefaultIsr.c.InitPieVectTable();

      // Enable CPU and PIE interrupts

      // This example function is found in the DSP281x_PieCtrl.c file.EnableInterrupts();// Step 4.Initialize all the Device Peripherals to a known state:

      // This function is found in DSP281x_InitPeripherals.c

      // InitPeripherals();skip this for SCI tests

      // Step 5.User specific functions, Reassign vectors(optional), Enable Interrupts:

      LoopCount = 0;

      ErrorCount = 0;

      scia_fifo_init();

      // Initialize the SCI FIFO

      scia_loopback_init();// Initalize SCI for digital loop back

      // Note: Autobaud lock is not required for this example

      // Send a character starting with 0

      SendChar = 0;

      // Step 6.Send Characters forever starting with 0x00 and going through // 0xFF.After sending each, check the recieve buffer for the correct value for(;;)

      { scia_xmit(SendChar);

      while(SciaRegs.SCIFFRX.bit.RXFIFST!=1){ } // wait for XRDY =1 for empty state

      // Check received character

      ReceivedChar = SciaRegs.SCIRXBUF.all;

      if(ReceivedChar!= SendChar)error(1);

      // Move to the next character and repeat the test

      SendChar++;

      // Limit the character to 8-bits

      SendChar &= 0x00FF;

      LoopCount++;

      if(LoopCount==256)

      {

      LoopCount=0;

      SciaRegs.SCICCR.bit.LOOPBKENA =0;// Disable loop back

      SciaRegs.SCICTL1.all =0x0023;

      // Relinquish SCI from Reset while((ReceivedChar = SciaRegs.SCIRXBUF.all)!=0x0d);scia_loopback_init();// Initalize SCI for digital loop back

      }

      } }

      // Step 7.Insert all local Interrupt Service Routines(ISRs)and functions here: void error(int ErrorFlag){

      ErrorCount++;//

      asm(“

      ESTOP0”);// Uncomment to stop the test here //

      for(;;);} // Test 1,SCIA DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity void scia_loopback_init(){

      // Note: Clocks were turned on to the SCIA peripheral

      // in the InitSysCtrl()function

      SciaRegs.SCICCR.all =0x0007;

      // 1 stop bit, No loopback

      // No parity,8 char bits,// async mode, idle-line protocol SciaRegs.SCICTL1.all =0x0003;// enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKE

      SciaRegs.SCICTL2.all =0x0003;SciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;

      SciaRegs.SCIHBAUD

      =0x0001;

      SciaRegs.SCILBAUD

      =0x00e7;

      } // Transmit a character from the SCI' void scia_xmit(int a){

      SciaRegs.SCITXBUF=a;}

      // Initalize the SCI FIFO void scia_fifo_init()

      SciaRegs.SCICCR.bit.LOOPBKENA =1;// Enable loop back

      SciaRegs.SCICTL1.all =0x0023;

      // Relinquish SCI from Reset

      {

      SciaRegs.SCIFFTX.all=0xE040;

      SciaRegs.SCIFFRX.all=0x204f;

      SciaRegs.SCIFFCT.all=0x0;}

      //============================= // No more.//=============================

      第二篇:dsp實(shí)驗(yàn)報(bào)告心得體會(huì)

      TMS320F2812x DSP原理及應(yīng)用技術(shù)實(shí)驗(yàn)心得體會(huì)

      1.設(shè)置環(huán)境時(shí)分為軟件設(shè)置和硬件設(shè)置,根據(jù)實(shí)驗(yàn)的需要設(shè)置,這次實(shí)驗(yàn)只是軟件仿真,可以不設(shè)置硬件,但是要為日后的實(shí)驗(yàn)做準(zhǔn)備,還是要學(xué)習(xí)和熟悉硬件設(shè)置的過程。

      2.在設(shè)置硬件時(shí),不是按實(shí)驗(yàn)書上的型號(hào)選擇,而是應(yīng)該按照實(shí)驗(yàn)設(shè)備上的型號(hào)去添加。

      3.不管是硬件還是軟件的設(shè)置,都應(yīng)該將之前設(shè)置好的刪去,重新添加。設(shè)置好的配置中只能有一項(xiàng)。

      4.CCS可以工作在純軟件仿真環(huán)境中,就是由軟件在PC機(jī)內(nèi)存中構(gòu)造一個(gè)虛擬的DSP環(huán)境,可以調(diào)試、運(yùn)行程序。但是一般無法構(gòu)造DSP中的外設(shè),所以軟件仿真通常用于調(diào)試純軟件算法和進(jìn)行效率分析等。5.這次實(shí)驗(yàn)采用軟件仿真,不需要打開電源箱的電源。

      6.在軟件仿真工作時(shí),無需連接板卡和仿真器等硬件。

      7.執(zhí)行write_buffer一行時(shí)。如果按F10執(zhí)行程序,則程序在mian主函數(shù)中運(yùn)行,如果按F11,則程序進(jìn)入write_buffe函數(shù)內(nèi)部的程序運(yùn)行。8.把str變量加到觀察窗口中,點(diǎn)擊變量左邊的“+”,觀察窗口可以展開結(jié)構(gòu)變量,就可以看到結(jié)構(gòu)體變量中的每個(gè)元素了。

      9.在實(shí)驗(yàn)時(shí),顯示圖形出現(xiàn)問題,不能顯示,后來在Graph Title 把Input的大寫改為input,在對(duì)volume進(jìn)行編譯執(zhí)行后,就可以看到顯示的正弦波圖形了。10.在修改了實(shí)驗(yàn)2-1的程序后,要重新編譯、連接執(zhí)行程序,并且必須對(duì).OUT文件進(jìn)行重新加載,因?yàn)榇藭r(shí).OUT文件已經(jīng)改變了。如果不重新加載,那么修改執(zhí)行程序后,其結(jié)果將不會(huì)改變。

      11.再觀察結(jié)果時(shí),可將data和data1的窗口同時(shí)打開,這樣可以便于比較,觀察結(jié)果。

      12.通過這次實(shí)驗(yàn),對(duì)TMS320F2812x DSP軟件仿真及調(diào)試有了初步的了解與認(rèn)識(shí),因?yàn)樽鰧?shí)驗(yàn)的時(shí)候都是按照實(shí)驗(yàn)指導(dǎo)書按部就班的,與真正的理解和掌握還是有些距離的。但是這也為我們?nèi)蘸筮\(yùn)用這些知識(shí)打下了基礎(chǔ),我覺得實(shí)驗(yàn)中遇到的問題,不要急于問老師或者同學(xué),先自己想辦法分析原因,想辦法解決,這樣對(duì)自身的提高更多吧。通過做實(shí)驗(yàn),把學(xué)習(xí)的知識(shí)利用起來,也對(duì)這門課程更加有興趣了。

      組員:葉孝璐 馮煥芬 鄭瑋儀 龐露露

      2012年4月10號(hào)

      第三篇:DSP實(shí)驗(yàn)報(bào)告

      實(shí)驗(yàn)0 實(shí)驗(yàn)設(shè)備安裝才CCS調(diào)試環(huán)境 實(shí)驗(yàn)?zāi)康模?/p>

      按照實(shí)驗(yàn)講義操作步驟,打開CCS軟件,熟悉軟件工作環(huán)境,了解整個(gè)工作環(huán)境內(nèi)容,有助于提高以后實(shí)驗(yàn)的操作性和正確性。實(shí)驗(yàn)步驟:

      以演示實(shí)驗(yàn)一為例:

      1. 使用配送的并口電纜線連接好計(jì)算機(jī)并口與實(shí)驗(yàn)箱并口,打開實(shí)驗(yàn)箱電源;

      2.啟動(dòng)CCS,點(diǎn)擊主菜單“Project->Open”在目錄“C5000QuickStartsinewave”下打開工程文件sinewave.pjt,然后點(diǎn)擊主菜單“Project->Build”編譯,然后點(diǎn)擊主菜單“File->Load Program”裝載debug目錄下的程序sinewave.out;

      3. 打開源文件exer3.asm,在注釋行“set breakpoint in CCS!!”語句的NOP處單擊右鍵彈出菜單,選擇“Toggle breakpoint”加入紅色的斷點(diǎn),如下圖所示;

      4. 點(diǎn)擊主菜單“View->Graph->Time/Frequency…”,屏幕會(huì)出現(xiàn)圖形窗口設(shè)置對(duì)話框

      5. 雙擊Start Address,將其改為y0;雙擊Acquisition Buffer Size,將其改為1;DSP Data Type設(shè)置成16-bit signed integer,如下圖所示;

      6. 點(diǎn)擊主菜單“Windows->Tile Horizontally”,排列好窗口,便于觀察

      7. 點(diǎn)擊主菜單“Debug->Animate”或按F12鍵動(dòng)畫運(yùn)行程序,即可觀察到實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      通過對(duì)演示實(shí)驗(yàn)的練習(xí),讓自己更進(jìn)一步對(duì)CCS軟件的運(yùn)行環(huán)境、編譯過程、裝載過程、屬性設(shè)置、動(dòng)畫演示、實(shí)驗(yàn)結(jié)果的觀察有一個(gè)醒目的了解和熟悉的操作方法。熟悉了DSP實(shí)驗(yàn)箱基本模塊。讓我對(duì)DSP課程產(chǎn)生了濃厚的學(xué)習(xí)興趣,課程學(xué)習(xí)和實(shí)驗(yàn)操作結(jié)合為一體的學(xué)習(xí)體系,使我更好的領(lǐng)悟到DSP課程的實(shí)用性和趣味性。實(shí)驗(yàn)二 基本算數(shù)運(yùn)算

      2.1 實(shí)驗(yàn)?zāi)康暮鸵?/p>

      加、減、乘、除是數(shù)字信號(hào)處理中最基本的算術(shù)運(yùn)算。DSP 中提供了大量的指令來

      實(shí)現(xiàn)這些功能。本實(shí)驗(yàn)學(xué)習(xí)使用定點(diǎn)DSP 實(shí)現(xiàn)16 位定點(diǎn)加、減、乘、除運(yùn)算的基本方法

      和編程技巧。本實(shí)驗(yàn)的演示文件為exer1.out。

      2.2 實(shí)驗(yàn)原理 定點(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)表示20,D1 位表示21,次高位(D14)表示214。實(shí)現(xiàn) 16 位定點(diǎn)加法

      C54X 中提供了多條用于加法的指令,如ADD,ADDC,ADDM 和ADDS。其中

      ADDS 用于無符號(hào)數(shù)的加法運(yùn)算,ADDC 用于帶進(jìn)位的加法運(yùn)算(如32 位擴(kuò)展精度加

      法),而ADDM 專用于立即數(shù)的加法。實(shí)現(xiàn) 16 位定點(diǎn)減法

      C54X 中提供了多條用于減法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于無符號(hào)數(shù)的減法運(yùn)算,SUBB 用于帶進(jìn)位的減法運(yùn)算(如32 位擴(kuò)展精度的減法),而SUBC 為移位減,DSP 中的除法就是用該指令來實(shí)現(xiàn)的。實(shí)現(xiàn) 16 位定點(diǎn)整數(shù)乘法

      在C54X 中提供了大量的乘法運(yùn)算指令,其結(jié)果都是32 位,放在A 或B 寄存器

      中。乘數(shù)在C54X 的乘法指令很靈活,可以是T 寄存器、立即數(shù)、存貯單元和A 或B 寄存器的高16 位。實(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é)果。6 實(shí)現(xiàn) 16 位定點(diǎn)整數(shù)除法

      在 C54X 中沒有提供專門的除法指令,一般有兩種方法來完成除法。一種是用乘法

      來代替,除以某個(gè)數(shù)相當(dāng)于乘以其倒數(shù),所以先求出其倒數(shù),然后相乘。這種方法對(duì)于

      除以常數(shù)特別適用。另一種方法是使用SUBC 指令,重復(fù)16 次減法完成除法運(yùn)算。實(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ù)。

      2.3 實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)需要使用C54X 匯編語言實(shí)現(xiàn)加、減、乘、除的基本運(yùn)算,并通過DES 的存 貯器顯示窗口觀察結(jié)果。1 編寫實(shí)驗(yàn)程序代碼 用 ccs simulator 調(diào)試運(yùn)行并觀察結(jié)

      2.4 實(shí)驗(yàn)結(jié)果

      1、加法結(jié)果

      2、乘法結(jié)果

      3、減法結(jié)果

      4、除

      2.5 思考題(0.5、0.25)

      實(shí)驗(yàn)三 C54X的浮點(diǎn)數(shù)的算術(shù)運(yùn)

      一、實(shí)驗(yàn)?zāi)康?練習(xí)TMS320C54X 匯編程序的編寫與調(diào)試方法,重點(diǎn)練習(xí)C54X 程序流程控制的方法。學(xué)習(xí)并掌握應(yīng)用 TMS320C54X 來進(jìn)行浮點(diǎn)數(shù)的各種算術(shù)運(yùn)算的算法實(shí)現(xiàn)。練習(xí)并掌握 TMS320C54X 的匯編語言的匯編指令系統(tǒng)的使用方法,重點(diǎn)練習(xí)具有C54X 特點(diǎn)的一些在功能上有所擴(kuò)展的特殊指令,并了解這些指令在進(jìn)行算術(shù)運(yùn)算或各種控制時(shí)所帶來的方便。練習(xí)并掌握用 CCS 調(diào)試程序的一些基本操作。二.實(shí)驗(yàn)原理 1 浮點(diǎn)數(shù)的表示方法

      在定點(diǎn)運(yùn)算中,小數(shù)點(diǎn)是在一個(gè)特定的固定位置。例如,如果一個(gè) 32-bit 的數(shù)把小數(shù)點(diǎn)放在最高有效位(也就是符號(hào)位)之后,那么就只有分?jǐn)?shù)(絕對(duì)值小于1)才能被顯示。在定點(diǎn)運(yùn)

      算系統(tǒng)中,雖然在硬件上實(shí)現(xiàn)簡(jiǎn)單,但是表示的操作數(shù)的動(dòng)態(tài)范圍要受到限制。3 浮點(diǎn)數(shù)運(yùn)算的步驟

      程序代碼分成四個(gè) ASM 文件輸入,通過編譯生成.obj 文件,連接生成.out 文件后就可以在DES320PP-U 實(shí)驗(yàn)系統(tǒng)上調(diào)試運(yùn)行(先要?jiǎng)?chuàng)建一個(gè)工程文件,然后加入四個(gè)工程文件,并且一起編譯,連接。因?yàn)槊總€(gè)文件都對(duì)下一個(gè)文件作了引用)。步驟如下:

      a.首先啟動(dòng) setup CCS C5000,在其中設(shè)置目前需要的CCS 的工作狀態(tài)為C54xxsimulator,保存這一設(shè)置并退出。然后再啟動(dòng)CCS 實(shí)驗(yàn)系統(tǒng)軟件CCS C5000。

      b.在下拉菜單中選擇“File”->“Load Program”以裝入所要調(diào)試的程序fc.out,這時(shí),在反匯編窗口中能看到程序的源代碼。

      c.在下拉菜單中選擇“View”->“CPU Registers”->“CPU Register”,可以看見在CCS 界面下部份會(huì)出現(xiàn)CPU 中的相關(guān)寄存器;選擇“View”->“Memory…”,在彈出的“Memory Window Options”窗口中選擇要觀察的區(qū)域?yàn)閿?shù)據(jù)區(qū),地址開始為0x80h,然后就可以看見出現(xiàn)一個(gè)Data Memory 窗口,其中顯示了從0x80h 開始的.bss 區(qū)。

      d.在反匯編窗口中需要觀察的地方設(shè)置斷點(diǎn):在這條指令處雙擊將其點(diǎn)為紅色即可。比如在加法程序中有指令nop 的位置都可以加一個(gè)斷點(diǎn)。

      e.在下拉菜單中選擇“調(diào)試”——“連續(xù)運(yùn)行”(或直接點(diǎn)擊“運(yùn)行程序”按鈕)運(yùn)行浮點(diǎn)數(shù)程序。如果編寫程序時(shí)在計(jì)算完畢后遇到一個(gè)斷點(diǎn),那么程序到此會(huì)自動(dòng)停止。

      f.當(dāng)示范程序在第一個(gè)斷點(diǎn)處停下來時(shí),此時(shí)就可以看見程序初始化后的情況:被加數(shù)12.0 以浮點(diǎn)數(shù)的格式放在內(nèi)存區(qū)0x08a-0x08b 中,其值為4140h 和0000h。加數(shù)12.0 放在內(nèi)存區(qū)0x08c-0x08d 中,其值也為4140h 和0000h。

      g.再點(diǎn)擊“運(yùn)行程序”按鈕,之后程序會(huì)在下一個(gè)斷點(diǎn)處停下來,這時(shí)可以看見被加數(shù)被格式轉(zhuǎn)換后的變量op1hm、op1lm 和op1se 的值在內(nèi)存區(qū)0x084-0x086 中,分別為00c0h、0000h 和0082h。同樣加數(shù)被格式轉(zhuǎn)換后的變量op2se、op2hm 和op2lm的值在內(nèi)存區(qū)0x087-0x089 中,分別為0082h、00c0h 和0000h。

      h.再點(diǎn)擊“運(yùn)行程序”按鈕,程序停下來時(shí)就可以觀察到在存儲(chǔ)器窗口中表示結(jié)果的變量rlthm、rltlm、rltsign 和rltexp 的值在內(nèi)存區(qū)0x080-0x083 中,其值分別為0040h、0000h、0180h 和0083h。

      i.這時(shí)可以看到 A 寄存器中的值為AH=41c0h,AL=0000h 這就是最后的以浮點(diǎn)數(shù)的格式表示的結(jié)果值24(=12+12)。加法運(yùn)算到此結(jié)束。

      j.繼續(xù)點(diǎn)擊“運(yùn)行程序”按鈕,當(dāng)程序再次停下來時(shí)就可以看見在A 寄存器中顯示的13.0 與12.0 進(jìn)行減法運(yùn)算的結(jié)果:AH=3f80h,AL=0000h。這是用浮點(diǎn)數(shù)格式表示的數(shù)1(=13-12)。減法運(yùn)算的程序到此結(jié)束。

      k.繼續(xù)點(diǎn)擊“運(yùn)行程序”按鈕,當(dāng)程序再次停下來時(shí)就可以看見在A 寄存器中顯示的12.0 與12.0 進(jìn)行乘法運(yùn)算的結(jié)果:AH=4310h,AL=0000h。這是用浮點(diǎn)數(shù)格式表示的數(shù)144(=12*12)。乘法運(yùn)算的程序到此結(jié)束。

      l.繼續(xù)點(diǎn)擊“運(yùn)行程序”按鈕,當(dāng)程序再次停下來時(shí)就可以看見在A 寄存器中顯示的12.0 與4.0 進(jìn)行除法運(yùn)算的結(jié)果:AH=4040h,AL=0000h。這是用浮點(diǎn)數(shù)格式表示的數(shù)3(=12/4)。至此加、減、乘、除四種運(yùn)算都運(yùn)行完畢。

      m.如果程序運(yùn)行不正確,請(qǐng)檢查源程序是否有誤,必要時(shí)可以在源程序中多插入斷點(diǎn)語句。程序在執(zhí)行到斷點(diǎn)語句時(shí)自動(dòng)暫停,此時(shí)可以通過檢查各個(gè)寄存器中的值以及內(nèi)存單元中的值來判斷程序執(zhí)行是否正確。

      三.在 CCS 的C54xx simulator 上調(diào)試觀察實(shí)驗(yàn)結(jié)果

      浮點(diǎn)加法斷點(diǎn)一:

      浮點(diǎn)加法斷點(diǎn)二:

      浮點(diǎn)加法斷點(diǎn)三:

      浮點(diǎn)減法

      浮點(diǎn)數(shù)乘法

      浮點(diǎn)數(shù)除法

      四 心得體會(huì)

      通過學(xué)習(xí)C54X的浮點(diǎn)數(shù)的算術(shù)運(yùn)算,以及實(shí)驗(yàn)結(jié)果的觀察,使我了解了浮點(diǎn)數(shù)運(yùn)算的原理,學(xué)習(xí)并掌握用TMS320C54X來進(jìn)行浮點(diǎn)數(shù)的各種算術(shù)運(yùn)算的算法實(shí)現(xiàn)。實(shí)驗(yàn)四用定時(shí)器實(shí)現(xiàn)數(shù)字振蕩器

      實(shí)驗(yàn)四 用定時(shí)器實(shí)現(xiàn)數(shù)字振蕩器

      4.1 實(shí)驗(yàn)?zāi)康?/p>

      在數(shù)字信號(hào)處理中,會(huì)經(jīng)常使用到正弦/余弦信號(hào)。通常的方法是將某個(gè)頻率的正弦/余弦值預(yù)先計(jì)算出來后制成一個(gè)表,DSP 工作時(shí)僅作查表運(yùn)算即可。在本實(shí)驗(yàn)中將介紹另一種獲得正弦/余弦信號(hào)的方法,即利用數(shù)字振蕩器用疊代方法產(chǎn)生正弦信號(hào)。本實(shí)驗(yàn)除了學(xué)習(xí)數(shù)字振蕩器的DSP 實(shí)現(xiàn)原理外,同時(shí)還學(xué)習(xí)C54X 定時(shí)器使用以及中斷服務(wù)程序編寫。另外,在本實(shí)驗(yàn)中我們將使用匯編語言和C 語言分別完成源程序的編寫。

      4.2

      本實(shí)驗(yàn)利用定時(shí)器產(chǎn)生一個(gè) 2kHz 的正弦信號(hào)。定時(shí)器被設(shè)置成每25uS 產(chǎn)生一次中斷(等效于采樣速率為40K)。利用該中斷,在中斷服務(wù)程序中用疊代算法計(jì)算出一個(gè)SIN值,并利用CCS 的圖形顯示功能查看波形。

      4.3 實(shí)驗(yàn)原理 數(shù)字振蕩器原理

      sinkωT,其

      z 變換為

      H(z=

      其中,A=2cosωT, B=-1, C=sinωT。設(shè)初始條件為0,求出上式的反Z 變換得:

      y[k]=Ay[k-1]+By[k-2]+Cx[k-1] 2 C54X 的定時(shí)器操作

      C54X 的片內(nèi)定時(shí)器利用CLKOUT 時(shí)鐘計(jì)數(shù),用戶使用三個(gè)寄存器(TIM,PRD,TCR)來控制定時(shí)器,參見表4-1。在表4-2 中列出了定時(shí)器控制寄存器的各個(gè)比特位的具體定義?!甐C5402 的另一個(gè)定時(shí)器(定時(shí)器1)的控制寄存器分別為:0x30

      TIM1),0x31(PRD1),0x32(TCR1)。C54X 中斷的使用

      C54X 中用戶可以通過中斷屏蔽寄存器 IMR 來決定開放或關(guān)閉一個(gè)中斷請(qǐng)求。圖 4-1 給出了 C5402 的 IMR 寄存器的各個(gè)比特位的定義。

      圖 4-1 ‘C5402 的IMR 寄存器

      其中,表示HPI 接口中斷,INT3-INT0 為外部引腳產(chǎn)生的中斷,TXINT 和TRINT 為TDM 串口的發(fā)送和接收中斷,BXINT0 和BRINT0 BSP 串口的發(fā)送和接收中斷,14

      為定時(shí)器 0 中斷。在中斷屏蔽寄存器 IMR 中,1 表示允許 CPU 響應(yīng)對(duì)應(yīng)的中斷,0 表示禁止。當(dāng)然要 CPU 響應(yīng)中斷,INTM 還應(yīng)該為 0(允許所有的中斷)。

      本實(shí)驗(yàn)的初始化程序讀取中斷向量表的啟始地址,然后設(shè)置的高

      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)

      4.4 實(shí)驗(yàn)內(nèi)容

      C54X 匯編語言或C 語言實(shí)現(xiàn)數(shù)字振蕩器,并通過CCS 提供的圖形顯示窗口觀察出信號(hào)波形以及頻譜。實(shí)驗(yàn)分下面幾步完成: 根據(jù)確定數(shù)字振蕩器的頻率,確定系數(shù)。2 啟動(dòng) CCS,新建工程文件。

      選擇 Project 菜單中的Options 選項(xiàng),或使用鼠標(biāo)右鍵單擊工程文件名(如sinewave.pjt)并選擇build options 項(xiàng)來修改或添加編譯、連接中使用的參數(shù)。選擇Linker Output Filename”欄中寫入輸出OUT 文件的名字,如sine.out,你還可以設(shè)置生成的MAP 文件名。4 完成編譯、連接,正確生成OUT 文件。5 選 View→Graph→

      5…打開圖形顯示設(shè)置窗口。在匯編源程序的中斷服務(wù)程序(_tint)中的“nop”語句處設(shè)置斷點(diǎn)。用右鍵單擊圖形顯示窗口,并選擇“Proporties”項(xiàng)以便修改顯示屬性。清除所有斷點(diǎn),關(guān)閉除波形顯示窗口外的所有窗口,并關(guān)閉工程文件。完成編譯、連接,正確生成OUT 文件。

      10打開 C 源程序(timer.c)窗口,在中斷服務(wù)程序(函數(shù)tint()的“con_buf=0

      Start Address ”改為 buf ;“ Acquisition Buffer Size ”改為“ Display Data Size 128,“DSP DataType”為“32-bit floating point”

      11選擇 Debug→Animate,運(yùn)行程序,觀察輸出波形。

      第四篇:DSP實(shí)驗(yàn)報(bào)告

      實(shí)驗(yàn)0 實(shí)驗(yàn)設(shè)備安裝才CCS調(diào)試環(huán)境

      實(shí)驗(yàn)?zāi)康模?/p>

      按照實(shí)驗(yàn)講義操作步驟,打開CCS軟件,熟悉軟件工作環(huán)境,了解整個(gè)工作環(huán)境內(nèi)容,有助于提高以后實(shí)驗(yàn)的操作性和正確性。實(shí)驗(yàn)步驟:

      以演示實(shí)驗(yàn)一為例:

      1. 使用配送的并口電纜線連接好計(jì)算機(jī)并口與實(shí)驗(yàn)箱并口,打開實(shí)驗(yàn)箱電源; 2.啟動(dòng)CCS,點(diǎn)擊主菜單“Project->Open”在目錄“C5000QuickStartsinewave”下打開工程文件sinewave.pjt,然后點(diǎn)擊主菜單“Project->Build”編譯,然后點(diǎn)擊主菜單“File->Load Program”裝載debug目錄下的程序sinewave.out;

      3. 打開源文件exer3.asm,在注釋行“set breakpoint in CCS!!”語句的NOP處單擊右鍵彈出菜單,選擇“Toggle breakpoint”加入紅色的斷點(diǎn),如下圖所示; 4. 點(diǎn)擊主菜單“View->Graph->Time/Frequency?”,屏幕會(huì)出現(xiàn)圖形窗口設(shè)置對(duì)話框

      5. 雙擊Start Address,將其改為y0;雙擊Acquisition Buffer Size,將其改為1;DSP Data Type設(shè)置成16-bit signed integer,如下圖所示;

      6. 點(diǎn)擊主菜單“Windows->Tile Horizontally”,排列好窗口,便于觀察

      7. 點(diǎn)擊主菜單“Debug->Animate”或按F12鍵動(dòng)畫運(yùn)行程序,即可觀察到實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      通過對(duì)演示實(shí)驗(yàn)的練習(xí),讓自己更進(jìn)一步對(duì)CCS軟件的運(yùn)行環(huán)境、編譯過程、裝載過程、屬性設(shè)置、動(dòng)畫演示、實(shí)驗(yàn)結(jié)果的觀察有一個(gè)醒目的了解和熟悉的操作方法。熟悉了DSP實(shí)驗(yàn)箱基本模塊。讓我對(duì)DSP課程產(chǎn)生了濃厚的學(xué)習(xí)興趣,課程學(xué)習(xí)和實(shí)驗(yàn)操作結(jié)合為一體的學(xué)習(xí)體系,使我更好的領(lǐng)悟到DSP課程的實(shí)用性和趣味性。

      實(shí)驗(yàn)二 基本算數(shù)運(yùn)算

      2.1 實(shí)驗(yàn)?zāi)康暮鸵?/p>

      加、減、乘、除是數(shù)字信號(hào)處理中最基本的算術(shù)運(yùn)算。DSP 中提供了大量的指令來 實(shí)現(xiàn)這些功能。本實(shí)驗(yàn)學(xué)習(xí)使用定點(diǎn)DSP 實(shí)現(xiàn)16 位定點(diǎn)加、減、乘、除運(yùn)算的基本方法 和編程技巧。本實(shí)驗(yàn)的演示文件為exer1.out。

      2.2 實(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)表示20,D1 位表示21,次高位(D14)表示214。

      2)實(shí)現(xiàn) 16 位定點(diǎn)加法

      C54X 中提供了多條用于加法的指令,如ADD,ADDC,ADDM 和ADDS。其中

      ADDS 用于無符號(hào)數(shù)的加法運(yùn)算,ADDC 用于帶進(jìn)位的加法運(yùn)算(如32 位擴(kuò)展精度加 法),而ADDM 專用于立即數(shù)的加法。

      3)實(shí)現(xiàn) 16 位定點(diǎn)減法

      C54X 中提供了多條用于減法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于無符號(hào)數(shù)的減法運(yùn)算,SUBB 用于帶進(jìn)位的減法運(yùn)算(如32 位擴(kuò)展精度的減法),而SUBC 為移位減,DSP 中的除法就是用該指令來實(shí)現(xiàn)的。

      4)實(shí)現(xiàn) 16 位定點(diǎn)整數(shù)乘法

      在C54X 中提供了大量的乘法運(yùn)算指令,其結(jié)果都是32 位,放在A 或B 寄存器 中。乘數(shù)在C54X 的乘法指令很靈活,可以是T 寄存器、立即數(shù)、存貯單元和A 或B 寄存器的高16 位。

      5)實(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é)果。

      6)實(shí)現(xiàn) 16 位定點(diǎn)整數(shù)除法

      在 C54X 中沒有提供專門的除法指令,一般有兩種方法來完成除法。一種是用乘法 來代替,除以某個(gè)數(shù)相當(dāng)于乘以其倒數(shù),所以先求出其倒數(shù),然后相乘。這種方法對(duì)于 除以常數(shù)特別適用。另一種方法是使用SUBC 指令,重復(fù)16 次減法完成除法運(yùn)算。

      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ù)。

      2.3 實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)需要使用C54X 匯編語言實(shí)現(xiàn)加、減、乘、除的基本運(yùn)算,并通過DES 的存 貯器顯示窗口觀察結(jié)果。

      1)編寫實(shí)驗(yàn)程序代碼

      2)用 ccs simulator 調(diào)試運(yùn)行并觀察結(jié)

      2.4 實(shí)驗(yàn)結(jié)果

      1、加法結(jié)果

      2、乘法結(jié)果

      3、減法結(jié)果

      4、除2.5 思考題(0.5、0.25)實(shí)驗(yàn)三 C54X的浮點(diǎn)數(shù)的算術(shù)運(yùn)

      一、實(shí)驗(yàn)?zāi)康?/p>

      1)練習(xí)TMS320C54X 匯編程序的編寫與調(diào)試方法,重點(diǎn)練習(xí)C54X 程序流程控制的方法。2)學(xué)習(xí)并掌握應(yīng)用 TMS320C54X 來進(jìn)行浮點(diǎn)數(shù)的各種算術(shù)運(yùn)算的算法實(shí)現(xiàn)。

      3)練習(xí)并掌握 TMS320C54X 的匯編語言的匯編指令系統(tǒng)的使用方法,重點(diǎn)練習(xí)具有C54X 特點(diǎn)的一些在功能上有所擴(kuò)展的特殊指令,并了解這些指令在進(jìn)行算術(shù)運(yùn)算或各種控制時(shí)所帶來的方便。

      4)練習(xí)并掌握用 CCS 調(diào)試程序的一些基本操作。

      二.實(shí)驗(yàn)原理

      1)浮點(diǎn)數(shù)的表示方法

      在定點(diǎn)運(yùn)算中,小數(shù)點(diǎn)是在一個(gè)特定的固定位置。例如,如果一個(gè) 32-bit 的數(shù)把小數(shù)點(diǎn)放在最高有效位(也就是符號(hào)位)之后,那么就只有分?jǐn)?shù)(絕對(duì)值小于1)才能被顯示。在定點(diǎn)運(yùn)算系統(tǒng)中,雖然在硬件上實(shí)現(xiàn)簡(jiǎn)單,但是表示的操作數(shù)的動(dòng)態(tài)范圍要受到限制。

      3)浮點(diǎn)數(shù)運(yùn)算的步驟

      程序代碼分成四個(gè) ASM 文件輸入,通過編譯生成.obj 文件,連接生成.out 文件后就可以在DES320PP-U 實(shí)驗(yàn)系統(tǒng)上調(diào)試運(yùn)行(先要?jiǎng)?chuàng)建一個(gè)工程文件,然后加入四個(gè)工程文件,并且一起編譯,連接。因?yàn)槊總€(gè)文件都對(duì)下一個(gè)文件作了引用)。步驟如下:

      a.首先啟動(dòng) setup CCS C5000,在其中設(shè)置目前需要的CCS 的工作狀態(tài)為C54xxsimulator,保存這一設(shè)置并退出。然后再啟動(dòng)CCS 實(shí)驗(yàn)系統(tǒng)軟件CCS C5000。

      b.在下拉菜單中選擇“File”->“Load Program”以裝入所要調(diào)試的程序fc.out,這時(shí),在反匯編窗口中能看到程序的源代碼。

      c.在下拉菜單中選擇“View”->“CPU Registers”->“CPU Register”,可以看見在CCS 界面下部份會(huì)出現(xiàn)CPU 中的相關(guān)寄存器;選擇“View”->“Memory…”,在彈出的“Memory Window Options”窗口中選擇要觀察的區(qū)域?yàn)閿?shù)據(jù)區(qū),地址開始為0x80h,然后就可以看見出現(xiàn)一個(gè)Data Memory 窗口,其中顯示了從0x80h 開始的.bss 區(qū)。

      d.在反匯編窗口中需要觀察的地方設(shè)置斷點(diǎn):在這條指令處雙擊將其點(diǎn)為紅色即可。比如在加法程序中有指令nop 的位置都可以加一個(gè)斷點(diǎn)。

      e.在下拉菜單中選擇“調(diào)試”——“連續(xù)運(yùn)行”(或直接點(diǎn)擊“運(yùn)行程序”按鈕)運(yùn)行浮點(diǎn)數(shù)程序。如果編寫程序時(shí)在計(jì)算完畢后遇到一個(gè)斷點(diǎn),那么程序到此會(huì)自動(dòng)停止。

      f.當(dāng)示范程序在第一個(gè)斷點(diǎn)處停下來時(shí),此時(shí)就可以看見程序初始化后的情況:被加數(shù)12.0 以浮點(diǎn)數(shù)的格式放在內(nèi)存區(qū)0x08a-0x08b 中,其值為4140h 和0000h。加數(shù)12.0 放在內(nèi)存區(qū)0x08c-0x08d 中,其值也為4140h 和0000h。g.再點(diǎn)擊“運(yùn)行程序”按鈕,之后程序會(huì)在下一個(gè)斷點(diǎn)處停下來,這時(shí)可以看見被加數(shù)被格式轉(zhuǎn)換后的變量op1hm、op1lm 和op1se 的值在內(nèi)存區(qū)0x084-0x086 中,分別為00c0h、0000h 和0082h。同樣加數(shù)被格式轉(zhuǎn)換后的變量op2se、op2hm 和op2lm的值在內(nèi)存區(qū)0x087-0x089 中,分別為0082h、00c0h 和0000h。

      h.再點(diǎn)擊“運(yùn)行程序”按鈕,程序停下來時(shí)就可以觀察到在存儲(chǔ)器窗口中表示結(jié)果的變量rlthm、rltlm、rltsign 和rltexp 的值在內(nèi)存區(qū)0x080-0x083 中,其值分別為0040h、0000h、0180h 和0083h。

      i.這時(shí)可以看到 A 寄存器中的值為AH=41c0h,AL=0000h 這就是最后的以浮點(diǎn)數(shù)的格式表示的結(jié)果值24(=12+12)。加法運(yùn)算到此結(jié)束。

      j.繼續(xù)點(diǎn)擊“運(yùn)行程序”按鈕,當(dāng)程序再次停下來時(shí)就可以看見在A 寄存器中顯示的13.0 與12.0 進(jìn)行減法運(yùn)算的結(jié)果:AH=3f80h,AL=0000h。這是用浮點(diǎn)數(shù)格式表示的數(shù)1(=13-12)。減法運(yùn)算的程序到此結(jié)束。

      k.繼續(xù)點(diǎn)擊“運(yùn)行程序”按鈕,當(dāng)程序再次停下來時(shí)就可以看見在A 寄存器中顯示的12.0 與12.0 進(jìn)行乘法運(yùn)算的結(jié)果:AH=4310h,AL=0000h。這是用浮點(diǎn)數(shù)格式表示的數(shù)144(=12*12)。乘法運(yùn)算的程序到此結(jié)束。

      l.繼續(xù)點(diǎn)擊“運(yùn)行程序”按鈕,當(dāng)程序再次停下來時(shí)就可以看見在A 寄存器中顯示的12.0 與4.0 進(jìn)行除法運(yùn)算的結(jié)果:AH=4040h,AL=0000h。這是用浮點(diǎn)數(shù)格式表示的數(shù)3(=12/4)。至此加、減、乘、除四種運(yùn)算都運(yùn)行完畢。

      m.如果程序運(yùn)行不正確,請(qǐng)檢查源程序是否有誤,必要時(shí)可以在源程序中多插入斷點(diǎn)語句。程序在執(zhí)行到斷點(diǎn)語句時(shí)自動(dòng)暫停,此時(shí)可以通過檢查各個(gè)寄存器中的值以及內(nèi)存單元中的值來判斷程序執(zhí)行是否正確。

      三.在 CCS 的C54xx simulator 上調(diào)試觀察實(shí)驗(yàn)結(jié)果

      浮點(diǎn)加法斷點(diǎn)一: 浮點(diǎn)加法斷點(diǎn)二:

      浮點(diǎn)加法斷點(diǎn)三: 浮點(diǎn)減法

      浮點(diǎn)數(shù)乘法 浮點(diǎn)數(shù)除法

      四 心得體會(huì)

      通過學(xué)習(xí)C54X的浮點(diǎn)數(shù)的算術(shù)運(yùn)算,以及實(shí)驗(yàn)結(jié)果的觀察,使我了解了浮點(diǎn)數(shù)運(yùn)算的原理,學(xué)習(xí)并掌握用TMS320C54X來進(jìn)行浮點(diǎn)數(shù)的各種算術(shù)運(yùn)算的算法實(shí)現(xiàn)。實(shí)驗(yàn)四用定時(shí)器實(shí)現(xiàn)數(shù)字振蕩器 實(shí)驗(yàn)四 用定時(shí)器實(shí)現(xiàn)數(shù)字振蕩器

      4.1 實(shí)驗(yàn)?zāi)康?/p>

      在數(shù)字信號(hào)處理中,會(huì)經(jīng)常使用到正弦/余弦信號(hào)。通常的方法是將某個(gè)頻率的正弦/余弦值預(yù)先計(jì)算出來后制成一個(gè)表,DSP 工作時(shí)僅作查表運(yùn)算即可。在本實(shí)驗(yàn)中將介紹另一種獲得正弦/余弦信號(hào)的方法,即利用數(shù)字振蕩器用疊代方法產(chǎn)生正弦信號(hào)。本實(shí)驗(yàn)除了學(xué)習(xí)數(shù)字振蕩器的DSP 實(shí)現(xiàn)原理外,同時(shí)還學(xué)習(xí)C54X 定時(shí)器使用以及中斷服務(wù)程序編寫。另外,在本實(shí)驗(yàn)中我們將使用匯編語言和C 語言分別完成源程序的編寫。

      4.2 實(shí)驗(yàn)要求

      本實(shí)驗(yàn)利用定時(shí)器產(chǎn)生一個(gè) 2kHz 的正弦信號(hào)。定時(shí)器被設(shè)置成每25uS 產(chǎn)生一次中斷(等效于采樣速率為40K)。利用該中斷,在中斷服務(wù)程序中用疊代算法計(jì)算出一個(gè)SIN值,并利用CCS 的圖形顯示功能查看波形。

      4.3 實(shí)驗(yàn)原理

      1)數(shù)字振蕩器原理

      設(shè)一個(gè)傳遞函數(shù)為正弦序列 sinkωT,其z 變換為 H(z)=

      其中,A=2cosωT, B=-1, C=sinωT。設(shè)初始條件為0,求出上式的反Z 變換得:

      y[k]=Ay[k-1]+By[k-2]+Cx[k-1] 2)C54X 的定時(shí)器操作

      C54X 的片內(nèi)定時(shí)器利用CLKOUT 時(shí)鐘計(jì)數(shù),用戶使用三個(gè)寄存器(TIM,PRD,TCR)來控制定時(shí)器,參見表4-1。在表4-2 中列出了定時(shí)器控制寄存器的各個(gè)比特位的具體定義?!甐C5402 的另一個(gè)定時(shí)器(定時(shí)器1)的控制寄存器分別為:0x30(TIM1),0x31(PRD1),0x32(TCR1)。

      3)C54X 中斷的使用

      在 C54X 中用戶可以通過中斷屏蔽寄存器IMR 來決定開放或關(guān)閉一個(gè)中斷請(qǐng)求。圖4-1 給出了C5402 的IMR 寄存器的各個(gè)比特位的定義。

      圖 4-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(允許所有的中斷)。

      本實(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)

      4.4 實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)需要使用 C54X 匯編語言或C 語言實(shí)現(xiàn)數(shù)字振蕩器,并通過CCS 提供的圖形顯示窗口觀察出信號(hào)波形以及頻譜。實(shí)驗(yàn)分下面幾步完成:

      1)根據(jù)確定數(shù)字振蕩器的頻率,確定系數(shù)。2)啟動(dòng) CCS,新建工程文件。

      3)選擇 Project 菜單中的Options 選項(xiàng),或使用鼠標(biāo)右鍵單擊工程文件名(如sinewave.pjt)并選擇build options 項(xiàng)來修改或添加編譯、連接中使用的參數(shù)。選擇Linker 窗口,在“Output Filename”欄中寫入輸出OUT 文件的名字,如sine.out,你還可以設(shè)置生成的MAP 文件名。

      4)完成編譯、連接,正確生成OUT 文件。

      5)選 View→Graph→Time/Frequency?打開圖形顯示設(shè)置窗口。6)在匯編源程序的中斷服務(wù)程序(_tint)中的“nop”語句處設(shè)置斷點(diǎn)。7)用右鍵單擊圖形顯示窗口,并選擇“Proporties”項(xiàng)以便修改顯示屬性。8)清除所有斷點(diǎn),關(guān)閉除波形顯示窗口外的所有窗口,并關(guān)閉工程文件。9)完成編譯、連接,正確生成OUT 文件。

      10)打開 C 源程序(timer.c)窗口,在中斷服務(wù)程序(函數(shù)tint())的“con_buf=0;”語句處增加一個(gè)斷點(diǎn)。同樣打開圖形顯示窗口,并將“Start Address”改為buf;“Acquisition Buffer Size”改為“Display Data Size”改為128,“DSP DataType”為“32-bit floating point”

      11)選擇 Debug→Animate,運(yùn)行程序,觀察輸出波形。

      第五篇:DSP第一次實(shí)驗(yàn)報(bào)告

      信息與通信工程學(xué)院

      信號(hào)與信息處理綜合實(shí)驗(yàn)(DSP部分)

      實(shí)驗(yàn)報(bào)告

      級(jí): 2012211127

      名: 劉燦

      學(xué)

      號(hào): 2012210732 期: 2015.4.10 一.實(shí)驗(yàn)題目

      Hello World和LED 二.實(shí)驗(yàn)?zāi)康?/p>

      熟悉平DSK6416開發(fā)臺(tái),掌握CCS軟件的基本操作流程,達(dá)到熟練操作軟、硬件系統(tǒng)開發(fā)、調(diào)試的目的。

      三.實(shí)驗(yàn)任務(wù)及要求

      1.任務(wù)

      (1)在控制臺(tái)中顯示Hello World

      運(yùn)行程序后,在控制臺(tái)顯示Hello World(2)控制LED燈閃爍

      FTP給出一個(gè)LED的程序模板,可以控制LED 0的閃爍。基于該模板,需要完成:

      (a)修改閃爍的頻率;

      (b)通過寫8bit數(shù)值到CPLD寄存器來控制LED,使得4個(gè)LED以200ms的頻率同時(shí)打開和關(guān)閉。

      2.要求

      (1)實(shí)現(xiàn)基本功能且不出現(xiàn)任何錯(cuò)誤

      (2)基于原理實(shí)現(xiàn)多功能的擴(kuò)展

      四.組內(nèi)分工

      劉杰

      程序代碼的編寫與調(diào)試

      劉燦

      建立工程以及目標(biāo)系統(tǒng)的配置

      五.實(shí)驗(yàn)內(nèi)容及流程

      1.實(shí)驗(yàn)內(nèi)容

      這次實(shí)驗(yàn)內(nèi)容是顯示hello world和控制LED燈的閃爍。由于是dsp的第一次實(shí)驗(yàn),內(nèi)容比較簡(jiǎn)單,主要還是在于熟悉ccs這個(gè)軟件在進(jìn)行dsp開發(fā)時(shí)的具體建立工程、配置文件、導(dǎo)入實(shí)驗(yàn)板和程序燒寫調(diào)試的過程和步驟。

      2.實(shí)驗(yàn)流程介紹

      1.新建工程

      (1)打開ccs后點(diǎn)擊菜單中的“File->New->Project”,選擇“CCS project”,然后進(jìn)入下一個(gè)頁面進(jìn)行工程的命名。

      (2)命名完成之后是選擇工程的硬件平臺(tái),我們實(shí)驗(yàn)室所使用的實(shí)驗(yàn)板是DSK6416,它的芯片為C6000系列的TMS320C6416,所以在“Project Type”下拉框中選擇“C6000”,其余選項(xiàng)默認(rèn)即可。

      (3)接下來是設(shè)置工程屬性,在“Device Variant”下拉欄中選擇“Generic devices-> Generic C64xx Device”,“Device Endianness”選擇little,其余保持默認(rèn)值。

      (4)然后工程模板選擇“hello world”,就完成了工程的新建。

      2.代碼編譯和鏈接

      (1)添加源代碼(2)配置CSL庫(kù)

      將C6000的CSL庫(kù),存在本地PC機(jī)硬盤上,我們hello world工程的代碼路徑為C:ticsl。在pll_led工程圖標(biāo)上單擊右鍵,選擇“Show Build Settings…”來設(shè)置編譯屬性,設(shè)置include options,單擊新建,在對(duì)話框中輸入“C:ticslinclude”

      (3)定義芯片型號(hào):

      在“predefine symbols”選項(xiàng)中輸入芯片型號(hào)CHIP_6416(4)指定鏈接庫(kù):

      在工程屬性的“C6000 Linker”的“File Search Path”選項(xiàng)中需要添加DSK6416和CSL6416這兩個(gè)庫(kù),其路徑分別為“c:tidsk6414libdsk6414bsl.lib”和“c:ticsllib_2xcsl6414.lib”

      (5)添加cmd文件:

      在工程路徑下新建一個(gè)文本文件,將其后綴修改成.cmd,名稱可隨便修改,并且在文本文件中寫入下列內(nèi)容:-stack 0x400-heap 0x400 保存并編譯工程,生成“.out”文件。

      3.軟件調(diào)試

      在工程中運(yùn)行“New->Target Configuration File”新建配置文件,命名為DSK6416_led.ccxml來完成CCS軟件和板卡的連接。命名完后在配置文件Basic中Connection選擇Spectrum digital DSK-EVM-eZdsp onboard USB Emulator,Device選擇DSK6416,保存。然后進(jìn)行調(diào)試,設(shè)置斷點(diǎn)。最后將程序燒錄到實(shí)驗(yàn)板中,檢查實(shí)驗(yàn)結(jié)果。

      六.源代碼及注釋

      #include #include “dsk6416.h” #include “dsk6416_led.h” #include “dsk6416_dip.h” void main(void){

      printf(“Hello World!n”);

      //控制臺(tái)顯示“hello world”

      DSK6416_init();

      //初始化LED和DIP

      DSK6416_LED_init();

      DSK6416_DIP_init();

      while(1){

      if(DSK6416_DIP_get(3)== 0)

      //開關(guān)3控制LED燈以200ms閃爍

      {

      DSK6416_LED_toggle(3);

      DSK6416_waitusec(200000);

      }

      else if(DSK6416_DIP_get(2)== 0)

      //開關(guān)2控制LED燈以100ms閃爍

      {

      DSK6416_LED_toggle(3);

      DSK6416_waitusec(100000);

      }

      else if(DSK6416_DIP_get(1)== 0)

      //開關(guān)1控制4個(gè)燈以200ms同時(shí)亮滅

      {

      DSK6416_rset(DSK6416_USER_REG, 0x0f);

      DSK6416_waitusec(200000);

      DSK6416_rset(DSK6416_USER_REG, 0x00);

      DSK6416_waitusec(200000);

      }

      else if(DSK6416_DIP_get(0)== 0)//開關(guān)0控制4個(gè)燈循環(huán)亮滅,間隔200ms

      {

      for(int i=0;i<4;i++){

      DSK6416_LED_toggle(i);

      DSK6416_waitusec(200000);}

      }

      } }

      七.實(shí)驗(yàn)結(jié)果

      1.按照實(shí)驗(yàn)步驟進(jìn)行操作后,實(shí)驗(yàn)控制臺(tái)正常顯示顯示“Hello World”,如下圖:

      2.實(shí)驗(yàn)板上DIP 0~3開關(guān)控制的LED燈閃爍效果也符合程序預(yù)期的效果。

      八.遇到的問題

      由于第一次實(shí)驗(yàn)的內(nèi)容較為簡(jiǎn)單,我們?cè)诰幊谭矫鏇]有遇到什么困難,工程的建立和系統(tǒng)的配置也能照著實(shí)驗(yàn)指導(dǎo)書按部就班的完成。但是在連接實(shí)驗(yàn)板時(shí)我們遇到了連接不上的問題。機(jī)房的電腦連接實(shí)驗(yàn)板后安裝不了驅(qū)動(dòng),我們自己帶的筆記本電腦也有沒有反應(yīng)的現(xiàn)象。后來我們換了同學(xué)的電腦才成功的連接上。

      九.心得體會(huì)

      第一次的實(shí)驗(yàn)總的來說比較容易,主要是對(duì)ccs這個(gè)軟件的操作和建立工程的過程的熟悉。通過這次實(shí)驗(yàn)我對(duì)于這學(xué)期dsp實(shí)驗(yàn)的流程和步驟有了大體的了解,也熟悉了ccs的編程和調(diào)試,也為下次的實(shí)驗(yàn)打好了基礎(chǔ)。

      下載DSP實(shí)驗(yàn)報(bào)告+心得體會(huì)word格式文檔
      下載DSP實(shí)驗(yàn)報(bào)告+心得體會(huì).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        dsp課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告總結(jié)

        DSP課程設(shè)計(jì)總結(jié) (2013-2014學(xué)年第2學(xué)期) 題目 :專業(yè)班級(jí) :電子1103 學(xué)生姓名 : 萬蒙學(xué)號(hào) : 11052304 指導(dǎo)教師 :設(shè)計(jì)成績(jī) :2014 年 6 月 1 目 錄 一 設(shè)計(jì)目的--------3 二 系統(tǒng)分......

        關(guān)于dsp心得體會(huì)

        關(guān)于dsp心得體會(huì) 篇一:dsp實(shí)驗(yàn)報(bào)告心得體會(huì) TMS320F2812x DSP原理及應(yīng)用技術(shù)實(shí)驗(yàn)心得體會(huì) 1. 設(shè)置環(huán)境時(shí)分為軟件設(shè)置和硬件設(shè)置,根據(jù)實(shí)驗(yàn)的需要設(shè)置,這次實(shí)驗(yàn)只是軟件仿真,可以......

        DSP實(shí)驗(yàn)心得體會(huì)

        篇一:dsp實(shí)驗(yàn)報(bào)告心得體會(huì) tms320f2812x dsp原理及應(yīng)用技術(shù)實(shí)驗(yàn)心得體會(huì) 1. 設(shè)置環(huán)境時(shí)分為軟件設(shè)置和硬件設(shè)置,根據(jù)實(shí)驗(yàn)的需要設(shè)置,這次實(shí)驗(yàn)只是 軟件仿真,可以不設(shè)置硬件,......

        萬能實(shí)驗(yàn)報(bào)告心得體會(huì)

        萬能實(shí)驗(yàn)報(bào)告心得體會(huì)5篇萬能實(shí)驗(yàn)報(bào)告心得會(huì)(一):本次實(shí)訓(xùn),是對(duì)我本事的進(jìn)一步鍛煉,也是一種考驗(yàn)。從中獲得的諸多收獲,也是很可貴的,是十分有意義的。經(jīng)過這次實(shí)訓(xùn),我收獲了很多,一......

        實(shí)驗(yàn)報(bào)告及心得體會(huì)

        實(shí)驗(yàn)報(bào)告及心得體會(huì) 實(shí)驗(yàn)名稱:七人表決器 實(shí)驗(yàn)?zāi)康模和ㄟ^Max+plus2軟件實(shí)現(xiàn)七人表決功能,熟練掌握用Max+plus2實(shí)現(xiàn)七人表決器的操作步驟 實(shí)驗(yàn)步驟: 1.打開Max+plus2軟件 2.打開f......

        基于DSP開關(guān)電源

        基于DSP的開關(guān)電源 摘要 本文以TMs320LF2407A為控制核心,介紹了一種基于DSP的大功率開關(guān)電源的設(shè)計(jì)方案。該電源采用半橋式逆變電路拓?fù)浣Y(jié)構(gòu),應(yīng)用脈寬調(diào)制和軟件PID調(diào)節(jié)技術(shù)實(shí)......

        dsp作業(yè)

        .c圖 實(shí)驗(yàn)二 #define UINT unsigned int UINT i,*p,*n; void main(void) { p=(UINT *)0x0300; for(i=0;i PROG PAGE 0 .cinit > PROG PAGE 0 //.switch > PROG PAGE......

        DSP課程設(shè)計(jì)

        TMS320C54x與PC通信系統(tǒng)的設(shè)計(jì)(單號(hào)) 一、設(shè)計(jì)目的 本次課程設(shè)計(jì)的目的是為了進(jìn)一步提高學(xué)生的自我開發(fā)能力,培養(yǎng)學(xué)生的查閱資料,獨(dú)立分析問題、解決問題以及實(shí)際動(dòng)手的能力。也......