北邮 DSP 实验一.docx

上传人:b****7 文档编号:10537928 上传时间:2023-02-21 格式:DOCX 页数:13 大小:2.28MB
下载 相关 举报
北邮 DSP 实验一.docx_第1页
第1页 / 共13页
北邮 DSP 实验一.docx_第2页
第2页 / 共13页
北邮 DSP 实验一.docx_第3页
第3页 / 共13页
北邮 DSP 实验一.docx_第4页
第4页 / 共13页
北邮 DSP 实验一.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

北邮 DSP 实验一.docx

《北邮 DSP 实验一.docx》由会员分享,可在线阅读,更多相关《北邮 DSP 实验一.docx(13页珍藏版)》请在冰豆网上搜索。

北邮 DSP 实验一.docx

北邮DSP实验一

2015-2016学年第二学期

信号与信息处理综合实验(DSP)

实验一

 

学院:

信息与通信工程学院

班级:

学号:

姓名:

班内序号:

一.实验目的

熟悉CCSv5的开发流程,了解各个菜单的功能。

二.实验环境

CodeComposerStudiov5,WindowsXP,DSP开发板

三.实验要求

1.在控制台显示HelloWorld

2.控制LED灯闪烁

FTP给出一个LED的程序模板,可以控制LED-0的闪烁。

基于该模板,需要完成:

1)修改闪烁的频率;

2)通过写8bit数值到CPLD寄存器来控制LED,使得4个LED以200ms的频率同时打开和关闭;

3.在验收时候依照助教的要求改变LED灯的闪烁方式

四.实验原理

4.1总体介绍

DSP芯片也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器,其主要应用是实时快速地实现各种数字信号处理算法。

本学期DSP实验所用芯片为TI公司生产的TMS320C6416T。

TMS320C6416T为定点DSP,基于第二代高性能的VLIW架构,拥有超长指令字,即一种非常长的指令组合,它把许多条指令连在一起,增加了运算的速度。

4.2处理器介绍

该系列芯片的处理器由三部分组成:

1)CPU内核:

有8个并行操作的功能单元,被分为类似的两套有两组寄存器,每组包括16个32位寄存器;

2)存储器:

包括程序存储器和数据存储器片内程序存储器总线宽度为256bit,每个周期可取8条32位指令;

3)外设:

直接存储器访问DMA、外部存储器接口EMIF、串口、扩展总线、定时器等。

4.3相关函数介绍

为了方便用户对DSP系统进行开发,TI公司的第三方提供一种简单的系统评估平台,即DSK开发套件和评估板。

DSK和EVM(评估板)除了提供基本的硬件平台外,还提供完整的代码生成工具和调试工具。

用户可以使用DSK或EVM完成需要设计系统的硬件性能、软件算法的评估,为确定系统的软/硬件方案提供可靠的依据。

以下为DSK6416提供的DSP开发相关函数:

voidDSK6416_init();/*初始化所有板子的初始函数*/

uint8DSK6416_rget(int16regnum);/*读取CPLD寄存器的8bit值*/

voidDSK6416_rset(int16regnum,uint8regval);/*写8bit数值到CPLD寄存器*/

voidDSK6416_wait(uint32delay);/*插入dl次的迭代循环*/

voidDSK6416_waitusec(Uint32delay);/*插入dl微秒的迭代循环*/

利用以上函数,实现DSP板子的初始化以及开关状态读取和LED灯的亮灭控制。

4.4寄存器介绍

CPLD寄存器定义如下:

本实验所需配置的寄存器为USER_REG,该寄存器用于读取DIP开关状态,并将LED灯开关。

其具体描述如下:

由上表可以看出,USER_REG前四个比特用于DIP,读该寄存器前四比特,若相应比特位置一表示所对应开关断开,相应比特位置零表示所对应开关打开;后四个比特用于LED控制,向该寄存器写数据,若相应比特位置一表示点亮所对应LED灯,置零则表示将所对应LED熄灭。

五.功能描述

1)运行程序后,在控制台显示HelloWorld;

