基于C语言设置TMS320 DSP中断向量表_第1页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、基于c语言设置tms320 dsp中断向量表随着芯片应用的不断深化,用开发dsp芯片,不仅可以使dsp芯片的开发速度大大提高,也使得程序的修改和移植变得非常便利。c语言设置tms320系列dsp中断向量表是高级语言开发dsp的一个详细应用。1、引言dsp(数字信号处理器)自二十世纪70年月末80年月初出生以来,得到了突飞猛进的进展,在信号处理、通讯、雷达等方面应用越来越广泛,而且开发手段和开发设备也越来越多样化。其中c语言在dsp开发应用中起着越来越重要的作用,以c语言编写的dsp应用程序具有可读性、可移植性,易于维护和修改。另外在dsp应用系统中,中断是完成数据传递、实时处理等的重要手段,因

2、而用c语言完成对dsp中断设置是dsp开发的重要内容。dsp中断的设置主要包括中断服务程序的编写,中断向量表的设置,中断寄存器的初始化等内容。本文以ti公司tms320系列dsp为例,解释用c语言设置中断向量表的办法。并给出实例举行解释。2、中断向量表的定位中断服务程序的地址(中断向量)要装载到存储器的合适区域。普通这些向量都定位在0x0开头的程序存储器中。但有些处理器要求或者可以在其他的存储区域安装中断向量。对于微处理器模式下的tms320c25、tms320c26、tms320c28、tms320c30、tms320c31,中断向量定位于0x0开头的地址。对于微计算机/程序引导模式下的tm

3、s320c31的中断向量定位于0x809fc1,tms320c26的中断向量定位于0xffa0。tms320c5x复位向量定位在0x0,其他中断向量可以定位于任何2k字的程序存储器中,中断向量表的定位是与pmst寄存器的iptr位有关,有效的中断向量表的基地址是0x0,0x800,0x1000,0x1800,0x2000,0xf800。tms320c4x的复位向量定位在四个地址之一,这四个地址由外部引脚resetloc0和resetloc1打算。tms320c4x的中断向量可存在于任何512字范围的存储器中,中断向量表的地址由中断向量表指针(ivtp)寄存器打算。另外,tms320c4x的自陷

4、(trap)中断向量可存放在512字范围的存储器中,自陷向量表的地址由自陷向量表指针(tvtp)寄存器打算。有效的中断或者自陷向量表的基地址是0x0,0x200,0x400,0x800,0xa00,0xc00,0xe00,0x1000,0x12000xfffffe00,如表1所示。有两种办法可以初始化中断向量表,下面讲解这两种办法:办法一:利用已命名的asm段生成向量表的最挺直办法就是用汇编命令.sect来生成一个表。这个表包含中断向量的地址和跳转命令。表1处理器 向量表基地址 解释tms320c2x 0x0 不包括微计算机/程序引导模式下的tms320c26tms320c26 0xffa0

5、微计算机/程序引导模式tms320c30 0x0tms320c31 0x0 微处理器模式tms320c31 0x809fc1 微计算机/程序引导模式tms320c4x 复位 0x0,0x7fffffff,0x80000000,0xfffffff 外部引脚resetloc0和resetloc1打算中断向量 随意512字范围 ivtp寄存器打算自陷向量 随意512字范围 tvtp寄存器打算tms320c5x 复位 0x0中断向量 随意2k字数据页 pmst寄存器的iptr位打算在微计算机/程序引导模式下tms320c2x、tms320c5x和tms320c31 从中断向量的位置处执行代码,因而要用

6、跳转命令来代替中断向量,如tms320c31用24位命令br来实现:int1: br _c_int01在微处理器模式下tms320c30、tms320c31和tms320c4x,中断向量是下一条存取命令的地址,因而中断服务程序的地址用汇编命令.word存储在中断向量处。例如,tms320c4x中断1 可用汇编语言定义如下:int1: .word _c_int01由于中断服务的标识符在汇编语言模块外部被声明,所以标识符必需用.ref或.global来声明。下面的例子是一个汇编语言模块(vecs.asm)定义了一个包含tms320c5x跳转命令的段。.ref _c_int0, _c_int1 ;在

7、外部定义中断向量.sect “vectors” ;声明一个一命名的段rs: b _c_int0 ;转至复位向量i1: b _c_int1 ;转至中断向量1处理保留和未用法的区域有时中断向量表中包含保留的地址,例如微计算机/程序引导模式下的tms320c26或者tms320c4x和tms320c5x的复位和中断向量不延续的情形。tms320c31也会发生这种情形,系统中并不是全部的中断都能被用到。为了处理向量映象中的保留地址,就要用法汇编命令.space。注重对于定点设备.space保留的是位,对于浮点设备.space保留的字。例如,微计算机/程序引导模式下tms320c26,假设全部中断都是可

