实验四定时器中断实验.pdfVIP

  • 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)

1亿VIP精品文档

相关文档