dsp课程设计实验报告总结

时间:2019-05-15 09:33:19下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《dsp课程设计实验报告总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《dsp课程设计实验报告总结》。

第一篇:dsp课程设计实验报告总结

DSP课程设计总结

(2013-2014学年第2学期)

目 :

专业班级 :

电子1103

学生姓名 :

号 :

11052304

指导教师 :

设计成绩 :

2014 年 6 月 目

一 设计目的--------3 二 系统分析--------3 三 硬件设计 3.1 硬件总体结构----------------------------3 3.2 DSP模块设计----------------------------4 3.3 电源模块设计---------------------------4 3.4 时钟模块设计---------------------------5 3.5 存储器模块设计-------------------------6 3.6 复位模块设计---------------------------6 3.7 JTAG模块设计-------------------------7 四 软件设计

4.1 软件总体流程----------------------7 4.2 核心模块及实现代码--------8 五 课程设计总结----------------------14

一、设计目的

设计一个功能完备,能够独立运行的精简DSP硬件系统,并设计简单的DSP控制程序。

二、系统分析

1.1设计要求 硬件要求:

(1)使用TMS320VC5416作为核心芯片。(2)具有最简单的led控制功能。(3)具有存放程序的外部Flash芯片。(4)外部输入+5V电源。(5)绘制出系统的功能框图。

(6)使用AD(Altium Designer)绘制出系统的原理图和PCB版图。软件要求:

利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号的叠加。在DSP中采集信号,并且对信号进行频谱分析,滤波等。通过键盘选择算法的功能,将计算的信号频率或者滤波后信号的频率在LCD上显示。

三、硬件设计

3.1 硬件总体结构

3.2 DSP总体结构

3.3 电源模块设计

3.4 时钟模块设计

3.5 存储器模块设计

3.6复位模块设计

3.7 JTAG模块设计

四、硬件设计

4.1 软件总体流程

4.2核心模块及实现代码 1.采集数据去直流

in_x[m] = port8002 & 0x00ff;//读取数据

m++;

intnum = m;

if(intnum == Len)

//以256个点为采样周期 { intnum = 0;xavg = 0.0;for(s=0;s

xavg = xavg/Len;//采样均值 for(s=0;s

//输入实部 pi[s] = 0;

//输入虚部 for(p=0;p

xmid[0] = x[s];r = 0;rm= 0;

for(j=0;j

} y[s] = rm;

r = xmid[j] * h[j];rm = rm + r;xmid[FLen-p-1] = xmid[FLen-p-2];

4.LCD显示

SendCMD(CLEAR);

showperson();

Delay(1);

//----------------------------

SendCMD(CLEAR);

SendCMD(0x0080);

//设定DDRAM的地址在第一行 80H

delay_100us();

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

{

SendDat(data_buff3[i]);

delay_100us();

asm(“ nop ”);} asm(“ nop ”);

SendCMD(0x0090);

shownum(f1);

//------------------------------SendCMD(0x0088);

//设定DDRAM的地址在第二行 90H delay_100us();for(i =0;i<16;i++)

{

SendDat(data_buff4[i]);

delay_100us();}

SendCMD(0x0098);

shownum(f2);4.3 软件实验效果图 1.去直流

2.滤波前fft

3.滤波后fft 4.窗口函数

五 课程设计总结

在为期两个多星期的综合设计中,重新熟悉了一下AD和CCS软件的操作。在画原理图时,各元件的连接及封装形式都应参照手册。只有深刻了解各管脚的功能,才能准确快速地画好原理图。画好原理图后,要先编译一下看是否有连接错误。

如果原理图有所改变,可以在PCB中重新导入。如果元器件管脚或IO引脚变绿,可能是间距违反了规定的rule。可以将rule里的间距改小一点。在pcb连线过程中,我发现 移动clk时钟器件,其管脚变绿,但rule并无问题。后经查阅资料,取消了Drc功能,才恢复正常。在连接滤波电容时,将滤波电容靠近其滤波元器件。

在软件设计过程中,前两天一直没有搞清楚设计要求,进展缓慢。首先了结了一下各个模块程序的输入输出变量的含义,只有 这样才能正确地调用各个函数。在计算频率时,其实我只计算了一个频率。输入是一个混频信号,由于左右对称,在128点内可得到两个最大幅度,0到30(或其他分界点亦可,视滤波效果而言),比较一次,30到128,再比较一次。滤波函数仅仅只是计算了窗口函数,故还需将输入信号函数和窗口函数进行卷积得到最终结果。

在编写LCD显示模块程序时,经常出现乱码。Unsigned

char类型的字符串数组,一个汉字相当于两个英文字母,如果地址1没有安排好容易出现乱码。

第二篇:DSP实验报告

实验0 实验设备安装才CCS调试环境 实验目的:

按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。实验步骤:

以演示实验一为例:

1. 使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源;

2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStartsinewave”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out;

3. 打开源文件exer3.asm,在注释行“set breakpoint in CCS!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示;

