dsp课程设计新蔡成灼

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

Harbin University Of Science And Technology DSP课程设计报告
学院:自动化学院
专业:电子信息科学与技术
班级:电技12-3
姓名:蔡成灼
学号:1212020301
日期:2015.7.12
指导教师:徐军
DSP课程设计任务书
一、课程设计的目的和意义:
本课程设计教学所要达到的目的是:
(1)掌握如何使用DSP仿真软件平台;——第5章和实验
(2)掌握DSP内部结构和工作原理;——第2章
(3)熟悉DSP的指令系统;——第3章、第4章以及第6章
(4)熟悉用DSP实现各种基本算法。

——第7章
通过对课程设计任务的完成,使学生进一步掌握理论教学的内容,并且能够掌握和熟悉DSP的开发流程和基本的编程方法,熟悉DSP5000系列芯片,并利用CCS5000系列的开发环境进行程序设计(软件仿真和硬件仿真两种),实现相应功能。

同时,由于设计中涉及到其他器件的使用,可以起到综合运用各种技术和知识的作用。

此外,学生的实验技能、动手能力、分析问题、解决问题的能力都将得到培养,为进一步进行工程实践奠定良好的基础。

二、课程设计的题目:
基于DSP的定时器的系统设计;(第8章-片上外8.1(时钟发生器)、8.2(设定时器))
基于DSP5000系列的有限冲击响应滤波器的系统设计;(第7章-7.3)
基于DSP5000系列的无限冲击响应滤波器的系统设计;(第7章-7.4)
基于DSP5000的电机控制方案设计;(第8章-片上外设8.1(时钟发生器)8.3(GPIO),8.5(McBSP))
三、课程设计的基本理论:
基本理论包括四部分。

一是数字信号处理的基本理论,包括信号处理系统的概念、离散时间信号处理系统的基本分析方法、连续时间系统的离散化处理等等;
二是利用科学计算软件MATLAB来帮助求解数字信号理论的内容;
三是DSP器件的基本理论,包括器件的结构(总线、CPU、寄存器、存储器等)和工作原理,器件中片内外部设备(定时器、计数器、串行I/O接口、直接内存存取DMA等)的工作原理,器件的指令系统等。

四是DSP仿真开发技术基本理论。

五是DSP开发板的使用。

六简单的输入和输出系统的设计。

四、课程设计的时间安排:
6月29日,布置课程设计题目和安排
6月30~7月1日,查找与课程设计题目相关的资料,理论设计(答疑地点:E区1006)
7月3 日上午8:30开始,电技12-3班的同学到B区302上机操作;
7月6 日下午13:30开始,电技12-3班的学生到B区302上机操作;
7月8 日上午8:30开始,电技12-3班的同学到B区302上机操作;
7月8 日下午13:30开始,电技12-1、2、3班的学生到B区302上机操作;
7月9日分析结果,整理、书写课程设计报告;
7月10 日交课程设计报告。

五、课程设计的内容:
1.根据课程设计题目具体内容要求进行理论流程图的设计
2.编写程序代码
3.上机调试
4.撰写课程设计报告
六、课程设计的撰写内容要求:
1.设计目的
S软件概述
3.设计原理
4.设计流程图;
5.程序代码(手写)
6.设计结果分析,提出改进措施,心得体会。

目录
第1章基于DSP 的定时器 ------------------------------------------------------------------ 1
1.1设计目的 -------------------------------------------------------------------------------- 1
1.2设计原理 -------------------------------------------------------------------------------- 1
1.3设计流程图 ----------------------------------------------------------------------------- 2
1.4实验步骤 -------------------------------------------------------------------------------- 2
1.5设计结果分析 -------------------------------------------------------------------------- 3第2章有限冲激响应滤波器FIR算法实验 ------------------------------------------------ 4
2.1设计目的 -------------------------------------------------------------------------------- 4
2.2设计原理 -------------------------------------------------------------------------------- 4
2.3设计流程图 ----------------------------------------------------------------------------- 4
2.4实验步骤 -------------------------------------------------------------------------------- 5
2.5设计结果分析 -------------------------------------------------------------------------- 5第3章无限冲激响应滤波器IIR算法实验------------------------------------------------- 7
3.1设计目的 -------------------------------------------------------------------------------- 7
3.2设计原理 -------------------------------------------------------------------------------- 7
3.3设计流程图 ----------------------------------------------------------------------------- 7
3.4实验步骤 -------------------------------------------------------------------------------- 7
3.5设计结果分析 -------------------------------------------------------------------------- 8第4章直流电机控制实验 ------------------------------------------------------------------- 10
4.1设计目的 ------------------------------------------------------------------------------ 10
4.2设计原理 ------------------------------------------------------------------------------ 10
4.3设计流程图 --------------------------------------------------------------------------- 12
4.4实验步骤 ------------------------------------------------------------------------------ 13
4.5设计结果分析 ------------------------------------------------------------------------ 13 第5章心得体会 ------------------------------------------------------------------------------ 14 附录----------------------------------------------------------------------------------------------- 15
第1章
第1章基于DSP 的定时器
1.1设计目的
1.通过实验熟悉VC5509A 的定时器;
2.掌握VC5509A 定时器的控制方法;
3.掌握VC5509A 的中断结构和对中断的处理流程;
4.学会C 语言中断程序设计,以及运用中断程序控制程序流程。

