DSP能力培训课题报告Word下载.docx

上传人:b****6 文档编号:20693391 上传时间:2023-01-25 格式:DOCX 页数:30 大小:2.26MB
下载 相关 举报
DSP能力培训课题报告Word下载.docx_第1页
第1页 / 共30页
DSP能力培训课题报告Word下载.docx_第2页
第2页 / 共30页
DSP能力培训课题报告Word下载.docx_第3页
第3页 / 共30页
DSP能力培训课题报告Word下载.docx_第4页
第4页 / 共30页
DSP能力培训课题报告Word下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

DSP能力培训课题报告Word下载.docx

《DSP能力培训课题报告Word下载.docx》由会员分享,可在线阅读,更多相关《DSP能力培训课题报告Word下载.docx(30页珍藏版)》请在冰豆网上搜索。

DSP能力培训课题报告Word下载.docx

三、指导教师评语

四、成绩

指导教师(签章)

年月日

第一章DSP概述

1.1DSP简介

DSP通常指的是执行这些功能的芯片或处理器。

广义来说,数字信号处理(DigitalSignalProcessing,简称DSP)技术是指数字信号处理理论的应用实现技术,它以数字信号处理理论、硬件技术、软件技术为基础和组成,研究数字信号处理算法及其实现方法。

而DSP芯片即指能够实现数字信号处理技术的芯片。

DSP的实现方法一般有以下几种:

⑴在通用的计算机(如PC机)上用软件(如Fortran、C语言)实现;

⑵在通用计算机系统中加上专用的加速处理机实现;

⑶用通用的单片机(如MCS-51、96系列等)实现,这种方法可用于一些不太复杂的数字信号处理,如数字控制等;

⑷用通用的可编程DSP实现。

与单片机相比,DSP芯片具有更加适合于数字信号处理的软件和硬件资源,可用于复杂的数字信号处理算法;

⑸用专用的DSP芯片实现。

在一些特殊的场合,要求的信号处理速度极高,用通用DSP芯片很难实现,例如专用于FFT、数字滤波、卷积、相关等算法的DSP芯片,这种芯片将相应的信号处理算法在芯片内部用硬件实现,无需进行编程。

在上述几种方法中,第1种方法的缺点是速度较慢,一般可用于DSP算法的模拟;

第2种和第5种方法专用性强,应用受到很大的限制,第2种方法也不便于系统的独立运行;

第3种方法只适用于实现简单的DSP算法;

只有第4种方法才使数字信号处理的应用打开了新的局面。

1.2DSP芯片的分类及应用

DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。

根据数字信号处理的要求,DSP芯片一般具有如下的一些主要特点:

1在一个指令周期内可完成一次乘法和一次加法;

图1-1CPU原理结构

⑵程序和数据空间分开,可以同时访问指令和数据;

⑶片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;

⑷具有低开销或无开销循环及跳转的硬件支持;

⑸快速的中断处理和硬件I/O支持;

⑹具有在单周期内操作的多个硬件地址产生器;

⑺可以并行执行多个操作;

⑻支持流水线操作,使取指、译码和执行等操作可以重叠执行,等。

与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。

图1-2DSP芯片实物

图1-3DSP芯片内部结构

DSP芯片可以按照下列三种方式进行分类。

1.按基础特性分

这是根据DSP芯片的工作时钟和指令类型来分类的。

如果在某时钟频率范围内的任何时钟频率上,DSP芯片都能正常工作,除计算速度有变化外,没有性能的下降,这类DSP芯片一般称为静态DSP芯片。

例如,日本OKI电气公司的DSP芯片、TI公司的TMS320C2XX系列芯片属于这一类。

如果有两种或两种以上的DSP芯片,它们的指令集和相应的机器代码机管脚结构相互兼容,则这类DSP芯片称为一致性DSP芯片。

例如,美国TI公司的TMS320C54X就属于这一类。

2.按数据格式分

这是根据DSP芯片工作的数据格式来分类的。

数据以定点格式工作的DSP芯片称为定点DSP芯片,如TI公司的TMS320C1X/C2X、TMS320C2XX/C5X、TMS320C54X/C62XX系列,AD公司的ADSP21XX系列,AT&

T公司的DSP16/16A,Motolora公司的MC56000等。

以浮点格式工作的称为浮点DSP芯片,如TI公司的TMS320C3X/C4X/C8X,AD公司的ADSP21XXX系列,AT&

T公司的DSP32/32C,Motolora公司的MC96002等。

不同浮点DSP芯片所采用的浮点格式不完全一样,有的DSP芯片采用自定义的浮点格式,如TMS320C3X,而有的DSP芯片则采用IEEE的标准浮点格式,如Motorola公司的MC96002、FUJITSU公司的MB86232和ZORAN公司的ZR35325等。

3.按用途分