4. 点击主菜单“View->Graph->Time/Frequency…”,屏幕会出现图形窗口设置对话框

5. 双击Start Address,将其改为y0;双击Acquisition Buffer Size,将其改为1;DSP Data Type设置成16-bit signed integer,如下图所示;

6. 点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察

7. 点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果:

心得体会:

通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。熟悉了DSP实验箱基本模块。让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。实验二 基本算数运算

2.1 实验目的和要求

加、减、乘、除是数字信号处理中最基本的算术运算。DSP 中提供了大量的指令来

实现这些功能。本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法

和编程技巧。本实验的演示文件为exer1.out。

2.2 实验原理 定点 DSP 中的数据表示方法

C54X 是16 位的定点DSP。一个16 位的二进制数既可以表示一个整数,也可以表

示一个小数。当它表示一个整数时,其最低位(D0)表示20,D1 位表示21,次高位(D14)表示214。实现 16 位定点加法

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

ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32 位扩展精度加

法),而ADDM 专用于立即数的加法。实现 16 位定点减法

C54X 中提供了多条用于减法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于无符号数的减法运算,SUBB 用于带进位的减法运算(如32 位扩展精度的减法),而SUBC 为移位减,DSP 中的除法就是用该指令来实现的。实现 16 位定点整数乘法

在C54X 中提供了大量的乘法运算指令,其结果都是32 位,放在A 或B 寄存器

中。乘数在C54X 的乘法指令很灵活,可以是T 寄存器、立即数、存贮单元和A 或B 寄存器的高16 位。实现 16 位定点小数乘法

在 C54X 中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X 中提供了一个状态位FRCT,将其设置为1 时,系统自动将乘积结果左移一位。但注意

整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT 清除。两个小数(16 位)

相乘后结果为32 位,如果精度允许的话,可以只存高16 位,将低16 位丢弃,这样仍可

得到16 位的结果。6 实现 16 位定点整数除法

在 C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法

来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于

除以常数特别适用。另一种方法是使用SUBC 指令,重复16 次减法完成除法运算。实现 16 位定点小数除法

在 C54X 中实现16 位的小数除法与前面的整数除法基本一致,也是使用循环的

SUBC 指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数一定小于除数。

2.3 实验内容

本实验需要使用C54X 汇编语言实现加、减、乘、除的基本运算,并通过DES 的存 贮器显示窗口观察结果。1 编写实验程序代码 用 ccs simulator 调试运行并观察结

2.4 实验结果

1、加法结果

2、乘法结果

3、减法结果

4、除

2.5 思考题(0.5、0.25)

实验三 C54X的浮点数的算术运

一、实验目的 练习TMS320C54X 汇编程序的编写与调试方法,重点练习C54X 程序流程控制的方法。学习并掌握应用 TMS320C54X 来进行浮点数的各种算术运算的算法实现。练习并掌握 TMS320C54X 的汇编语言的汇编指令系统的使用方法,重点练习具有C54X 特点的一些在功能上有所扩展的特殊指令,并了解这些指令在进行算术运算或各种控制时所带来的方便。练习并掌握用 CCS 调试程序的一些基本操作。二.实验原理 1 浮点数的表示方法

在定点运算中,小数点是在一个特定的固定位置。例如,如果一个 32-bit 的数把小数点放在最高有效位(也就是符号位)之后,那么就只有分数(绝对值小于1)才能被显示。在定点运

算系统中,虽然在硬件上实现简单,但是表示的操作数的动态范围要受到限制。3 浮点数运算的步骤

程序代码分成四个 ASM 文件输入,通过编译生成.obj 文件,连接生成.out 文件后就可以在DES320PP-U 实验系统上调试运行(先要创建一个工程文件,然后加入四个工程文件,并且一起编译,连接。因为每个文件都对下一个文件作了引用)。步骤如下:

a.首先启动 setup CCS C5000,在其中设置目前需要的CCS 的工作状态为C54xxsimulator,保存这一设置并退出。然后再启动CCS 实验系统软件CCS C5000。

b.在下拉菜单中选择“File”->“Load Program”以装入所要调试的程序fc.out,这时,在反汇编窗口中能看到程序的源代码。

c.在下拉菜单中选择“View”->“CPU Registers”->“CPU Register”,可以看见在CCS 界面下部份会出现CPU 中的相关寄存器;选择“View”->“Memory…”,在弹出的“Memory Window Options”窗口中选择要观察的区域为数据区,地址开始为0x80h,然后就可以看见出现一个Data Memory 窗口,其中显示了从0x80h 开始的.bss 区。

d.在反汇编窗口中需要观察的地方设置断点:在这条指令处双击将其点为红色即可。比如在加法程序中有指令nop 的位置都可以加一个断点。

e.在下拉菜单中选择“调试”——“连续运行”(或直接点击“运行程序”按钮)运行浮点数程序。如果编写程序时在计算完毕后遇到一个断点,那么程序到此会自动停止。

