- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三: dsp 的定时器和外中断
定时器:
一.实验目的
1 .通过实验熟悉 vc5509a 的定时器;
2 .掌握 vc5509a 定时器的控制方法;
3 .掌握 vc5509a 的中断结构和对中断的处理流程;
.学会 c 语言中断程序设计,以及运用中断程序控制程序流程。二.实验设备
计算机, icetek-vc5509-a
实验箱 (或 icetek
仿真器 +icetek – vc5509-a
系统板 + 相关
连线及电源)。
三.实验原理
1
.通用定时器介绍及其控制方法(详见
spru595b.pdf ):
tms320vc5509a 内部有两个 20
位通用定时器( gp):
*
每个通用定时器包括:
-
一个 16
位的减计数的计数器
tim ;
-
一个 16
位的定时器周期寄存器
prd ;
-
一个 16
位的定时器控制寄存器
tcr
;
-
一个 16
位的定时器预定标寄存器
pscr ;
pscr 寄存器说明 : 15 10 9 6 5 4 3 0 reserved psc reserved tddr
psc: 4位的预定标值 , 与 tim 共同组成 20 位的定时计数器 .
tddr:预定标周期寄存器 ( 在需要时重装入 psc 的值 )
tcr 寄存器说明(详见 spru595b.pdf )
2 .中断响应过程(详见 spru595b.pdf ):
外设事件要引起 cpu 中断,必须保证: ier 中相应使能位被使能, ifr 相应中断也被 使
能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如 定
时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器 1 会引起 tint 中
断),程序在进行服务操作之后, 应将本外设的中断标志位清除以便能继续中断, 然后返 回。
.中断程序设计:
-
程序中应包含中断向量表,
vc5509a
默认向量表从程序区
0 地址开始存放,根据 ipvd
和 ipvh 的值确定向量表的实际地址。
-
注意观察程序中 intr_init()
函数的定义部分, 其中 ipvd
和 ipvh 的值都为 0x0d0 ;同
时
观察配置文件 icetek – vc5509-ae.cmd
中的 vect 段描述中
o=0x0d000。
向量表中每项为 8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口
地址。 第一个向量表的首项为复位向量, 即 cpu 复位操作完成后自动进入执行的程序入口。
服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务
5 .实验程序分析: 本实验设计的程序是在上实验 3.1 基础上修改得来, 由于实验 3.1 控制指示灯闪烁的延
时控制是用循环计算方法得到的, 延时不精确也不均匀, 采用中断方式可以实现指示灯的定 时闪烁,时间更加准确。
实验程序的工程中包含了两种源代码,主程序采用 c 语言编制利于控制,中断向量表
vector.asm 汇编语言文件中, 利于直观地控制存储区分配。 在工程中只需将它们添加进来 即可,编译系统会自动识别分别处理完成整合工作。
时
实验程序的 c 语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制的方法,同样的方法也能提高 c 语言部分程序的计算效率四.实验步骤
dsp
状态
.实验准备:
连接实验设备:请参看本书第三部分、第一章、二。关闭实验箱上扩展模块和信号源电源开关。
请参看本书第三部分、第一章、四、 2。
请参看本书第三部分、第一章、五、 2。
选择菜单 debug→ reset cpu 。
.打开工程文件:
打开菜单 “ project ”的“ open”项;选择 c:\icetek\vc5509ae\vc5509ae\lab0303-timer 目录中的“ timer.pjt ”。
在项目浏览器中, 双击 main.c ,激活 main.c 文件,浏览该文件的内容, 理解各语句作用。
打开 icetek – vc5509-ae.cmd ,对照 vector.asm 源程序学习中断向量表的写法。
.编译、下载程序。
.运行程序,观察结果。
7 .改变 timer_init() 函数里 *prd0 = 0x0ffff 为 “ =0x0fff ” ; 重复步骤 5,6 观察实
验现象。
五.实验代码
#include myapp.h// 定义指示灯寄存器地址和寄存器类型
#define lbds (*((unsigned int *)0x400001))
void intr_init( void );
void timer_init(void);
int nc
文档评论(0)