按照DSP的用途来分,可分为通用型DSP芯片和专用型DSP芯片。

通用型DSP芯片适合普通的DSP应用,如TI公司的一系列DSP芯片属于通用型DSP芯片。

专用DSP芯片是为特定的DSP运算而设计的,更适合特殊的运算,如数字滤波、卷积和FFT,如Motorola公司的DSP56200,Zoran公司的ZR34881,Inmos公司的IMSA100等就属于专用型DSP芯片

目前,DSP芯片主要应用于信号处理、图像处理、仪器、声音语言、控制、军事、通讯、医疗、家用电器等领域。

第二章CCS软件的使用

本次课题任务编程所需要的编程软件使用的是CCS4.0版本,DSP硬件仿真器为XDS100V2,TMS320F2812CPU板。

2.1工程创建

第一步:

菜单“File→New→CCSProject(中文版本:

文件→新建→CCS项目)”如下图2-1所示。

图2-1工程创建

第二步:

在“ProjectName(项目名称)”字段中,键入新项目的名称。

若选中“Usedefaultlocation(使用默认位置)”选项(默认启用),将会在工作区文件夹中创建项目。

取消选中该选项可以选择一个新位置(使用“Browse...(浏览...)”按钮)。

将项目命名为“first”。

第三步:

在“Target”菜单中选择要使用的芯片类型。

第四步:

在“Connetion”里选择调试器。

第五步:

单击“Finish(完成)”创建项目。

如图2-2所示。

图2-2工程创建

第六步:

要为项目创建文件,请在“C/C++Projects(C/C++项目)”(路径:

工具栏Window→ShowView→Other下的C/C++→C/C++Projects)视图中右键单击项目名称,并选择“New→SourceFile(新建→源文件)”。

在打开的文本框中,键入包含与源代码类型对应的有效扩展名(.c、.C、.cpp、.c++、.asm、.s64、.s55等)的文件名称。

单击“Finish(完成)”。

在创建了项目并且添加或创建了所有文件之后,需要生成项目。

只需转到菜单“Project→BuildActiveProject(项目→生成活动项目)”。

注意需要添加头文件等必要操作。

建立完成后的工程界面如图2-3所示。

图2-3工程界面

2.2仿真操作

建立一个TMS320F2812芯片和XDS100V2的配置文件,启动并连接上,然后将视图切换到“CCSEdit”下,将导入的工程的CMD文件从“2812.cmd(烧写所用CMD文件)”替换成“2812_RAM_lnk.cmd(仿真所用CMD文件)”,然后右击工程选择“BuildProject”进行编译,编译没有错误后会在Workspace(工作区间)的工程文件夹下的Debug文件夹里产生一个.out文件),加载这个“.out”文件后即可进行仿真操作,详细操作见下图2-4所示。

图2-4仿真操作

CMD文件更改过后,将视图切换到“CCSDebug”视图下进行工程的加载(步骤:

点击“工具栏Run→Load→LoadProgram”),详见下图2-5所示。

图2-5仿真操作

接着在出现的对话框里进行如下图2-6所示操作。

图2-6仿真操作

加载完成后点击运行,即可观察到开发板上的现象。

第三章CPU和EVA定时器的使用

本章将描述如何采用CPU定时器和EVA定时器控制LED灯的亮灭时间间隔,以及如何采用中断按键切换此两种模式。

3.1GPIO寄存器

DSP2812GPIO模块分为三类I/O口。

对GPIO模块的设置主要通过三类寄存器来完成,分别是:

控制寄存器、数据寄存器、中断寄存器。

1.控制寄存器

GPxCTRL;

//GPIOxControlRegister(GPIO0to31)

//设置采样窗周期T=2*GPXCTRL*Tsysclk;

GPxQSEL1;

//GPIOxQualifierSelect1Register(GPIO0to15)(32-47)

GPxQSEL2;

//GPIOxQualifierSelect2Register(GPIO16to31)(48-63)//每两位控制

//一个引脚,确定是3周期采样还是6周期采样或者不用采样

GPxMUX1;

//GPIOxMux1Register(GPIO0to15)(32-47)(64-79)

GPxMUX2;

//GPIOxMux2Register(GPIO16to31)(48-63)(80-95)

//配置各个引脚的功能,0:

I/O功能,1:

外设功能。

GPxDIR;

//GPIOxDirectionRegister(GPIO0to31)(32-63)(64-95)

//配置每个引脚是输入还是输出,0:

数字量输入;

1:

数字量输出。

GPxPUD;

//GPIOxPullUpDisableRegister(GPIO0to31)(32-63)(64-95)

//使能或禁止内部上拉0:

开启上拉,1:

禁止上拉

2.数据寄存器

GPxDAT;

//GPIODataRegister(GPIO0to31)(32-63)(64-95)

GPxSET;

//GPIODataSetRegister(GPIO0to31)(32-63)(64-95)——置位

