APP下载

数字信号控制器的中断系统分析与实现方法※

2014-08-12林志贵姚芳琴李敏刘颖

单片机与嵌入式系统应用 2014年8期
关键词:服务程序寄存器中断

林志贵, 姚芳琴, 李敏, 刘颖

(天津工业大学 电子与信息工程学院,天津 300387)

数字信号控制器的中断系统分析与实现方法※

林志贵, 姚芳琴, 李敏, 刘颖

(天津工业大学 电子与信息工程学院,天津 300387)

数字信号控制器(DSC)具有数字信号处理能力和MCU控制接口,其中断系统功能非常丰富,这为应用带来方便,同时也带来设置的复杂性。本文以MC56F8257为例,详细分析DSC中断系统及其设置方法;以MC56F8257中的QSCI模块中断及CAN模块中断为例,从不带中断优先级、带中断优先级和优先级嵌套三个方面,分析DSC中断设置过程及响应结果。分析结果进一步验证DSC中断具有优先级及屏蔽等特点,为推广DSC芯片的应用提供指导。

数字信号控制器;中断系统;优先级;MC56F8257

引 言

数字信号控制器(Digital Signal Controller, DSC)是将DSP内核与MCU接口相结合的微处理器芯片。当多个中断源发出中断请求时,CPU需要选择接收哪一个中断源,这就带来中断源选择问题[5]。

解决这个问题的方法有屏蔽选择法、优先级选择法和优先屏蔽选择法三种。优先屏蔽选择法同时具有其他两种方法的功能,既可屏蔽所有中断源,又可屏蔽某些模块中断源,也可以对非屏蔽的中断源进行优先级设置。这种方法既能避免优先级选择法不能解决某些中断源的干扰问题,又能有效避免屏蔽选择法造成的被屏蔽中断永远不能被处理的缺点[8]。该种方法目前逐步被DSC芯片商采用,如MC56F8257芯片就采用这种方法。

1 MC56F8257中断系统

MC56F8257共有67个中断源、5个中断优先级。中断的请求是通过中断控制器模块控制的。中断控制器模块由中断源、优先级设置和控制部分组成,其框图如图1所示,主要用于配置中断优先级、解析中断请求,并且将中断向量交给CPU执行。

图1 中断控制器框图

从图1可以看出,在中断请求处理过程中,当有多个中断源发出请求(INT1…INTn)时,首先优先级别译码模块根据用户设置的优先级进行译码,译码后进入相应的优先级编码器进行编码,最后通过控制模块进行优先级的配置。控制模块根据DSP56800E核中的状态寄存器SR中的屏蔽等设置位,对编码后的中断源进行处理,处理后的结果反映在控制寄存器INTC_CTRL中的INT、VAB和IPIC位。

INT是中断位,该位反映内核中断的状态。当该位值为1时,有中断送入内核;否则,无中断送入内核。IPIC是中断优先级位,该位表示送入内核的中断源的优先级,也表示当前内核所接收的中断的最高优先级。VAB是中断向量信号,也是对应中断在中断向量表中的地址的[7:1]位[9]。

MC56F8257内核为16位增强型DSP56800E,该内核处理中断请求有两种模式:标准和快速中断处理模式[10]。MC56F8257标准中断处理模式具体流程如图2所示,该模式通过JSR指令,转向中断服务程序,占用一定数量的软件开销,但所有级别中断都支持该模式。一般中断处理的控制流程图如图2所示。

图2 一般中断处理的控制流程图

图3 快速中断处理的控制流程图

快速中断处理不需要执行JSR指令,如图3所示,而是通过快速中断向量地址寄存器获得中断服务程序首地址,节省了软件资源,但它只能用于中断优先级为2级的中断。具体采用何种模式,应根据实际应用需要进行设置。

2 MC56F8257中断设置方法

2.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)

2.2 中断优先级的设置

DSP56800E内核支持5级中断:LP、0、1、2和3,其优先级别依次升高[11]。最低优先级LP只能由系统SWILP指令产生;0~2优先级用户可以编程设置,主要用于外设和外部中断请求;级别3是最高优先级且不可屏蔽。

具体设置某个中断源的中断优先级,可通过设置中断优先级寄存器(INTC_IPR0~INTC_IPR7)中的相应位来实现[9]。如设置QSCI中断优先级,通过设置中断优先级寄存器(INTC_IPR2)中的QSCI0_RCV位实现,该位具体含义见表1。

表1 QSCI的中断优先级设置

