您的位置 首页 技术

数字信号控制器中止体系及其设置办法

数字信号控制器(Digital Signal Controller, DSC)是将DSP内核与MCU接口相结合的微处理芯片。DSC同时具有数字信号处理能力和MCU控制接口,并且中断系

1.导言

数字信号操控器(Digital Signal Controller, DSC)是将DSP内核与MCU接口相结合的微处理芯片DSC一起具有数字信号处理才能和MCU操控接口,而且间断体系功用非常丰富。间断是指CPU正在处理某件作业时,忽然发生的某一外部事情(如一个电平的改变,一个脉冲沿的发生或定时器的计数溢出等)恳求CPU敏捷去处理,此刻,若条件答应,CPU暂时间断当时的作业,转去处理所发生的事情(间断服务程序),处理完后,再回到本来间断的当地,持续本来的作业,这样一个完好的进程称为间断。外设在需求时经过间断,间断CPU当时的作业,进行信息交流;这样能够完结CPU和多个外设一起作业,进步体系的吞吐率和运用功率。因而,间断具有处理突发事情、进步CPU的功率、能够完结多任务数据事情办理等特色。

当多个间断源宣布间断恳求时,CPU需求挑选接纳哪一个间断源,这就带来间断源挑选问题。处理这个问题的办法有屏蔽挑选法、优先级挑选法和优先屏蔽挑选法三种。屏蔽挑选法首要是经过屏蔽手法将某些间断源恳求与CPU阻隔;这种屏蔽间断办法能够屏蔽体系一切间断,也能够只屏蔽某个模块间断。屏蔽体系一切间断意味着体系一切间断恳求CPU都不承受,屏蔽某个模块间断阐明仅仅屏蔽的模块间断恳求CPU不承受,其它没屏蔽模块间断恳求能够进入CPU。传统51芯片选用这种办法,飞思卡尔的MC9S08AW60也选用该种办法。屏蔽挑选法经过屏蔽手法,有用地处理某些间断源的搅扰问题。

优先级挑选法经过对间断源设置不同的优先级,当多个间断源宣布恳求时,优先级高的间断恳求首要进入CPU,该间断处理完结后,次优先级的间断源进入CPU,以此类推。这种办法有用避免了屏蔽挑选法形成的被屏蔽间断永久不能被处理的缺乏。

优先屏蔽挑选法一起具有上述两种办法的功用,即可屏蔽一切间断源,也可屏蔽某些模块间断源,也能够对非屏蔽的间断源进行优先级设置。这个优先级等级有多种,而51芯片优先级只要两种(高优先级或低优先级)。这种办法即能避免优先级挑选法不能处理某些间断源的搅扰问题的缺陷,又能有用避免了屏蔽挑选法形成的被屏蔽间断永久不能被处理的缺陷。该种办法现在逐渐被DSC芯片商选用,如MC56F8257芯片就选用这种办法。

从上面剖析看出,DSC对间断处理比51芯片要杂乱,但从其他视点看,DSC间断带来更大的灵活性。灵活性与稳定性一对对立,本文以MC56F8257为例,从剖析DSC间断体系及其间断处理技能下手,论述其间断处理办法,并给出处理进程,为其使用供给辅导。

2.MC56F8257间断体系

MC56F8257共有67个间断源,5个间断优先级。间断的恳求是经过间断操控器模块操控的。间断操控器模块由间断源、优先级设置和操控部分组成,首要用于装备间断优先级、解析间断恳求而且将间断向量交给CPU履行。在间断恳求处理进程中,当有多个间断源宣布恳求(INT1…INTn)时,首要优先等级译码模块依据用户设置的优先级进行译码,译码后进入相应的优先级编码器进行编码,最终经过操控模块进行优先级的装备。操控模块依据DSP56800E核中的状况寄存器SR中的屏蔽等设置位,对编码后的间断源进行处理,处理后的成果反映在操控寄存器INTC_CTRL中的INT、IPIC和VAB位。