2)通过写8bit数值到CPLD寄存器来实现按键控制四盏LED灯以一定频率同时亮灭;

3)通过写8bit数值到CPLD寄存器来实现四盏LED灯作为跑马灯顺序亮灭;

4)通过写8bit数值到CPLD寄存器来实现四盏LED灯作为跑马灯加速亮灭;

六.程序模块描述

6.1HelloWorld模块

使用printf语句输出

6.2LED灯同时亮灭模块

首先初始化板子初始函数以及LED及DIP,然后设置while循环,在循环之中读取CPLD寄存器的八比特数值。

若检测到数值为0XE0,即表示只有DIP0按下,则设置CPLD寄存器八比特数值为0XEF,即表示四盏灯全亮,延迟一段时间之后,设置CPLD寄存器八比特数值为0XE0,即表示四盏灯全灭,并延迟相同时间;否则设置CPLD寄存器八比特数值为0XE0,即表示四盏灯全灭。

3.跑马灯模块

首先初始化板子初始函数以及LED及DIP,然后设置while循环,在循环之中读取CPLD寄存器的八比特数值。

若检测到数值为0XD0,即表示只有DIP1按下,则依次设置CPLD寄存器八比特数值为0XE0、0XE1、0XE2、0XE4、0XE8,分别表示四盏灯全灭、只有第一盏灯亮、只有第二盏灯亮、只有第三盏灯亮、只有第四盏灯亮,在每次设置之后延迟相同的时间;否则设置CPLD寄存器八比特数值为0XE0,即表示四盏灯全灭。

4.跑马灯变速模块

若检测到数值为0X90,即表示DIP1与DIP2同时按下,则通过改变延迟的时间来改变跑马灯的速度。

七.程序流程

八.各种功能的测试记录、结果及说明

8.1功能分析

本实验所设计的功能都顺利实现:

1)在运行程序之后,控制台显示

2)当DIP0没有按下时,四盏LED全灭;

3)当只按下DIP0时,四盏LED灯闪烁,频率为200Hz;

4)当只按下DIP1时,四盏LED灯依次点亮然后熄灭,频率为200Hz;

5)当DIP1及DIP2同时按下时,四盏LED灯依次点亮然后熄灭,频率为400Hz。

8.2截图分析

1)控制台显示

如图所示,在运行程序之后,控制台显示

2)LED灯同时亮灭

只按下DIP0并如上图所示设置断点,单步运行后查看寄存器的值,低八位的值为EF,与所赋的值相同,此时四盏灯全亮,如下图所示:

3)跑马灯顺序亮灭

只按下DIP1并如上图所示设置断点,单步运行后查看寄存器的值,低八位的值为D1,与所赋的值相同,此时第一盏灯亮,如下图所示:

4)跑马灯加速亮灭

同时按下DIP1及DIP2并如上图所示设置断点,单步运行后查看寄存器的值,低八位的值为90,与所赋的值相同,此时四盏灯全灭,如下图所示:

九.调试过程中的主要问题及难点

第一次实验的重点在于认识DSP芯片的基本架构,根据课件的步骤,能熟练的操作使用CodeComposerStudiov5工作环境,在编写简单的程序代码之后,完成编译、调试等步骤。

过程中遇到的一个问题是硬件驱动的安装,在刚开始做实验时我没有注意到这个问题,一直到调试过程中报错时才发现驱动安装有问题,后来向同学询问了手动导入安装驱动的方法,才顺利完成了实验。

程序部分的一个难点在于DSK6416_RSET()和DSK6416_RGET()函数的使用,在基本功能实现以后,我们想要实现不同DIP开关对应不同的状态,所以又回顾了课件中CPLD寄存器方面的内容,了解了CPLD寄存器不同状态对应的8bit数值的含义。

十.心得体会

总体来说第一次DSP实验比较简单,主要是学习DSP芯片的基本知识,熟悉DSK开发板以及CodeComposerStudiov5集成开发环境,掌握利用CPLD的USER_REG寄存器配置LED和DIP开关的方法,了解程序优化的原理和基本操作。