GPxCLEAR;

//GPIODataClearRegister(GPIO0to31)(32-63)(64-95)

GPxTOGGLE;

//GPIODataToggleRegister(GPIO0to31)(32-63)(64-95)——反转

3.中断寄存器

GPIOXINT1SEL;

//XINT1GPIOInputSelection

GPIOXINT2SEL;

//XINT2GPIOInputSelection

GPIOXNMISEL;

//XNMI_Xint13GPIOInputSelection

GPIOXINT3SEL;

//XINT3GPIOInputSelection

GPIOXINT4SEL;

//XINT4GPIOInputSelection

GPIOXINT5SEL;

//XINT5GPIOInputSelection

GPIOXINT6SEL;

//XINT6GPIOInputSelection

GPIOXINT7SEL;

//XINT7GPIOInputSelection

GPIOLPMSEL;

//LowpowermodesGPI/Oinputselect

具体的详细配置在TI官方的头文件DSP2812x_Gpio.h中。

3.2CPU定时器

TMS320F2812的CPUTime有三个,分别为Timer0、Timer1和Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。

这三个定时器的中断信号分别为TINT0、TINT1和TINT2,分别对应于中断向量INT1、INT13和INT14。

图3-1为定时器0的结构图,图中TIMH:

TIM为计数寄存器,PRDH:

PRD为周期寄存器,形如AH格式:

A的形式表示一个32位的寄存器,是由两个16位的寄存器构成,AH是高16位,A是低16位。

图3-1定时器0结构

CPU定时器的计数复位时,计数寄存器TIMH:

TIM加载周期寄存器PRDH:

PRD所设定的值,经历一个计数器时钟后,TIMH:

TIM内的值就减1,一直减到0,这时产生定时器周期中断事件,并重新装载PRDH:

PRD所设定的值,重新开始计数。

至于每隔多少时间,计数寄存器TIMH:

TIM的值才会减1则由预分频寄存器TPRH:

TPR来决定。

TPRH和TPR这两个寄存器由两部分组成,高8位为定时器预分频计数器PSC,低8位是定时器分频TDDR。

也即是说:

TPRH是由PSCH和TDDRH构成,而TDDR由PSC和TDDR构成。

且其工作的原理与51系列单片机定时器计数器类似,复位时,PSCH:

PSC加载TDDRH:

TDDR所设定的值,然后经过一个CPU时钟,PSCH:

PSC的值减1,当PSCH:

PSC的值减到0时,会再次装载TDDRH:

TDDR所设定的值,并且产生一个计数器时钟,TIMH:

TIM减1。

TI官方库中提供的定时器配置函数如下(头文件为DSP2833x_CpuTimers.h):

voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod)

{

Uint32temp;

//定时器周期参数初始化:

Timer->

CPUFreqInMHz=Freq;

//频率

PeriodInUSec=Period;

//周期

temp=(long)(Freq*Period);

RegsAddr->

PRD.all=temp;

//周期寄存器设定值为timer

//预分频寄存器初始化为1(SYSCLKOUT):

TPR.all=0;

TPRH.all=0;

//定时器控制寄存器初始化:

TCR.bit.TSS=1;

//1=停止定时器,0=启动/重启定时器

TCR.bit.TRB=1;

//1=重载计时器

TCR.bit.SOFT=1;

//定时器自由运行

TCR.bit.FREE=1;

TCR.bit.TIE=1;

//0=禁止/1=定时器中断使能

//复位中断计数器:

InterruptCount=0;

}

上述函数ConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod)中的形参Timer为第几位定时器,Freq为定时频率,Period为计时周期。

假若Freq为15,Period为1000000,则时间t=1*15*1000000/150M=0.1s(系统时钟频率为150M)。

不过这个算式的成立是有条件的,这个条件就是以下两条语句:

如果要利用定时器产生一定周期的时间中断,在主函数中设置响应的中断向量即可。

3.3EV事件管理器

事件管理器为用户提供了强大的控制功能,特别是在运动控制和电机控制领域。

TMS320F2812提供两个具有相同结构和功能的事件管理器模块EVB和EVA,可用于多电机控制。

每个事件管理器模块包含通用定时器、全比较/PWM单元、捕获单元及正交编码脉冲电路等部分,可以通过一个三相逆变桥来满足功率互补控制,同时还可以提供两个非互补的PWM信号。

每个事件管理器模块都有两个通用定时器、3个比较单元、3个捕获单元以及1个正交编码电路。

EVA包含通用定时器1和2,EVB包含通用定时器3和4。

这些定时器模块可以根据需要单独使用,如在控制系统中采样周期,为捕获单元、正交编码电路、比较单元和PWM产生电路提供时基等。

通用定时器是用来计时的,而且每个定时器还能产生1路独立的PWM波形。