1.2设计原理
TMS320VC5509A 内部有两个20 位通用定时器(GP):
*每个通用定时器包括:
-一个16 位的减计数的计数器TIM;
-一个16 位的定时器周期寄存器PRD;
-一个16 位的定时器控制寄存器TCR;
-一个16 位的定时器预定标寄存器PSCR;
*PSCR 寄存器说明:
PSC: 4 位的预定标值,与TIM 共同组成20 位的定时计数器.
TDDR: 预定标周期寄存器(在需要时重装入PSC 的值)
2.中断响应过程
外设事件要引起CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中断也被使能。

在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器1会引起TINT中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。

3.中断程序设计:
-程序中应包含中断向量表,VC5509A 默认向量表从程序区0 地址开始存放,根据IPVD和IPVH 的值确定向量表的实际地址。

-注意观察程序中INTR_init()函数的定义部分,其中IPVD 和IPVH 的值都为0x0d0;同时观察配置文件ICETEK-VC5509-A.cmd 中的VECT 段描述中o=0x0d000。

-向量表中每项为8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。

第一个向量表的首项为复位向量,即CPU 复位操作完成后自动进入执行的程序入口。

-服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务。

1.3设计流程图
基于DSP的定时器设计流程图
1.4实验步骤
1.实验准备:
连接实验设备:关闭实验箱上扩展模块和信号源电源开关。

2.设置Code Composer Studio 2.21 在硬件仿真(Emulator)方式下运行:3.启动Code Composer Studio 2.21:
选择菜单Debug→Reset CPU。

4.打开工程文件:
打开菜单“Project”的“Open”项;选择C:\ICETEK-VC5509-EDULab\Lab0303-Timer 目录中的“Timer.pjt”。

在项目浏览器中,双击main.c,激活main.c 文件,浏览该文件的内容,理解各语句作用。

打开ICETEK-VC5509-A.cmd,对照vector.asm 源程序学习中断向量表的写法。

5.编译、下载程序。

6.运行程序,观察结果。

7.改变TIMER_init()函数里*prd0 = 0x0ffff 为“=0x0fff ”;重复步骤5,6 观察实验现象。

8.退出CCS:
1.5设计结果分析
-指示灯在定时器的定时中断中按照设计定时闪烁。

-使用定时器和中断服务程序可以完成许多需要定时完成的任务,比如DSP 定时启动A/D 转换,日常生活中的计时器计数、空调的定时启动和关闭等。

-在调试程序时,有时需要指示程序工作的状态,可以利用指示灯的闪烁来达到,指示灯灵活的闪烁方式可表达多种状态信息。

第2章有限冲激响应滤波器FIR算法实验2.1设计目的
1.掌握用窗函数法设计FIR 数字滤波器的原理和方法。

2.熟悉线性相位FIR 数字滤波器特性。

3.了解各种窗函数对滤波器特性的影响。

2.2设计原理
1.有限冲激响应数字滤波器的基础理论(请参考相关书籍)。

2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。

3.数字滤波器系数的确定方法。

(利用MATLAB帮助求解FIR滤波器系数)4.根据要求设计低通FIR滤波器。

(利用CCS编程实现FIR滤波器)
要求:通带边缘频率10kHz,阻带边缘频率22kHz,阻带衰减75dB,采样频率50kHz。

2.3设计流程图
基于DSP的有限冲激响应滤波器设计流程图
2.4实验步骤
1.实验准备:
-设置软件仿真模式
-启动CCS
2.打开工程,浏览程序:工程目录
C:\ICETEK-VC5509-EDULab\Lab0501-FIR\Fir.pjt。