从表1中可以看出,QSCI中断可配置三个不同级别,即优先级0、1和2。如果用户不配置QSCI中断的优先级,则系统复位时,自动分配其优先级为0;但是复位后,紧接着初始化QSCI模块,其优先级由0变为2。

2.3 设置中断屏蔽

通过设置DSP56800E内核中的状态寄存器SR的I0、I1位,实现屏蔽不同级别优先级中断,具体设置如表2所列。

表2 中断屏蔽位的设置

2.4 中断向量表的定义

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

中断向量表在FLASH中的位置由向量基地址寄存器(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){

}

3 MC56F8257中断设置过程

MC56F8257中断设置主要包括关闭总中断、设置中断屏蔽和开放总中断三个过程。中断的设置过程在主函数和中断服务程序中都要得到体现,但二者在设置过程中有所差异。

主函数中的中断设置除了包括上述三个过程外,还包括开放模块中断及设置中断优先级,具体流程如下:一是关闭总中断,目的是实现后续各个模块中断设置过程中不被外界干扰。二是开放模块中断,如果需要某个模块中断,可以使能该模块中断。三是设置各模块中断优先级,主要应用于多个中断请求的情况。在这种情况下,根据应用环境决定各个模块中断优先顺序,设置中断优先级,如果不设置优先级,则系统会自动产生默认的优先级。四是设置中断屏蔽,通过屏蔽一定级别的中断,使系统避免受其干扰。五是开放总中断,在上述设置步骤完成后,通过开放总中断,使其设置有效。

中断服务程序中的中断设置包括关闭总中断、设置中断屏蔽和开放总中断三个过程。关闭总中断和开放总中断过程同主函数,设置中断屏蔽过程与主函数类似,但需要注意的是,主函数与中断服务程序中的中断屏蔽设置应保证所需的中断不被屏蔽。

4 测试及其分析

4.1 测试条件与环境

现以MC56F8257中的QSCI模块中断及CAN模块中断为例,说明上述中断设置方法及实施过程,并对其过程进行分析。选用QSCI模块的QSCI0传输数据,波特率设为9 600 bps。CAN模块接收数据,CAN通信频率为800 kHz。程序编译调试环境为CodeWarrior 10.4,测试环境为串口调试工具SSCOM V2.0。

4.2 测试结果与分析

从不带中断优先级、带中断优先级和优先级嵌套三个方面,测试分析MC56F8257中断设置及实施过程。

(1) 不带中断优先级

开放QSCI0接收中断,不设置其中断优先级,采用系统默认优先级2,不屏蔽该级别中断,其主函数和中断服务程序中的中断代码略——编者注。

运行程序,从串口调试工具SSCOM V2.0发送字符“a”给MC56F8257,MC56F8257的QSCI0中断接收,并将接收的数据发送给PC机,最终接收到字符“a”。

如果屏蔽QSCI0接收中断的默认优先级为2,其主函数和QSCI接收中断服务程序中的中断代码有所不同,相关代码略——编者注。

测试条件同上,其结果为接收不到字符“a”。

(2) 带中断优先级

开放QSCI0接收中断,设置其中断优先级,不屏蔽该级别中断,其主函数和中断服务程序中的中断代码略——编者注。

测试结果同样也能接收到字符“a”。

如果屏蔽QSCI0接收中断的优先级0,其主函数和QSCI接收中断服务程序中的中断代码有所不同,具体相关代码略——编者注。

其测试结果同样是接收不到字符“a”。

(3) 优先级嵌套

同时开放QSCI0接收中断和CAN模块接收中断,并且前者优先级高于后者,其主函数和中断服务程序中的中断代码略——编者注。

运行程序,当仅有CAN接收中断请求时,CAN接收中断服务程序接收字符串“CANMessage”,并通过QSCI0将该字符发送给串口调试工具。如果在这个过程中,又有QSCI0接收中断请求,则CPU暂停CAN接收中断服务程序的执行,转向QSCI0接收中断服务程序处理,从串口调试工具窗口接收字符“a”,并发送给串口调试工具窗口。将QSCI0接收中断服务程序执行完成后,返回CAN接收中断服务程序继续执行。

如果开放QSCI0接收中断和CAN模块接收中断,并且前者优先级低于后者,其主函数和中断服务程序中的中断代码略——编者注。