INT是间断位,该位反映内核间断的状况。当该位值为1时,有间断送入内核;不然,无间断送入内核。IPIC是间断优先级位,该位表明送入内核的间断源的优先级,也表明当时内核所接纳的间断的最高优先级。VAB是间断矢量号,也是对应间断在间断矢量表中的地址的[7:1]位[9]。

MC56F8257内核为16位增强型DSP56800E,该内核处理间断恳求有两种方式:规范和快速间断处理。转向间断服务程序,占用必定数量的软件开支,但一切等级间断都支撑该方式;快速间断处理不需求履行JSR指令而是经过快速间断向量地址寄存器取得间断服务程序首地址,节省了软件资源,但它只能用于间断优先级为2级的间断。详细选用何种方式,应依据实践使用需求进行设置。

3.1 间断的封闭与敞开

敞开MC56F8257中某个模块间断,一般需求敞开总间断及模块间断来完结。这两部分缺一不行,而且敞开总间断在前,敞开模块间断在后。同理,封闭MC56F8257中某个模块间断,需求封闭总间断及模块间断来完结,先封闭模块间断,再封闭总间断;假如答应间断嵌套状况,不需封闭总间断。

敞开MC56F8257总间断,经过清间断操控寄存器(INTC_CTRL)的INT_DIS位;封闭总间断,需置该位即可,详细代码如下:

#define EnableInterrupt() INTC_CTRL=~INTC_CTRL_INT_DIS_MASK

#define DisableInterrupt() INTC_CTRL|=INTC_CTRL_INT_DIS_MASK

敞开或封闭模块间断,需设置模块内部的操控寄存器的相应位。如敞开QSCI模块的接纳间断0,需置位QSCI操控寄存器1(QSCIx_CTRL1)中的RFIE位;封闭该间断,清RFIE位即可,详细代码如下:

#define EnableQSCIReInt(0) QSCI_C1(0)|=(QSCI1_CTRL1_RFIE_MASK)

#define DisableQSCIReInt(0) QSCI_C1(0)=~(QSCI1_CTRL1_RFIE_MASK)

3.2 间断优先级的设置

DSP56800E内核支撑5级间断:LP、0、1、2和3,其优先等级顺次升高。最低优先级LP只能由体系SWILP指令发生;0~2优先级用户能够编程设置,首要用于外设和外部间断恳求;等级3是最高优先级且不行屏蔽。

详细设置某个间断源的间断优先级,可经过设置间断优先级寄存器(INTC_IPR0~INTC_IPR7)中的相应位。如设置QSCI间断优先级,经过设置间断优先级寄存器(INTC_IPR2)中的QSCI0_RCV位完结,该位详细意义见表1所示

从表1看出,QSCI间断可装备三个不同等级,即优先级0、1和2。假如用户不装备QSCI间断的优先级,体系复位时,主动分配其优先级为0;可是复位后,紧接着初始化QSCI模块,其优先级由0级变为2级。

3.3 设置间断屏蔽

经过设置DSP56800E内核中的状况寄存器SR的I0、I1位,完结屏蔽不同等级优先级间断。屏蔽某个优先级间断,可经过使能间断优先级相应的优先级间断来完结。例如,屏蔽优先级0间断,可经过使能优先级1,2,3间断完结,详细代码如下:

#define EnInt(1) {asm(bfset #0x0100,SR); asm(bfclr #0x0200,SR);}

其他,也能够一起屏蔽2个以上等级间断,如屏蔽优先级0,1,2间断,经过使能优先级3间断完结,详细代码如下:

#define EnInt(3) {asm(bfset #0x0300,SR);}

在设置间断屏蔽时,应留意的是主函数的屏蔽间断优先级代码与间断服务程序的相应代码应确保所需的间断不被屏蔽。

3.4 间断矢量表的界说

MC56F8257的67个间断源,其矢量号从0到66 [9]。每个间断源的间断服务程序首地址放入间断矢量表中。当有间断恳求时,CPU经过间断矢量号在间断矢量表中找到其间断服务程序的首地址,依据这个首地址找到间断服务程序,进行间断处理。

