DSP结课报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DSP结课报告
系部:电子通信工程系
专业:应用电子技术
班级:
学生姓名:
学号:
任课老师:
2010年11月18日
结课报告
序言
DSP数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。

20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。

数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。

在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。

课程目的意义
数字信号处理是自动化专业的一门以实践为主的技术类专业选修课,它要求我们了解DSP及DSP控制器的发展过程及其特点,熟练地掌握DSP及DSP硬件器的结构、各部件基本工作原理,DSP的指令系统、程序设计方法,学会TMS320系列中1至2种DSP芯片的基本使用方法,并能重点利用DSP及DSP控制器设计典型的应用系统, 为今后从事相关设计与研究打下基础。

在通常的实时信号处理中,DSP具有可程控、可预见性、精度高、稳定性好、可靠性和可重复性好、易于实现自适应算法、大规模集成等优点,这都是模拟系统所不及的。

它利用计算机或专用处理设备,在模拟信号变换成数字信号以后,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等高速实时处理的专用处理器,其处理速度比最快的CPU还快10~50倍。

DSP主要应用市场为3C领域,合占整个市场需求的90%。

数字蜂窝电话是DSP最为重要的应用领域之一。

由于DSP具有强大的计算能力,使得移动通信的蜂窝电话重新崛起,并创造了一批诸如GSM、CDMA等全数字蜂窝电话网。


Modem器件中,DSP更是大放异彩,不仅大幅度提高了传输速率,且具有接收动态图像的能力。

随着DSP芯片技术档次不断提高,多功能化、高性能化、低功耗化的DSP日益进入人们的生活,在未来相当长的一段时间,我国的DSP市场将蓬勃发展,今后几年市场销售额将保持40%以上的增长率,具有良好的市场前景。

报告要求
1. 写一个汇编语言子函数Mul32to32(unsigned int a, unsigned int b, void * p_64int),实现32bit*16bit=32bit的无符号整型数据的乘法;
2. C调用汇编函数,汇编函数调用C函数:
在main函数中调用汇编实现的函数addarr3, 在addarr3中调用C子函数addarr2;addarr3(int * arr3, int * arr4, int n) 是汇编函数,其功能为2个数组即arr3和arr4数组对应位置相加,结果放在arr4[n]中;
汇编函数addarr3中调用C的子函数,它把arr1和arr2相加放到arr3[n]中;
即addarr2(int * arr1, int * arr2, int * arr3, int n)。

汇编函数调用C函数addarr1、addarr2 、addarr3。

一、DSP系统设计
设计流程图如下:
DSP应用系统设计步骤:
在进行DSP系统设计之前首先应给出明确的设计任务,给出设计任务书。

在设计任务书中应将系统要达到的功能描述准确、清楚;描述的方式可以是人工语言,
也可以是流程图或算法描述。

之后将设计任务书转化为量化的技术指标。

系统集成:
系统的软、硬件设计分别调试完成之后,进行系统集成。

系统集成是将软、硬件结合起来,并组合成样机,在实际系统中运行,进行系统测试。

二、DSP前沿技术及其应用
1. 在生产工艺上采用1µm以下的CMOS制造工艺技术和砷化镓集成电路制造技术,使集成度更高,功耗更低,从而使高频、高速的DSP处理器得到更大的发展。

2. 基本结构上以RISC结构、单片并行计算机结构为主导,脉冲阵列和数据流阵列也将成为并行处理器的主要体系结构。

设计、测试简单,易模块化,易于实现流水线操作和多处理器结构。

3. 模拟/数字混合上集滤波、A/D、D/A及DSP处理于一体,将成为DSP发展的主要方向,是DSP厂商的主要增长点。

4. DSP技术与ASIC技术融合上在DSP芯片中嵌入ASIC模块,进一步扩大DSP 逻辑控制功能。

仪器仪表:频谱分析、函数发生、数据采集、地震处理等。

自动控制:控制、深空作业、自动驾驶、机器人控制、磁盘控制等。

医疗:助听、超声设备、诊断工具、病人监护、心电图等。

家用电器:数字音响、数字电视、可视电话、音乐合成、音调控制、玩具与游戏等。

三、硬件电路原理图设计
TMS320VC5402
C5402采用3.3V和1.8V电源供电,其中I/O采用3.3V电源供电,芯片的核采用1.8V电源供电。

而实际常用的只有5V电源,所以必须采用电源转换芯片。

选用TPS7301和TPS7333两块电源转换芯片(它们都是TI公司为配合DSP而设计的电源转换芯片),分别接上适当的外围电阻,构成电阻分压器,即可调整两块芯片的输出电压分别为3.3V和1.8V。

FLASH部分
复位电路部分
RAM部分
四、软件设计流程图
五、软件使用步骤
1、打开CCS6000的C运行时的环境。

