《DSP原理与应用实验报告总结.pdf》由会员分享,可在线阅读,更多相关《DSP原理与应用实验报告总结.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、DSPDSP 原理与应用原理与应用定时器定时器姓姓名名班班级级 0120808 0120808专专业业电子信息工程电子信息工程20112011 年年 12 12 月月DSPDSP 的定时器实验报告的定时器实验报告一、一、实验目的实验目的1.通过实验熟悉 VC5509A 的定时器;2.掌握 VC5509A 定时器的控制方法;3.掌握 VC5509A 的中断结构和对中断的处理流程;4.学会 C 语言中断程序设计,以及运用中断程序控制程序流程。二、二、实验设备实验设备计算机,ICETEK-VC5509-A 实验箱(或 ICETEK 仿真器+ICETEKVC5509-A系统板+相关连线及电源)。三、实
2、验原理实验原理1.通用定时器介绍及其控制方法 TMS320VC5509A 内部有两个 20 位通用定时器(GP):*每个通用定时器包括:-一个 16 位的减计数的计数器 TIM;-一个 16 位的定时器周期寄存器 PRD;-一个 16 位的定时器控制寄存器 TCR;-一个 16 位的定时器预定标寄存器 PSCR;2.中断响应过程外设事件要引起 CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中断也被使能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器 1 会引起 TINT 中断),程序
3、在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。3.中断程序设计 -程序中应包含中断向量表,VC5509A 默认向量表从程序区 0 地址开始存放,根据 IPVD 和 IPVH 的值确定向量表的实际地址。-注意观察程序中 INTR_init()函数的定义部分,其中 IPVD 和 IPVH的值都为 0 x0d0;同时观察配置文件 ICETEKVC5509-AE.cmd 中的 VECT 段描述中 o=0 x0d000。-向量表中每项为 8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。第一个向量表的首项为复位向量,即 CPU 复位操作完成后自动进入执行的程序
4、入口。-服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务。4.定时器中断实验程序流程图5.1定时器结构框图T=clockin*(PRD+1)*(TDDR+1)5.2时钟部分定时器的工作时钟可以来自 DSP 内部的 CPU 时钟,也可以来自从 TIN/OUT管脚输入的外部时钟。具体时钟源的选择和 TIN/TOUT脚的功能由控制寄存器 TCR中的 FUNC 字段确定,如下图所示由表可见,C5509 的定时器有 4 种工作模式:当 FUNC=00 时,TIN/TOUT 为高阻态,时钟源为 CUP 时钟。该模式为复位后的缺省模式。当 FUNC=01 时,TIN/TOUT 为定时器输出
5、,时钟源为 CPU 时钟。此时,TIN/TOUT作为三个定时器事件中的一个,可以输出时钟信号或脉冲信号。当 FUNC=10 时,TIN/TOUT 为通用输出,时钟源为 CPU 时钟。此时,TIN/TOUT作为通用输出(General Output),其电平有控制寄存器TCR 中的 DATOUT 字段确定。当 FUNC=11 时,TIN/TOUT 为时钟源输入,定时计数器将在其上升沿递减。5.3计数器部分 C5509 定时器的计数器分为两类,一类用于定时器工作,一类用于CUP 设置定时长度。它的定时长度为 20bit:4bit 的预定标器和 16bit 的主计数器。其中,4bit 的预定标值由预
6、定寄存器 PRSC 中的 TDDR 定义;16bit 主计数器的值由定时周期寄存器 PRD 定义。相关寄存器的格式如下表所示。假定定时器的工作时钟周期为 clockin,则定时长度 T 可用下式计算:T=clockin*(PRD+1)*(TDDR+1)定时器主计数寄存器 TIM预定标寄存器 PRSC定时器周期寄存器 PRD定时控制寄存器 TCR定时器配置 C 程序流程:四、实验流程四、实验流程1.实验准备连接实验设备;关闭实验箱上扩展模块和信号电源开关。2.设置 Code Composer Studio v3.3 在硬件仿真(emulator)方式下运行。3.启动 Code Composer
7、Studio v3.3。选择菜单 DebugReset CPU。4.编译、下载程序。5.运行程序,观察结果。6.退出 CCS。五、实验代码及结果五、实验代码及结果#include myapp.h/定义指示灯寄存器地址和寄存器类型#define LBDS(*(unsigned int*)0 x400001)void INTR_init(void);void TIMER_init(void);int nCount;int flag_time;main()nCount=0;PLL_Init(40);SDRAM_init();LBDS=0;INTR_init();TIMER_init();while(
8、1)void interrupt Timer()nCount+;nCount%=16;if(nCount=0)LBDS=1;void INTR_init(void)IVPD=0 xd0;/cpu将16bite的中断矢量指针与5bite的矢量序号级联一起1011 0000 00000 000 /然后左移3bite形成中断适量地址IVPH=0 xd0;IER0=0 x10;DBIER0=0 x10;IFR0=0 xffff;asm(BCLR INTM);void TIMER_init(void)ioport unsigned int*tim0;ioport unsigned int*prd0;io
9、port unsigned int*tcr0;ioport unsigned int*prsc0;tim0 =(unsigned int*)0 x1000;prd0 =(unsigned int*)0 x1001;tcr0 =(unsigned int*)0 x1002;prsc0=(unsigned int*)0 x1003;/*tcr0=0 x04f0;/定时器0控制寄存器,关闭定时器,自动重载打开,定时器拷贝打开 *tcr0=0 x0Cf0;/定时器0控制寄存器,关闭定时器,自动重载打开,定时器拷贝打开 *tim0=0;/定时器0主计数器 *prd0=0 x0ffff;/定时器0周期寄存器 *prsc0=2;/定时器0周期及计数寄存器 *tcr0=0 x00e0;/定时器0控制寄存器,定时器启动 /*tcr0=0 x08e0;/定时器0控制寄存器,定时器启动六六 实验心得实验心得通过这次实验,我更加熟悉了 CCS 开发环境以及设计运行调试过程,认识到模块的各个工作原理以及三者之间的关系,学会对模块的初始化怎么定义和编写的流程。使我对 DSP 产生了浓厚的兴趣,激发了我学习 DSP 的积极性,从这次实验结果上来说,清晰的结果使我对书本上的知识应用到了实验中,很满足。最后,感谢老师、师兄、师姐的耐心指导!