DSP-3.6中断服务程序
- 格式:pdf
- 大小:110.54 KB
- 文档页数:3
浅谈TMS320C6000中断程序的实现方法
杨辉;秦品健
【期刊名称】《信息技术》
【年(卷),期】2002(000)009
【摘要】主要讨论中断服务程序在TMS320C6000 DSP中的几种用C语言来实现的方法.
【总页数】3页(P36-37,40)
【作者】杨辉;秦品健
【作者单位】中国科学院等离子体物理研究所,合肥,230031;中国科学院等离子体物理研究所,合肥,230031
【正文语种】中文
【中图分类】TP274
【相关文献】
1.浅谈运用计算机程序编制实现大坝ANSYS三维模型自动建立的方法 [J], 唐兰;侯波
2.浅谈Vega软件中应用程序实现飞行仿真方法 [J], 郑学恩;吴玉斌
3.浅谈Vega软件中应用程序实现飞行仿真方法 [J], 郑学恩;吴玉斌
4.一种实现USB随机中断传输的设备驱动程序设计方法 [J], 周洪建;蔡桂艳
5.浅谈自建数据库馆藏字段自动添加的程序实现方法 [J], 徐守志
因版权原因,仅展示原文概要,查看原文内容请购买。
[DSP+ARM] [转载]DSP中断设置简明教程定时器, 工作, 寄存器, 通用, 程序一、简述本文介绍TMS320C6000系列中断设置的简明方法。
通过示例定时器中断,MCBSP串口接收中断及外部中断这三种中断实现过程,介绍如何实现中断各个寄存器的配置,中断向量表书写以及中断服务函数。
最后提供一个简要的示例程序可供大家下载使用。
此示例在DSK6416的TI官方实验板上通过测试。
由于定时器和串口工作模式较繁,因此对中断无关部分不做介绍。
二、实现DSP中断需要做哪些通用工作设置允许哪些非屏蔽中断设置各个允许的非屏蔽中断的中断来源设置开启总中断设计中断向量表将中断向量表通过cmd文件挂载到指令内存提供中断处理函数如果中断向量表首地址挂载的不是0地址,那么需要设置中断向量表地址寄存器对于不同的中断源,需要做各个自己的工作,比如如果是外部中断,那么需要设置管脚极性,即由高->低产生中断抑或反之。
为了照顾知识较少的读者,下面将从一个新工程出发,引导大家建立一个中断示例程序。
如果您对建立工程很熟悉,可以跳过此步。
三、建立新工程1.点击Project->New,设置Project Name为intexample,Project Type为Executable,Target选择您需要的器件,在此由于本人使用的是DSK6416评估板。
因此选择TMS320C64XX。
2.添加标准库rts6400.lib,以便自动产生c_int00等函数。
右击当前工程,选择“Add Files to Project”,选择库所在路径,一般为CCS安装自带,可参考本CCS3.1版本的路径地址:CCStudio_v3.1C6000cgtoolslibrts6400.lib如果您使用的是其他器件类型,请在lib文件夹内选择其他器件库。
添加源文件,选择File->New->Source File,保存为main.c到工程路径下。
DSP原理与应用技术中的中断什么是中断中断是指当处理器执行某个任务时,受到一个信号或事件的触发而暂停当前任务,跳转到指定的中断处理程序执行,处理完成后再返回原来的任务。
在DSP(数字信号处理)领域中,中断机制起着重要的作用。
中断可以分为硬件中断和软件中断两种。
硬件中断是由外部设备或芯片发出的中断信号触发,如计时器中断、外部设备输入中断等。
而软件中断是由程序的执行过程中的特殊指令或软件的调用而产生的中断。
DSP中的中断在DSP中,中断主要用于处理实时要求较高的应用,如音频处理、实时图像处理等。
中断的出现可以有效地降低系统的响应时间,提高系统的实时性。
DSP芯片通常提供多个中断向量,每个中断向量对应一个特定的中断源。
中断向量用来指示中断处理程序的入口地址,当中断发生时,处理器会根据中断向量跳转到相应的中断处理程序。
DSP中的中断优先级在DSP中,不同的中断有不同的优先级。
当多个中断同时发生时,处理器会根据中断优先级决定响应哪个中断。
中断优先级通常通过特定的寄存器配置。
处理器会根据中断触发的先后顺序以及中断优先级来决定响应的中断。
DSP中的中断处理过程中断处理过程通常包括以下几个步骤:1.中断触发:当中断源产生中断信号时,处理器会检测中断信号,并做出响应。
2.中断优先级判断:处理器会根据中断优先级判断是否响应当前中断请求。
3.中断向量跳转:如果中断请求被接受,处理器会根据中断向量找到相应的中断处理程序的入口地址,并跳转到该地址处执行中断处理程序。
4.中断处理程序:中断处理程序是中断的实际执行部分,它会处理中断所需的任务,如保存寄存器状态、处理中断源的数据等。
5.中断结束:当中断处理程序执行完成后,处理器会返回到原来的任务继续执行,完成中断的处理过程。
DSP中的中断应用技术中断在DSP应用中有广泛的应用,如音频处理、图像处理、通信等方面。
下面列举几个常见的DSP中的中断应用技术:1.实时音频处理:中断机制可以使得DSP实时响应音频输入信号,实现实时的音频处理,如音效处理、语音识别、语音合成等。
学习一个芯片的功能时,我的建议是先学会如何用C语言点亮一个LED灯,然后就是学习一下使用他的中断,因为在做芯片的时候,各个厂家有自己的一套自己的方法。
所以使用中断的就必须了解很多概念,比如如何打开中断,如何安装自己的中断子服务程序,等等!先介绍一下什么叫中断:你在下象棋,突然电话响了,你回屋接电话,然后回来继续下象棋,这个过程就叫做中断响应过程(中断过程)。
CPU执行正常任务———————下象棋保护现场———————————-你已经想好要―将军‖,先在脑海中记下来。
中断发生———————————-电话响-中断服务程序—————————-接电话恢复现场———————————-回来后恢复刚才想法中断返回———————————-你回来继续下象棋中断屏蔽———————————-Boss 正在训话,要求所有电话关机,你不能接电话了。
非屏蔽中断——————————-你内急,即使是Boss 在训话,你还是得到外面去嘘嘘。
可屏蔽中断——————————-你在―闭关修炼‖,可以不受外界干扰所以我们在使用中断之前先得告诉CPU,我们要使用那个中断,当中断发生的时候,你的执行程序的去向(也就是中断服务子程序),最后在返回我们被中断的函数。
这样就完成了我们的中断历程!看看6713执行中断的流程:一、使能了全局中断和子中断,那么CPU每执行一条指令之前就去查询一下有没有中断被置位,如果有产生的,那么CPU就要跳转!二、软件把CPU内部的寄存器A0~A15,B0~B15,等等这些寄存器的值推入堆栈保存,把当前PC寄存器的值放入IRP寄存器中以备中断返回能找到当前被打断的位置(保存现场,中断函数前面得加interrupt关键字)三、CPU的PC指针读出中断向量表的地址,也就是把(ISTP寄存器的值+子中断向量偏移量)装入PC寄存器,这样就执行跳转。
四、在中断向量表里一般有就用跳转指令,这样就可以跳转到我们用C语言编写的中断服务子程序中。
DSP中断设置简明教程DSP中断是一种用于处理实时信号的技术,允许处理器在执行其他任务时,响应外部事件或处理即时数据。
中断是一种非常重要的工具,用于实时系统中,例如音频处理、图像处理等领域。
本文将为您提供一个简明的DSP中断设置教程,帮助您了解如何在DSP中实现中断处理。
首先,我们需要了解DSP中断的基本原理和概念。
DSP中断是一种在执行主线程任务的过程中,当特定的事件发生时,系统自动中止主线程,并转而执行预定义的中断服务子程序(ISR)。
当ISR执行完毕后,系统将返回到主线程继续执行之前的任务。
因此,中断允许DSP准时响应外部事件,并在需要时采取必要的动作。
在DSP中,中断是通过中断控制器实现的。
中断控制器是一种硬件模块,用于检测外部事件并触发相应的中断。
通常,中断控制器有多个中断通道,每个通道可以连接一个外设,如定时器、ADC、UART等。
当外设的中断条件满足时,中断控制器会发送一个中断请求信号给DSP处理器。
下面是一个简单的DSP中断设置步骤:1.确定中断请求源:首先,确定哪个外设将触发中断。
例如,如果您想设置一个定时器中断,那么您需要选择一个定时器作为中断请求源。
2.配置中断控制器:将中断请求源连接到中断控制器的中断通道上。
这通常需要在DSP的寄存器中写入相应的配置值来选择中断通道。
3.编写中断服务子程序(ISR):中断服务子程序是一个函数,用于处理中断事件。
当中断发生时,DSP将暂停正在执行的主线程,并转而执行ISR。
在ISR中,您可以编写自己的处理逻辑,例如读取数据、计算、更新状态等。
4.配置中断向量表:中断向量表是一个存储中断服务子程序地址的表格。
在DSP启动或重新配置中断时,需要将ISR的地址写入中断向量表,以便DSP能够正确调用ISR。
5.启用中断:在DSP的控制寄存器中,设置相应的中断使能位,以启用中断功能。
这将使DSP能够接收到来自中断控制器的中断请求。
6.处理中断请求:当外设满足中断条件时,中断控制器会发送中断请求信号给DSP。
我的DSP之路-关于中断(附中断向量表)2008-3-8中断标志寄存器IFR,由CPU内核控制,一旦中断被响应,IFR会被CPU自动清除(除INTR指令引起的中断外),不需要人工干预。
IFR中断标志寄存器只有INT1~INT6,那上面说的是用INTR引起外部中断,那时就需要人工干预了?引起的中断如何执行?无法观察到IFR的变化,其一直为0,可能是有置1,只是中断响应又把它清0了。
那上述所说的除外情况是怎样的情况呢。
用INTR进外部中断时,不可屏蔽,即IMR对其无影响。
IMR只是屏蔽对外部中断源的响应。
CMD文件里可以用/* */来注释,其它的汇编的文件,如.ASM、.H文件就只能用;来注释。
外部中断XINT1、XINT2。
外部中断输入引脚必须至少被拉低或拉高5或11个CLKOUT 时钟周期才被认为是有效的中断请求输入,这由SCSR2中的I/O QUAL位决定。
每一个外设中断都有三个屏蔽位:INTM、INTn、各自的屏蔽位。
两个中断请求标志位:IFR、PIRQR0~2、各自的中断请求标志位。
2008-3-10中断被响应后,CUP级IFR中相应中断标志位自动清零,外部中断的XINT1/2的外设级中断标志位也会自动被清零;但片内外设(包括事件管理中断和系统模块中断)中断被响应后不会自动清0,需要用户对其进行写1清0。
通过INTR指令来请求中断时,CPU不会清除IFR中的位。
但仿真时观察IFR值一直为0?通过INTR指令来请求外设中断时,不会装PIVR外设中断向量,PIVR默认的0000装入。
INTM在硬件中断被响应时自动置1,因此在中断服务程序返回时一定要重新开中断。
如果要实现中断嵌套,可以在中断服务程序中开放中断。
查看是否有可屏蔽中断发出请求,应看其标志位而不是PIRQR0~2。
中断有两个中断向量:CPU中断向量(即0~40H地址的向量表)和外设中断向量PIV。
参考:中断向量表(文档)。
TI公司三大系列DSP中断系统操作之异同通信与信息系统郭林201221905023 摘要:中断是指使CPU 暂停执行当前程序而转去执行中断子程序(ISR)的过程,是由软件或硬件驱动的信号,它使DSP 暂停正在执行的程序转而执行中断服务程序。
本文主要对TI 公司生产的三大系列DSP的中断系统进行简要概述。
关键字:CPU DSP三大系列中断系统Abstract:Interrupts are directed suspends the current CPU program and turn to the interrupt subroutine (ISR) process, is driven by software or hardware signal, it makes the DSP pauses are running program to the interrupt service routine. In this paper, three series of TI company DSP interrupt system for a brief overview.Keywords: CPU DSP Three series Interrupt system一、引言:近年来,随着DSP处理器性价比的提高,已被广泛应用于各种设备和工具中[1-2],DSP 应用系统的开发成为一个热门的技术行业,而中断系统的编程实现是DSP应用系统设计的重点和难点[3-5]。
二、中断的概述中断是指使CPU 暂停执行当前程序而转去执行中断子程序(ISR)的过程。
中断分为两类:(1)可屏蔽中断(可通过软件禁止);(2)不可屏蔽中断(不能被软件禁止)。
中断是由软件或硬件驱动的信号,它使DSP 暂停正在执行的程序转而执行中断服务程序。
CPU一般通过以下四个步骤处理中断:(1)检测到中断请求信号;(2)允许中断:对于可屏蔽中断来说需要满足一定的条件,对于不可屏蔽中断则立即响应;(3)保护现场(自动将寄存器STO,T,AI ,AH,PI ,PH,ARO,AR1,DP,ST1,DBGSTAT,PC,IER压栈保存),读取中断向量并将它赋给程序指针PC。
用高级语言实现DSP中断编程摘 要:中断处理是大多数DSP应用系统中不可缺少的一个重要环节。
文中详细介绍了一种用C语言实现DSP中断的方法,该方法仅使用外围支持库文件(dev6x.lib)中的函数及宏定义即可简单地完成中断服务程序的设置。
同时介绍了中断的一些基本概念以及中断控制寄存器的设置方法,并给出了中断服务程序设置例程。
关键词:中断服务程序;中断服务表;中断向量表1引言中断处理是大多数DSP应用系统中不可缺少的一个重要环节。
中断程序在大多数场合采用汇编语言编写,这是一件比较繁琐的工作,由于汇编语言与硬件结构息息相关,各公司提供的汇编语言也不尽相同,即使是同一公司的芯片,其芯片类型及产品各代也不相同,同时各DSP之间的汇编语言也存在一定的差异。
因此,虽然用汇编语言开发的程序的执行效率很高,但其开发周期长,而且可移植性和可读性差。
不仅如此,开发汇编语言程序还对开发人员有较高的专业要求。
而C语言被大多数人所熟悉,另外,C语言的可读性、可移植性都非常好,因而能极大地缩短DSP 软件开发的周期。
而采用C语言编写中断处理程序,调用外围库所提供的中断处理函数及宏定义,同样可以有效地实现对中断控制寄存器的设置,且程序有较好的可读性,而且易于修改和维护。
用C语言编写的中断服务程序主要由以下四步组成:(1)选择中断源并编写中断服务程序(interrupt service routine);(2)创建并初始化中断向量表(interrupt vectortable);(3)通过设置相关中断控制寄存器来使能中断;(4)通过编写连接器命令文件(linker commandfile)来完成程序各个段的连接。
2中断处理基本概念2.1中断服务表(IST)和指针寄存器(ISTP)中断服务表IST(Interrupt Service Table)是包含中断服务代码取指包的一个地址表。
当CPU开始处理一个中断时,一般要参照中断服务表进行。
第2章系统配置和中断介绍系统的配置寄存器和有关中断,并介绍用于增加中断请求容量的外设中断扩展(PIE寄存器。
2.1 系统配置概述系统配置和中断操作的内容包括:系统配置寄存器、中断优先级和中断向量表、外设中断扩展控制器(PIE、中断向量、中断响应的流程、中断响应的时间、CPU中断寄存器、外设中断寄存器、复位、无效地址检测、外部中断控制寄存器。
LF2407大部分的I/O口是多路复用的,复位时会被上拉为数字输入的模式。
2.2 系统配置寄存器对功能模块进行配置。
2.2.1 系统控制和状态寄存器(1)系统控制和状态寄存器-SCSR1,映射到数据存储器空间7018h 。
位15:保留位14:CLKSRC,CLKOUT引脚输出源选择0-CLKOUT引脚输出CPU时钟;1-CLKOUT引脚输出WDCLK时钟位13-12:LPM低功耗模式选择,指明在执行IDLE 指令后进入哪一种低功耗模式。
00-进入IDLE1(LPM0)模式;01-进入IDLE2(LPM1)模式;1x -进入HALT (LPM2)模式。
位11-9:PLL时钟预定标选择,对输入时钟选择倍频系数。
000-4;001-2;010-1.33;011-1;100-0.8;101-0.66;110-0.57;111-0.5位8:保留位7:ADC CLKEN,ADC模块时钟使能控制位位6:SCICLKEN, SCI模块时钟使能控制位位5:SPICLKEN, SPI模块时钟使能控制位位4:CANCLKEN, CAN模块时钟使能控制位位3:EVBCLKEN, EVB模块时钟使能控制位位2:EVACLKEN, EVA模块时钟使能控制位0:禁止模块时钟(节能);1:使能模块时钟,且运行位1:保留位0:ILLADR, 无效地址检测位当检测到一个无效地址时,该位被置1,该位需软件清除,写0即可。
初始化时该位写0。
注意:任何无效的地址会导致NMI事件发生。
(2)系统控制和状态寄存器2-SCSR2映射到数据存储器空间7019h 。
DSP 作业:中断系统的应用中断源扩展方法:有八个中断源,分别表示为IR1,IR2,…,IR8,各个中断源均为边沿触发方式,C5402建立相应的中断系统。
构建硬件中断系统如图,每两个一组相“与”后,分别既然如此4个外部中断接口INT0、INT1、INT2、INT3。
没组分别将两条线接于HPI 端口,此时,HPI 端口作为I/O 口使用。
ST0:状态寄存器0,地址6ST1:状态寄存器1,地址7BH:累加器B 的高价位,地址CBL :累加器B 的低阶位,地址BBG :累加器B 的保护位,地址DPSHD Smem ;将Smem 中的数据压入堆栈PSHM MMR ;将MMR 中的数据压入堆栈POPD Smem ;将数据从栈顶弹至Smem 中POPM MMR ;将数据从栈顶弹至MMR 中;外部中断INT0中断服务子程序:INT0ISR:PSHM ST0 ;保存寄存器,将寄存器的值压入堆栈PSHM ST1 ;保存寄存器,将寄存器的值压入堆栈PSHM BG ;将地址D 压入堆栈,之后类似PSHM BHPSHM BLPORTR HPIPORT, *(hpi_var ) ;从HPI 口读数据并存储到*(hpi_var )所在的地址 STL *(hpi_var ), B ;将*(hpi_var )的低十六位放到B 中AND #01B, B ;加法运算IR1IR2IR3IR4IR5IR6IR7IR8BC IR2,ANEQ ;首先判别是否是IR1,是,则执行服务程序;否,则跳至对IR2的判断;扩展中断IR0的服务程序主体IR2:STL *(hpi_var),BAND #010B,BBC INT0END,ANEQ ;首先判别是否是IR1,是,则执行服务程序;否,则跳至结束;扩展中断IR1的服务程序主体INT0ED:POPM BL ;将数据从栈顶弹至BL中POPM BH ;将数据从栈顶弹至BH中,以下类似POPM BGPOPM ST1POPM ST0RETE;外部中断INT1中断服务子程序:INT1ISR:PSHM ST0 ;保存寄存器PSHM ST1PSHM BGPSHM BHPSHM BLPORTR HPIPORT,*(hpi_var) ;读HPI口STL *(hpi_var), BAND #0100B, BBC IR4,ANEQ ;首先判别是否是IR3,是,则执行服务程序;否,则跳至对IR4的判断;扩展中断IR3服务程序主体IR4:STL *(hpi_var), BAND #01000B, BBC INT0END,ANEQ ;首先判别是否是IR4,是,则执行服务程序;否,则跳至结束;下面代码跟上面雷同,不一一赘述,中断有响应时间,对扩展的中断源来说,实际中断响应时间要算引导程序的时间,过多的中断源,堆栈深度增加,是压栈、弹栈操作频繁,堆栈大小应慎重考虑,不然出现程序混乱错误,若以后要在dsp上发展再深入考虑中断与堆栈的关系。