VC5509A定时器使用实验报告 DSP

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级 电子 1412
姓名 孙玮
学号
14200106214
4
实验名称
一.实验目的
定时器使用实验
源自文库

1.通过实验熟悉VC5509A 的定时器; 2.掌握VC5509A 定时器的控制方法; 3.掌握VC5509A 的中断结构和对中断的处理流程; 4.学会C 语言中断程序设计,以及运用中断程序控制程序流程。
二、实验内容、过程及结果(含程序)
24 位中断向量 地址低八位 0H 8H 10H 18H 20H 28H 30H 38H 40H 48H 50H 58H 60H 68H 70H 78H 80H 88H 90H 98H A0H A8H B0H B8H C0H C8H D0H D8H E0H E8H F0H F8H
中断子程序功能 复位(硬件或软件) 外部不可屏蔽中断 外部硬件中断 0 外部硬件中断 2 定时器 0 中断 McBSP0 接收中断 McBSP1 接收中断 McBSP1 发送中断 软件中断 8 DMA 通道 1 中断 主机中断 外部硬件中断 3 McBSP2 接收中断 McBSP2 发送中断 DMA 通道 4 中断 DMA 通道 5 中断 外部硬件中断 1 McBSP0 发送中断 DMA 通道 0 中断 外部硬件中断 4 或 RTC 中断 DMA 通道 2 中断 DMA 通道 3 中断 定时器 1 中断 I2C 总线中断 总线出错中断 数据记录中断 实时操作系统中断 软件中断 27 软件中断 28 软件中断 29 软件中断 30 软件中断 31
- 向量表中每项为 8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入 口地址。 第一个向量表的首项为复位向量,即 CPU 复位操作完成后自动进入执行 的程序入口。 - 服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务。 4.实验程序流程图:
5.实验程序分析: 本实验设计的程序是在上实验1.3 基础上修改得来,由于实验1.3 控制指示灯闪烁 的延 时控制是用循环计算方法得到的,延时不精确也不均匀,采用中断方式可以实现 指示灯的定 时闪烁,时间更加准确。 实验程序的工程中包含了两种源代码,主程序采用 C 语言编制利于控制,中断 向量表 在 vector.asm 汇编语言文件中,利于直观地控制存储区分配。在工程中只需将 它们添加进来即可,编译系统会自动识别分别处理完成整合工作。 实验程序的C 语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制DSP 状 态时 的方法,同样的方法也能提高C 语言部分程序的计算效率。 6.实验准备: ⑴ 连接实验箱:请参看本书 第三部分、第一章、二.ICETEK DSP 教学实验箱的硬件 连接。 ⑵ 准备进行硬件仿真:请参看本书 第三部分、第一章、四、3 。 7. 启动 Code ComposerStudio v5 8.打开工程文件:C:\ICETEK\ICETEK-VC5509-AE\Lab0105-Timer,代码如下: #include "myapp.h" // 定义指示灯寄存器地址和寄存器类型 #define LBDS (*((unsigned int *)0x400001)) void INTR_init( void ); void TIMER_init(void);
int nCount; main() { nCount=0; PLL_Init(40); SDRAM_init(); LBDS=0; INTR_init(); TIMER_init(); while ( 1 ) { } } void interrupt Timer() { nCount++; nCount%=16; if ( nCount==0 ) LBDS^=1; } void INTR_init( void ) { IVPD=0xd0; IVPH=0xd0; IER0=0x10; DBIER0 =0x10; IFR0=0xffff; asm(" BCLR INTM"); } void TIMER_init(void) { ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0x1000; prd0 = (unsigned int *)0x1001; tcr0 = (unsigned int *)0x1002; prsc0 = (unsigned int *)0x1003; *tcr0 = 0x04f0; *tim0 = 0;
3、CPU 工作主频怎样设置; C55x 片内的时钟发生器可以从 CLKIN 引脚接受输入的时钟,将其变换为 CPU 及 其外设所需要的工作时钟。时钟发挥说呢个器内有一个数字锁相环和一个是种模式寄 存器。是种模式寄存器用于控制时钟发生器的工作状态。
PSC: 4 位的预定标值,与TIM 共同组成20 位的定时 计数器. TDDR: 预定标周期寄存器(在需要时重装入 PSC 的值) TCR 寄存器说明(详见spru595b.pdf) 2.中断响应过程(详见 spru595b.pdf) : 外设事件要引起 CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中 断也被使能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状 态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如: 定时器1 会引起TINT 中断),程序在进行服务操作之后,应将本外设的中断标志位 清除以便能继续中断,然后返回。 3.中断程序设计: - 程序中应包含中断向量表,VC5509A 默认向量表从程序区 0 地址开始存放,根据 IPVD 和 IPVH 的值确定向量表的实际地址。 - 注意观察程序中 INTR_init()函数的定义部分,其中 IPVD 和 IPVH 的值都为 0x0d0; 同时 观察配置文件 ICETEK–VC5509-A.cmd 中的 VECT 段描述中 o=0x0d000。
三.问题与思考
1、定时器产生中断的过程; 在软件中设置好相应中断标志后开中断,进入等待中断发生的状态;中断发生 时,首先跳转到相应中断高级的服务程序中,程序在进行服务操作之后,应将本外 设的中断标志位清除以便能继续中断,然后返回。 2、VC5509A 的中断向量表;
ISR 序 号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
1. 通 用 定 时 器 介 绍 及 其控 制 方 法 ( 详 见 spru595b.pdf) : TMS320VC5509A 内部有两个20 位通用定时器(GP) : * 每个通用定时器包括: - 一个 16 位的减计数的计数器TIM; - 一个 16 位的定时器周期寄存器PRD; - 一个 16 位的定时器控制寄存器TCR; - 一个 16 位的定时器预定标寄存器PSCR; * PSCR 寄存器说明: 15 Reserved 10 9 PSC 6 5 Reserved 4 3 TDDR 0
硬件中断 优先级 0(最高) 1 2 5 6 7 9 10 11 13 14 15 17 18 21 22 4 8 12 16 19 20 23 24 2 25 26 27 28 29 30 31
中断名 称 RESET NMI INT0 INT2 INT0 RINT0 RINT1 XINT1 --DMAC1 DSPINT INT3 RINT2 XINT2 DMAC4 DMAC5 INT1 XINT0 DMAC0 INT4 DMAC2 DMAC3 TINT1 I2C BERR DLOG RTOS -----------
*prd0 = 0x0ffff; *prsc0 = 2; *tcr0 = 0x00e0; } 在项目浏览器中,双击main.c,激活main.c 文件,浏览该文件的内容,理解各语句 作用。 打开 ICETEK–VC5509-A.cmd,对照vector.asm 源程序学习中断向量表的写 法。 9.点击图标 ,ccs 会自动连接,编译和下载程序。 10.运行程序,观察结果。 11.改变 TIMER_init()函数里*prd0 = 0x0ffff 为 “=0x0fff ”;重复步骤 9,10 观察实验现 象。 12.退出 CCS 13.实验结果 - 指示灯在定时器的定时中断中按照设计定时闪烁。 -改变 TIMER_init()函数里*prd0,指示灯闪烁的速度发生改变。 - 使用定时器和中断服务程序可以完成许多需要定时完成的任务,比如 DSP 定时启动 A/D 转 换,日常生活中的计时器计数、空调的定时启动和关闭等。 - 在调试程序时,有时需要指示程序工作的状态,可以利用指示灯的闪烁来达到,指示 灯灵活的闪烁方式可表达多种状态信息。
相关文档
最新文档