3.编译并下载程序。

4.打开观察窗口。

*选择菜单View->Graph->Time/Frequency…,进行如下设置:
*选择菜单View->Graph->Time/Frequency…,进行如下设置:
在弹出的图形窗口中单击鼠标右键,选择“Clear Display”。

5.设置断点:在有注释“break point”的语句设置软件断点。

6.运行并观察结果:
⑴选择“Debug”菜单的“Animate”项,或按F12 键运行程序。

⑵观察“Input”、“Output”窗口中时域图形;观察滤波效果。

⑶鼠标右键单击“Input”和“Output”窗口,选择“Properties…”项,设置“Display Type”为“FFT Magitude”,再单击“OK”按钮结束设置。

⑷观察“Input”、“Output”窗口中频域图形;理解滤波效果。

7.退出CCS
2.5设计结果分析
输入波形为一个低频率的正弦波与一个高频的正弦波叠加而成。

通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则大部分被滤除。

第3章无限冲激响应滤波器IIR算法实验3.1设计目的
1.掌握设计IIR 数字滤波器的原理和方法。

2.熟悉IIR 数字滤波器特性。

3.了解IIR 数字滤波器的设计方法。

3.2设计原理
1.无限冲激响应数字滤波器的基础理论。

2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器)。

3.数字滤波器系数的确定方法。

4.根据要求设计低通IIR 滤波器:
要求:低通巴特沃斯滤波器在其通带边缘1kHz 处的增益为-3dB,12kHz处的阻带衰减为30dB,采样频率25kHz。

3.3设计流程图
基于DSP的无限冲激响应滤波器设计流程图
3.4实验步骤
1.实验准备:
设置软件仿真模式,启动CCS。

2.打开工程,浏览程序,工程目录
C:\ICETEK-VC5509-EDULab\Lab0502-IIR\IIR.pjt。

3.编译并下载程序。

4.打开观察窗口:
*选择菜单View->Graph->Time/Frequency…进行如下图所示设置。

*选择菜单View->Graph->Time/Frequency…,进行如下设置:
5.清除显示:在以上打开的窗口中单击鼠标右键,选择弹出式菜单中“Clear Display”功能。

6.设置断点:在程序iir.c 中有注释“break point”的语句上设置软件断点。

7.运行并观察结果:
⑴选择“Debug”菜单的“Animate”项,或按F12 键运行程序。

⑵观察“IIR”窗口中时域图形;观察滤波效果。

8.退出CCS:
3.5设计结果分析
输入波形为一个低频率的正弦波与一个高频的余弦波叠加而成。

如图:
通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则被衰减。

第4章直流电机控制实验
4.1设计目的
1.学习用C语言编制中断程序,控制VC5509 DSP的通用I/O管脚产生不同占空比的PWM信号。

2.学习VC5509DSP的通用I/O管脚的控制方法。

3.学习直流电机的控制原理和控制方法。

4.2设计原理
1. TMS320VC5509DSP的McBSP引脚:
通过设置McBSP的工作方式和状态,可以实现将它们当成通用I/O引脚使用。

2.直流电机控制:
直流电动机是最早出现的电动机,也是最早能实现调速的电动机。

近年来,直流电动机的结构和控制方式都发生了很大的变化。

随着计算机进入控制领域,以及新型的电力电了功率元器件的不断出现,使采用全控型的开关功率元件进行脉宽调制(Puls Width Modulation,简称PWM)控制方式已成为绝对主流。

PWM 调压调速原理直流电动机转速n的表达式为:
其中,U为电枢端电压;I为电枢电流;R为电枢电路总电阻;中为每极磁通量;K 为电动机结构参数。

所以直流电动机的转速控制方法可分为两类:对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。

其中励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少。

现在,大多数应用场合都使用电枢控制法。

绝大多数直流电机采用开关驱动方式。

开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。

上图是利用开关管对直流电动机进行PWM调速控制的原理图和输入输出电压波形。

图中,当开关管MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压Us。

t1秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为0。

t2秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。

这样,对应着输入的电平高低,直流电动机电枢绕组两端的电压波形如图中所示。

电动机的电枢绕组两端的电压平均值Uo为:
式中a为占空比,a =tl/T。

占空比a表示了在一个周期T里,开关管导通的时问与周期的比值。

a的变化范围为0
<a <1。

由此式可知,当电源电压US不变的情况下,电枢的端电压的平均值Uo取决于占空比a的大小,改变a值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。

