DSP实验.docx
- 文档编号:9848048
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:11
- 大小:234KB
DSP实验.docx
《DSP实验.docx》由会员分享,可在线阅读,更多相关《DSP实验.docx(11页珍藏版)》请在冰豆网上搜索。
DSP实验
DSP原理与应用
实验报告
实验名称:
定时器实验
实验时间:
第十二周星期日5-6节
实验地点:
YF107
姓名:
白瑶
学号:
08500511
班级:
0120808班
指导教师:
代少升陈昌川
重庆邮电大学通信与信息工程学院电子信息工程
DSP原理与应用
一、实验目的:
1.通过实验熟悉VC5509A的定时器;
2.掌握VC5509A定时器的控制方法;
3.掌握VC5509A的中断结构和对中断的处理流程;
4.学会C语言中断程序设计,以及运用中断程序控制程序流程。
二、实验设备:
计算机,ICETEK-VC5509-A实验箱(或ICETEK仿真器+ICETEK-VC5509-A实验箱(或ICETEK仿真器+ICETEK-VC5509系统板+相关连线及电源。
三、实验原理:
1.通用定时器介绍及其控制方法
TMS320VC5509A内部有两个20位通用定时器(GP):
每个通用定时器包括:
一个16位的减计数的计数器TIM;
一个16位的定时器周期寄存器PRD;
一个16位的定时器控制寄存器TCR;
一个16位的定时器预定标寄存器PSCR;
PSCR寄存器说明:
2-10
PSCR:
4位的预定标值,与TIM共同组成20位的定时计数器。
TDDR:
预定标周期寄存器(在需要时重装入PSC的值)。
TCR寄存器说明。
2.中断响应过程
外设事件要引起CPU中断,必须保证:
IER中相应使能位被使能,IFR相应中断也被使能。
在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:
定时器1会引起TINT中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。
3.中断程序设计
程序中应包含中断向量表,VC5509A默认向量表从程序区0地址开始存放,根据IPVD和IPVH的值确定向量表的实际地址。
注意观察程序中INTR_init()函数的定义部分,其中IPVD和IPVH的值都为0x0d0;同时观察配置文件ICETEK–VC5509-AE.cmd中的VECT段描述中o=0x0d000。
向量表中每项为8个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。
第一个向量表的首项为复位向量,即CPU复位操作完成后自动进入执行的程序入口。
服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务。
4.定时器中断实验程序流程图
5.1定时器结构框图
5.2时钟部分
定时器的工作时钟可以来自DSP内部的CPU时钟,也可以来自从TIN/OUT管脚输入的外部时钟。
具体时钟源的选择和TIN/TOUT脚的功能由控制寄存器TCR中的FUNC字段确定,如下图所示:
由表可见,C5509的定时器有4种工作模式:
①当FUNC=00时,TIN/TOUT为高阻态,时钟源为CUP时钟。
该模式为复位后的缺省模式。
②当FUNC=01时,TIN/TOUT为定时器输出,时钟源为CPU时钟。
此时,TIN/TOUT作为三个定时器事件中的一个,可以输出时钟信号或脉冲信号。
③当FUNC=10时,TIN/TOUT为通用输出,时钟源为CPU时钟。
此时,TIN/TOUT作为通用输出(GeneralOutput),其电平有控制寄存器TCR中的DATOUT字段确定。
④当FUNC=11时,TIN/TOUT为时钟源输入,定时计数器将在其上升沿递减。
5.3计数器部分
C5509定时器的计数器分为两类,一类用于定时器工作,一类用于CUP设置定时长度。
它的定时长度为20bit:
4bit的预定标器和16bit的主计数器。
其中,4bit的预定标值由预定寄存器PRSC中的TDDR定义;16bit主计数器的值由定时周期寄存器PRD定义。
相关寄存器的格式如下表所示:
定时器主计数寄存器TIM
假定定时器的工作时钟周期为clockin,则定时长度T可用下式计算:
T=clockin*(PRD+1)*(TDDR+1)
预定标寄存器PRSC
定时器周期寄存器PRD
定时控制寄存器TCR
定时器配置C程序流程:
5.4实验程序分析
本实验设计的程序是在上指示灯实验基础上修改得来,由于指示灯实验控制指示灯闪烁的延时控制是用循环计算方法得到的,延时不精确也不均匀,采用中断方式可以实现指示灯的定时闪烁,时间更加准确。
实验程序的工程中包含了两种源代码,主程序采用C语言编制利于控制,中断向量表在vector.asm汇编语言文件中,利于直观地控制存储区分配。
在工程中只需将它们添加进来即可,编译系统会自动识别分别处理完成整合工作。
实验程序的C语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制DSP状态时的方法,同样的方法也能提高C语言部分程序的计算效率。
四、定时器实验步骤:
1.实验设备:
连接实验设备;关闭实验箱上扩展模块和信号源电源开关。
2.设置CodeComposerStudio3.3在硬件方式下运行
3.启动CodeComposerStudio3.3
4.打开工程文件:
打开菜单“Perject”的“Open”项
5.编译下载程序
6.运行程序,观察结果
7.改变TIMER_init()函数里*prd0=0x0ffff为“=0x0fff”;重复步骤5,6观察实验现象
8.退出CCS
五、程序代码
#include"myapp.h"
//定义指示灯寄存器地址和寄存器类型
#defineLBDS(*((unsignedint*)0x400001))
voidINTR_init(void);
voidTIMER_init(void);
intnCount;
intflag_time;
main()
{
nCount=0;
PLL_Init(40);
SDRAM_init();
LBDS=0;
INTR_init();
TIMER_init();
while
(1)
{
}
}
voidinterruptTimer()
{
nCount++;
nCount%=16;
if(nCount==0)
LBDS^=1;
}
voidINTR_init(void)
{
IVPD=0xd0;//cpu将16bite的中断矢量指针与5bite的矢量序号级联一起1011000000000000
//然后左移3bite形成中断适量地址
IVPH=0xd0;
IER0=0x10;
DBIER0=0x10;
IFR0=0xffff;
asm("BCLRINTM");
}
voidTIMER_init(void)
{
ioportunsignedint*tim0;
ioportunsignedint*prd0;
ioportunsignedint*tcr0;
ioportunsignedint*prsc0;
tim0=(unsignedint*)0x1000;
prd0=(unsignedint*)0x1001;
tcr0=(unsignedint*)0x1002;
prsc0=(unsignedint*)0x1003;
//*tcr0=0x04f0;//定时器0控制寄存器,关闭定时器,自动重载打开,定时器拷贝打开
*tcr0=0x0Cf0;//定时器0控制寄存器,关闭定时器,自动重载打开,定时器拷贝打开
*tim0=0;//定时器0主计数器
*prd0=0x0ffff;//定时器0周期寄存器
*prsc0=2;//定时器0周期及计数寄存器
*tcr0=0x00e0;//定时器0控制寄存器,定时器启动
//*tcr0=0x08e0;//定时器0控制寄存器,定时器启动
}
六、实验结果:
1、指示灯在定时器的定时中断中按照设计定时闪烁。
2、使用定时器和中断服务程序可以完成许多需要定时完成的任务,比如DSP定时启动A/D转换,日常生活中的计时器计数、空调的定时启动和关闭等。
3、在调试程序时,有时需要指示程序工作的状态,可以利用指示灯的闪烁来达到,指示灯灵活的闪烁方式可表达多种状态信息。
七、实验心得
通过本次实验,让我对DSP这门课程在应用软件上有了基本的操作知识,以及通过对定时器控制C语言编程的编写,已经基本掌握了定时器的基本原理以及中断基本原理,并能够很好的进行设计,达到对软硬件结合使用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验