f.当示范程序在第一个断点处停下来时,此时就可以看见程序初始化后的情况:被加数12.0 以浮点数的格式放在内存区0x08a-0x08b 中,其值为4140h 和0000h。加数12.0 放在内存区0x08c-0x08d 中,其值也为4140h 和0000h。

g.再点击“运行程序”按钮,之后程序会在下一个断点处停下来,这时可以看见被加数被格式转换后的变量op1hm、op1lm 和op1se 的值在内存区0x084-0x086 中,分别为00c0h、0000h 和0082h。同样加数被格式转换后的变量op2se、op2hm 和op2lm的值在内存区0x087-0x089 中,分别为0082h、00c0h 和0000h。

h.再点击“运行程序”按钮,程序停下来时就可以观察到在存储器窗口中表示结果的变量rlthm、rltlm、rltsign 和rltexp 的值在内存区0x080-0x083 中,其值分别为0040h、0000h、0180h 和0083h。

i.这时可以看到 A 寄存器中的值为AH=41c0h,AL=0000h 这就是最后的以浮点数的格式表示的结果值24(=12+12)。加法运算到此结束。

j.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的13.0 与12.0 进行减法运算的结果:AH=3f80h,AL=0000h。这是用浮点数格式表示的数1(=13-12)。减法运算的程序到此结束。

k.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与12.0 进行乘法运算的结果:AH=4310h,AL=0000h。这是用浮点数格式表示的数144(=12*12)。乘法运算的程序到此结束。

l.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与4.0 进行除法运算的结果:AH=4040h,AL=0000h。这是用浮点数格式表示的数3(=12/4)。至此加、减、乘、除四种运算都运行完毕。

m.如果程序运行不正确,请检查源程序是否有误,必要时可以在源程序中多插入断点语句。程序在执行到断点语句时自动暂停,此时可以通过检查各个寄存器中的值以及内存单元中的值来判断程序执行是否正确。

三.在 CCS 的C54xx simulator 上调试观察实验结果

浮点加法断点一:

浮点加法断点二:

浮点加法断点三:

浮点减法

浮点数乘法

浮点数除法

四 心得体会

通过学习C54X的浮点数的算术运算,以及实验结果的观察,使我了解了浮点数运算的原理,学习并掌握用TMS320C54X来进行浮点数的各种算术运算的算法实现。实验四用定时器实现数字振荡器

实验四 用定时器实现数字振荡器

4.1 实验目的

在数字信号处理中,会经常使用到正弦/余弦信号。通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP 工作时仅作查表运算即可。在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。本实验除了学习数字振荡器的DSP 实现原理外,同时还学习C54X 定时器使用以及中断服务程序编写。另外,在本实验中我们将使用汇编语言和C 语言分别完成源程序的编写。

4.2

本实验利用定时器产生一个 2kHz 的正弦信号。定时器被设置成每25uS 产生一次中断(等效于采样速率为40K)。利用该中断,在中断服务程序中用叠代算法计算出一个SIN值,并利用CCS 的图形显示功能查看波形。

4.3 实验原理 数字振荡器原理

sinkωT,其

z 变换为

