DSP实验 定时器中断实验

时间:2024.4.14

实验四 定时器中断实验

一:实验目的

1.熟悉定时器初始化的步骤;

2.熟悉定时器控制寄存器(TCR)的含义和使用;

3.熟悉定时器的原理和应用。

二:实验内容

本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF引脚相连的LCD指示灯。当定时器中断产生时可以观察到LCD周期性闪烁。

三:实验原理

1.定时器

.C54xx系列的DSP都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。应用中可以用定时器来产生周期性的CPU中断或脉冲输出。定时器的功能方框图如图9.1所示,其中有一个主计数器(TIM)和一个预定标计数器(PSC)。TIM用于重装载周期寄存器PRD的值,PSC用于重装载周期寄存器TDDR的值。

图5.1中有一个         信号,是在器件复位时,DSP向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM和PRD装载最大值(0FFFFH);TCR的所有位清0;结果是分频值为0,定时器启动,TCR的FREE和SOFT为0。

 


定时器实际上是有20bit的周期寄存器。它对CLKOUT信号计数,先将PSC(TCR中的D6~D9位)减1,直至PSC为0,然后把TDDR(TCR中的低4位)重新装载入PSC,同时将TIM减1,直到TIM减为0。这时CPU发出TINT中断,同时在TOUT引脚输出一个脉冲信号,脉冲宽度与CLKOUT一致,然后将PRD重新装入TIM,重复

下去直到系统或定时器复位。

定时器产生中断的计算公式如下:

TINT的频率=   ×          ×          (其中tc为 CLKOUT的周期)

定时器由三个寄存器组成:TIM、PRD、TCR。

TIM:定时器寄存器,用于装载周期寄存器值并自减1。

PRD:周期寄存器,用于装载定时器寄存器。

TCR:定时器控制寄存器,包含定时器的控制状态位。

定时器是一个片内减计数器,用于周期地产生CPU中断。定时器被预定标计数器所触发,后者每个CPU时钟周期减1,当计数器减至0时,会产生一个定时器中断,同时在下一周期计数器被定时周期值重新装载。

在正常操作模式下,当TIM自减至0时,TIM将被PRD内的数值重装载。在硬件复位或定时器单独复位(TCR中TRB位置1)的情况下,主定时器模块输出的是定时器中断(TINT)信号。该中断被发送至CPU,同时由TOUT引脚输出。TOUT脉冲的宽度等于CLKOUT的时钟宽度。

预定标模块由两个类似TIM和PRD的单元构成。它们是预定标计数器(PSC)和定时器分频寄存器(TDDR)。PSC、TDDR是RCR寄存器的字段。在正常操作时PSC自减为0,TDDR值装入PSC,同样在硬件复位或定时器单独复位的情况下,TDDR也被装入PSC。PSC被CPU时钟定时,即每个CPU时钟使PSC自减1。PSC可被TCR读取,但不能直接写入。

当TSS置位时,定时器停止工作。若不需要定时器,终止定时操作,可使芯片工作在低功耗模式,并且可以使用与定时器相关的两个寄存器(TIM和PRD)作为通用的存储器单元,可以在任意周期对它们进行读或写操作。

TIM的当前值可被读取,PSC也可以通过TCR读取。因为读取这两个存储器需要两个指令,而在两次读取之间因为自减,数值可能改变,因此,PSC两次读的结果可能有差别,不够准确。若要准确测量时序,在读这两个寄存器值之前可先中止定时器,对TSS置1和清0后,可重新开始定时。

通过TOUT信号或中断,定时器可以用于产生周边设备的采样时钟,如模拟接口。对于有多个定时器的DSP,由寄存器GPIOCR中的第15位控制使用某一个定时器产生的TOUT信号。

2.定时器初始化

(1)定时器初始化步骤

●TCR的TSS位写1,定时器停止工作;

●装载TRD;

●初始化TCR中的TDDR,并对TCR中的TSS置0,对TRB置1来重装载定时器周期。

(2)初始化定时器中断方法(INTM=1)

●FIR中的TINT写1,以清除挂起的定时器中断;

●IMR中的TINT置1,启动定时器中断;