8、用的.sect “vectors” ;为复位和中断向量定义已命名的段.space 2*16 ;保留的空间b _c_int1 ;int0b _c_int2 ;int1b _c_int3 ;int2b _c_int4 ;tintb _c_int5 ;rintb _c_int6 ;xintb _c_int7 ;trap注重.space命令为复位向量保留的位置在程序引导方式下不能用法,由于复位会启动程序引导功能。用法.space时vectors段链接到0xfa00,不用法.space命令该段链接到0xfa02。但是,假如定时器和自陷中断向量被用法时,可用.space命令对向量表举行如下的定义:.sec

9、t “vectors” ;为复位和中断向量定义已命名的段.space 2*4*16 ;保留的和3个未用法的向量b _c_int4 ;tint.space 2*2*16 ;2个未用法的向量b _c_int7 ;trap注重在中断和自陷向量表中未用法的部分可用来存储数据。但为了保证中断处理的正确,一定要确保中断和自陷向量不被破坏。链接到存储器映象已命名段产生后,tms320链接器就会把向量表链接到存储器的合适位置,共分三步举行:1.链接汇编语言模块;2.按照中断向量表的定位定义链接器的memory段;3.在链接器的sections指令中,定位这些已命名的段。下面是tms320c5x的指令文件,将v

10、ectors定位到040h。-cvecs.objmain.obj-l rts50.libmenorypage0:vectors:origin = 0000h, length = 003fhrom :origin = 0040h, length = 007cfhsections“vectors” : vectors.text : rom.办法二:安装一个运行时的向量这种办法在开发和调试时很实用的,这种办法是用c语句在装载中断服务程序地址时建立一个运行时的向量。该办法适用于微处理器模式下的tms320c30和tms320c31,以及tms320c4x,由于它们只用地址,而不用跳转命令作为中断向量。

11、其重点就是将中断服务程序的地址放到合适的存储器空间,例如,tms320c30地址0x1对应于外部中断0(int0),在该地址安装中断服务程序c_int01。用法如下语句“*(void (*) () )0x1) = c_int01;这里,0x1被转换成指向函数的指针,由于它包含函数c_int01的地址。3、向量表指针tms320c4x和tms320c5x都可以不将中断向量表放在0x0开头的位置。这两个系列的dsp都是由寄存器来确定中断向量的位置。tms320c4x的复位向量地址是由处理器的引脚确定的四个地址中的一个。中断能够被正确的处理,首先必需在接收到中断之前对中断向量表举行初始化。下面几个例

12、子是用来解释初始化与中断有关的寄存器的办法。例1:在c中嵌入汇编语句这个例子,利用在c语言中嵌入汇编语句来设置tms320c4x的中断向量,其起始地址为0x0,办法是通过将ivtp寄存器的值设置为0x0。asm(“ push r0”);asm(“ ldi 0h, r0”);asm(“ ldpe r0, ivtp”);asm(“ pop r0”);例2:利用tms320c4x的prts这个例子,利用tms320c4x的并行运行支持库来设置中断向量表,起始地址为0x02ff800,利用prts库函数set_ivtp()设置ivtp寄存器的值使向量表定位于ram0存储器的开头地址。当用法prts时,

13、不需要用户命名中断向量段,而是在运行时用法prts函数install_int_vector()将向量定位在预先定义的段.vector中。这种办法要求向量在运行时安装,以防止程序和数据被修改。另外,首先要把prts库链接到程序,并在指令文件中预先定义.vector段,把.vector段定位在rom0存储器的开头地址。指令文件如下所示:-l prts40.libmemoryram0:org = 0x2ff800 , len = 0x400sections“.vector”: ram0主程序中必需包含头文件intpt40.h。函数set_ivtp()用法预定义的参量default才干被调要,这样设置

14、ivtp寄存器可使.vector段按指令文件中定义定位。中断向量可用法函数install_int_vector()来安装,如下所示:include intpt40.hvoid c_int99(void)for( ; ; );void main(void)set_ivtp(default);install_int_vector(void *) c_int99,2);例3:链接时指定tms320c4x或tms320c5x的符号当tms320c5x的编辑器中没有prts库而不能设置向量表指针时,还有一个便利的办法可以达到同样的目的。那就是用法在链接时指定符号的办法。这种办法的主要思想是利用包含复位和

15、中断向量的汇编语言段(.sect)以及用链接器映射中断向量在内存中的分布。c程序可以获得这个地址并把它装载到中断向量表指针(tms320c4x的ivtp寄存器或者tms320c5x的pmst寄存器)。本例为tms320c5x芯片,中断向量定位于汇编语言模块中,标号ivecs指向中断向量表的基地址,下面解释如何猎取中断向量地址。.def ivecs.ref _c_int0, _c_int1, _c_int2.sect “reset”b _c_int0.sect “vectors”ivecs .space 2b _c_int1b _c_int2在链接器中,用链接器指定的标号初始化链接器定义的变量。如下所示:cvecs.objlrts50.lib_vectable = ivecsmemorypage 0: vectors: origin = 00000h, length = 0003fhrom: origin = 00040h, length = 007cfhp_ram: origin = 00800h, length = 023ffh. . .sections”reset” vectors”vectors” p_ram.text: rom.cinit: rom.bss: ramb0_d.stack: int_ram在c

温馨提示

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

最新文档

评论

0/150

提交评论