感觉编程能力方面要求不高,在原来的编程基础上需要掌握DSK6416相关函数、LED相关函数和4DIP开关相关函数的使用就可以。

除了在熟悉软件和开发板上遇到了一些问题以外,实验的其他方面进行得非常顺利,在基本功能实现后我们很快就完成了其他扩展功能,比如实现了LED全亮全灭,跑马灯及变速等功能。

另外根据实验课件教程,我们进行了多次的断点调试,使用软件更加熟练,为之后的实验做充足的准备。

本次实验给我的感觉是十分有趣,能够锻炼提升实际操作能力和分析解决问题的能力。

实验开始时助教学长跟我们介绍了如何做好实验前的准备工作,开发板的养护,以及实验过程中一旦遇到问题时怎么迅速有效地解决。

感觉学长们也很认真负责,热心地给同学们答疑解惑,极大地增加了我对DSP实验的热情和信心,相信接下来的实验,我一定会更愿意去做,并能给我带来更大的收获。

十一.程序源代码

#include

#include"dsk6416.h"

#include"dsk6416_led.h"

#include"dsk6416_dip.h"

#definedelay100000

#definedelay150000

voidmain()

{

DSK6416_init();//初始化所有板子初始函数

DSK6416_LED_init();//初始化LED

DSK6416_DIP_init();//初始化DIP

printf("HelloWorld!

\n");

while

(1)

{

if(DSK6416_rget(DSK6416_USER_REG)==0XE0)//只有DIP0按下

{

DSK6416_rset(DSK6416_USER_REG,0XEF);

DSK6416_waitusec(delay);

DSK6416_rset(DSK6416_USER_REG,0XE0);

DSK6416_waitusec(delay);

}

else

{

DSK6416_rset(DSK6416_USER_REG,0XE0);

}

if(DSK6416_rget(DSK6416_USER_REG)==0XD0)//只有DIP1按下

{

DSK6416_rset(DSK6416_USER_REG,0XE0);//写8bit数值到CPLD寄存器

DSK6416_waitusec(delay);

DSK6416_rset(DSK6416_USER_REG,0XE1);

DSK6416_waitusec(delay);

DSK6416_rset(DSK6416_USER_REG,0XE2);

DSK6416_waitusec(delay);

DSK6416_rset(DSK6416_USER_REG,0XE4);

DSK6416_waitusec(delay);

DSK6416_rset(DSK6416_USER_REG,0XE8);

DSK6416_waitusec(delay);

}

else

{

DSK6416_rset(DSK6416_USER_REG,0XE0);

}

if(DSK6416_rget(DSK6416_USER_REG)==0X90)//DIP1、2按下

{

DSK6416_rset(DSK6416_USER_REG,0XE0);

DSK6416_waitusec(delay1);

DSK6416_rset(DSK6416_USER_REG,0XE1);

DSK6416_waitusec(delay1);

DSK6416_rset(DSK6416_USER_REG,0XE2);

DSK6416_waitusec(delay1);

DSK6416_rset(DSK6416_USER_REG,0XE4);

DSK6416_waitusec(delay1);

DSK6416_rset(DSK6416_USER_REG,0XE8);

DSK6416_waitusec(delay1);

}

else

{

DSK6416_rset(DSK6416_USER_REG,0XE0);

}

}

}

注:

1)如果想要改变灯的亮灭,只需要改变delay的数值;

2)寄存器高四位代表着按键的状态,其中

表示按下,

表示抬起(只能读不能写);

3)寄存器低四位代表着LED灯的状态,其中

表示熄灭,

表示点亮(可读可写);4)可以通过读取及修改寄存器的数值来获取按键、LED灯的状态以及改变LED灯的状态。

十二.组内分工描述

郑逸琛主要负责相关头文件、库文件以及cmd文件等相关配置操作,程序流程的分析和设计,程序算法的编程实现;赵月主要负责开发环境的熟悉,项目工程的建立,CPLD寄存器的使用和设置,以及后期程序的调试与优化。

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

当前位置:首页 > 医药卫生 > 基础医学

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

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