PWM调速方法
在PWM调速时,占空比a是一个重要参数。

以下3种方法都可以改变占空比的值:
(1)定宽调频法:这种方法是保持t1不变,只改变t2,这样使周期T(或频率)也随之改变。

(2)调宽调频法:这种方法是保持t2不变,只改变t1,这样使周期T(或频率)也随之改变。

(3)定频调宽法:这种方法是使周期T(或频率)保持不变,而改变t1和t2 0
前两种方法由于在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因此这两种方法用得很少。

目前,在直流电动机的控制中,主要使用定频调宽法。

3 . ICETEK-CTR直流电机模块:
原理图
ICETEK-CTR即显示/控制模块上直流电机部分的原理图见下图。

图中PWM输入对应ICETEK-VC5509-A板上P4外扩插座第26引脚的S22信号,DSP将在此引脚上给出PWM信号用来控制直流电机的转速;图中的DIR 输入对应ICETEK-VC5509-A板上P4外扩插座第29引脚的S14信号,DSP将在此引脚上给出高电平或低电平来控制直流电机的方向。

从DSP输出的PWM信号和转向信号先经过2个与门和1个非门再与各个开关管的栅极相连。

控制原理
当电动机要求正转时,S14给出高电平信号,该信号分成3路:第1路接与门Y1的输入端,使与门Y1的输出由PWM决定,所以开关管V1栅极受PWM控制;第2路直接与开关管V4的栅极相连,使V4导通;第3路经非门F1连接到与门Y2的输入端,使与门Y2输出为0,这样使开关管V3截止;从非门F1输出的另一路与开关管V2的栅极相连,其低电平信号也使V2截止。

同样,当电动机要求反转时,S14给出低电平信号,经过2个与门和1个非门组成的逻辑电路后,使开关管V3受PWM信号控制,V2导通,V1, V4全部截止。

4.程序编制:
程序中采用定时器中断产生固定频率的PWM波,100次中断为一个周期,在每个中断中
根据当前占空比判断应输出波形的高低电平。

主程序用轮询方式读入键盘输入,得到转速和方向控制命令。

在改变电机方向时为减少电压和电流的波动采用先减速再反转的控制顺序。

4.3设计流程图
直流电机设计流程图
4.4实验步骤
1.实验准备:
(1)连接实验设备:
(2)连接实验箱附带的键盘的PS2插头到ICETEK-CTR的“键盘接口”P8o
(3)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。

2.设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行:
3.启动Code Composer Studio 2.21:
选择菜单Debug->Reset CPU
4.打开工程文件:
工程目录:C:\ICETEK-VCS5509-EDULab\Lab0406-DCMotor\DCMotor.pjt。

浏览main.c文件的内容,理解各语句作用。

5.编译并下载程序。

6.运行并观察程序运行结果。

开始运行程序后,电机以中等速度转动(占空比=60,转速=20)
在小键盘上按数字1~5键将分别控制电机从低速到高速转动(转速=1 ~5)。

在小键盘上按数字0键将控制电机停止转动。

在小键盘上按+或-键切换电机的转动方向。

如果程序退出或中断时电机不停转动,可以将控制ICETEK-CTR模块的电源开关关闭再开启一次。

有时键盘控制不是非常灵敏,这是因为程序采用了轮询方式读键盘输入的结果,可以多按几次按键。

7.结束程序运行:
在小键盘上按‘Enter’键停止电机转动并退出程序。

8.退出CCSo
4.5设计结果分析
通过实验可以发现,直流电机受到控制,可以改变转速和方向。

第5章心得体会
在这次DSP课程设计实习里,通过对DSP的学习与应用明白实际操作和课本上的知识有很大联系,但又高于课本,体会到了理论与实践相结合的重要性,同时查阅相关文献资料、组织材料、团队合作等的能力都得到了相应的提高。

课程设计时间虽短,但是这次我也基本熟悉了一种新的集成开发环境CCS,学习新的知识的过程也是自己学习能力培养与提升的过程。

从仿真环境的配置,到工程的建立,文件的加载,到程序的仿真,与目标板的链接与调试,整个过程在摸索中逐渐熟悉。

对已有程序进行修改,重复相应的过程也能实现预定的功能,在短短的时间里能掌握这些基本就差不多了,由于有的需要配置的文件的缺失,无法完成对相应工程的配置设置,所以采用的参考例程里的程序,完成整个过程,这也是一个学习的过程。

