DSP实验定时器中断实验精.docx

上传人:b****6 文档编号:8019743 上传时间:2023-05-12 格式:DOCX 页数:12 大小:29.30KB
下载 相关 举报
DSP实验定时器中断实验精.docx_第1页
第1页 / 共12页
DSP实验定时器中断实验精.docx_第2页
第2页 / 共12页
DSP实验定时器中断实验精.docx_第3页
第3页 / 共12页
DSP实验定时器中断实验精.docx_第4页
第4页 / 共12页
DSP实验定时器中断实验精.docx_第5页
第5页 / 共12页
DSP实验定时器中断实验精.docx_第6页
第6页 / 共12页
DSP实验定时器中断实验精.docx_第7页
第7页 / 共12页
DSP实验定时器中断实验精.docx_第8页
第8页 / 共12页
DSP实验定时器中断实验精.docx_第9页
第9页 / 共12页
DSP实验定时器中断实验精.docx_第10页
第10页 / 共12页
DSP实验定时器中断实验精.docx_第11页
第11页 / 共12页
DSP实验定时器中断实验精.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSP实验定时器中断实验精.docx

《DSP实验定时器中断实验精.docx》由会员分享,可在线阅读,更多相关《DSP实验定时器中断实验精.docx(12页珍藏版)》请在冰点文库上搜索。

DSP实验定时器中断实验精.docx

DSP实验定时器中断实验精

实验四定时器中断实验

:

实验目的

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

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

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

二:

实验内容

本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF引脚相连

的LCD指示灯。

当定时器中断产生时可以观察到LCD周期性闪烁。

三:

实验原理

1.定时器

SRESET

.C54xx系列的DSP都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。

定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。

应用中可以用定时器来产生周期性的CPU中断或脉冲输出。

定时器的功能方框图如图9.1所示,其中有一个主计数器(TIM)和一个预定标计数器(PSC)。

TIM用于重装载周期寄存器PRD的值,PSC用于重装载周期寄存器TDDR的值。

图5.1中有一个信号,是在器件复位时,DSP向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:

寄存器TIM和PRD装载最大值

(OFFFFH);TCR的所有位清0;结果是分频值为0,定时器启动,TCR的FREE和SOFT为0。

图5.1定时器的功能方框图

定时器实际上是有20bit的周期寄存器。

它对CLKOUT信号计数,先将PSC(TCR中的D6~D9位)减1,直至PSC为0,然后把TDDR(TCR中的低4位)重新装载入PSC,同时将TIM减1,直到TIM减为0。

这时CPU发出TINT中断,同时在TOUT引脚输出一个脉冲信号,脉冲宽度与CLKOUT一致,然后将PRD重新装入TIM,重复

TSS

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

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

1

PRD+1

TINT的频率=X>(其中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~1211109~6543~0

ReservedSOFTFREEPSCTRBTSSTDDR

图5.2TCR位描述

•第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+1X(PRD+1来计算,其中,TDDR最大值为0FH,PDR最大值为0FFFFH,所以能计时的最长长度为TX1048576,由所采用的机器周期T决定,例如f=4MHz,T=250,则最长定时时间为:

Tmax=25(X1048576=262.144(ms

例如若需要更长的计时时间,则可以在中断程序中设计一个计数器。

设计一个周期为40s的方波,可将定时器设置为100ms,程序计数器设为200,当计数

200X100ms=20s时输出取值一次,可形成所要求的波形。

四:

实验步骤本实验的步骤为:

运行环境。

CCS

(2)新建工程,添加TIME文件及其配制文件,用编译链接工具条对文件进行编译链接,如果编译链接错误提示为“0Errors”则把.out文件下载到目标板,然后

再单击图6.3中的运行工具运行程序,这时可以看到目标板上和XF引脚的LED在

周期性闪烁。

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

图5.3CPU寄存器

(4)参考程序如下;

.mmregs

.globalmainint

ktcr.set0029h

ktcrstop.set0010h

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

;RESSOFTFREEPSCTRBTSSTDDR

;000000000010(TSS=1时停止定时)1001

・**********************^定时器参数定^义

***************************************

Tim0.set24h;timer0register

PrdO.set25h;timerOperiodcounter

TcrO.set26h;timerOcontrolregister

period.set99定时器周期

・***********************************************************************

J

******

.sect"vectors"

中断向量表

・**********************

7

*****************************************

vector:

bmainint

nop

nop

nmi:

rete

nop

nop

nop

sint17:

rete

nop

nop

nop

sint18:

rete

nop

nop

nop

sint19:

rete

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

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

nopint1:

rete

nop

nop

nop

int2:

rete

nop

nop

nop

btintO

nop

nop

brint0:

rete

nop

nop

nop

bxint0:

rete

nop

nop

nop

trint:

rete

nop

nop

nop

txint:

rete

nopint3:

rete

nop

nop

nop

hpint:

rete

nop

nop

nop

q26:

.word0ff80h

.word0,0,0

q27:

.word0ff80h

.word0,0,0

q28:

.word0ff80h

.word0,0,0

q29:

.word0ff80h

.word0,0,0

q30:

.word0ff80h

.word0,0,0

q31:

.word0ff80h

.word0,0,0

************************************************************************

.text

mainint:

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

ssbxintm;关中断

ssbxsxm

ssbxfret;允许小数乘法

Id#O,dp

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

************************************************************************

**

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

;RESDMAC5DMAC4BXINT1BRINT1HINTINT3TINTDMAC0BXINT0BRINT0TINT0INT2INT1INT0

;0000000000001000

************************************************************************

stm#ktcrstop,tcr;停止定时

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

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

stm#ktcr,tcr;启动定时器

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

stm#0ffffh,ifr;清中断

rsbxintm;开中断

wait:

nop;循环,等中断

bwait

定时器中断程序

・**************************

7

*********************************

************************************************************************

*

tintO:

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

stm#20,*ar2

stm#20,*ar1

aa:

ssbxxf;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;等待

banzaa,*ar1-

bb:

rsbxxf;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;等待

banzbb,*ar2-

rete;中断返回

.end

配置文件如下:

time.obj

-otime.out

-mtime.map

-emainint

MEMORY

{

PAGE0:

EPROM:

org=2000h,len=1000h

PAGE1:

SPRAM:

org=0060h,len=100h

}

SECTIONS

{

vectors:

>EPROMPAGE0

.text:

>EPROMPAGE0

}

五:

实验报告要求:

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

2.自编汇编程序,要求,每一次进入定时器中断,XF引脚取反一次(提示:

设置

标志FLAG,当XF=1时,FLAG=1,当XF=0时,FLAG=0)。

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

4.汇编程序中:

.space.41606的含义是什么,若不用.space.416^6,可用什么语句代替。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2