- 34
- 0
- 约5.34千字
- 约 6页
- 2020-10-05 发布于浙江
- 举报
实验四:定时器中断实验
一、实验 目的
1. 学习定时器中断的设计方法;
2. 熟悉在汇编和C语言条件下如何编写中断服务程序;
3. 掌握长时间间隔的定时器的处理。
二、实验内容
控制核心板上的指示灯闪烁,频率为1Hz。使用DSP芯片的定时器0,
定时周期为10ms,中断100次后,对指示灯的状态改变一次。
三、实验原理
中断指的是当某个事件发生时,暂停当前的操作,转向中断服务程
序,执行完后再返回继续原来的操作。这使得DSP能够处理多个任务。
DSP有许多中断源,可以设置中断控制寄存器来确定响应哪些中断而不
理会哪些中断。本实验介绍最常用的定时器中断的使用方法,并介绍中
断向量表和中断向量指针。
TMS320VC5416的定时器的说明。Vc5416片上有一个可编程的定时
器,总共包含有三个可由用户设置的寄存器,并可以申请主机的中断。
这3个寄存器分别为TIM、PRD、TCR。
时间寄存器 (TIM)是一个16的存储器映像寄存器,它的值由周期
寄存器来进行装载,并且做减一操作。
周期寄存器 (PRD)是一个16的存储器映像寄存器,它是用来重装
时间寄存器 (TIM)的值的。
定时器控制寄存器 (TCR)是一个16的存储器映像寄存器,包含了
定时器的控制和状态信息。
定时中断周期 CLKOUT× (TDDR+ 1)× (PRD+ 1)
四、实验步骤
(1)使用定时器首先要对它初始化,基本步骤如下:
1、关掉中断
2、停止定时器运行。
3、设定时器的定时长度
4、允许定时器中断
5、运行定时器
6、打开中断
本实验的部分程序代码如下:
#include vc5416.h
#include usr.h //载入头文件
unsigned int count 0,temp 0;
main ()
{
system_init(); //系统初始化
timer0_init(); //定时器0初始化,使定时器每
10ms中断一次
while(1)
{
if(count 0x0064)
{
ST1 sbit_reverse(ST1,b13_msk); //改变XF引脚的状态,
使指示灯闪烁
count 0x0000; //对计数值清0
}
}
}
/*interrupt serve program*/
void interrupt tint0 () //中断服务程序,每次中断到来
时对计数值加一
{
count++;
}
/*定时器0初始化*/
void timer0_init()
{
TCR sbit1(TCR,b4_msk);
PRD 0x2710;
TCR 0x003f;
TCR sbit0 (TCR,b4_msk); /*定时器0提供系统时钟,10ms per
tick */
}
/*系统初始化*/
void system_init()
{
PMST 0x00e0; /*中断向量指向0080单元*/
asm ( ssbx INTM );
IFR 0xffff;
IMR 0x0089; //使能定时器0中断
asm ( rsbx INTM );
BSCR 0x6002;
}
(2)中断向量表
中断向量表是DSP程序的重要组成部分,当有中断发生并且处于允
许状态时,程序指针跳转到中断向量表中对应的中断地址。由于中断服
务程序一般较长,通常中断向量表存放的是一个跳转指令
原创力文档

文档评论(0)