做项目不是一个人的事,每个成员都应积极的参与,为整个项目的完成提供保障,团队的协作,尽可能的去发挥每个成员的专长,在整个项目的完成都能有所收获,这才应该是做项目的真正目的,加强同学之间的交流,用心付出,共同享受带给大家的成功的喜悦。

相关课程的学习只是个基础,在此基础之上对相应的硬件与软件结合,切实去体验一个芯片所能实现的各种功能,去发现所学的知识会在哪些方面用到,是如何应用,有怎样可以改进的方法,更深层次去掌握跟其他相关课程的交叉点,提升学习能力,从近期来看,可以为我们将要开始的毕业设计做准备,当做是一次练手,争取出色完成毕业设计,为四年的大学交出一份完美的答卷。

从长远看,为自己以后的工作也在一定程度的奠定基础,学习能力强了,自己就能比较快的接受新知识,更能适应社会对人的要求。

在这次实习中,在收获知识的同时,还收获了阅历。

在此过程中,通过查找相关资料,请教老师,不仅培养了独立思考、动手操作的能力,组织材料、团队合作等能力也得到了相应的提高,而且在与老师和同学的交流过程中,互动学习,能更好的将知识融会贯通,达到了事半功倍的效果。

更重要是我从中学到:要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

不管怎样,这些都是一种锻炼,只有不断的积累这些最基础的,才可以更进一步,取得更好的成绩。

总之,这次实习巩固了DSP这门课程的知识,并且对提高自己的动手能力与设计能力有了很大帮助。