间断矢量表在FLSAH中的方位由向量基地址寄存器(VBA)决议。向量基地址寄存器VBA[12:0]为21位间断矢量表首地址的高13位,低8位主动补0。详细到某个模块间断服务程序首地址在间断矢量表中的方位,由向量基地址寄存器(VBA)及操控寄存器(INTC_CTRL)的VAB位决议;向量基地址寄存器VBA[12:0]为其在间断矢量表地址[20:0]的高13位[20:8],操控寄存器(INTC_CTRL)的VAB位为其地址的[7:1],低位补0。

体系复位后,VBA的复位值为0x0000,体系进入复位间断(矢量号为0),相应的开始地址在0x00 0000处,这个进程体系主动完结。假如敞开某个模块间断,需求将该模块间断服务程序的首地址加载到间断矢量表中的相应方位。详细进程如下:首要树立间断矢量表;没有敞开的模块间断,在表中对应方位放入空函数的首地址(经过JSR isrDummy完结);敞开的模块间断,在表中对应方位放入间断服务程序的首地址,一般间断服务程序由函数完结,在这里经过放入详细函数首地址完结,如敞开QSCI0的接纳间断(矢量号为32),其间断服务函数为isrSCI0_Recv,即可经过在矢量表中参加JSR isrSCI0_Recv代码完结,详细如下:

volatile asm void _vect(void);

#pragma define_section interrupt_vectors interrupt_vectors.text RX

#pragma section interrupt_vectors begin

volatile asm void _vect(void)

{

JSR init_MC56F824x_5x_ISR_HW_RESET /* Interrupt no. 0 (Used) – ivINT_Reset */

JSR isrDummy /* Interrupt no. 1 (Used) – ivINT_COPReset */

JSR isrDummy /* Interrupt no. 2 (Unused) – ivINT_Illegal_Instruction */

JSR isrSCI0_Recv /* Interrupt no. 32 (Used) – ivINT_QSCI0_RxFull */

JSR isrDummy /* Interrupt no. 65 (Unused) – ivINT_GPIO_A */

JSR isrDummy /* Interrupt no. 66 (Unused) – ivINT_LP */

}

#pragma section interrupt_vectors end

其间, isrDummy的函数方式如下:

void isrDummy(void)

{

}

该函数首地址用来充任未敞开模块间断的间断服务程序的首地址,加载到间断矢量表中。

4.MC56F8257间断设置进程

MC56F8257间断设置首要包含封闭总间断、设置间断屏蔽和敞开总间断三个进程。间断的设置进程在主函数和间断服务程序中都得表现,但二者中设置进程有所差异。

主函数中的间断设置进程除了包含上述三个进程外,还包含敞开模块间断及设置间断优先级,详细流程如下:一是封闭总间断,意图是完结后续各个模块间断设置进程中不被外界搅扰;二是敞开模块间断,假如需求某个模块间断,能够使能该模块间断;三是设置各模块间断优先级,首要使用于多个间断恳求的状况。在这种状况下,依据使用环境决议各个模块间断优先次序,设置间断优先级。假如不设置优先级,体系会主动发生默许的优先级;四是设置间断屏蔽,经过屏蔽必定等级的间断,使体系避免受其搅扰;五敞开总间断,在上述设置进程完结后,经过敞开总间断,使其设置有用。

间断服务程序中的间断设置包含封闭总间断、设置间断屏蔽和敞开总间断三个进程。封闭总间断和敞开总间断进程同主函数,设置间断屏蔽进程与主函数相似,但需求留意的是主函数与间断服务程序中的间断屏蔽设置中应确保所需的间断不被屏蔽。

5.测验及其剖析

5.1 测验条件与环境

现以MC56F8257中的QSCI模块间断及CAN模块间断为例,阐明上述间断设置办法及施行进程,并对其进程进行剖析。选用QSCI模块的QSCI0传输数据,波特率设为9600。CAN模块接纳数据,CAN通讯频率为800KHz。程序编译调试环境为CodeWarrior 10.4。测验环境为串口调试东西SSCOM V2.0。

5.2 测验成果与剖析

