DSP课程设计实验报告.docx
- 文档编号:6131097
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:26
- 大小:249.16KB
DSP课程设计实验报告.docx
《DSP课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《DSP课程设计实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
DSP课程设计实验报告
1.实验一指示灯演示······························3
2.实验二键盘输入································7
3.实验三液晶显示器控制显示······················11
4.实验四FIR/IIR算法····························18
实验一指示灯演示
一.实验目的
1.了解ICETEK–VC5509-A板在TMS320VC5509DSP外部扩展存储空间上的扩展。
2.了解ICETEK–VC5509-A板上指示灯扩展原理。
3.学习在C语言中使用扩展的控制寄存器的方法。
二.实验设备
计算机,ICETEK-VC5509-A实验箱(或ICETEK仿真器+ICETEK–VC5509-A系统板+相关连线及电源)。
三.实验原理
1.TMS320VC5509DSP的EMIF接口:
存储器扩展接口(EMIF)是DSP扩展片外资源的主要接口,它提供了一组控制信号和地址、数据线,可以扩展各类存储器和寄存器映射的外设。
ICETEK–VC5509-A评估板在EMIF接口上除了扩展了片外SDRAM外,还扩展了指示灯、DIP开关和D/A设备。
具体扩展地址如下:
400800-400802h:
D/A转换控制寄存器
400000-400000h:
板上DIP开关控制寄存器
400001-400001h:
板上指示灯控制寄存器
与ICETEK–VC5509-A评估板连接的ICETEK-CTR显示控制模块也使用扩展空间控制主要设备:
602800-602800h:
读-键盘扫描值,写-液晶控制寄存器
600801-600801h:
液晶辅助控制寄存器
602801h、600802h:
液晶显示数据寄存器
602802-602802h:
发光二极管显示阵列控制寄存器
2.指示灯扩展原理:
四.实验程序流程图
五.实验程序编写
/*实现每个灯分别亮一段时间,正向顺序和反向顺序亮灯,乱序亮灯,两个灯乱序同时亮灭,四个灯产生频谱效果,单个灯闪烁*/
#include"myapp.h"
#defineLBDS(*((unsignedint*)0x400001))
//定义指示灯寄存器地址和寄存器类型
voidDelay(unsignedintnDelay);//延时子程序
main()
{
unsignedintuLED[10]={1,2,4,8,5,10,6,9,1,0};
//控制字,逐位置1
unsignedintvLED[20]={7,15,1,7,3,7,15,7,3,1,0,1,7,3,15,7,1,7,0,1};
//控制字,逐位置2
inti,j;
PLL_Init(72);//初始化DSP运行时钟
SDRAM_init();//初始化EMIF接口
while
(1)
{
i=0;j=0;//每个灯亮一遍,时间偏长,检查灯是否完好
LBDS=uLED[i+3];//4灯亮
Delay(8192);
LBDS=uLED[i+2];//3灯亮
Delay(8192);
LBDS=uLED[i+1];//2灯亮
Delay(8192);
LBDS=uLED[i];//1灯亮
Delay(8192);
for(i=0;i<4;i++)
{
LBDS=uLED[i];//正向顺序送控制字
Delay(1024);//延时
}
for(i=3;i>=0;i--)
{
LBDS=uLED[i];//反向顺序送控制字
Delay(1024);//延时
}
for(i=0;i<2;i++)//按1-3-2-4顺序亮灯
{
j=i+2;
LBDS=uLED[i];
Delay(2048);
LBDS=uLED[j];
Delay(2048);
}
for(i=4;i<6;i++)//1、3灯与2、4灯交替亮
{
LBDS=uLED[i];
Delay(4096);
}
for(i=0;i<10;i++)//23灯,14灯循环亮
{
for(j=6;j<8;j++)
{
LBDS=uLED[j];
Delay(1024);
}
}
for(i=0;i<20;i++)//频谱效果
{
LBDS=vLED[i];
Delay(512);
}
for(i=0;i<15;i++)//一个灯闪烁
{
for(j=8;j<10;j++)
{
LBDS=uLED[j];
Delay(256);
}
}
}
}
voidDelay(unsignedintnDelay)//延时子程序
{
intii,jj,kk=0;
for(ii=0;ii { for(jj=0;jj<1024;jj++) { kk++; } } } 六.实验步骤 1.实验准备: 连接实验设备。 关闭实验箱上扩展模块和信号源电源开关。 2.设置CodeComposerStudio2.21在硬件仿真(Emulator)方式下运行。 3.启动CodeComposerStudio2.21: 选择菜单Debug→ResetCPU。 4.打开工程文件: 工程文件为: C: \ICETEK\VC5509AES60\VC5509AES60\Lab0301-LED\LED.pjt。 打开源程序LED.c阅读程序,理解程序内容。 5.编译、下载程序。 6.运行程序,观察结果。 7.退出CCS: 七.实验结果与分析 可知: 映射在扩展存储器空间地址上的指示灯寄存器在设置时是低4位有效的,数据的最低位对应指示灯D1,次低位对应D2,...依次类推。 并且亮灯达到我所预期的一样。 定义数组可以控制什么灯亮灭,不同的数组对应不同的灯亮灭顺序,调用延时可以改变。 亮灭的时间间隔。 实验二发光二极管阵列显示实验 一.实验目的 通过实验学习使用5509ADSP的扩展端口控制外围设备的方法,了解发光二极管阵列的控制编程方法。 二.实验设备 计算机,ICETEK-VC5509-A实验箱(或ICETEK仿真器+ICETEK-VC5509-A系统板+相关连线及电源)。 三.实验原理 1.EMIF接口: TMS320C5509DSP的扩展存储器接口(EMIF)用来与大多数外围设备进行连接,典型应用如连接片外扩展存储器等。 这一接口提供地址连线、数据连线和一组控制线。 ICETEK-VC5509-A将这些扩展线引到了板上的扩展插座上供扩展使用。 2.发光二极管显示阵列的显示是由扩展端口控制,扩展在EMIF接口的两个寄存器提供具体控制。 原理图如下: 3.显示原理: DSP须将显示的图形按列的顺序存储起来(8×8点阵,8个字节,高位在下方,低位在上方),然后定时刷新控制显示。 具体方法是,将以下控制字按先后顺序、每两个为一组发送到端口0x602802,发送完毕后,隔不太长的时间(以人眼观察不闪烁的时间间隔)再发送一遍。 由于位值为“0”时点亮,所以需要将显示的数据取反。 0x01,第8列数据取反,0x02,第7列数据取反, 0x04,第6列数据取反,0x08,第5列数据取反, 0x10,第4列数据取反,0x20,第3列数据取反, 0x40,第2列数据取反,0x80,第1列数据取反, 四.实验程序流程图 五.实验程序编写 /*实现功能: 1键全亮,2键全灭,3键一排亮,4键与三键相反,5,6键1467灯亮灭,7键2468灯亮,8键灯循环亮一遍*/ #include"myapp.h" #include"ICETEK-VC5509-EDU.h" #defineCTRLED(*(unsignedint*)0x600802)//port8004 #defineMCTRKEY(*(unsignedint*)0x602802)//port8005 #defineCTRCLKEY(*(unsignedint*)0x600803)//port8006 #defineCTRSTATUS(*(unsignedint*)0x600800)//port8000 //定义端口地址 unsignedintuWork1,uWork2,nWork,w; unsignedintccc[8]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80}; voidmydelay(unsignedintnDelay); main() { inti; PLL_Init(12); SDRAM_init(); uWork1=0; uWork2=0; nWork=0; CTRLED=0; CTRGR=0; w=1; for(i=7;i>=0;i--) { CTRLED=~ccc[i];//扫描灯,检查灯是否好坏 mydelay(256); } CTRLED=0xff; while(w) { mydelay(32); CTRLED=0xff; mydelay(32); for(;;) { uWork1=MCTRKEY;//键盘输入 CTRCLKEY=0; asm("nop");//去抖-----键盘延迟 uWork2=MCTRKEY; CTRCLKEY=0; if(uWork1==uWork2&&uWork1! =0)//判断键盘是否按下 { nWork=uWork1; if(nWork==0x01){CTRLED=0x00;}//1号按键 if(nWork==0x02){CTRLED=0xff;}//2号按键 if(nWork==0x04){CTRLED=0xf0;}//3号按键 if(nWork==0x08){CTRLED=0x0f;}//4号按键 if(nWork==0x10){CTRLED=0x69;}//5号按键 if(nWork==0x20){CTRLED=0x96;}//6号按键 if(nWork==0x40){CTRLED=0xaa;}//7号按键 if(nWork==0x80)//8/号按键 {//循环亮灯 for(i=0;i<8;i++) { CTRLED=~ccc[i]; mydelay(512);//延时 } } } } } exit(0); } voidmydelay(unsignedintnDelay)//延时子程序 { intii,jj,kk=0; for(ii=0;ii { for(jj=0;jj<1024;jj++) { kk++; } } } 六.实验步骤 1.实验准备: ⑴连接实验设备。 ⑵将ICETEK-CTR板的供电电源开关拨动到“开”的位置。 2.设置CodeComposerStudio2.21在硬件仿真(Emulator)方式下运行。 3.启动CodeComposerStudio2.21: 选择菜单Debug→ResetCPU。 4.打开工程文件: 工程目录C: \ICETEK\VC5509AS60\VC5509AS60\Lab0402-LedArray\LedArray.pjt。 浏览main.c文件的内容,理解各语句作用。 5.编译、下载程序。 6.运行程序观察结果。 7.结束程序运行,退出CCS。 七.实验结果与分析 实验结果: 可以观察到发光二极管阵列按你的按键变化发生变化,并且达到我所设置的要求。 知道按键的地址和灯的对应值,可以控制按键出来的值而控制灯灯亮灭、顺序和时间。 实验三液晶显示器控制显示 一.实验目的 通过实验学习使用5509ADSP的扩展I/O端口控制外围设备的方法,了解液晶显示器的显示控制原理及编程方法。 二.实验设备 计算机,ICETEK-VC5509-A实验箱(或ICETEK仿真器+ICETEK-VC5509-A系统板+相关连线及电源)。 三.实验原理 1.EMIF接口: TMS320C5509DSP的扩展存储器接口(EMIF)用来与大多数外围设备进行连接,典型应用如连接片外扩展存储器等。 这一接口提供地址连线、数据连线和一组控制线。 ICETEK-VC5509-A将这些扩展线引到了板上的扩展插座上供扩展使用。 2.液晶显示模块的访问、控制是由5509ADSP对扩展接口的操作完成。 控制口的寻址: 命令控制接口的地址为0x602800,数据控制接口的地址为0x602801和0x600802,辅助控制接口的地址为0x600801。 3.显示控制方法: 液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的像素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。 其地址与像素的对应方式如下: 左侧显示内存 右侧显示内存 Y= 0 1 ··· 62 63 0 1 ··· 62 63 行号 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 0 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ X=0 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 7 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 8 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 55 X=7 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 56 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 63 发送控制命令: 向液晶显示模块发送控制命令的方法是通过向命令控制接口写入命令控制字,然后再向辅助控制接口写入0。 下面给出的是基本命令字、解释和C语言控制语句举例: .显示开关: 0x3f打开显示;0x3e关闭显示; .设置显示起始行: 0x0c0+起始行取值,其中起始行取值为0至63; .设置操作页: 0x0b8+页号,其中页号取值为0-7; .设置操作列: 0x40+列号,其中列号为取值为0-63; 写显示数据: 在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。 将数据发送到相应数据控制I/O接口即可。 4.液晶显示器与DSP的连接: 5.数据信号的传送: 由于液晶显示模块相对运行在高主频下的DSP属于较为慢速设备,连接时需要考虑数据线上信号的等待问题; 电平转换: 由于DSP为3.3V设备,而液晶显示模块属于5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备,如: ICETEK-CTR板上使用了74LS245。 四.实验程序流程图 五.实验程序编写 /*实现多种功能,字的位置变化,字的移动,字移动的速率控制,画出各种形状,画出曲线,动态变化*/ #include"LCD.h" Unsignedintstr1[16]={0x910,0x914,0x4894,0x88D4,0x7eBF,0x594,0x449C,0x4414,0x2050,0x20F8,0x130F,0xC08,0x3388,0xC078,0x4008,0x00}; unsignedintstr2[16]={0x40,0x230,0x210,0x212,0x25C,0x254,0x4250,0x8251,0x7F5E,0x2D4,0x250,0x218,0x257,0x232,0x210,0x00}; unsignedintstr3[16]={0x00,0x8210,0x820C,0x4204,0x424C,0x23B4,0x1294,0xA05,0x7F6,0xA04,0x1204,0xE204,0x4214,0x20C,0x204,0x00}; unsignedintstr4[16]={0x802,0x8FA,0x482,0x2482,0x40FE,0x3F80,0x2240,0x2C60,0x2158,0x2E46,0x2048,0x3050,0x2C20,0x2320,0x2020,0x00}; unsignedintstr5[16]={0x2010,0x1088,0xC87,0x382,0xFFF6,0x28A,0xC82,0x12,0xFFE8,0x4927,0x4922,0x4926,0x493A,0xFFE2,0x02,0x00}; //定义五个字 unsignedintledkey[10][8]= { {0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},//0 {0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},//1 {0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},//2 {0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},//3 {0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},//4 {0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},//5 {0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},//6 {0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},//7 {0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},//8 {0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}//9 }; //0-9数字 unsignedintnScreenBuffer[30*128]; #defineCTRSTATUS(*(unsignedint*)0x600800)//port8000 intw,ww,www; main() { unsignedintuWork,*pWork; intx,y,x1,y1,x2,y2,a,b,color,i; PLL_Init(12); SDRAM_init(); LCDTurnOff(); LCDSetScreenBuffer(nScreenBuffer); for(uWork=0,pWork=nScreenBuffer;uWork<30*128;uWork++,pWork++)(*pWork)=0; LCDSetDelay (1); LCDTurnOn();//打开显示 LCDCLS();//清屏 w=0;ww=500,www=5000; LCDPutCString(str1,112,72,1,3);//中间显示个字 _Delay(www);//延时 LCDPutCString(str2,0,16,1,3);//左下角显示一个字 _Delay(www); LCDPutCString(str3,0,125,1,3);//左上角显示一个字 _Delay(www); LCDPutCString(str4,222,16,1,3);//右下角显示一个字 _Delay(www); LCDPutCString(str5,222,125,1,3);//右上角显示一个字 _Delay(www); /*四个字分别向中间靠拢*/ for(x=0,y=16;y<73;) { LCDPutCString(str2,x,y,1,3); x=x+2; y=y+1; _Delay(www); LCDCLS(); } for(x=0,y=125;x<113;) { LCDPutCString(str3,x,y,1,3); x=x+2; y=y-1; _Delay(www); LCDCLS(); } for(x=222,y=16;y<73;) { LCDPutCString(str4,x,y,1,3); x=x-2; y=y+1; _Delay(www); LCDCLS(); } for(x=222,y=125;y>71;) { LCDPutCString(str5,x,y,1,3); x=x-2; y=y-1; _Delay(www); LCDCLS(); } /*四个字分别按顺时针方向沿四边移动,并且同时到达各个顶角*/ for(y1=16,x1=0,x2=222,y2=125;y1<=125;) { LCDPutCString(str2,0,y1,1,3); y1=y1+2; _Delay(ww); LCDCLS(); LCDPutCString(str3,x1,125,1,3); x1=x1+4; _Delay(ww); LCDCLS(); LCDPutCString(str4,x2,16,1,3); x2=x2-4; _Delay(ww); LCDCLS(); LCDPutCString(str5,222,y2,1,3); y2=y2-2; _Delay(ww); LCDCLS(); } /*在屏幕中间画个方框*/ x=90;y=41;color=2; LCDDrawLine(x,y,x+42,y,color); _Delay(ww); LCDDrawLine(x,y,x,y+42,color); _Delay(ww); LCDDrawLine(x+42,y,x+42,y+42,color); _Delay(ww); LCDDrawLine(x,y+42,x+42,y+42,color); _Delay(ww); /*画一个抛物线*/ x=0;y=0;color=1; for(i=0;i<239;i++) { LCDPutPixel(x,y,color); x++; y=-(x*(x-238)/120); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 课程设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)