●启动全部中断,INTM置0;

●在重启(RESET)后,TIM和PRD被设置为最大值(FFFFH),TCR中的TDDR置0。

(3)定时控制寄存器(TCR)

TCR为一个映射到片内的16位寄存器,它可以控制:

●定时器的工作方式;

●设定预定标计数器中的当前数值;

●启动或停止定时器;

●重新装载定时器;

●设置定时器的分频值。

TCR的位描述如图5.2

●第15~12位Reserved:保留位,总为0 。

●第11~10位SOFT、FREE:特殊的仿真位。高级语言调试程序中出现一个断点时,该仿真位决定定时器的状态。如果FREE位设为1,则当遇到一个断点时,定时器继续运行(即自由运行),在这种情况下,SOFT被忽略。但是,如果FREE为0,则SOFT有效。在此情况下,如果SOFT=0,则定时器停止,下一次TIM的值递减;如果SOFT=1,则当TIM减到0,定时器停止工作。

●第9~6位PSC:定时器预定标计数器。这4位用来保存定时器的当前预定标计数器。每个CLKOUT周期内,若PSC值大于0,PSC减1,在PSC减到0后的下个CLKOUT周期内,装载TDDR的内容,并且TIM减1。每当软件设置了定时器重载位(TRB)时,PSC也被重新装载。可通过TCE检测PSC,但PSC不能直接设置,PSC值必须从TDDR中提取。复位时,PSC设为0。

●第5位TRB:定时器重载位。当TRB写入1时,TIM装载PRD中的值,并且PSC装载TDDR中的值。TRB位总被读为0。

●第4位TSS:定时器停止状态位。TSS停止或重新启动定时器。复位时,TSS清零,并且立即启动定时器。TSS=0,启动或重新启动定时器;TSS=1,停止定时。注意,此位为只读位,读出的值永远为0。

●第3~0位TDDR:定时器分频比寄存器。每经过(TDDR+1)个CLKOUT周期,TIM减1。复位时,TDDR位清0。如果想通过一个整数因子增加总的定时计数值,则将整数因子减1后写入这4位。当PCS值为0时,在随后的一个CLKOUT周期内,TDDR内容将被重新装入PSC,并且TIM减1。每当TRB重载入时,TDDR也将被PSC重新装载。

3:定时器应用:

C54x定时器所能计计时的长度可通过公式Tx(TDDR+1)×(PRD+1)来计算,其中,TDDR最大值为0FH,PDR最大值为0FFFFH,所以能计时的最长长度为T×1048576,由所采用的机器周期T决定,例如f=4MHz,T=250,则最长定时时间为:Tmax=250×1048576=262.144(ms)

例如若需要更长的计时时间,则可以在中断程序中设计一个计数器。设计一个周期为40s的方波,可将定时器设置为100ms,程序计数器设为200,当计数200×100ms=20s时输出取值一次,可形成所要求的波形。

四:实验步骤

本实验的步骤为:

(1)连接好实验板,选择相应的CCS运行环境。

(2)新建工程,添加TIME文件及其配制文件,用编译链接工具条对文件进行编译链接,如果编译链接错误提示为“0 Errors”,则把.out文件下载到目标板,然后再单击图6.3中的运行工具运行程序,这时可以看到目标板上和XF引脚的LED在周期性闪烁。

(3)选择菜单View→CPU Registers→CPU Registers命令,可以观察到累加器A在不断加1,如图5.3所示。

 

                                图5.3 CPU 寄存器

(4) 参考程序如下;

  .mmregs

         .global  mainint

ktcr     .set  0029h

ktcrstop  .set 0010h

;TCR  定时器控制寄存器各位含义如下:

;RES  SOFT  FREE  PSC    TRB   TSS                 TDDR

;00000      0     0000    1  0  (TSS=1时停止定时)  1001

;**********************定时器参数定义***************************************

Tim0   .set  24h         ;timer0  register

Prd0    .set  25h         ; timer0  period  counter 

Tcr0    .set  26h         ; timer0    control  register

period    .set 99          ;定时器周期

;*****************************************************************************

          .sect "vectors"