H(z=

其中,A=2cosωT, B=-1, C=sinωT。设初始条件为0,求出上式的反Z 变换得:

y[k]=Ay[k-1]+By[k-2]+Cx[k-1] 2 C54X 的定时器操作

C54X 的片内定时器利用CLKOUT 时钟计数,用户使用三个寄存器(TIM,PRD,TCR)来控制定时器,参见表4-1。在表4-2 中列出了定时器控制寄存器的各个比特位的具体定义。‘VC5402 的另一个定时器(定时器1)的控制寄存器分别为:0x30

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

C54X 中用户可以通过中断屏蔽寄存器 IMR 来决定开放或关闭一个中断请求。图 4-1 给出了 C5402 的 IMR 寄存器的各个比特位的定义。

图 4-1 ‘C5402 的IMR 寄存器

其中,表示HPI 接口中断,INT3-INT0 为外部引脚产生的中断,TXINT 和TRINT 为TDM 串口的发送和接收中断,BXINT0 和BRINT0 BSP 串口的发送和接收中断,14

为定时器 0 中断。在中断屏蔽寄存器 IMR 中,1 表示允许 CPU 响应对应的中断,0 表示禁止。当然要 CPU 响应中断,INTM 还应该为 0(允许所有的中断)。

本实验的初始化程序读取中断向量表的启始地址,然后设置的高

DSP 能正确响应中断,代码如下:

ld #0,dp ;设置DP 页指针 ssbx intm ;关闭所有中断

ld #vector, a ;读出中断向(地址vector 在中断向量表程序中定义)

and #0FF80h, a ;保留高9 位(IPTR)andm #007Fh, pmst ;保留PMST 的低7 位 or pmst, a ;

stlm a, pmst ;设置PMST(其中包括IPTR)

4.4 实验内容

C54X 汇编语言或C 语言实现数字振荡器,并通过CCS 提供的图形显示窗口观察出信号波形以及频谱。实验分下面几步完成: 根据确定数字振荡器的频率,确定系数。2 启动 CCS,新建工程文件。

选择 Project 菜单中的Options 选项,或使用鼠标右键单击工程文件名(如sinewave.pjt)并选择build options 项来修改或添加编译、连接中使用的参数。选择Linker Output Filename”栏中写入输出OUT 文件的名字,如sine.out,你还可以设置生成的MAP 文件名。4 完成编译、连接,正确生成OUT 文件。5 选 View→Graph→

5…打开图形显示设置窗口。在汇编源程序的中断服务程序(_tint)中的“nop”语句处设置断点。用右键单击图形显示窗口,并选择“Proporties”项以便修改显示属性。清除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。完成编译、连接,正确生成OUT 文件。

10打开 C 源程序(timer.c)窗口,在中断服务程序(函数tint()的“con_buf=0

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

11选择 Debug→Animate,运行程序,观察输出波形。

第三篇:DSP实验报告

实验0 实验设备安装才CCS调试环境

实验目的:

按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。实验步骤:

以演示实验一为例:

1. 使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源; 2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStartsinewave”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out;

3. 打开源文件exer3.asm,在注释行“set breakpoint in CCS!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示; 4. 点击主菜单“View->Graph->Time/Frequency„”,屏幕会出现图形窗口设置对话框

5. 双击Start Address,将其改为y0;双击Acquisition Buffer Size,将其改为1;DSP Data Type设置成16-bit signed integer,如下图所示;

6. 点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察

7. 点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果:

心得体会:

通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。熟悉了DSP实验箱基本模块。让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。

实验二 基本算数运算

2.1 实验目的和要求

加、减、乘、除是数字信号处理中最基本的算术运算。DSP 中提供了大量的指令来 实现这些功能。本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法 和编程技巧。本实验的演示文件为exer1.out。

2.2 实验原理

1)定点 DSP 中的数据表示方法

C54X 是16 位的定点DSP。一个16 位的二进制数既可以表示一个整数,也可以表

示一个小数。当它表示一个整数时,其最低位(D0)表示20,D1 位表示21,次高位(D14)表示214。

2)实现 16 位定点加法

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

ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32 位扩展精度加 法),而ADDM 专用于立即数的加法。

3)实现 16 位定点减法

C54X 中提供了多条用于减法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于无符号数的减法运算,SUBB 用于带进位的减法运算(如32 位扩展精度的减法),而SUBC 为移位减,DSP 中的除法就是用该指令来实现的。

4)实现 16 位定点整数乘法

在C54X 中提供了大量的乘法运算指令,其结果都是32 位,放在A 或B 寄存器 中。乘数在C54X 的乘法指令很灵活,可以是T 寄存器、立即数、存贮单元和A 或B 寄存器的高16 位。

5)实现 16 位定点小数乘法

在 C54X 中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X 中提供了一个状态位FRCT,将其设置为1 时,系统自动将乘积结果左移一位。但注意 整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT 清除。两个小数(16 位)相乘后结果为32 位,如果精度允许的话,可以只存高16 位,将低16 位丢弃,这样仍可 得到16 位的结果。

6)实现 16 位定点整数除法

在 C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法 来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于 除以常数特别适用。另一种方法是使用SUBC 指令,重复16 次减法完成除法运算。

7)实现 16 位定点小数除法

在 C54X 中实现16 位的小数除法与前面的整数除法基本一致,也是使用循环的

SUBC 指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数一定小于除数。

2.3 实验内容

本实验需要使用C54X 汇编语言实现加、减、乘、除的基本运算,并通过DES 的存 贮器显示窗口观察结果。

1)编写实验程序代码

2)用 ccs simulator 调试运行并观察结

2.4 实验结果

1、加法结果

2、乘法结果

3、减法结果

4、除2.5 思考题(0.5、0.25)实验三 C54X的浮点数的算术运

一、实验目的

1)练习TMS320C54X 汇编程序的编写与调试方法,重点练习C54X 程序流程控制的方法。2)学习并掌握应用 TMS320C54X 来进行浮点数的各种算术运算的算法实现。

3)练习并掌握 TMS320C54X 的汇编语言的汇编指令系统的使用方法,重点练习具有C54X 特点的一些在功能上有所扩展的特殊指令,并了解这些指令在进行算术运算或各种控制时所带来的方便。

4)练习并掌握用 CCS 调试程序的一些基本操作。

二.实验原理

1)浮点数的表示方法

在定点运算中,小数点是在一个特定的固定位置。例如,如果一个 32-bit 的数把小数点放在最高有效位(也就是符号位)之后,那么就只有分数(绝对值小于1)才能被显示。在定点运算系统中,虽然在硬件上实现简单,但是表示的操作数的动态范围要受到限制。

3)浮点数运算的步骤

