TMS320F206的中断技术及其实现_DSP论文
关键词:tms320f206 dsp 中断
以信息高速公路为标志的信息化,已成为社会发展的大趋势,并在逐步成为现实。化是数字化为背景的,而数字信号处理技术则是数字化最重要的基本技术之一。在过去短短的十几年里,各种集成化的单片数字信号处理器(dsp)的性能得到了很大的改善,软件开发工具越来越多,也越来越好;而价格却大幅度下降,从而使得数字信号处理器件及技术更容易使用,价格也能够为广大用户接受。从市场上各种dsp产品来看,德州仪器公司产品占据半壁江山,特别是tms320系列,本文讨论的tms320f206就是这个系列中的定点数字信号处理芯片。
1 tms320f206的结构特点
ti公司的tms320f206芯片是采用静态cmos集成电路工艺制造的。结构设计建立在tms320c20x芯片的基础上,只需5v的低电压就可运行。它的先进的哈佛结构、片内外设、片上内存以及丰富的命令集使它的速度和可靠性大大提高。
tms320f206的主要特点有:
(1)32k×16字的flash eeprom大大降低了开发成本;
(2)采用了100线tqfp的封装技术;
(3)64k字的程序存储空间、64k字的数据存储空间和64k字的i/o空间,通过三条并行总线(pba、drab、dwab)独立操作。所以可以同时访问程序空间和数据空间,在一个指定机器周期内,可央算术逻辑单元可执行多达三次的并行存储器操作;
(4)片上4.5k的ram使得芯片可以实现快速的dsp计算,并使大部分运算能够在一个指令周期内完成;
(5)丰富的指令集和灵活的寻址方式;
(6)有四条流水线操作和九级可断,并且大多数可断用户可以屏蔽,可以通过软件的方式灵活控制。
2 tms320f206的可断
在tms320f206的程序空间可,可断向量占据了00~3fh的位置,并且中断的优先级也是固定的,所以在编程开发时先要编好一个中断向量表,对于没有用到的中断也应该编上,并让它返回到一个空位置,以免发生意外情况。tms320f206的中断有许多特殊的地方,如hold和int1共用一个中断向量,int2与int3也共用一个中断向量。如果在实际应用中用到的中断比较多时,那么控制中断就是一件比较难的事,此时就要对它的三个中断寄存器灵活运用。下面就来介绍这三个寄存器。
(1)16位的中断标志寄存器(ifr),地址为0006h,各位情况如图1所示。当有一个可并蔽中断到达cpu时,ifr的相应标志位就置1,这表明相应中断正在被挂起或正在等待响应。将1写入到相应的标志位,可清除相应的位并清除其中断请求。
在图1中,0表示一般情况下读的数为0,r表示读,w1c表示写1时把这位清为0。-0表示复位后这位为0。
(2)16位的中断屏蔽寄存器(imr),地址为0004h,各位情况如图2所示。它用来屏蔽外部和内部硬件中断(nmi和rs除外)。当要屏蔽某硬件中断时,就把相应位清0当要开放某硬件中断时,就把相应位置1,并且它的每一位不受硬件复位的影响。
在图2中,0表示一般情况下读的数为0,r表示读,w表示写,-0表示复位后这位为0。2位是定时器中断,该位为1表示开放定时器中断。
(3)16位的中断控制寄存器(icr),地址为0ffech,各位情况如图3所示。主要用来控制hold/int1和int2/int3。
在图3中,0位为0时表示屏蔽中断2(int2),0位为1时表示开放中断2;1位为0时表示屏蔽中断3(int3),1位为1时表示开放中断3;2、3位分别为int2、int3的标志位,当其为1时表示对应的中断有中断请求;4位1时表示单边沿触发模式,int1引脚下降沿到来时,向cpu发出中断请求,用于int1中断。4位为0时表示双边沿触发模式,这种模式适用于hold操作。
此外,tms320f206还有两个不能由这三种寄存器来操作和控制的中断,即:
(1)rs(reset),rs上一旦有请求,将中止程序的流程,使程序执行重新从程序存储器地址为0000h处开始执行。
(2)nmi,当nmi引脚激活时,程序将强行转移到中断向量在24h的位置,并且其它可屏蔽中断都将禁止。所以当nmi引脚不用时,通常应把它到高电平,发免发生意外情况。
3 tms320f206的中断实现
在应用实际中,让int2引脚测交流电压频率和相位而交流电流相位则由int3引脚来测量,并计算电压、电流间的相位差。在本实例中,中断信号均采用过零信号,定时器的中断向量为timer,int2/int3的中断向量为intp2(中断向量表略)。
主程序流程图中图4所示。
主程序如下:
start:nop
setc intm ;禁止所有中断
splk #0ffffh,ifr ;清中断标志
splk #2h,imr ;清中断标志
splk #2h,imr ;清int2,int3的屏蔽位
splk #1h,60h
out 60h,0ffech ;仅开int2
splk #0h,61h
splk #0f9fh,62h ;设置定时器
out 61h,0fffah
out 62h,0fff9h
clrc intm ;开中断
wait:idle
b wait1 ;等待中断
中断int2/3服务程序(intp2)流程图如图5所示。
中断int2/3服务程序(intp2)如下:
intp2: setc intm ;进入int2,int3中断服务程序。
…… ;根据控制字判断是进入频率测试子程序还是进入相位测试子程序
bond intp23,tc
b intp 21
intp23: in 60h,0fffech ;读控制字icr
bit 60h,13
sst #1h,62h
bit 62h,4 ;判断是int2还是int3
bcnd intp22,tc 中断
b intp31
intp22:splk #0002h,60h ;int2服务程序
out 60h,0ffech ;开int3中断
splk #0c29h,63h
out 63h,0fff8h ;启动定时器
splk #0002h,ifr ;清int2/int3的标志位
clrc intm ;开中断
ret
intp31:setc intm ;int3服务程序
splk #0412h,64h
out 64h,0fff8h ;停止定时器
splk #0002h,ifr ;清int2/int3的标志位
clrc intm
ret
in 65h,0fffah ;读定时器的时间
…… ;计算相位
intp21:setc intm ;判断中断次数,第一次开
…… ;定时器,第二次关定时器
bchd stoptimerl,ntc
out 63h,0fff8h ;启动定时器
splk #0002h,ifr ;清除int2/3标志
clrc intm ;开中断
ret
stoptimer1:splk #0412h,64h
out 64h,0fff8h ;关定时器
…… ;计算频率
b $ ;等待
定时器中断服务程序(timer)流程图如图6所示。
timer: lacl 73h ;定时器中断服务程序
…… ;据控制字判断是进入频率测试子程序还是进入相位测试子程序。
cmpr 0
bcnd timer2,tc
b timer1
timer1:lacl 69h ;频率定时器服务子程序
add #1h
sacl 69h
splk #4h,ifr ;清除定时器标志
clrc intm
ret
timer2:lacl 69h ;相位定时器服务子程序
add #1h
sacl 69h
splk #4h,ifr ;清定时器的标志位
clrc intm
ret ;中断返回