;**********************中断向量表*****************************************

vector:   b  mainint

          nop

          nop

         

nmi:      rete

          nop

          nop

          nop

sint17:   rete  

          nop

          nop

          nop

sint18:   rete 

          nop

          nop

          nop

sint19:   rete 

          nop

          nop

          nop

sint20:   rete 

          nop

          nop

          nop

sint21:   rete 

          nop

          nop

          nop

sint22:   rete 

          nop

          nop

          nop

sint23:   rete 

          nop

          nop

          nop

sint24:   rete 

          nop

          nop

          nop

sint25:   rete 

          nop

          nop

          nop

sint26:   rete 

          nop

          nop

          nop

sint27:   rete 

          nop

          nop

          nop

sint28:   rete 

          nop

          nop

          nop

sint29:   rete 

          nop

          nop

          nop

sint30:   rete 

          nop

          nop

          nop

int0:   rete 

          nop

          nop

          nop

int1:   rete 

          nop

          nop

          nop

int2:   rete 

          nop

          nop

          nop

           

          b tint0       

           nop

           nop

brint0:  rete 

          nop

          nop

          nop

bxint0:  rete 

          nop

          nop

          nop

trint:   rete 

          nop

          nop

          nop

txint:   rete 

          nop

          nop

          nop

int3:    rete 

          nop

          nop

          nop

hpint:   rete 

          nop

          nop

          nop

q26:     .word  0ff80h

         .word 0,0,0

q27:     .word  0ff80h

         .word 0,0,0     

q28:     .word  0ff80h

         .word 0,0,0

q29:     .word  0ff80h

         .word 0,0,0

q30:     .word  0ff80h

         .word 0,0,0

q31:     .word  0ff80h

         .word 0,0,0

;*************************************************************************        

        .text

mainint:  stm  #203FH,PMST    ;从定位中断向量表到2000H处

        ssbx  intm             ;关中断

        ssbx  sxm

        ssbx  frct              ;允许小数乘法

        ld   #0,dp             

        stm  #0008h,imr        ;允许定时器0中断

;**************************************************************************

;允许定时器0中断,IMR 寄存器各位含义如下:

;RES  DMAC5  DMAC4  BXINT1  BRINT1  HINT  INT3  TINT  DMAC0  BXINT0  BRINT0  TINT0 INT2  INT1  INT0

;00 0       0     0      0     0    0    0   0     0      0     1    0    0   0

;***************************************************************************

        stm  #ktcrstop,tcr       ;停止定时

        stm  #period,tim        ;设定定时器寄存器

        stm  #period,prd        ;设定定时器周期寄存器

        stm  #ktcr,tcr           ;启动定时器

        stm  #0008h,imr         ;允许TIMER0中断

        stm  #0ffffh,ifr          ;清中断

        rsbx  intm              ;开中断

wait:  nop                      ;循环,等中断

      b  wait

;**************************定时器中断程序*********************************

;*************************************************************************

tint0:

   

     add #1,A         ;A寄存器加1操作

     stm  #20,*ar2

     stm  #20,*ar1

aa:

     ssbx  xf         ;XF引脚置高,LCD亮

     rpt  #8000       ;重复8001次

     nop             ;等待

     rpt  #8000       ;重复8001次

     nop             ;等待

     rpt  #8000        ;重复8001次

     nop             ;等待

     rpt  #8000        ;重复8001次

     nop               ;等待

     rpt  #8000        ;重复8001次

     nop              ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     banz  aa,*ar1-

bb:

     rsbx  xf         ;XF引脚置低,LCD灭

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     rpt  #8000         ;重复8001次

     nop               ;等待

     banz  bb ,*ar2-

     rete               ;中断返回

.end

配置文件如下:

time.obj

-o    time.out

-m   time.map

-e    mainint

MEMORY

{

       PAGE     0:

              EPROM  :org=2000h,len=1000h

             

       PAGE     1:

              SPRAM  :org=0060h,len=100h

             

}

SECTIONS

{

    vectors    :>    EPROM  PAGE     0

       .text :>    EPROM  PAGE     0

}

    