程序代码分成四个 ASM 文件输入,通过编译生成.obj 文件,连接生成.out 文件后就可以在DES320PP-U 实验系统上调试运行(先要创建一个工程文件,然后加入四个工程文件,并且一起编译,连接。因为每个文件都对下一个文件作了引用)。步骤如下:

a.首先启动 setup CCS C5000,在其中设置目前需要的CCS 的工作状态为C54xxsimulator,保存这一设置并退出。然后再启动CCS 实验系统软件CCS C5000。

b.在下拉菜单中选择“File”->“Load Program”以装入所要调试的程序fc.out,这时,在反汇编窗口中能看到程序的源代码。

c.在下拉菜单中选择“View”->“CPU Registers”->“CPU Register”,可以看见在CCS 界面下部份会出现CPU 中的相关寄存器;选择“View”->“Memory…”,在弹出的“Memory Window Options”窗口中选择要观察的区域为数据区,地址开始为0x80h,然后就可以看见出现一个Data Memory 窗口,其中显示了从0x80h 开始的.bss 区。

d.在反汇编窗口中需要观察的地方设置断点:在这条指令处双击将其点为红色即可。比如在加法程序中有指令nop 的位置都可以加一个断点。

e.在下拉菜单中选择“调试”——“连续运行”(或直接点击“运行程序”按钮)运行浮点数程序。如果编写程序时在计算完毕后遇到一个断点,那么程序到此会自动停止。

f.当示范程序在第一个断点处停下来时,此时就可以看见程序初始化后的情况:被加数12.0 以浮点数的格式放在内存区0x08a-0x08b 中,其值为4140h 和0000h。加数12.0 放在内存区0x08c-0x08d 中,其值也为4140h 和0000h。g.再点击“运行程序”按钮,之后程序会在下一个断点处停下来,这时可以看见被加数被格式转换后的变量op1hm、op1lm 和op1se 的值在内存区0x084-0x086 中,分别为00c0h、0000h 和0082h。同样加数被格式转换后的变量op2se、op2hm 和op2lm的值在内存区0x087-0x089 中,分别为0082h、00c0h 和0000h。

h.再点击“运行程序”按钮,程序停下来时就可以观察到在存储器窗口中表示结果的变量rlthm、rltlm、rltsign 和rltexp 的值在内存区0x080-0x083 中,其值分别为0040h、0000h、0180h 和0083h。

i.这时可以看到 A 寄存器中的值为AH=41c0h,AL=0000h 这就是最后的以浮点数的格式表示的结果值24(=12+12)。加法运算到此结束。

j.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的13.0 与12.0 进行减法运算的结果:AH=3f80h,AL=0000h。这是用浮点数格式表示的数1(=13-12)。减法运算的程序到此结束。

k.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与12.0 进行乘法运算的结果:AH=4310h,AL=0000h。这是用浮点数格式表示的数144(=12*12)。乘法运算的程序到此结束。

l.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与4.0 进行除法运算的结果:AH=4040h,AL=0000h。这是用浮点数格式表示的数3(=12/4)。至此加、减、乘、除四种运算都运行完毕。

m.如果程序运行不正确,请检查源程序是否有误,必要时可以在源程序中多插入断点语句。程序在执行到断点语句时自动暂停,此时可以通过检查各个寄存器中的值以及内存单元中的值来判断程序执行是否正确。

三.在 CCS 的C54xx simulator 上调试观察实验结果

浮点加法断点一: 浮点加法断点二:

浮点加法断点三: 浮点减法

浮点数乘法 浮点数除法

四 心得体会

通过学习C54X的浮点数的算术运算,以及实验结果的观察,使我了解了浮点数运算的原理,学习并掌握用TMS320C54X来进行浮点数的各种算术运算的算法实现。实验四用定时器实现数字振荡器 实验四 用定时器实现数字振荡器

4.1 实验目的

在数字信号处理中,会经常使用到正弦/余弦信号。通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP 工作时仅作查表运算即可。在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。本实验除了学习数字振荡器的DSP 实现原理外,同时还学习C54X 定时器使用以及中断服务程序编写。另外,在本实验中我们将使用汇编语言和C 语言分别完成源程序的编写。

4.2 实验要求

本实验利用定时器产生一个 2kHz 的正弦信号。定时器被设置成每25uS 产生一次中断(等效于采样速率为40K)。利用该中断,在中断服务程序中用叠代算法计算出一个SIN值,并利用CCS 的图形显示功能查看波形。

4.3 实验原理

1)数字振荡器原理

设一个传递函数为正弦序列 sinkωT,其z 变换为 H(z)=

其中,A=2cosωT, B=-1, C=sinωT。设初始条件为0,求出上式的反Z 变换得:

y[k]=Ay[k-1]+By[k-2]+Cx[k-1] 2)C54X 的定时器操作