比较单元主要功能就是用来生成PWM波形的,EVA具有3个比较单元,每个单元可以生成一对(两路)互补的PWM波形,生成的6路PWM波形正好可以驱动一个三相桥电路。

捕获单元的功能是捕捉外部输入脉冲波形的上升沿或者下降沿,可以统计脉冲的间隔,也可以统计脉冲的个数。

正交编码电路可以对输入的正交脉冲进行编码和计数,它和光电编码器相连可以获得旋转机械部件的位置和速率等信息。

图3-2EV事件管理器时钟模块

3.4外设中断扩展模块PIE

TMS320F2812的CPU能够支持一个不可屏蔽中断NMI和16个可屏蔽的中断INT1-INT14、RTOSINT和DLOGINT,2812的CPU为了能够及时有效的处理好各个外设的中断请求,设计了一个专门处理外设中断的扩展模块(thePeripheralInterruptExpansionblock),叫做外设中断控制器PIE,它能够对各种中断请求源(例如来自于外设或者其他外部引脚的请求)做出判断以及相应的决策。

PIE可以支持96个不同的中断,这些中断分成了12个组,每个组有8个中断,而且每个组都被反馈到CPU内核的12条中断线中的某一条上(INT1-INT12)。

PIE目前只使用了96个终端中的45个,其他的等待将来的功能扩展。

图3-3PIE内部中断分布图

PIE内部的中断8列12行,总共有96个中断,黄色部分表示已经使用的中断,例如:

查看事件管理器EVA中定时器T1的周期中断T1PINT-------T1PINT在行号为INT2,列号为INTx.4的位置,也就是说T1IPNT对应于INT2,是INT2中的第四个中断。

图3-43级中断机制

3.5控制程序

本程序既是实现分别采用CPU定时器和EVA定时器控制LED灯的亮灭时间间隔,并采用中断按键切换此两种模式的功能。

程序如下:

#include"

DSP28_Device.h"

DSP28_Globalprototypes.h"

interruptvoidISRTimer2(void);

interruptvoidExtIntISR(void);

interruptvoideva_timer1_isr(void);

voidinit_eva_timer1(void);

Uint16EVAcount=0;

Uint16LedCount=0;

Uint16Flag=0;

//记录按键所按次数

Uint16flag_change=0;

//定时器模式切换标志位

/***

***主函数

***/

voidmain(void)

InitSysCtrl();

//初始化系统

DINT;

//关中断

IER=0x0000;

IFR=0x0000;

InitPieCtrl();

//初始化PIE

InitPieVectTable();

//初始化PIE中断矢量表

InitCpuTimers();

//初始化定时器寄存器的地址指针

init_eva_timer1();

//初始化EV-A定时器1

InitGpio();

//初始化IO口

InitXIntrupt();

//初始化外部中断

EALLOW;

/***将相应的向量指向中断服务程序,中断发生时,自动跳转***/

PieVectTable.T1PINT=&

eva_timer1_isr;

//EV_A定时器中断服务程序

PieVectTable.TINT2=&

ISRTimer2;

//定时器2中断服务程序

PieVectTable.XINT1=&

ExtIntISR;

//外部中断服务程序

EDIS;

ConfigCpuTimer(&

CpuTimer2,50,100000);

//设置CPU定时器方式、频率、装载初值

StartCpuTimer2();

//起动CPU定时器2

/***开中断***/

IER|=M_INT1;

IER|=M_INT2;

IER|=M_INT14;

PieCtrl.PIEIER1.bit.INTx7=1;

PieCtrl.PIEIER1.bit.INTx4=1;

PieCtrl.PIEIER2.all=M_INT4;

//使能PIE中断INT2.4(T1PINT中断)

EINT;

//开总中断

ERTM;

//开定时器中断

GpioDataRegs.GPFDAT.bit.GPIOF14=1;

for(;

;

);

***EVA定时器1初始化函数

voidinit_eva_timer1(void)

EvaRegs.GPTCONA.all=0;

EvaRegs.T1PR=0x1200;

//Period---周期值

EvaRegs.T1CMPR=0x0000;

//CompareReg--比较值

EvaRegs.EVAIMRA.bit.T1PINT=1;

//清除周期EV-A定时器1中断位

EvaRegs.EVAIFRA.bit.T1PINT=1;

EvaRegs.T1CNT=0x0000;

//计数器初值

EvaRegs.T1CON.all=0x1042;

//递增模式,x/1分频,内部时钟,使能比较,使用自己的周期,立即启动定时器计数

***CPU定时器2中断服务函数

interruptvoidISRTimer2(void)

LedCount++;

if(flag_change==1)//按键次数为偶数时为CPU定时器中断控制

{

if(LedCount<

2)

{

GpioDataRegs.GPFDAT.bit.GPIOF14=1;

//LED灯灭

}

elseif(LedCount<

4)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1