定时器和中断系统(4.25)_第1页
定时器和中断系统(4.25)_第2页
定时器和中断系统(4.25)_第3页
定时器和中断系统(4.25)_第4页
定时器和中断系统(4.25)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.5片内外设

’C54x

片内外设包含如下几部分:⑴外部总线操作;⑵通用I/O口(引脚);⑶定时器;⑷时钟发生器;⑸主机接口;⑹同步串行接口;⑺时分复用串行接口(TDM);⑻软件可编程等待状态发生器;⑼可编程存储器组切换模块。JTAG接口2.5.1通用I/O口

通用I/O口有两个:跳转控制输入引脚BIO和外部标志输出引脚XF⒈跳转控制输入引脚BIO:该引脚可用于监视外部设备的状态。程序可以根据引脚BIO输入状态有条件地执行一个分支转移。条件执行指令:

XCn,

cond[,cond[,cond]操作数n=1或2功能:1、如果n=1且条件满足,则在该指令之后的一条1-字指令被执行;

2、如果n=2且条件满足,则在该指令之后的一条2-字指令或两条1-字指令被执行。

3、如果条件未满足,则根据n=1或2执行一条或两条NOP指令。例一:XC1,ALEQ;如果A的值小于或等于0,则执行1字指令MAR*AR1+以修改AR1MAR*AR1+ADDA,DAT100

指令执行前指令执行后

A=FFFFFFFFFFh A=FFFFFFFFFFh AR1=0031h AR1=0032h例二:XC2,BIO;如果引脚BIO为低电平(条件满足),则执行后面的一条双字指令或2条单字指令。⒉外部标志输出引脚XF外部标志输出引脚XF可以用于向外部设备发出信号。XF信号可以由软件控制。通过对STl(bit13)中的XF位置1或清0,XF引脚输出为高电平和低电平,亦即CPU向外部发出1和0信号。

执行指令:

SSBXXF;对XF置位

RSBXXF

;对XF复位2.5.2定时器

C5402内部有定时器0和定时器1两个定时器。结构一样。片内硬件定时器是软件可编程的,可用于周期性地产生中断。定时器可以用来产生外部接口电路的采样时钟,如模拟接口。

1.定时器的结构和特点定时器主要由3个16位的存储器映像寄存器及相应的逻辑控制电路组成。3个存储器映像寄存器的地址列于下表中。Timer0地址Timer1地址寄存器说明0024H0030HTIM定时器寄存器,每计数一次自动减10025H0031HPRD定时器周期寄存器,当TIM减为0后,CPU自动将PRD的值装入TIM0026H0032HTCR定时器控制寄存器,包含定时器的控制和状态位

C54xDSP定时器结构如下图所示。它由两个基本功能块组成,即主定时器模块(PRD和TIM)、预定标器模块(TCR中的TDDR和PSC等)及相应的逻辑控制电路。主定时器模块(由PRD和TIM组成)预定标器模块(由TCR的TDDR和PSC位组成)。

*定时器寄存器(TIM):是减1计数器,可加载周期寄存器PRD的值,并随计数减少。*定时器周期寄存器(PRD):PRD用于重载定时器寄存器(TIM)。定时器控制寄存器(TCR)TCR包含定时器的控制和状态位,控制定时器的工作过程。定时器主要特点:(1)定时器是一个减计数器。(2)由16位计数器和4位预分频计数器组成。16位计数器的触发脉冲由预分频计数器提供,预分频计数器的触发脉冲是CPU时钟信号。(3)有复位功能。(4)可以选择调试断点时定时器的工作方式。定时器控制寄存器的控制和状态位如下:2.定时器控制寄存器(TCR)

TCR各位的意义描述如下表所示

3.定时器工作原理定时器的工作过程:定时器的基准工作脉冲由CLKOUT提供,每来一个脉冲,预定标计数器PSC减1,当PSC减至0时,下一个脉冲到来时,PSC产生借位。借位信号分别控制定时计数器TIM减1和重新将TDDR的内容加载到预定标计数器PSC。每次定时计数器TIM

减为0时,PSC的下一个借位信号到来时,TIM也产生借位信号,此借位信号作为中断信号送到CPU和定时器输出引脚TOUT

,同时控制或门3重新用PRD值装载TIM

定时器的基本定时周期(定时时间)T可由下式计算:

T=TCLKOUT*(TDDR+1)*(PRD+1)

4.定时器的初始化初始化定时器的步骤如下:(1)对寄存器TCR中的TSS位置1,停止定时器工作;(2)装入PRD初值;(3)重新装入TCR:初始化TDDR、将TSS清0启动定时器、将TRB置1重新装入定时初值(PRD加载到TIM,TDDR加载到PSC)。使能定时器中断的操作步骤如下(假定INTM=1):(1)

将IFR中的TINT位置1,清除尚未处理完(挂起)的定时器中断。(2)

将IMR中的TINT位置1,使能定时器中断。(3)

将ST1中的INTM位清0,开放所有的中断。例:用TMS320C54x作为信号发生器,输出周期为8ms的方波信号。假定主频f=10MHz。编写出汇编源程序。解:因为输出方波周期为8ms,所以定时中断周期T(即定时时间)应为4ms,每中断1次将XF引脚的电平取反1次便可在XF引脚产生周期为8ms的方波。(TDDR+1)(PRD+1)=T*f,T*f=4*10-3*10*106=40000取TDDR+1=16,则PRD+1=40000/16=2500则TDDR=15,PRD=2499=9C3H程序如下:

.mmregs .def START .def INTSERVEX .usect "STACK",10定时器的使用FLAG .set 60h .textSTART: STM #X+10,SP STM #0120H,PMST;中断向量表首址0100h,定时

;器中断向量014ch STM #0010H,TCR STM #9C3H,PRD STM #0FEFH,TCRSSBXXFSTM#1,FLAG STM #08H,IFR STM #08H,IMR RSBX INTM WAIT: B WAIT;以下是中断服务程序INTSERVE: RSBX CPL LD #0,DP BITF FLAG,#1 BC XFOUT,NTC RSBX XF STM #0,FLAG B NEXTXFOUT: SSBX XF STM #1,FLAGNEXT: RETE .end指令BITF Smem,#lk功能:如果((Smem)ANDlk)=0

否则 说明:该指令检测数据存储器操作数Smem的某位或多位,若指定位(一位或多位)为0,状态寄存器ST0中的TC位清0,否则置1。常数lk用于屏蔽待检测位。要检测Smem中某位或某几位是否为1时,常数lk中与之对应的位应为1,而其他位为0。例BITF60H,#0001H指令执行前 TC=XDP=0RAM:(60H)=1205H7、命令文件的编写命令文件在片内RAM中定义几个区间,用于存放与主程序和中断服务程序、中断向量表、堆栈相应的段。指令执行后TC=1DP=0RAM:(60H)=1205H定时器的使用用定时器可以实现方波发生器、脉冲频率监测器、周期信号周期监测等功能。

ORM #0010h,TCR0;停止定时器0STM #799,TIM0STM #799,PRD0STM #K_TCR0,TCR0;启动定时器0中断;K_TCR0=0269HST #0FFFFh,IFR;初始化中断

ORM #0008h,IMRRSBXINTM 例如:用定时器设计一个周期为4ms的方波信号发生器。假设DSP主频为4MHZ(TCLKOUT=250ns),方波信号周期为4ms,那么定时中断周期应为T=2MS,每中断一次,输出端电平取反一次。定时中断周期T=TCLKOUT*(TDDR+1)*(PRD+1),假设TDDR=9,那么PRD=799(031FH). 15-1211109-6543-0保留softfreePSCTRBTSSTDDR预定标计数器定时器重新加载控制位定时器停止位定时器分频系数;K_TCR0设置定时器0控制寄存器的内容K_TCR0_SOFT.set0b<<11K_TCR0_FREE.set0b<<10K_TCT0_PSC.set1001b<<6K_TCT0_TRB.set1b<<5K_TCT0_TSS.set0b<<4K_TCT0_TDDR.set1001b<<0K_TCR0.setK_TCR0_SOFT|K_TCR0_FREE|K_TCT0_PSC|K_TCT0_TRB|K_TCT0_TSS|K_TCR0_TDDR;初始化定时器0

t0_flag.usect"vars",1

timout:PSHMST0 PSHMST1BITFt0_flag,#1 BCxf_out,NTC SSBXXF ST#0,t0_flag Bnextxf_out:RSBXXF ST#1,t0_flagnext: POPMST1POPMST0 RETE;当前XF输出电平标志位,如果t1_flag=1,;则XF=1;如果t1_flag=0,则XF=0

.sect“.vector”rst:b_c_int00

nop

nop

nop space18*4*16tint0: btimout

利用DSP的定时器,在XF引脚输出一个频率为1kHz的方波。编程要求:(1)DSP实验板上晶振频率为16MHz,对时钟发生器的PLL编程,使CPU的时钟频率为32MHz;(2)定时器采用中断方式定时,将中断向量表移到从0100h单元开始的程序存储空间。1、计算定时器的参数TDDR和PRD2、由中断向量表起始地址0100H求出IPTR值3、由IPTR、MP/MC、OVLY、DROM、CLKOFF等的值求得PMST的值。4、由中断向量表起始地址0100H和定时器0的中断号求得定时器0的中断向量地址5、编写主程序。主程序主要是对DSP初始化,主要包括:(1)设置堆栈和堆栈指针(中断时堆栈用于保存断点地址)(2)PMST寄存器的初始化(3)定时器的初始化(包括中断初始化)6、编写中断服务程序中断服务程序主要作用是:每次定时时间到时,将XF引脚的状态取反。但DSP没有取反指令,因此,进入中断服务程序后首先要判断XF引脚的当前状态,若为1则修改为0,若为0则修改为1。为此,需要将数据存储器的某个单元作为标志单元,该单元的某个位作为标志位,用此标志位来标志XF引脚的状态。每次进入中断服务程序后通过检测该标志位的值来判断XF引脚当前的状态。指令BITF Smem,#lk功能:如果((Smem)ANDlk)=0

否则 说明:该指令检测数据存储器操作数Smem的某位或多位,若指定位(一位或多位)为0,状态寄存器ST0中的TC位清0,否则置1。常数lk用于屏蔽待检测位。要检测Smem中某位或某几位是否为1时,常数lk中与之对应的位应为1,而其他位为0。例BITF60H,#0001H指令执行前 TC=XDP=0RAM:(60H)=1205H7、命令文件的编写命令文件在片内RAM中定义几个区间,用于存放与主程序和中断服务程序、中断向量表、堆栈相应的段。指令执行后TC=1DP=0RAM:(60H)=1205H练习解答5.3链接命令文件有什么作用?在生成DSP代码过程中何时发挥这些作用?答:链接命令文件的主要作用有两方面:一是利用MEMORY命令定义目标系统的存储器配置,包括对存储器各部分命名,以及规定它们的起始地址和长度;一是利用SECTIONS命令告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器中的什么位置。这些作用是在链接器对目标文件进行链接的过程中起作用的。

5.10在文件的链接过程中,需要用到Linker命令文件。请按如下参数设计一个命令文件,其参数为: 中断向量表起始地址为7600H;长度为8000H; 源程序代码在中断向量之后; 初始化数据起始为1F10H;长度为4000H; 未初始化数据在初始化数据之后。解:命令文件为:MEMORY{PAGE0:PROM: org=7600h,len=8000hPAGE1:DRAM: org=1F10h,len=4000h}SECTIONS{.vectors :>PROMPAGE0.text :>PROMPAGE0.data :>DRAMPAGE1.bss :>DRAMPAGE1}2.6中断系统

C54xDSP既支持软件中断,也支持硬件中断:1、软件中断:由程序指令(INTR、TRAP或RESET)请求的中断。2、硬件中断:由物理设备信号请求的中断,他有两种形式:①受外部中断口信号触发的外部硬件中断。②受片内外设信号触发的内部硬件中断。一、中断分类分成如下两大类:可屏蔽中断和不可屏蔽中断。1、可屏蔽中断:可以用软件来屏蔽或使能的中断’C54xDSP最多可以支持16个用户可屏蔽中断,例如’C5402只使用14个可屏蔽中断。这14个中断的硬件名称为:

RINT0、XINT0、RINT1和XINT1(串行口中断)③TINT0、TINT1(定时器中断)④HPINT、DMAC0、DMAC4、

DMAC52、非屏蔽中断:这些中断是不能够屏蔽的。包括所有的软件中断,以及两个外部硬件中断(复位和)。

C5402中断源的中断向量及硬件中断优先权二、中断标志寄存器(IFR)

中断标志寄存器:是一个存储器映射的CPU寄存器,每个可屏蔽中断在IFR中有其相应的中断标志位,当CPU接收到可屏蔽中断请求时,IFR相应的位置1。直到CPU响应该中断为止。

将中断标志清0

的4种方法:①’C54xDSP复位(引脚为低电平)。②中断得到处理。③将1写到IFR中的适当位(相应的位变为0),相应的尚未处理的中断被清除。④利用合适的中断号执行INTR指令。三、中断屏蔽寄存器(IMR)

中断屏蔽寄存器(IMR):是一个存储器映射的CPU寄存器,用来屏蔽外部和内部的可屏蔽中断。

如果状态寄存器ST1中的INTM位=1,IMR无效。当ST1中的INTM位=0时,

IMR寄存器中的某一位为1,就使能相应的中断。用户可以对IMR寄存器进行读写操作。

四、处理中断的步骤

’C54xDSP处理中断分如下三个步骤:1、接收中断请求通过软件(程序代码)或硬件(引脚或片内外设)请求挂起主程序。如果中断源正在请求一个可屏蔽中断,则当中断被接收到时中断标志寄存器(IFR)的相应位被置1。(1)

硬件中断请求

’C5402硬件中断的请求信号:

外部中断口可屏蔽中断:

INT3~INT0引脚;

外部口非屏蔽中断:RS和NMI引脚;

片内外设中断:BRINT0、BXINT0、BRINT1和BXINT1(串口中断)

TINT0、TINT1(定时器中断);

DMAC4、DMAC5(DMA中断);

HPINT(HPI中断)。

(2)

软件中断请求

软件中断是由程序指令产生的中断请求,主要有3条指令:

INTR、TRAP

、RESET指令软件中断指令

INTR:语法:INTRK;K为中断号,0≤K≤31执行:例

INTR3指令执行前PC=0025h,IPTR=1FFhINTM=0SP=1000hRAM:(0FFFh)=9653h指令执行后PC=FF8ChINTM=1SP=0FFFhRAM:(0FFFh)=0026h软件中断指令TRAP:语法:TRAPK;K为中断号,0≤K≤31执行:软件复位指令RESET:语法:RESET;无操作数执行:对PC、ST0、ST1、IFR加载初始值如下:(IPTR)<<7→PC1→C0→DP0→BRAF0→C160→CPL0→OVM0→OVA1→TC1→SXM0→HM0→FRCT1→INTM0→OVB0→ARP0→ASM1→XF0→CMPT0→IFR该指令执行非屏蔽的软件复位,以便使C54x处于一个可知状态。2、应答中断

对于软件中断和非屏蔽的硬件中断,CPU将立即响应,进入相应中断服务程序。

对于硬件可屏蔽中断,满足以下3种条件CPU才能响应中断。

中断优先级最高(当同时出现一个以上中断请求时)。②INTM位清0。③IMR屏蔽位为1。

满足上述条件后,CPU响应中断,终止当前正进行的操作,指令计数器PC自动转向相应的中断向量地址,取出中断服务程序地址,并发出硬件中断响应信号IACK,而清除相应的中断标志位。⒊执行中断服务程序(ISR)

当应答中断后,CPU会采取如下的操作:1、把程序计数器(PC)值(返回地址)压入堆栈;注意:程序计数器扩展寄存器(XPC)不会自动保存在堆栈中。因此,如果ISR位于和中断向量表不同的页面,用户必须在分支转移到ISR之前压入XPC到堆栈中。FRET[E]指令可以用于从ISR返回。2、将中断向量的地址加载到PC;3、取出位于中断向量地址处的分支转移指令(分支转移被延时时,并且用户也存储了一个2字指令或两个1字指令,则CPU也会获取这两个字);4、执行分支转移,转到中断服务程序(ISR)。(如果分支转移被延时,则在分支转移之前会执行额外的指令);5、执行中断服务程序直到遇到其中的返回指令;6、从堆栈中弹出返回地址到PC中(注意

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论