C54X 的片内定时器利用CLKOUT 时钟计数,用户使用三个寄存器(TIM,PRD,TCR)来控制定时器,参见表4-1。在表4-2 中列出了定时器控制寄存器的各个比特位的具体定义。‘VC5402 的另一个定时器(定时器1)的控制寄存器分别为:0x30(TIM1),0x31(PRD1),0x32(TCR1)。

3)C54X 中断的使用

在 C54X 中用户可以通过中断屏蔽寄存器IMR 来决定开放或关闭一个中断请求。图4-1 给出了C5402 的IMR 寄存器的各个比特位的定义。

图 4-1 ‘C5402 的IMR 寄存器

其中,HPINT 表示HPI 接口中断,INT3-INT0 为外部引脚产生的中断,TXINT 和TRINT 为TDM 串口的发送和接收中断,BXINT0 和BRINT0 为BSP 串口的发送和接收中断,TINT0 为定时器0 中断。在中断屏蔽寄存器IMR 中,1 表示允许CPU 响应对应的中断,0 表示禁止。当然要CPU 响应中断,ST1 寄存器中的INTM 还应该为0(允许所有的中断)。

本实验的初始化程序读取中断向量表的启始地址,然后设置PMST 的高9 位,以便DSP 能正确响应中断,代码如下:

ld #0,dp ;设置DP 页指针 ssbx intm ;关闭所有中断 ld #vector, a ;读出中断向(地址vector 在中断向量表程序中定义)and #0FF80h, a ;保留高9 位(IPTR)andm #007Fh, pmst ;保留PMST 的低7 位 or pmst, a ;

stlm a, pmst ;设置PMST(其中包括IPTR)

4.4 实验内容

本实验需要使用 C54X 汇编语言或C 语言实现数字振荡器,并通过CCS 提供的图形显示窗口观察出信号波形以及频谱。实验分下面几步完成:

1)根据确定数字振荡器的频率,确定系数。2)启动 CCS,新建工程文件。

3)选择 Project 菜单中的Options 选项,或使用鼠标右键单击工程文件名(如sinewave.pjt)并选择build options 项来修改或添加编译、连接中使用的参数。选择Linker 窗口,在“Output Filename”栏中写入输出OUT 文件的名字,如sine.out,你还可以设置生成的MAP 文件名。

4)完成编译、连接,正确生成OUT 文件。

5)选 View→Graph→Time/Frequency„打开图形显示设置窗口。6)在汇编源程序的中断服务程序(_tint)中的“nop”语句处设置断点。7)用右键单击图形显示窗口,并选择“Proporties”项以便修改显示属性。8)清除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。9)完成编译、连接,正确生成OUT 文件。

10)打开 C 源程序(timer.c)窗口,在中断服务程序(函数tint())的“con_buf=0;”语句处增加一个断点。同样打开图形显示窗口,并将“Start Address”改为buf;“Acquisition Buffer Size”改为“Display Data Size”改为128,“DSP DataType”为“32-bit floating point”

11)选择 Debug→Animate,运行程序,观察输出波形。

第四篇:DSP课程设计

TMS320C54x与PC通信系统的设计(单号)

一、设计目的

本次课程设计的目的是为了进一步提高学生的自我开发能力,培养学生的查阅资料,独立分析问题、解决问题以及实际动手的能力。也是对理论学习的一个应用和补充的过程。

二、设计的内容及要求

1、设计内容

主机接口HPI是一种高速、异步并行接口。TMS320C54x通过HPI接口与PC并行口的通信。

2、设计要求

(1)DSP最小硬件系统的设计

(2)TMS320C54x与PC并行口硬件电路设计(3)软件设计

三、总体设计方案

四、硬件系统设计

五、软件系统设计

六、心得体会

七、参考文献

附录1 软件系统设计程序 附录2 硬件系统原理图

(注:按以上七个部分编写论文,内容自己扩充)在PDF文档中P158-177中有相关资料可查阅

本系统设计是要实现

TMS320C54x与TLC320AD50的通信系统的设计(双号)

一、设计目的

本次课程设计的目的是为了进一步提高学生的自我开发能力,培养学生的查阅资料,独立分析问题、解决问题以及实际动手的能力。也是对理论学习的一个应用和补充的过程。

二、设计的内容及要求

1、设计内容

模/数接口设计是DSP系统设计中一个重要的组成部分。本系统设计是要实现对模拟信号的采集,并将其转换为数字信号通过TMS320C54x的串行通信接口将数据存储、处理及输出等功能。

2、设计要求

(1)DSP最小硬件系统的设计

(2)TMS320C54x与TLC320AD50串行口硬件电路设计(3)软件设计

三、总体设计方案

四、硬件系统设计

五、软件系统设计

六、心得体会

七、参考文献

附录1 软件系统设计程序 附录2 硬件系统原理图

(注:按以上七个部分编写论文,内容自己扩充)

第五篇:DSP实验报告+心得体会

实 验 报 告

07电本(1)班

学号

2007050344 姓

名 杨宝辉

同组人

独立

实验日期

2010-5-18

室温

大气压

成 绩

基础实验

