北邮 DSP 实验一.docx
- 文档编号:10537928
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:13
- 大小:2.28MB
北邮 DSP 实验一.docx
《北邮 DSP 实验一.docx》由会员分享,可在线阅读,更多相关《北邮 DSP 实验一.docx(13页珍藏版)》请在冰豆网上搜索。
北邮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寄存器的使用和设置,以及后期程序的调试与优化。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮 DSP 实验一 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)