运行程序,当仅有CAN接收中断请求时,CAN接收中断服务程序接收字符串“CANMessage”,并通过QSCI0将该字符发送给串口调试工具。如果在这个过程中,又有QSCI0接收中断请求,则CPU不会响应其请求,继续执行CAN接收中断服务程序,继续发送字符串“CANMessage” 给串口调试工具。

结 语

本文以MC56F8257为例,分析DSC中断系统,该系统具有处理多达67个中断源的能力,并能够给这些中断源赋予不同的优先级,实现中断嵌套,并提供标准和快速中断处理两种模式,这些特点可使该系统被广泛应用。

上述特点也带来中断设置的灵活性,但是如果设置不当,会出现错误。本文在分析中断系统的同时给出其中断设置方法及过程,并详细分析中断优先级设置过程及注意事项。

最后,以MC56F8257中的QSCI模块中断及CAN模块中断为例,从不带中断优先级、带中断优先级和优先级嵌套三个方面,分析中断设置过程及响应结果,结果进一步验证了MC56F8257中断处理具有屏蔽及优先级可配置等特点。

[1] 林志贵,王宜怀. 数字信号控制器原理与实践——MC56F8257[M]. 北京:北京航空航天大学出版社,2014.

[2] 林志贵. 微型计算机原理及接口技术[M].北京:机械工业出版社,2010.

[3] Zhao Yongxin, Huang Yanhong, He Jifeng, et al. Formal Model of Interrupt Program from a Probabilistic Perspective[C]// 2011 16th IEEE International Conference on Engineering of Complex Computer Systems, Las Vegas, NV, United states, 2011:87-94.

[4] 李敏. 计算机中断系统浅谈[J]. 福建电脑,2011(8):74-75.

[5] 田永红. 利用中断屏蔽技术修改中断优先级[J].企业技术开发,2011,30(22):15-16.

[6] Strnadel, Josef. On design of priority-driven load-adaptive monitoring-based hardware for managing interrupts in embedded event-triggered real-time systems[C]// 2013 IEEE 16th International Symposium on Design and Diagnostics of Electronic Circuits & Systems (DDECS), Karlovy Vary, Czech Republic, 2013: 9-24.

[7] Wei Chipin, Li Zhaolin,Zheng Qingwei,et al. Design of a configurable multichannel interrupt controller[C]// 2010 Second Pacific-Asia Conference on Circuits Communications and Systems (PACCS 2010), Beijing, 2010 :30-327.

[8] Geng Rui,Hong Yi,Huang Guanghong.Testing Method for Interrupt Handling Mechanism of C Compiling System[J]. Microcomputer Information,2011(5): 4-182.

[9] Freescale. MC56F825x/4x Reference Manual, Rev.3.04,2011.

[10] 王宜怀,朱仕浪,郭芸. 嵌入式技术基础与实践——ARM Cortex-M0+ Kinetis L系列微控制器[M]. 3版.北京:清华大学出版社,2013.

[11] Freescale. DSP56800E and DSP56800EX Core Reference Manual, Rev.3.09,2011.

林志贵(副教授),主要研究方向为嵌入式系统、无线传感器网络。

Analysis and Implementation of Interrupt System inDigital Signal Controller

Lin Zhigui, Yao Fangqin, Li Min, Liu Ying

(School of Electronics and Information Engineering, Tianjin Polytechnic University, Tianjin 300387, China)

Digital Signal Controller (DSC) has the ability of digital signal processing and MCU control interface. The interrupt system has many functions, which brings more conveniences for applications and the complexity of settings. Taking MC56F8257 as an example, this paper analyzes interrupt system of DSC and its setting methods in detail. Taking the QSCI module interrupt and CAN module interrupt of MC56F8257 as an example, the interrupt setting process and its responding results of DSC are analyzed from three aspects including without interrupt priority, with interrupt priority and interrupt nesting. The results prove that the DSC interrupt has priority and mask characteristics, which provides guidance to promote the use of DSC chips.

digital signal controller; interrupt system; priority; MC56F8257

TP33

A

2014-03-04)

猜你喜欢

服务程序寄存器中断
STM32和51单片机寄存器映射原理异同分析
SylixOS系统的中断嵌套机制研究与实现
基于C#的进程守护程序的设计
Lite寄存器模型的设计与实现
UDP穿透NAT技术实现数据唤醒车联网T-Box设备的方案
基于FPGA的中断控制器设计*
跟踪导练(二)(5)
千里移防,卫勤保障不中断
水利工程施工监理服务程序及质量控制
FPGA内嵌PowerPC的中断响应分析