一、实验目的二、实验设备

三、实验原理 浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理1.一台装有CCS软件的计算机; 2.DSP实验箱的TMS320F2812主控板; 3.DSP硬件仿真器。1.掌握CCS实验环境的使用;

2.掌握用C语言编写DSP程序的方法。

中经常用到的运算;C语言是现代数字信号处理表达的基础语言和通用语言。写实现程序时需要注意两点:(1)浮点数的范围及存储格式;(2)DSP的C语言与ANSI C语言的区别。

四、实验步骤

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

2.在CCS环境中打开本实验的工程(Example_base.pjt),编译并重建.out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中;

3. 把X0 , Y0 和Z0添加到Watch窗口中作为观察对象(选中变量名,单击鼠标右键,在弹出菜单中选择“Add Watch Window”命令);

4. 选择view->graph->time/frequency…。设置对话框中的参数: 其中“Start Address”设为“sin_value”,“Acquisition buffer size”和“Display Data size”都设为“100”,并且把“DSP Data Type”设为“32-bit floating point”,设置好后观察信号序列的波形(sin函数,如图);

5. 单击运行;

6. 观察三个变量从初始化到运算结束整个过程中的变化;观察正弦波形从初始化到运算结束整个过程中的变化;

7. 修改输入序列的长度或初始值,重复上述过程。

五、实验心得体会

通过本次实验,加深了我对DSP的认识,使我对DSP实验的操作有了更进一步的理解。基本掌握了CCS实验环境的使用,并能够使用C语言进行简单的DSP程序设计。从软件的安装到使用软件进行程序设计与仿真,锻炼了自己的动手能力,也遇到了不少的坎坷,例如芯片的选择,不能因为麻烦而省略该步骤,否则将会运行出错。

附录实验程序: #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));}

实 验 报 告

07电本(1)班

学号

2007050344姓

名 杨宝辉 同组人

独立

实验日期

2010-5-20

室温

大气压

成 绩

数码管控制实验

一、实验目的 1.2.3.熟悉2812的指令系统; 熟悉74HC573的使用方法。熟悉DSP的IO操作使用方法。

二、实验设备

1.一台装有CCS2000软件的计算机;

2.插上2812主控板的DSP实验箱; 3.DSP硬件仿真器。

三、实验原理 此模块由数码管和四个锁存器组成。数码管为共阴极型的。数据由2812模块的低八位输入,锁存器的控制信号由2812模块输出,但经由CPLD模块译码后再控制对应的八个

四、实验步骤 1.把2812模块小板插到大板上;

2.在CCS2000环境中打开本实验的工程编译Example_7segled.prj,生成输出文件,通过仿真器把执行代码下载到DSP芯片;

3.运行程序;数码管会显示1~8的数字。

4.参考源代码自行修改程序改变显示样式。

五、实验心得体会

通过本次实验中,基本掌握了2812的指令系统的特点,并能够了解并熟悉74HC573的使用方法,进一步加深了对DSP的认识。同时,通过实验操作DSP的IO操作使用方法,对于DSP的IO操作可以熟悉的运用,学到更多的知识。

程序见附录:

#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 龙

实 验 报 告

07电本(1)班

学号

2007050344 姓

名 杨宝辉

同组人

独立

实验日期

2010-5-25

室温

大气压

成 绩

交通灯控制实验

一、实验目的

1.熟悉2812的指令系统; 2.熟悉74HC573的使用方法。3.熟悉DSP的IO操作使用方法。

二、实验设备

1.一台装有CCS2000软件的计算机;

2.插上2812主控板的DSP实验箱; 3.DSP硬件仿真器。

三、实验原理

此模块由发光二极管和一个锁存器组成。

数据由2812模块的低八位输入,锁存器的控制信号由2812模块输出,但经由CPLD模块译码后再控制锁存器。

四、实验步骤

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

2.在CCS2000环境中打开本实验的工程编译Example_crossled.prj,生成输出文件,通过仿真器把执行代码下载到DSP芯片; 3.运行程序,发光二极管按交通灯方式点亮熄灭。

4.参考源代码,自行修改程序,实现不同的交通灯控制方式。

五、实验心得体会

通过次实验中,使我掌握了 2812的指令系统和74HC573的使用方法。同时,使我掌握了DSP的IO操作使用方法。

实验程序见附录: 附录:

#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.//=============================

实 验 报 告

07电本(1)班

学号

2007050344 姓

名 杨宝辉

同组人

独立

实验日期

2010-05-27

室温

大气压

成 绩

步进电机控制实验

一、实验目的 1.2.二、实验设备

1.一台装有CCS软件的计算机; 2.DSP实验箱(插上电机模块);

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

三、实验原理

步进电机工作原理,给步进脉冲电机就转,不给脉冲电机就不转,步进脉冲的频率越高,步进控制电机就转的越快;改变各相的通电方式可以改变电机的运行方式;改变通电顺序可以控制步进电机的运行方式;改变通电顺序可以控制步进电机的正反转。