五:实验报告要求:

1.       运行源程序,观察实验结果,看到XF引脚的LED周期性地变化,修改定时器参数,改变LED闪烁周期。

2.       自编汇编程序,要求,每一次进入定时器中断,XF引脚取反一次(提示:设置标志FLAG,当XF=1时,FLAG=1,当XF=0时,FLAG=0)。

3.       深入体会中断矢量空间的可移值性。

4.       汇编程序中:.space.4×16×6的含义是什么,若不用.space. 4×16×6,可用什么语句代替。

更多相关推荐:
单片机定时器实验报告

定时器实验报告实验目的1掌握单片机内部计数器的使用和编程方法2掌握中断处理程序的编程方法实验器材12345G6W仿真器一台MCS51实验板一台PC机一台电源一台示波器一台实验内容及要求1在使用12MHz晶振的条...

51定时器实验报告

电子信息工程学系实验报告课程名称单片机原理及接口应用实验项目名称51定时器实验实验时间20xx1216班级姓名学号一实验目的熟悉keil仿真软件protues仿真软件的使用和单片机定时程序的编写了解51单片机中...

单片机实验报告——定时器

实验四定时器实验自动化121班120xx00236张礼一实验目的掌握定时器的工作原理及四种工作方式掌握定时器计数初始值的计算掌握如何对定时器进行初始化以及程序中如何使用定时器进行定时二实验仪器单片机开发板一套计...

定时器实验报告

实验六定时器计数器一实验目的学会8253芯片和微机接口的原理和方法掌握8253定时器计数器的工作方式和编程原理二实验内容用8253的0通道工作在方式3产生方波三实验接线图四编程指南8253芯片介绍8253是一种...

定时器实验报告

定时器实验报告学生何绍金学号20xx03870408专业班级指导老师杨东勇20xx年12月一实验目的1掌握定时器的工作原理2学习单片机定时器的应用设计和调试二实验设备统一电子开发平台三实验要求连接电路并编写程序...

51单片机定时器实验报告

51单片机定时器实验实验内容实验内容1编写程序使定时器0或者定时器1工作在方式1定时50ms触发蜂鸣器C语言程序includeltreg52hgtdefineuintunsignedintdefineucahr...

dsp实验报告 哈工大 实验一 定时器实验

实验一定时器实验一实验目的1通过实验熟悉LF2407A的定时器2掌握LF2407A定时器的控制方法3掌握LF2407A的中断结构和对中断的处理流程4学会运用中断程序控制程序流程二实验设备计算机ICETEKLF2...

单片机关于定时器的大作业实验报告

课程设计报告基于微处理器的定时器设计一.硬件系统的设计:(1)设计要求:本课程设计的定时器,待机状态是一台时钟,以秒为单位两点闪烁,可设置多个闹铃时间,蜂鸣器鸣叫时间持续一分钟,并可作秒表使用,可控制秒表启停。…

555定时器实验报告

555定时器的应用仿真实验报告一实验目的1熟悉555定时器的工作原理2掌握555定时器的典型应用3掌握基于multisim的555定时器应用仿真二实验原理555定时器是一种常见的集数字与模拟功能于一体的集成电路...

MSP430单片机定时器实验报告

实验四定时器实验实验目的MPS430F5529片内集成的定时器A的使用学习计数器的补捕获比较模块的使用实验内容定时器采用辅助时钟ACLK作为计数脉冲fACLK32768Hz实现以下功能1定时器TA0延时1s点亮...

555定时器实验报告表格

555定时器数字电路实验报告书班级姓名学号23备注1此表表头必须按此格式制作2表头以下的栏目和内容各系部可根据实验课程的具体需要和要求确定表中所列内容仅供参考该栏可以根据需要加页3一门课程有多个实验项目的应每一...

实验8 555定时器 - 实验报告要求

实验八555定时器实验报告要求一实验目的05分掌握555定时器的结构和工作原理学会对此芯片的正确使用学会分析和测试用555定时器构成的多谐振荡器单稳态触发器施密特触发器等三种典型电路二实验设备与器件05分三实验...

定时器实验报告(39篇)