预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

用高级语言实现DSP中断编程 摘要:中断处理是大多数DSP应用系统中不可缺少的一个重要环节。文中详细介绍了一种用C语言实现DSP中断的方法,该方法仅使用外围支持库文件(dev6x.lib)中的函数及宏定义即可简单地完成中断服务程序的设置。同时介绍了中断的一些基本概念以及中断控制寄存器的设置方法,并给出了中断服务程序设置例程。关键词:中断服务程序;中断服务表;中断向量表 1引言中断处理是大多数DSP应用系统中不可缺少的一个重要环节。中断程序在大多数场合采用汇编语言编写,这是一件比较繁琐的工作,由于汇编语言与硬件结构息息相关,各公司提供的汇编语言也不尽相同,即使是同一公司的芯片,其芯片类型及产品各代也不相同,同时各DSP之间的汇编语言也存在一定的差异。因此,虽然用汇编语言开发的程序的执行效率很高,但其开发周期长,而且可移植性和可读性差。不仅如此,开发汇编语言程序还对开发人员有较高的专业要求。而C语言被大多数人所熟悉,另外,C语言的可读性、可移植性都非常好,因而能极大地缩短DSP软件开发的周期。而采用C语言编写中断处理程序,调用外围库所提供的中断处理函数及宏定义,同样可以有效地实现对中断控制寄存器的设置,且程序有较好的可读性,而且易于修改和维护。用C语言编写的中断服务程序主要由以下四步组成:(1)选择中断源并编写中断服务程序(interruptserviceroutine);(2)创建并初始化中断向量表(interruptvectortable);(3)通过设置相关中断控制寄存器来使能中断;(4)通过编写连接器命令文件(linkercommandfile)来完成程序各个段的连接。2中断处理基本概念2.1中断服务表(IST)和指针寄存器(ISTP)中断服务表IST(InterruptServiceTable)是包含中断服务代码取指包的一个地址表。当CPU开始处理一个中断时,一般要参照中断服务表进行。IST包含16个连续取指包,每个中断服务取指包都含有8条指令,每个单独的取指包恰好对应一个中断服务程序。图1所示是其中断服务取指包和中断服务表的示意图。 中断服务表指针寄存器ISTP(interruptservicetablepointer)用于确定中断服务程序在中断服务表中的地址。ISTP中的字段ISTB确定IST的地址的基值,另一字段HPEINT确定特定的中断,并给出这一特定中断取指包在IST中的位置。2.2中断服务取指包(ISFP)中断服务取指包ISFP(InterruptServiceFetchPacket)是用于服务中断的取指包。为了使中断结束后能够返回主程序,取指包中包含有一条跳转到中断返回指针所指地址的指令。因为跳转指令有5个延迟间隙,所以在跳转指令后需加上一条"NOP5"指令,否则CPU将会在跳转之前开始执行下一个ISFP中的5个执行包。2.3创建中断向量表(interruptvectortable)因为中断向量表中的每个向量都必须分布在取指包的边界上,所以中断向量表通常都用汇编语言编写。每个取指包必须包含8条32位指令,每个向量中既可以包含跳转到中断服务程序的指令,也可包含完整的8条中断服务程序。连接时如果选择“-c”或“-cr”选项,C编译器实时支持库将自动创建函数:“cint00”。这个函数对应C程序的入口处。因此,复位中断向量(reset)必须包含一条跳转到“cint00”的指令。另外,在连接时,还需要在汇编语言文件中使用“.sect”指令为中断向量表保留空间,并告诉连接器中断向量表安装在内存中的具体位置。3基于C语言的中断编程3.1C语言中断服务程序在典型的DSP系统中,一旦中断发生,处理器将从当前程序跳转至中断服务表基地址并执行相应的中断服务程序。对于C编译器,声明中断服务程序有以下两种方法:(1)通过关键字“interrupt”告诉C编译器,函数是一个特殊的中断服务程序。用“interrupt”声明过的函数将遵循特定的寄存器保护规则,同时应能返回主程序以继续执行被暂时中断的程序。不过,必须把用“interrupt”声明过的函数定义成无返回值和无参数型。在中断服务函数内部既可使用本地变量,也可使用堆栈或全局变量。如:(2)通过使用“INTERRUPT”编译标志来指定中断服务程序。这个编译标志可直接用C语言代码来处理中断,参数“func”是中断函数名。编译语法为:dler是一个中断服务函数)。3.2用C语言设置中断控制寄存器在TMS320C62x中有8个中断控制寄存器。控制状态寄存器(CSR)和中断使能寄存器(IER)用于使能或禁止中断处理;中断标志寄存器(IFR)用于指示中断状态或指出挂起的中断,中断设置寄存器(ISR)和中断清除寄存器(ICR)被用来人工设置或清除IFR中的标志位。同时,还有3个指针寄存器。中