程晓DSP课程设计报告.docx
- 文档编号:15602954
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:47
- 大小:214.04KB
程晓DSP课程设计报告.docx
《程晓DSP课程设计报告.docx》由会员分享,可在线阅读,更多相关《程晓DSP课程设计报告.docx(47页珍藏版)》请在冰点文库上搜索。
程晓DSP课程设计报告
南京邮电大学
实验报告
实验名称DSP课程设计
课程名称______DSP课程设计
班级学号___________
姓名___________________
开课时间2011/2012学年,第1学期
实验一、EMIF接口上的I/O接口扩展
一.实验目的
了解ICETEK-VC5509-A板在TMS320VC5509DSP外部扩展存储空间上的扩展。
了解ICETEK-VC5509-A板上指示灯扩展原理。
学习在C语言中使用扩展的控制寄存器的方法。
二.实验原理
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:
液晶辅助控制寄存器
602801-600802h:
液晶显示数据寄存器
602802-602802h:
发光二极管显示阵列控制寄存器
2.指示灯扩展原理
3.实验程序流程图:
三.部分程序代码
//定义指示灯寄存器地址和寄存器类型
#defineLBDS(*((unsignedint*)0x400001))
//子程序接口
voidDelay(unsignedintnDelay);//延时子程序
inti;
main()
{
unsignedintuLED[4]={1,2,4,8};//控制字,逐位置1:
0001B0010B0100B1000B
CLK_init();//初始化DSP运行时钟
SDRAM_init();//初始化EMIF接口
while
(1)
{
for(i=0;i<4;i++)
{
LBDS=uLED[i];//正向顺序送控制字
Delay(256);//延时
}
for(i=3;i>=0;i--)
{
LBDS=uLED[i];//反向顺序送控制字
Delay(32);//延时【延时256->32】
}
}
}
四.实验结果
映射在扩展存储器空间地址上的指示灯寄存器在设置时是低4位有效的,数据的最低位对应指示灯D1,次低位对应D2,...依次类推。
LED指示灯由D1→D2→D3→D4→D3→D2→D1循环依次点亮。
五.实验小结
通过本次实验,我们了解到了ICETEK-VC5509-A板在TMS320VC5509DSP外部扩展存储空间上的扩展,了解了ICETEK-VC5509-A板上指示灯扩展原理。
实验过程中需要注意或者说是需要重点了解的是控制字的写入,改变控制字就可以控制不同灯的闪烁,例如要使D1、
D2灯同时闪烁,控制字就可写为3,即0011B。
实验二、定时器的使用
一.实验目的
通过实验熟悉VC5509A的定时器;
掌握VC5509A定时器的控制方法;
掌握VC5509A的中断结构和对中断的处理流程;
学会C语言中断程序设计,以及运用中断程序控制程序流程。
二.实验原理
1.通用定时器介绍及其控制方法
TMS320VC5509A内部有两个20位通用定时器(GP):
*每个通用定时器包括:
-一个16位的减计数的计数器TIM;
-一个16位的定时器周期寄存器PRD;
-一个16位的定时器控制寄存器TCR;
-一个16位的定时器预定标寄存器PSCR;
*PSCR寄存器说明:
PSC:
4位的预定标值,与TIM共同组成20位的定时计数器.
TDDR:
预定标周期寄存器(在需要时重装入PSC的值)
TCR寄存器说明
2.中断程序设计:
-程序中应包含中断向量表,VC5509A默认向量表从程序区0地址开始存放,根据IPVD和
IPVH的值确定向量表的实际地址。
-注意观察程序中INTR_init()函数的定义部分,其中IPVD和IPVH的值都为0x0d0;同时观察配置文件ICETEK-VC5509-A.cmd中的VECT段描述中o=0x0d000。
-向量表中每项为8个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。
第一个向量表的首项为复位向量,即CPU复位操作完成后自动进入执行的程序入口。
-服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务。
三.实验结果
LED指示灯D1在定时器的定时中断中按照设计定时闪烁。
将*prd0=0x0ffff改为*prd0=0x0fff时,指示灯闪烁的频率变大。
四.实验小结
通过本次实验,我们学会了定时器的使用,并通过控制指示灯来观察中断的进行,掌握VC5509A的中断结构和对中断的处理流程。
在实验中发现改变PRD的值会使得指示灯的闪烁频率发生变化,通过学习知道中断的次数关于PRD和TDDR的公式即为
。
实验三、中断的使用
一.实验目的
1.通过实验熟悉VC5509A的中断响应过程。
2.学会C语言中断程序设计,以及运用中断程序控制程序流程。
二.实验原理
1.中断及中断处理过程:
⑴中断简介:
中断是一种由硬件或软件驱动的信号,DSP在接到此信号时,将当前程序悬挂起来,转
去执行另外一个任务,这个任务我们称为中断服务程序(ISR)。
TMS320C55x(C55x)DSP
可支持32个ISR,可由硬件或软件触发。
所有的C55x中断,可以分成可屏蔽中断和不可屏蔽中断两种,软件中断是不可屏蔽的。
⑵DSP处理中断的步骤:
①接收中断请求。
请求由软件或硬件发出。
②响应中断请求。
对于可屏蔽中断,需要满足若干条件,才发生响应;而对于不可屏蔽中
断,则立即响应。
③准备执行中断服务程序。
-完成当前正在执行的指令;将进入流水线但还未解码的指令清除。
-自动保存若干寄存器的值到数据堆栈和系统堆栈。
-取得用户定义的中断向量表中当前中断向量,中断向量指向中断服务程序入口。
④执行中断服务程序。
中断服务程序包含中断返回指令,这样返回时可以出栈以前保存的
关键寄存器数据,从而恢复中断服务程序执行前的现场。
⑶中断向量表:
中断向量表的地址可以由用户指定。
⑷外中断:
TMS320C5509可以响应INT0-INT4五个外中断。
2.ICETEK-CTR板的键盘接口:
显示/控制模块ICETEK-CTR通过接口P8连接小键盘,接收小键盘传送的扫描码,并在每
个扫描码结束后保存,同时向DSP的INT2发送中断信号;当DSP读键盘时将扫描码送到
数据总线上。
小键盘上每次按下一个键将产生2个扫描码、2次中断。
3.程序编制:
由一个不含中断处理程序的工程通过改写加入中断处理程序部分大致需要如下操作(假设使
用INT2):
⑴编制中断服务程序:
可以用C语言程序实现,编写单独的一个函数XINT,
此函数使用interrupt修饰,没有参数和返回值。
⑵构造中断向量表:
可以用汇编语言构造,编写一个汇编语言模块程序vector.asm,在程序
头上声明段名为“.vectors”;定义外部标号_XINT,由于汇编语言要使用C语言程序中定义的标号XINT,需要在这个标号前加底线;在中断向量表该中断对应位置(int2)写汇编语言语句跳转语句。
⑶修改连接命令文件:
在MEMORY小节中开辟单独的地址段用以存放中断向量表;在
SECTIONS小节中指定.vectors段到前步开设的内存段中。
⑷主程序中进行初始化设置:
定位中断向量表,使能中断,清中断等。
4.实验程序流程图:
三.部分程序代码
voidInitMcBSP();
voidINTR_init(void);
voidTIME_init(void);
intnCount;
main()
{
nCount=0;
CLK_init();
SDRAM_init();
INTR_init();
InitCTR();
InitMcBSP();
CTRGR=2;//使能IO
while
(1)
{
}
}
voidInitMcBSP()
{
//IOPin:
McBSP1.FSXS15
//SPCR2.XRST_=0,PCR.XIOEN=1,PCR.FSXM=1,PCR.FSXP=0/1
SPCR2_1&=0x0fffe;
PCR1|=0x2800;
}
voidinterruptXINT()
{
nCount++;nCount%=2;
if(nCount==0)
PCR1^=8;
}
voidINTR_init(void)
{
IVPD=0x80;
IVPH=0x80;
IER0=8;
DBIER0=8;
IFR0=0xffff;
asm("BCLRINTM");
}
四.实验结果
通过实验可以发现,每次按下键盘均会发生两次中断,当按下键不放时会产生连续的中断;只有在外中断发生时,XINT函数才会被执行。
五.实验小结
通过本次实验,我们熟悉VC5509A的中断响应过程,并学会C语言中断程序设计,以及运用中断程序控制程序流程。
实验过程中发现,当按住任意键不放时,指示灯会不停地闪烁即发生连续的中断,而每次按下键盘时会发生两次中断。
实验四、步进电机控制
一.实验目的
通过实验学习使用5509DSP的扩展I/O端口控制外围设备信息的方法,掌握使用5509DSP
通用计时器的控制原理及中断服务程序的编程方法;了解步进电机的控制方法。
二.实验原理
1.EMIF接口:
TMS320C5509DSP的扩展存储器接口(EMIF)用来与大多数外围设备进行连接,典型应用如
连接片外扩展存储器等。
这一接口提供地址连线、数据连线和一组控制线。
ICETEK-VC5509-A将这些扩展线引到了板上的扩展插座上供扩展使用。
2.步进电机是由DSP通用I/O管脚输出直接控制。
步进电机的起动频率大于500PPS(拍每秒),空载运行频率大于900PPS。
5509A的通用I/O口S22控制电机的转动频率,S14控制转动方向。
3.控制的方法是使用DSP通用定时器设置S22以一定的频率改变高低状态,输出方波,设置S14为高电平则顺时针转动,低电平为逆时针转动。
三.部分程序代码
voidINTR_init(void);
voidTIME_init(void);
intnCount,nStep,nAddStep;
unsignedintuTimPrd0;
unsignedintpwm2[8]={0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e};
main()
{
intsEnd;
unsignedchardbScanCode,tKey;
nCount=0;nStep=1;
sEnd=1,nAddStep=1;
uTimPrd0=0x1002;
CLK_init();
SDRAM_init();
InitCTR();
CTRLR=0x0c2;
TIME_init();
INTR_init();
do
{
if(nCount>16)
{
nCount=0;
dbScanCode=GetKey();//ScanforKeyboardinput
tKey=CTRCLKEY;//ClearKeyboardscanbuffer
if(dbScanCode!
=0&&dbScanCode!
=0x0ff)
{
switch(dbScanCode)
{
caseSCANCODE_Enter:
//ExitProgram
sEnd=0;
break;
caseSCANCODE_4:
//MotorTurnForward
nAddStep=1;
break;
caseSCANCODE_6:
//MotorTurnBackward
nAddStep=-1;
break;
caseSCANCODE_Minus:
//MotorSpeedDown
uTimPrd0+=0x800;
if(uTimPrd0>=0x8000)
uTimPrd0=0x8002;
asm("BSETINTM");
TIME_init();
asm("BCLRINTM");
break;
caseSCANCODE_Plus:
//MotorSpeedup
uTimPrd0-=0x800;
if(uTimPrd0<=0x1000)
uTimPrd0=0x1002;
asm("BSETINTM");
TIME_init();
asm("BCLRINTM");
break;
}
}
}
}while(sEnd);
exit(0);
}
voidinterruptTimer()
{
CTRLR=pwm[nStep];
nStep+=nAddStep;
if(nStep<0)nStep=7;
elseif(nStep>7)nStep=0;
nCount++;
}
voidINTR_init(void)
{
IVPD=0x80;
IVPH=0x80;
IER0=0x10;
DBIER0=0x10;
IFR0=0xffff;
asm("BCLRINTM");
}
voidTIME_init(void)
{
tim0=(unsignedint*)0x1000;
prd0=(unsignedint*)0x1001;
tcr0=(unsignedint*)0x1002;
prsc0=(unsignedint*)0x1003;
*tcr0=0x04f0;
*tim0=0x0;
*prd0=uTimPrd0;
*prsc0=2;
*tcr0=0x00e0;
}
四.实验结果
可以看到显示/控制模块上的电机指针在转动,使用“4”和“6”键可控制其转动方向,用“+”和“-”键可微调速度。
如果“4”是顺时针旋转,则“6”就是逆时针旋转,“+”可以增加旋转速度,“-”是减小速度,但是变化都是很微小。
五.实验小结
通过实验学习使用5509DSP的扩展I/O端口控制外围设备信息的方法,掌握使用5509DSP通用计时器的控制原理及中断服务程序的编程方法;了解步进电机的控制方法。
实验五、多路信号混频
一.实验目的
掌握A/D转换的基本过程和程序处理过程;
学习通过对采样值进行计算产生混频波形。
二.实验原理
1.模数转换工作过程:
-模数转换模块接到启动转换信号后,按照设置进行相应通道的数据采样转换。
-经过一个采样时间的延迟后,将采样结果放入AD数据寄存器中保存。
-等待下一个启动信号。
2.模数转换的程序控制:
模数转换相对于计算机来说是一个较为缓慢的过程。
一般采用中断方式启动转换或保存结
果,这样在CPU忙于其他工作时可以少占用处理时间。
设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。
由于TMS320VC5509DSP片内的A/D转换精度是10位的,转换结果(16位)的最高位(第15位)表示转换值是否有效(0有效),第14-12位表示转换的通道号,低10位为转换数值,所以在保留时应注意取出结果的低10位,再根据高4位进行相应保存。
4.混频波形产生:
将接收到的两路AD采集信号进行相加,并对结果的幅度进行限制,从而产生混合后的输出
波形。
实验中采用了同相位混频方法,也可修改程序完成异相混频法。
5.源程序及注释:
本实验程序在主循环中对AD进行连续采样,每次采样首先设置AD转换控制寄存器(ADCCTL),发送转换通道号和启动命令,然后循环等待转换结果,最后将结果保存。
由于需要进行实时混频,所以交替转换通道0和通道1(ICETEK-VC5509-EDU实验箱上ADCIN2和ADCIN3)。
三.部分程序代码
voidInitADC();
voidwait(unsignedintcycles);
voidEnableAPLL();
unsignedintnADC0[256],nADC1[256],nMixing[256];
main()
{
inti;
unsignedintuWork;
EnableAPLL();
SDRAM_init();
InitCTR();
InitADC();
PLL_Init(144);
while
(1)
{
for(i=0;i<256;i++)
{
ADCCTL=0x8000;//启动AD转换,通道0
do
{
uWork=ADCDATA;
}while(uWork&0x8000);
nADC0[i]=uWork&0x0fff;
ADCCTL=0x9000;//启动AD转换,通道1
do
{
uWork=ADCDATA;
}while(uWork&0x8000);
nADC1[i]=uWork&0x0fff;
uWork=(nADC0[i]+nADC1[i]);//混频
uWork>>=1;//限幅,混频后仍然产生12位数据
//uWork=(nADC0[i]+nADC1[i]*3);
//uWork>>=2;
nMixing[i]=uWork;
}
}//在此加软件断点
}
voidInitADC()
{
ADCCLKCTL=0x23;//4MHzADCLK
ADCCLKDIV=0x4f00;
}
voidwait(unsignedintcycles)
{
inti;
for(i=0;i } 四.实验结果 五.实验体会 掌握A/D转换的基本过程和程序处理过程; 学习通过对采样值进行计算产生混频波形。 实验六、异步串口通信 一.实验目的 了解ICETEK-VC5509-A评估板上扩展标准RS-232串行通信接口的原理和方法。 学会对串行通信芯片的配置编程。 学习设计异步通信程序。 二.实验原理 1.ICETEK-VC5509-A板异步串口设计。 在板上加上16C550、Max232和驱动电路部分即可。 驱动电路主要完成将输出的0-3.3V电 平转换成异步串口的工作电平,转换电平的工作由MAX232芯片完成,但由于它是5V器件所以它同DSP间的信号线必须有电平转换,此板采用的是74LVC245。 2.串行通信接口设置。 内部生成的串行时钟由系统时钟SYSCLK频率和波特率选择寄存器决定。 串行通信接口使 用16位波特率选择寄存器,数据传输的速度可以被编程为65000多种不同的方式。 不同通信模式下的串行通信接口异步波特率由下列方法决定: -BRR=1—65535时的串行通信接口异步波特率: 串行通信接口异步波特率=SYSCLK/[(BRR+1)*8]。 其中,BRR=SYSCLK/(SCI异步波特率*8)-1; -BRR=0时的串行通信接口异步波特率: 串行通信接口异步波特率=SYSCLK/16。 这里BRR等于波特率选择寄存器的16位值。 3.实验程序流程图: 三.实验结果 通过DSP传送到PC机上的信息,可以看出: 串口正确工作。 我们在“发送的字符/数据”栏中输入一些要发送到DSP的字符串,例如“Hello,man! ”,以“.”字符结尾,然后单击“手动发送”按钮后,在“串口调试助手”的接收窗口中可看到“oh,yousayHello,man! ”的回答。 五.实验体会 通过本次实验,我们了解了ICETEK-VC5509-A评估板上扩展标准RS-232串行通信接口的原理和方法。 学会对串行通信芯片的配置编程。 学习设计异步通信程序。 综合设计2: LCD液晶显示 一.实验原理 1.EMIF接口: TMS320C5509DSP的扩展存储器接口(EMIF)用来与大多数外围设备进行连接,典型应用如 连接片外扩展存储器等。 这一接口提供地址连线、数据连线和一组控制线。 ICETEK-VC5509-A将这些扩展线引到了板上的扩展插座上供扩展使用。 2.液晶显示模块的访问、控制是由5509ADSP对扩展接口的操作完成。 控制口的寻址: 命令控制接口的地址为0x602800,数据控制接口的地址为0x602801和 0x600802,辅助控制接口的地址为0x600801。 3.显示控制方法: 液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变 显示,写入“1”则显示一点,写入“0”则不显示。 其地址与象素的对应方式如下: -发送控制命令: 向液晶显示模块发送控制命令的方法是通过向命令控制接口写入命令控制字,然后再向辅助控制接口写入0。 下面给出的是基本命令字、解释和C语言控制语句 举例: .显示开关: 0x3f打开显示;0x3e关闭显示; .设置显示起始行: 0x0c0+起始行取值,其中起始行取值为0至63; .设置操作页: 0x0b8+页号,其中页号取值为0-7; .设置操作列: 0x40+列号,其中列号为取值为0-63; -写显示数据: 在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写 入液晶显示模块的缓存。 将数据发送到相应数据控制I/O接口即可。 4.液晶显示器与DSP的连接: 5.数据信号的传送: 由于液晶显示模块相对运行在高主频下的DS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程晓 DSP 课程设计 报告