从不带间断优先级、带间断优先级和优先级嵌套三个方面,测验剖析MC56F8257间断设置及施行进程。

(1)不带间断优先级

敞开QSCI0接纳间断,不设置其间断优先级,选用体系默许优先级2,不屏蔽该等级间断。代码DisableInterrupt()在主函数和间断服务程序中都有,但效果不一样。在主函数中的效果是制止一切间断,为后续间断设置供给良好环境;间断服务程序中的效果是制止其他间断,避免间断的嵌套。EnableQSCIReInt(0)使能QSCI0接纳间断。EnInt(2)使能2,3等级的间断。主函数和间断服务程序中的EnableInterrupt()效果是敞开总间断。

运转程序,从串口调试东西SSCOM V2.0发送字符“a”给MC56F8257,MC56F8257的QSCI0间断接纳,并将接纳的数据发送给PC机,显现串口调试东西窗口中。

假如屏蔽QSCI0接纳间断的默许优先级2,其主函数和QSCI接纳间断服务程序中的间断代码有所不同。

代码EnInt(3)屏蔽了间断优先级0、1和2,只答应优先级为3的间断,无法呼应优先级为2的QSCI0接纳间断。测验条件同上,其成果如图4(b)所示。

(2)带间断优先级

敞开QSCI0接纳间断,设置其间断优先级,不屏蔽该等级间断。

代码Qsci Priority的效果是设置QSCI0接纳间断优先级为0;EnInt(0)使能0,1,2,3等级的间断。测验条件同上。假如屏蔽QSCI0接纳间断的优先级0,其主函数和QSCI接纳间断服务程序中的间断代码有所不同。

代码EnInt(1) 屏蔽了间断优先级0,答应优先级为1,2,3的间断,因而QSCI0接纳间断被屏蔽。

(3)优先级嵌套

一起敞开QSCI0接纳间断和CAN模块接纳间断,而且前者优先级高于后者。

代码Qsci Priority设定QSCI0接纳间断的优先级为1,CANPriority 设定CAN接纳间断的优先级为0,即QSCI0接纳间断的优先级高于CAN接纳间断。

运转程序,当仅有CAN接纳间断恳求时,CAN接纳间断服务程序接纳字符串“CANMessage”,并经过QSCI0将该字符发送给串口调试东西,如图6(a)所示。假如在这个进程中,又有QSCI0接纳间断恳求,CPU则暂停CAN接纳间断服务程序的履行,转向QSCI0接纳间断服务程序处理,从串口调试东西窗口接纳字符“a”,并发送给串口调试东西窗口。将QSCI0接纳间断服务程序履行完结后,回来CAN接纳间断服务程序持续履行。

假如敞开QSCI0接纳间断和CAN模块接纳间断,而且前者优先级低于后者。

代码Qsci Priority设定QSCI0接纳间断的优先级为0,CANPriority设定CAN接纳间断的优先级为1,即QSCI0接纳间断的优先级低于CAN接纳间断。

运转程序,当仅有CAN接纳间断恳求时,CAN接纳间断服务程序接纳字符串“CANMessage”,并经过QSCI0将该字符发送给串口调试东西假如在这个进程中,又有QSCI0接纳间断恳求,CPU则不会呼应其恳求,持续履行CAN接纳间断服务程序,持续发送字符串“CANMessage” 给串口调试东西。

6.总结

本文以MC56F8257为例,剖析DSC间断体系,该体系具有处理多达67个间断源的才能,并能够给这些间断源赋予不同的优先级,完结间断嵌套,并供给规范和快速间断处理两种方式,这些特色促进其广泛被使用。

上述特色也带来间断设置的灵活性,可是假如设置不妥,会呈现过错。本文在剖析间断体系的一起给出其间断设置办法及进程,并详细剖析间断优先级设置进程及留意事项。

最终,以MC56F8257中的QSCI模块间断及CAN模块间断为例,从不带间断优先级、带间断优先级和优先级嵌套三个方面,剖析间断设置进程及呼应成果,成果剖析进一步验证MC56F8257间断处理具有屏蔽及优先级可装备等特色。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/139884.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部