附录
(1)
--mian.c
#include "myapp.h"
// 定义指示灯寄存器地址和寄存器类型
#define LBDS (*((unsigned int *)0x400001)) void INTR_init( void );
void TIMER_init(void);
int nCount;
main()
{
nCount=0;
CLK_init();
SDRAM_init();
LBDS=0;
INTR_init();
TIMER_init();
while ( 1 )
{
}
}
void interrupt Timer()
{
nCount++; nCount%=16;
if ( nCount==0 )
LBDS^=1;
}
void INTR_init( void )
{
IVPD=0xd0;
IVPH=0xd0;
IER0=0x10;
DBIER0 =0x10;
IFR0=0xffff;
asm(" BCLR INTM");
}
void TIMER_init(void)
{
ioport unsigned int *tim0;
ioport unsigned int *prd0;
ioport unsigned int *tcr0;
ioport unsigned int *prsc0;
tim0 = (unsigned int *)0x1000;
prd0 = (unsigned int *)0x1001;
tcr0 = (unsigned int *)0x1002;
prsc0 = (unsigned int *)0x1003;
*tcr0 = 0x04f0;
*tim0 = 0;
*prd0 = 0x0ffff;
*prsc0 = 2;
*tcr0 = 0x00e0;
}
--sdram_init.c
#include "myapp.h"
void SDRAM_init( void )
{
ioport unsigned int *ebsr =(unsigned int *)0x6c00;
ioport unsigned int *egcr =(unsigned int *)0x800;
ioport unsigned int *emirst=(unsigned int *)0x801;
//ioport unsigned int *emibe =(unsigned int *)0x802;
ioport unsigned int *ce01 =(unsigned int *)0x803;
//ioport unsigned int *ce02 =(unsigned int *)0x804;
//ioport unsigned int *ce03 =(unsigned int *)0x805;
ioport unsigned int *ce11 =(unsigned int *)0x806;
//ioport unsigned int *ce12 =(unsigned int *)0x807;
//ioport unsigned int *ce13 =(unsigned int *)0x808;
ioport unsigned int *ce21 =(unsigned int *)0x809;
//ioport unsigned int *ce22 =(unsigned int *)0x80A;
//ioport unsigned int *ce23 =(unsigned int *)0x80B;
ioport unsigned int *ce31 =(unsigned int *)0x80C;
//ioport unsigned int *ce32 =(unsigned int *)0x80D;
//ioport unsigned int *ce33 =(unsigned int *)0x80E;
ioport unsigned int *sdc1 =(unsigned int *)0x80F;
//ioport unsigned int *sdper =(unsigned int *)0x810;
//ioport unsigned int *sdcnt =(unsigned int *)0x811;
ioport unsigned int *init =(unsigned int *)0x812;
ioport unsigned int *sdc2 =(unsigned int *)0x813;
//*ebsr = 0x221;//0xa01
*ebsr = 0xa01;
*egcr = 0x220;
*egcr = 0X220;
*ce01 = 0X3000;
*ce11 = 0X1fff;
*ce21 = 0x1fff;
*ce31 = 0x1fff;
*emirst = 0;
*sdc1 = 0X5958;
*sdc2 = 0X38F;
*init = 0;
}
--clk_init.c
#include"myapp.h"
void CLK_init()
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =0x21f3; // 0x2033;//0x2413;// 144MHz=0x2613
}
void SetDSPPLL(unsigned int uPLL)
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =uPLL;
}
void TMCR_reset( void )
{
ioport unsigned int *TMCR_MGS3=(unsigned int *)0x07FE;
ioport unsigned int *TMCR_MM =(unsigned int *)0x07FF;
*TMCR_MGS3 =0x510;
*TMCR_MM =0x000;
}
(2)
--mian.c
#include "myapp.h"
#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
#include <math.h>
#define FIRNUMBER 25
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF 10000
#define PI 3.1415926
float InputWave();
float FIR();
float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0
};
float fXn[FIRNUMBER]={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;
main()
{
nIn=0; nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
fStepSignal1=2*PI/30;
fStepSignal2=2*PI*1.4;
while ( 1 )
{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++; nIn%=256;
fOutput=FIR();
fOut[nOut]=fOutput;
nOut++; /* break point */
if ( nOut>=256 )
{
nOut=0;
}
}
}
float InputWave()
{
for ( i=FIRNUMBER-1;i>0;i-- )
fXn[i]=fXn[i-1];
fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;
fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI;
return(fXn[0]);
}
float FIR()
{
float fSum;
fSum=0;
for ( i=0;i<FIRNUMBER;i++ )
{
fSum+=(fXn[i]*fHn[i]);
}
return(fSum);
}
--sdram_init.c
#include "myapp.h"
void SDRAM_init( void )
{
ioport unsigned int *ebsr =(unsigned int *)0x6c00;
ioport unsigned int *egcr =(unsigned int *)0x800;
ioport unsigned int *emirst=(unsigned int *)0x801;
//ioport unsigned int *emibe =(unsigned int *)0x802;
ioport unsigned int *ce01 =(unsigned int *)0x803;
//ioport unsigned int *ce02 =(unsigned int *)0x804;
//ioport unsigned int *ce03 =(unsigned int *)0x805;
ioport unsigned int *ce11 =(unsigned int *)0x806;
//ioport unsigned int *ce12 =(unsigned int *)0x807;
//ioport unsigned int *ce13 =(unsigned int *)0x808;
ioport unsigned int *ce21 =(unsigned int *)0x809;
//ioport unsigned int *ce22 =(unsigned int *)0x80A;
//ioport unsigned int *ce23 =(unsigned int *)0x80B;
ioport unsigned int *ce31 =(unsigned int *)0x80C;
//ioport unsigned int *ce32 =(unsigned int *)0x80D;
//ioport unsigned int *ce33 =(unsigned int *)0x80E;
ioport unsigned int *sdc1 =(unsigned int *)0x80F;
//ioport unsigned int *sdper =(unsigned int *)0x810;
//ioport unsigned int *sdcnt =(unsigned int *)0x811;
ioport unsigned int *init =(unsigned int *)0x812;
ioport unsigned int *sdc2 =(unsigned int *)0x813;
//*ebsr = 0x221;//0xa01
*ebsr = 0xa01;
*egcr = 0x220;
*egcr = 0X220;
*ce01 = 0X3000;
*ce11 = 0X1fff;
*ce21 = 0x1fff;
*ce31 = 0x1fff;
*emirst = 0;
*sdc1 = 0X5958;
*sdc2 = 0X38F;
*init = 0;
}
--clk_init.c
#include"myapp.h"
void CLK_init()
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =0x2033; // 0x2033;//0x2413;// 200MHz=0x2513 }
void SetDSPPLL(unsigned int uPLL)
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =uPLL;
}
void TMCR_reset( void )
{
ioport unsigned int *TMCR_MGS3=(unsigned int *)0x07FE;
ioport unsigned int *TMCR_MM =(unsigned int *)0x07FF;
*TMCR_MGS3 =0x510;
*TMCR_MM =0x000;
}
(3)
--mian.c
#include"math.h"
#define IIRNUMBER 2
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF 10000
#define PI 3.1415926
float InputWave();
float IIR();
float fBn[IIRNUMBER]={ 0.0,0.7757 };
float fAn[IIRNUMBER]={ 0.1122,0.1122 };
float fXn[IIRNUMBER]={ 0.0 };
float fYn[IIRNUMBER]={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;
main()
{
nIn=0; nOut=0;
fInput=fOutput=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
// fStepSignal1=2*PI/30;
// fStepSignal2=2*PI*1.4;
fStepSignal1=2*PI/50;
fStepSignal2=2*PI/2.5;
while ( 1 )
{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++; nIn%=256;
fOutput=IIR();
fOut[nOut]=fOutput;
nOut++; // break point
if ( nOut>=256 )
{
nOut=0;
}
}
}
float InputWave()
{
for ( i=IIRNUMBER-1;i>0;i-- )
{
fXn[i]=fXn[i-1];
fYn[i]=fYn[i-1];
}
fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;
fYn[0]=0.0;
fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI;
return(fXn[0]);
}
float IIR()
{
float fSum;
fSum=0.0;
for ( i=0;i<IIRNUMBER;i++ )
{
fSum+=(fXn[i]*fAn[i]);
fSum+=(fYn[i]*fBn[i]);
}
return(fSum);
}
--sdram_init.c
#include "myapp.h"
void SDRAM_init( void )
{
ioport unsigned int *ebsr =(unsigned int *)0x6c00;
ioport unsigned int *egcr =(unsigned int *)0x800;
ioport unsigned int *emirst=(unsigned int *)0x801;
//ioport unsigned int *emibe =(unsigned int *)0x802;
ioport unsigned int *ce01 =(unsigned int *)0x803;
//ioport unsigned int *ce02 =(unsigned int *)0x804;
//ioport unsigned int *ce03 =(unsigned int *)0x805;
ioport unsigned int *ce11 =(unsigned int *)0x806;
//ioport unsigned int *ce12 =(unsigned int *)0x807;
//ioport unsigned int *ce13 =(unsigned int *)0x808;
ioport unsigned int *ce21 =(unsigned int *)0x809;
//ioport unsigned int *ce22 =(unsigned int *)0x80A;
//ioport unsigned int *ce23 =(unsigned int *)0x80B;
ioport unsigned int *ce31 =(unsigned int *)0x80C;
//ioport unsigned int *ce32 =(unsigned int *)0x80D;
//ioport unsigned int *ce33 =(unsigned int *)0x80E;
ioport unsigned int *sdc1 =(unsigned int *)0x80F;
//ioport unsigned int *sdper =(unsigned int *)0x810;
//ioport unsigned int *sdcnt =(unsigned int *)0x811;
ioport unsigned int *init =(unsigned int *)0x812;
ioport unsigned int *sdc2 =(unsigned int *)0x813;
//*ebsr = 0x221;//0xa01
*ebsr = 0xa01;
*egcr = 0x220;
*egcr = 0X220;
*ce01 = 0X3000;
*ce11 = 0X1fff;
*ce21 = 0x1fff;
*ce31 = 0x1fff;
*emirst = 0;
*sdc1 = 0X5958;
*sdc2 = 0X38F;
*init = 0;
}
--clk_init.c
#include"myapp.h"
void CLK_init()
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =0x2033; // 0x2033;//0x2413;// 200MHz=0x2513
}
void SetDSPPLL(unsigned int uPLL)
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =uPLL;
}
void TMCR_reset( void )
{
ioport unsigned int *TMCR_MGS3=(unsigned int *)0x07FE;
ioport unsigned int *TMCR_MM =(unsigned int *)0x07FF;
*TMCR_MGS3 =0x510;
*TMCR_MM =0x000;
}
(4)
--mian.c
#include "myapp.h"
#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
// :-- Define Timer 0 's Registers ---//
ioport unsigned int *tim0;
ioport unsigned int *prd0;
ioport unsigned int *tcr0;
ioport unsigned int *prsc0;
// :-- End of Define -----------------//
void InitMcBSP();
unsigned int uN,nCount,nCount1;
main()
{
unsigned char dbScanCode,dbOld;
dbScanCode=dbOld=0;
nCount=nCount1=0;
CLK_init();
SDRAM_init();
InitCTR();
InitMcBSP();
uN=60;
CTRGR=1;
InitInterrupt();
TIME_init();
while ( 1 )
{
if ( nCount1==0 )
{
dbScanCode=GetKey();
if ( dbScanCode!=dbOld )
{
dbOld=dbScanCode;
if ( dbScanCode==SCANCODE_Enter )
break;
else if ( dbScanCode==SCANCODE_Plus )
PCR1|=2;
else if ( dbScanCode==SCANCODE_Minus)
PCR1&=0x0fffd;
else if ( dbScanCode==SCANCODE_0 )
uN=100;
else if ( dbScanCode==SCANCODE_1 )
uN=80;
else if ( dbScanCode==SCANCODE_2 )
uN=60;
else if ( dbScanCode==SCANCODE_3 )
uN=40;
else if ( dbScanCode==SCANCODE_4 )
uN=20;
else if ( dbScanCode==SCANCODE_5 )
uN=0;
}
}
}
CloseCTR();
exit(0);
}
void InitInterrupt(void)
{
// 设置中断控制寄存器
IVPD=0x80;
IVPH=0x80;
IER0=0x10;
DBIER0 =0x10;
IFR0=0xffff;
asm(" BCLR INTM");
}
void interrupt Timer() //中断响应函数
{
nCount++; nCount%=100;
if ( nCount>uN ) PCR2|=4;
else PCR2&=0x0fffb;
nCount1++; nCount1%=5120;
}
void InitMcBSP()
{
// IOPin: McBSP2.FSR S22
//SPCR1.RRST_=0,PCR.RIOEN=1,PCR.FSRM=1,PCR.FSRP=0/1
SPCR1_2&=0x0fffe;
PCR2|=0x1400;
// IOPin: McBSP1.CLKX S14
//SPCR2.XRST_=0,PCR.XIOEN=1,PCR.CLKXM=1,PCR.CLKXP=0/1 SPCR2_1&=0x0fffe;
PCR1|=0x2200;
}
void TIME_init(void)
{
tim0 = (unsigned int *)0x1000;
prd0 = (unsigned int *)0x1001;
tcr0 = (unsigned int *)0x1002;
prsc0 = (unsigned int *)0x1003;
*tcr0 = 0x04f0;
*tim0 = 0;
*prd0 = 0x0100;
*prsc0 = 2;
*tcr0 = 0x00e0;
}
--sdram_init.c
#include "myapp.h"
void SDRAM_init( void )
{
ioport unsigned int *ebsr =(unsigned int *)0x6c00;
ioport unsigned int *egcr =(unsigned int *)0x800;
ioport unsigned int *emirst=(unsigned int *)0x801;
//ioport unsigned int *emibe =(unsigned int *)0x802;
ioport unsigned int *ce01 =(unsigned int *)0x803;
//ioport unsigned int *ce02 =(unsigned int *)0x804;
//ioport unsigned int *ce03 =(unsigned int *)0x805;
ioport unsigned int *ce11 =(unsigned int *)0x806;
//ioport unsigned int *ce12 =(unsigned int *)0x807;
//ioport unsigned int *ce13 =(unsigned int *)0x808;
ioport unsigned int *ce21 =(unsigned int *)0x809;
//ioport unsigned int *ce22 =(unsigned int *)0x80A;
//ioport unsigned int *ce23 =(unsigned int *)0x80B;
ioport unsigned int *ce31 =(unsigned int *)0x80C;
//ioport unsigned int *ce32 =(unsigned int *)0x80D;
//ioport unsigned int *ce33 =(unsigned int *)0x80E;
ioport unsigned int *sdc1 =(unsigned int *)0x80F;
//ioport unsigned int *sdper =(unsigned int *)0x810;
//ioport unsigned int *sdcnt =(unsigned int *)0x811;
ioport unsigned int *init =(unsigned int *)0x812;
ioport unsigned int *sdc2 =(unsigned int *)0x813;
//*ebsr = 0x221;//0xa01
*ebsr = 0xa01;
*egcr = 0x220;
*egcr = 0X220;
*ce01 = 0X3000;
*ce11 = 0X1fff;
*ce21 = 0x1fff;
*ce31 = 0x1fff;
*emirst = 0;
*sdc1 = 0X5958;
*sdc2 = 0X38F;
*init = 0;
}
--clk_init.c
#include"myapp.h"
void CLK_init()
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =0x21f3; // 0x2033;//0x2413;// 144MHz=0x2613
}
void SetDSPPLL(unsigned int uPLL)
{
ioport unsigned int *clkmd;
clkmd=(unsigned int *)0x1c00;
*clkmd =uPLL;
}
void TMCR_reset( void )
{
ioport unsigned int *TMCR_MGS3=(unsigned int *)0x07FE;
ioport unsigned int *TMCR_MM =(unsigned int *)0x07FF;
*TMCR_MGS3 =0x510;
*TMCR_MM =0x000;
}
成绩评定:指导教师:
年月日。

相关文档
最新文档