2、假设乘数和被乘数分别为a=0x10008,b=0x00020,已经分别放在了
(0x80000000)和(0x80000004)单元中,(DP)=0x80000000,下面就是这两个
数相乘的得汇编程序:
LDW .D2T2 *DP[0x0],B4
LDW .D2T2 *DP[0x1],B5
NOP 4
MPYLH .M2 B5,B4,B6
MPYLH .M2 B4,B5,B7
MPYU .M2 B5,B4,B4
ADD .D2 B6,B7,B5
SHL .S2 B5,0x10,B5
STW .D2T2 B4,*DP[0x2]
3、最后计算的结果放在(0x80000008)单元中,最后运行结果如下图所示。

由汇编语言程序可以看出,假设数分别用[(a)高16位(b)低16位]*[(c) 高16位(d)低16位]来代替,那么汇编语言实现的就是用下面的算法实现的:[(a*d)+(b*c)]*1000h+(b*d),因为寄存器的长度有所限制,所以在做乘法时,就把高位相乘(a*c)的结果舍弃掉了。

3、在第二个程序中,调用汇编函数,汇编函数调用c函数,这其中采用数据来实现参数的传递。

(1)先从最后一个子函数开始,即
addarr2(int *arr1, int *arr2, int *arr3, int n)
static int addarr2(int *arr1, int *arr2,int *arr3,int n)
{
for(i=0;i<n;i++)
{
*arr3++ = *arr1++ + *arr2++;
}
return ;
}
(2)实现了两个数组相加的子程序之后,下面就要编写汇编子函数了,这个子函数不仅是一个子函数,也是一个父函数,通过它来调用上一个addarr2函数,由于是汇编程序,所以其中的断点的保护就需要用指令来实现,这就要先搞清楚需要把那些寄存器压栈,最后还要把相应的寄存器出栈。

这个函数的功能也是两个数组相加,即arr3[5]+arr4[5]=>arr4[5],通过地址来实现数据在函数中的传递。

实现这个函数的程序如下:
.global _addarr3
.text
_addarr3:
mvk .s2 0x0005,b0 ;设置循环次数
mvk .s1 0x002c,a1 ;arr3首地址
mvkh .s1 0x6000002c,a1
mvk .s1 0x0040,a2 ;arr4首地址
mvkh .s1 0x60000040,a2
loop:
ldw .d1 *a1++,a3 ;开始做加法
ldw .d1 *a2,a4
nop 4
add .l1 a3,a4,a4
sub .s2 b0,1,b0
stw .d1 a4,*a2++
nop 4
[b0] b .s2 loop
nop 5
.end
(3)由于在调试上面两个程序时都需要观察结果,所以在最初调试addarr2子函数时就采用printf( )函数输出的办法来观察最后计算的结果是否正确,当addarr3
汉书编写完成后,再实现两个子函数的联调。

最后得到main( )函数如下:void main()
{
addarr2(arr1,arr2,arr3,n); /*调用addarr2函数*/
addarr3(arr3,arr4); /*调用addarr3函数*/
for(i=0;i<n;i++)
{
printf("The arr4 is:%d\n",arr4[i]);
}
return ;
}
最后整合完整C语言的程序如下:
#include "stdio.h"
#define size 5 /*定义常量size*/
int i,n=size;
int arr1[size]={1,2,3,4,5}; /*输入数据数组*/
int arr2[size]={2,3,4,5,6};
int arr3[size];
int arr4[size]={5,6,7,8,9}; /*开辟存储空间*/
extern void addarr3(int arr3[size],int arr4[size]); /*定义子函数addarr3*/
static int addarr2(int *arr1,int *arr2,int *arr3,int n); /*定义子函数addarr2*/ void main()
{
addarr2(arr1,arr2,arr3,n); /*调用addarr2函数*/
addarr3(arr3,arr4); /*调用addarr3函数*/
for(i=0;i<n;i++)
{
printf("The arr4 is:%d\n",arr4[i]);
}
return ;
}
static int addarr2(int *arr1, int *arr2,int *arr3,int n)
{
for(i=0;i<n;i++)
{
*arr3++ = *arr1++ + *arr2++;
}
return;
}
六、运行结果
运行结果如下图所示:
十.心得体会
学习数字信号处理(DSP)这门课,我对DSP应用系统有了简单的了解,通过使用CCS6000进行DSP程序的编写和调试工作,逐步掌握CCS6000的C运行环境和流水线工作流程,以及DSP在处理程序式的过程和常见错误类型,从而提高了独立思考问题并解决问题的能力和动手能力。

虽然还存在着很多不足,我会多多练习,并不断地进步。

多谢老师的指导。

参考文献:
[1] 许可军,DSP应用开发实用子程序,人民邮电出版社,2002。

[2] 张雄伟,DSP芯片的原理与开发应用(第二版),北京电子工业出版社,2000;
[3] 王彦平、任延群、危胜军,《Protel 99SE电路设计指南》[M],清华大学出版社,2000年。

相关文档
最新文档