步进电机的控制问题可以总结为两点: 1.产生工作方式需要的时序脉冲;

2.控制步进电机的速度使它始终遵循加速-匀速-减速的规律工作。掌握2812通用IO口的使用方法; 掌握2812对步进电机的控制。

对于I/O口有二类寄存器:

1.控制寄存器和数据方向寄存器,使用方法如下:首先确定引脚的功能,即IO控制器寄存器,为1表示引脚功能是原模块的功能,否则为IO功能。

2.如果引脚被配置为IO功能,就需要确定它的方向:输入还是输出。为1表示是输出引脚,否则是输入引脚。对于IO功能的输入或输出是通过读写相应的数据方向寄存器来实现。输入引脚对应读操作;输出引脚对应写操作。

四、实验步骤

1.连接好DSP开发系统;

2.本实验工程文件(Example_stepmotor.pjt),编译,下载程序到DSP; 运行程序,用观察步进电机运行方向和速度的变化;

五、实验心得体会

通过本次实验对于2812通用的IO口进一步熟悉实验,使我基本掌握了2812通用的IO口的使用方法,加深了对IO口的认识。本次实验的主要目的是通过2812对步进机的的控制,开始对于程序的设计没有头绪,通过查阅步进机控制的原理,结合有关资料才正式设计出程序,基本掌握了2812对步进机的控制,也更加熟悉了对DSP程序的设计,受益匪浅。

程序:

#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.//=============================

实 验 报 告

07电本(1)班

学号

2007050344 姓

名 杨宝辉

同组人 独立

实验日期

2010-6-1

室温

大气压

成 绩

直流电机控制实验

一、实验目的 1.2.二、实验设备 1.一台装有CCS软件的计算机; 2.DSP实验箱;

要求学生掌握2812 PWM的使用方法; 掌握2812对直流电机的控制。

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

三、实验原理

电机模块的原理图如下

四、实验步骤

3.连接好DSP开发系统;

4.本实验工程文件(Example_dcmotor.pjt),编译,下载程序到DSP; 5.运行程序,用观察直流电机运行方向和速度的变化;

五、实验心得体会

通过本次实验,认识了PWM的使用方法,通过亲身体验,初步掌握了2812对PWM的控制使用方法,加深了对PWM的认识。本次实验的主要目的是通过2812对直流电机的控制,开始对于程序的设计没有头绪,通过查阅直流电机的原理,结合有关资料才正式设计出程序,基本掌握了2812对直流电机的控制,也更加熟悉了对DSP程序的设计,受益匪浅。

附:实验程序:

#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课程设计实验报告总结word格式文档
下载dsp课程设计实验报告总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    dsp实验报告心得体会

    TMS320F2812x DSP原理及应用技术实验心得体会 1. 设置环境时分为软件设置和硬件设置,根据实验的需要设置,这次实验只是软件仿真,可以不设置硬件,但是要为日后的实验做准备,还是......

    DSP课程设计教学大纲

    DSP课程设计教学大纲 课程名称:DSP课程设计 英文名称:Design of DSP course 学 时:2周 学 分:2 适用专业:电子信息工程、通信工程专业本科生 课程类别:必修 课程性质:集中实践环......

    DSP第一次实验报告(汇编)

    信息与通信工程学院 信号与信息处理综合实验(DSP部分) 实验报告 班 级: 2012211127 名: 刘灿 姓学日 号: 2012210732 期: 2015.4.10 一.实验题目 Hello World和LED 二.实......

    DSP课程设计心得 2

    心得体会:课程设计时间虽短,但是这次我也基本熟悉了一种新的集成开发环境CCS,学习新的知识的过程也是自己学习能力培养与提升的过程。TDS510USB 仿真器驱动程序的安装以及相应的配置流程......

    DSP技术课程设计教学大纲

    《DSP技术与应用》课程设计教学大纲 适用专业:电子信息工程/通信工程 学 时: 2 周 编写人:刘伟春 审定人:余建坤 何海浪 一、 本课程设计的性质、目的、任务 本课程设计是为电子......

    DSP数字图像取反课程设计大全

    西南石油大学 2012级专业综合实践” 报 告 报告题目 :DSP数字图像取反课程设计 学 院 :电气信息学院 作 者 :曾翔 联系方式 :*** 辅导老师 :曹玉英 完成日期 : 2016年 01......

    数字信号处理(DSP)课程设计报告

    中南大学 数字信号处理课程设计报告 专业班级: 通信工程1201 指导老师:李宏姓名: 学号: 完成日期:2014年10月18日 前 言 现代信号处理是将信号表示并处理的理论和技术,而......

    无线课程设计实验报告

    扩频实验报告 学 院: 电子信息工程学院 专 业: 通信工程 组员: 12211008 吕兴孝 12211010 牟文婷 12211096 郑羲 12211004 冯顺 任课教师: 姚冬萍 1实验四 扩频实验一、实验......