TMS320C三大系列的中断系统Word格式.docx

上传人:b****2 文档编号:361852 上传时间:2023-04-28 格式:DOCX 页数:17 大小:67.15KB
下载 相关 举报
TMS320C三大系列的中断系统Word格式.docx_第1页
第1页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第2页
第2页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第3页
第3页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第4页
第4页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第5页
第5页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第6页
第6页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第7页
第7页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第8页
第8页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第9页
第9页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第10页
第10页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第11页
第11页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第12页
第12页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第13页
第13页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第14页
第14页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第15页
第15页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第16页
第16页 / 共17页
TMS320C三大系列的中断系统Word格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

TMS320C三大系列的中断系统Word格式.docx

《TMS320C三大系列的中断系统Word格式.docx》由会员分享,可在线阅读,更多相关《TMS320C三大系列的中断系统Word格式.docx(17页珍藏版)》请在冰点文库上搜索。

TMS320C三大系列的中断系统Word格式.docx

当它为0时,全局中断使能开。

在实时仿真模式中,INTM被忽略[1]。

1.2 不可屏蔽的中断

当C28x检测到不可屏蔽中断时,会立即转入相应的中断服务子程序。

不可屏蔽中断包括所有软件中断(INTR、TRAP指令):

执行INTR中断指令时:

相应的IER位会自动清0,而TRAP指令不对IFR或IER产生影响。

硬件中断NMI:

NMI输入管脚的低电平触发。

非法指令中断(Illegal-instructiontrap):

遇到非法的指令操作时触发此中断。

硬件复位中断(RS):

当输入信号RS触发此中断时,CPU寄存器被复位到初始值,然后转入执行相应的复位中断子程序。

2外设中断扩展控制器PIE

C28x系列芯片拥有丰富的片内外设,每个外设根据不同的事件可以产生一个或多个中断请求。

而在CPU层次上,最多可以处理32个中断,因此,如果有更多的中断触发事件,仅依靠CPU已无法处理。

C28x通过外设中断扩展控制器(PIE)增加了可用的中断数目,增强了芯片的中断处理能力。

C28x系列DSP芯片的PIE可以处理多达96个中断。

将PIECTRL寄存器的0比特位置1可以启用PIE模块。

2.1 PIE中断扩展的原理

PIE扩展出的96个中断分为12组,分别对应CPU中断INT1到INT12。

每组8个中断复用成一个CPU中断INTx。

复用过程主要由三个层次的使能来实现。

(1)外设层次。

当外设有中断事件发生时,寄存器中相应的中断标志位(IF)置1。

如果相应的中断使能标志位(IE)是置1的,则此外设向PIE产生一个中断请求信号;

若IE为0则保持IF不变,等到IE置1时,外设再向PIE产生中断请求信号。

(2)PIE层次。

96个中断被分为12组,对应12个中断标志寄存器(PIEIFRx)和12个中断使能寄存器(PIEIERx)。

每组8个中断,都有对应的中断标志位PIEIFRx.y和中断使能位PIEIERx.y。

每个PIE中断组都有一个中断接收信号PIEACKx当外设向PIE发出中断请求信号,相应的PIEIFRx.y被置1,如果PIEIERx.y也是1,则PIE会检测相应的PIEACKx,如果PIEACKx是0则PIE向CPU发出中断请求INTx,如果是1,则PIE等到它清零后再向CPU发出中断请求。

如果同一PIE中断组中同时有多个中断发生,则PIE按照组内中断优先级来处理。

(3)CPU层次。

当PIE将中断请求送给CPU后,CPU中相应INTx的标志位IFR被置1,但这个中断要等到满足相应的使能条件才能被CPU响应。

综上,PIE扩展中断数目,其最根本的原理就是增加PIE一级的中断使能和优先级判断。

CPU决定INT1到INT12的中断优先级,PIE决定12组中断中,每8个中断的优先级。

2.2 PIE中断向量表及中断向量表的映射选择DSP芯片运行时,扩展后的PEI中断向量表必须存储在PIERAM中。

PIERAM是SARAM中一个特殊的256×

16的存储块,它的起始地址是数据存储空间的0x000D00。

C28x系列DSP芯片有5个可用的中断向量表,到底使用哪个取决于中断向量表映射模式的选择。

控制中断向量表映射的比特位有:

VMAP(状态寄存器ST1的第4个比特位)、M0M1MAP(ST1的第12个比特位)、MP/MC(XINTCNF2寄存器的第9个比特位)、ENPIE(PIECTRL寄存器的第1个比特位)。

对于C28x的芯片M0、M1模式是保留不用的模式,BROM模式只在测试时才用到,实际应用中都使用PIE映射模式(UMAP=1且ENPIE=1)。

2、TMS320C5000系列中断系统

本文选择5000系列的C54x作为代表芯片对其中断系统进行介绍。

1、C54xDSP的中断可以分成如下两大类:

第一类是可屏蔽中断。

这些都是可以用软件来屏蔽或用软件来使能的硬件和软件中断源。

C54xDSP最多可以支持16个用户可屏蔽中断。

第二类是不可屏蔽中断,这些中断是不能够屏蔽的。

C54xDSP总是响应这一类中断。

C54xDSP的非屏蔽中断包括所有的软件中断与和两个外部硬件中断,这两个中断可通过硬件控制也可通过软件控制。

复位中断对C54xDSP所有操作

方式产生影响,而中断不会对C54xDSP的任何操作模式产生影响。

但中断被声明时,禁止所有其他中断。

2、中断标志寄存器(IFR)和中断屏蔽寄存器(IMR)

中断标志寄存器和中断屏蔽寄存器都是存储器映射的CPU寄存器。

IFR对各硬件中断进行标志,当一个中断触发时,IFR中的相应的中断标志位置1,直到CPU识别该中断为止。

IMR对各硬件中断进行屏蔽或使能,某位为0表示此中断被屏蔽(禁止),某位为1表示此中断使能(以状态寄存器INTM位为0为前提条件)。

对IFR来说,某位为1表示DSP收到了一个相应的中断请求,用软件将IFR某位置1,等效于DSP收到了一个中断请求。

通常在开始某中断前,都将IFR对应位中记录的过期中断标志清0[2]。

3、中断响应过程

1.接收中断请求

一个中断由硬件器件或软件指令请求。

当产生一个中断请求时,IFR寄存器中相应的中断标志位被置位。

不管中断是否被处理器应答,该标志位都会被置位。

当相应的中断被响应后,该标志位自动被清除。

1)硬件中断请求

外部硬件中断由外部中断口的信号发出请求,而内部硬件中断由片内外设的信号发出中断请求。

2)软件中断请求

软件中断由如下程序指令发出中断请求:

(1)INTR该指令允许执行任何一个中断服务程序。

指令操作数(K)表示CPU分支转移到哪个中断向量地址。

表3.1~3.6列出了用于指向每个中断向量位置的操作数K。

当应答INTR中断时,ST1寄存器的中断模式位(INTM)被设置为1以禁止可屏蔽中断。

(2)TRAP该指令执行的功能与INTR指令一致,但不用设置INTM位。

(3)RESET该指令执行一个非屏蔽软件复位,可以在任何时候被使用并将C54xDSP置于已知状态。

RESET指令影响ST0和ST1寄存器,但是不会影响PMST寄存器。

当应答RESET指令时,INTM位被调协为1以禁止可屏蔽中断。

IPTR和外设寄存器的初始化与硬件复位的初始化是不同的。

4.应答中断

硬件或软件中断发送了一个中断请求后,CPU必须决定是否应答该中断请求。

软件中断和非屏蔽硬件中断会立刻被应答,可屏蔽中断仅仅在如下条件满足后才被应答。

1)最高优先级

当超过一个硬件中断同时被请求时,C54xDSP按照中断优先级响应中断请求。

2)INTM位清0

ST1的中断模式位(INTM)使能或禁止所有可屏蔽中断。

(1)当INTM=0,所有非屏蔽中断被使能。

(2)当INTM=1,所有非屏蔽中断被禁止。

当响应一个中断后,INTM位被置1。

如果程序使用RETE指令退出中断服务程序(ISR)后,从中断返回后INTM重新使能。

使用硬件复位或执行RSBXINTM指令(禁止中断)会将

INTM位置1。

通过执行BSBXINTM指令(使能中断),可以复位INTM位。

INTM不会自动修改IMR或IFR。

(3)IMR屏蔽位为1

每个可屏蔽中断在IMR中有自己的屏蔽位。

为了使能一个中断,可以将屏蔽位置1。

INTR指令会强制PC到相应地址,并且获取软件向量。

当CPU读取软件向量的第一个字时,它会产生(中断应答信号)信号,而清除相应的中断标志位。

对于被使能的中断,当产生(中断应答信号)信号时,在CLKOUT的上升沿,地址位A6~A2会指明中断号。

如果中断向量驻留在片内存储器,并且用户想查看这些地址,C54xDSP必须在地址可见模式下工作(AVIS=1),以便中断号被译码。

如果当C54xDSP处于Hold模式并且HM=0时,则会产生一个中断。

当信号有效时,地址不可见[3]。

5.执行中断服务程序

当应答中断后,CPU会采取如下的操作:

(1)保存程序计数器(PC)值(返回地址)到数据存储器的堆栈顶部。

程序计数器扩展寄存器(XPC)不会压入堆栈的顶部,也就是说,它不会保存在堆栈中。

因此,如果ISR位于和中断向量表不同的页面,用户必须在分支转移到ISR之前压入XPC到堆栈中。

FRET[E]指令可以从ISR返回。

(2)将中断向量的地址加载到PC。

(3)获取位于向量地址的指令(分支转移被延时,并且用户也存储了一个2字指令或两个1字指令,则CPU也会获取这两个字)。

(4)执行分支转移,转到中断服务程序(ISR)地址(如果分支转移被延时,则在分支转移之前会执行额外的指令)。

(5)执行ISR,直到一个返回指令中止ISR。

(6)将返回地址从堆栈中弹出到PC中。

(7)继续执行主程序。

根据中断请求源的两种不同类型,分别描述其中断操作流程:

(1)如果请求的是一个可屏蔽中断,则操作过程如下:

①设置IFR的相应标志位。

②测试应答条件(INTM=0并且相应的IMR=1)。

如果条件

为真,则CPU应答该中断,产生一个(中断应答信号)信号;

否则,忽略该中断并继续执行主程序。

③当中断已被应答后,IFR相应的标志位被清除,并且

INTM位被置1(屏蔽其他可屏蔽中断)。

④PC值保存到堆栈中。

⑤CPU分支转移到中断服务程序(ISR)并执行ISR。

⑥ISR由返回指令结束,返回指令将返回地址从堆栈中弹出给PC。

⑦CPU继续执行主程序。

(2)如果请求的是一个非屏蔽中断,则操作过程如下:

①CPU立刻应答该中断,产生一个(中断应答信号)信号。

②如果中断是INTR指令请求的,则INTM位被置1(屏蔽其他可屏蔽中断)。

③如果INTR指令已经请求了一个可屏蔽中断,那么相应标志位被清除为0。

6.重新映射中断向量地址

中断向量可以映射到程序存储器的任何128字页面的起始位置,除保留区域外。

中断向量地址是由PMST寄存器中的IPTR(9位中断向量指针)和左移两位后的中断向量序号(中断向量序号为0~31,左移两位后变成7位)所组成。

例如,如果被声明为低优先级,并且IPTR=0001h,则中断向量的地址为00C0h,中断向量号为16。

复位时,IPTR所有的位被置1(IPTR=1FFh),并按此值将复

位向量映射到程序存储器的511页空间。

所以,硬件复位后总是从0FF80h开始执行程序。

加载除1FFh之外的值到IPTR后,中断向量可以映射到其他地址。

例如,用0001h加载IPTR,那么中断向量就被移到从0080h单元开始的程序存储器空间。

注意:

硬件复位向量不能被重新映射,因为硬件复位会加载1到IPTR所有的位,因此,硬件复位向量总是指向程序空间的FF80h位置。

三、TMS320C6000的中断系统

C6000的中断可以分为3类:

1.RESET

2.非屏蔽中断

3.可屏蔽中断

RESET是优先级最高的中断,它连接到外部的RESET/管脚,非屏蔽中断NMI为第二优先级的中断,它对应外部的NMI管脚。

INT4-INT15为较低优先级的中断(INT15为最低)[4]。

复位是最高优先级的中断,用来将CPU返回到固定的状态复位是一个低有效信号,所有别的中断信号是高有效。

为了使CPU正确的初始化,复位低电平必须保持10个时钟周期。

正在执行的指令停止,寄存器回到默认状态复位的ISFP必须在地址“0”。

2.NMI非屏蔽中断

要使能NMI中断,需将IER中的NMIE位置“1”,跳转的延迟等待会阻止NMI中断的进程。

复位时NMIE被清“0”,当NMI产生时,NMIE被清“0”,手动无法清除NMIE,但可以设置NMIE来允许中断嵌套。

3.可屏蔽中断(INT4-INT15)

可屏蔽中断产生的条件:

控制状态寄存器CSR中的全局中断使能位GIE设为“1”中断使能寄存器IER中的NMIE位设为“1”IER中对应的中断使能位置为“1”。

4.中断响应和中断号

中断响应IACK表明CPU开始执行一个中断,中断号INUMn表明所执行的是几号中断。

5.中断服务表IST

当CPU执行一个中断时,它参考中断服务表,中断服务表里包含中断服务程序的指令包。

每个中断服务取指包(ISFP)包含8条指令。

5.中断控制寄存器列表:

表1中断控制寄存器列表

5.1控制状态寄存器:

表2控制状态寄存器

GIE为可屏蔽中断使能:

GIE=0,所有的可屏蔽中断禁止;

GIE=1,所有的可屏蔽中断使能;

5.2中断清除寄存器:

表3中断清除寄存器

向相应的位写1可手动清除IFR寄存器中的相应位,使可屏蔽中断清除。

5.4中断使能寄存器:

表4中断使能寄存器

NMIE位为所有的非复位中断(NMI和INT4-INT15)使能位

NMIE=0,禁止所有非复位中断;

NMIE=1,使能所有非复位中断。

IE4-IE15对应INT4-INT15,该为置1时使能相应的中断,置0时禁止相应中断。

5.5中断标志寄存器:

表5中断标志寄存器

相应位为1表明有相应的中断产生[5]。

5.6中断设置寄存器ISR:

表6中断设置寄存器ISR

手动设置向相应的位置1可使IFR中相应位为1。

6.中断的检测和执行

下图说明了中断产生的过程,CPU时钟周期1在外部中断管脚产生了一个上升沿,两个时钟周期后到达CPU的边界,中断信号进入CPU后在时钟周期4被检测,检测后两个周期(时钟周期6)置中断标志寄存器。

执行一个非复位中断的条件:

1)IFm在CPU时钟6被设置位“1”(处理器的中断逻辑自己设置);

2)IFR中没有更高优先级的中断被置“1”;

3)IER中相应的位应被设为“1”(用户在程序中设置);

4)CSR中的GIE被设为“1”(用户在程序中设置);

5)IER中的NMIE位被设为“1”(用户在程序中设置);

6)前5个(N到N+4)执行包中不包含跳转和不在跳转的Delayslots中。

执行非复位中断的过程:

1)其他非复位中断的进程被禁止

2)对所有的可屏蔽中断,GIE中的值被拷贝到PGIE中,然后GIE被清零;

3)对于NMI,NMIE被清零;

4)下一个(从N+5)执行包被取消,如果一个执行包在流水线的特定阶段被取消,它不会改变CPU的任何状态,这个取消操作也迫使该指令在将来的流水线阶段被取消。

5)在时钟周期7IACK被产生,特定的INUM值用来表明那个中断正在被执行;

6)IFm在时钟周期8被清除;

7)时钟周期9跳转到ISTP中所指的地址,即中断向量表所放的位置。

7.中断嵌套

通常情况下,执行一个可屏蔽中断服务子程序时,其他可屏蔽中断是被禁止的。

而这时,NMI是可以被响应的。

即通常情况下可屏蔽中断之间是不能互相嵌套的。

如果要实现中断的嵌套,需要在软件里进行操作:

1)保存IRP

2)保存PGIE

3)GIE位被设为“1”

8.TMS320C54XDSP的中断编程中应该注意的问题

8.1中断运行机制

C54系列的中断向量表占用连续128B空间,每个中断向量占用连续4B空间,因此每个中断向量的地址构成方式为:

PC=(IPTR)<<7+(Vector[n])<<2,Vector[n]为中断向量号,取值于区间[031]的整数。

中断向量表总是以汇编的形式出现。

当DSP接收到一个中断时(接收中断请求),如果是软件中断或者可屏蔽中断已开(中断确认),将暂停正在执行的程序转而运行中断向量程序,即在中断向量表中查找中断服务程序的入口地址,查到后便进入中断服务程序的运行(执行中断服务程序),运行完成后再回到主程序中继续先前的程序运行。

因此,中断程序的编写便包括三个方面:

中断产生和开启;

中断服务程序;

中断向量程序。

其中,最关键的问题是中断向量表程序的编写和内存定位。

当硬件复位时,IPTR=1FFH,表示中断向量表就放在以0FF80H(默认)为起始地址的连续128B空间,DSP可从中断向量表进入并执行复位中断服务程序,即进入项目主程序。

可见,DSP将Reset作为一个中断,从而完成了主程序的启动(或重新启动)。

在主程序中修改IPTR值可以重新映射中断向量表,主程序运行之后便将中断向量表放至方便查找的位置。

中断向量表的内容由中断向量构成,每一个中断向量存放着与之对应的中断服务程序的入口地址。

采用定时器中断产生一个方波。

该中断系统的设计包括:

中断向量表;

主程序;

内存配置程序。

中断服务程序编写:

_TINT0_ISR:

PSHMST0

BANZNext,*Counter-

STM#CounterSet,Counter

BITF*AR2,#1

BCResetXF,TC

setXF:

SSBXXF

ST#1,*AR2

BNext

ResetXF:

RSBXXF

ST#0,*AR2

Next:

POPMST0

MVDK*AR2,y

ADDM#0H,y

NOP

RETE

在定时器中断服务程序的开始处使用标号,该标号可以看作是该中断服务程序的名字,即

“_TINT0_ISR”。

8.2建立中断向量表

8.2.1中断向量程序

中断向量表的建立主要涉及几个关键技术:

(1)引用中断服务程序标号,如“.ref_TINT0_ISR”。

(2)引用其他在中断向量程序中使用的程序标号,如“.ref_c_int00”“.ref__ret”。

(3)在中断服务程序开始处定义一个中断服务程序标号,并定义为一个变量,如“.globalvector”。

用于主程序修改IPTR(中断向量指针寄存器)的值,指向中断向量表的新位置,实现中断向量表的重新定位。

从而可得中断向量表程序。

.mmregs

.ref__ret

.ref_c_int00

.ref_TINT0_ISR

.globalvector

.sect″.int_table″

vector:

rsb_c_int00

nop

nmib_ret

sint17.space4*16

sint18.space4*16

sint19.space4*16

sint20.space4*16

sint21.space4*16

sint22.space4*16

sint23.space4*16

sint24.space4*16

sint25.space4*16

sint26.space4*16

sint27.space4*16

8.2.2生成中断向量表

中断向量表有两种内存定位方案:

(1)在中断向量程序中使用伪指令“.align0x80”,CCS自动将中断向量表分配至整页,但程序员不清楚中断向量表的具体地址。

(2)在中断向量程序开始处,将中断向量表定义为已命名段,如“.sect‘.int_vector’”;

然后,在配置文件中将该已命名段放至指定地址(二进制的低7位必须为零),程序员清楚中断向量表的具体地址。

MEMORY{

PAGE0:

VEC:

origin=0x1C00,length=0x0080

PROG:

origin=0x1C80,length=0x1000

PAGE1:

DATA:

origin=0x0060,length=0x0060

STACK:

origin=0x00C0,length=0x0400

}

SECTIONS{

.int_table:

{}>VECPAGE0

.text:

{}>PROGPAGE0

.data:

.bss:

{}>DATAPAGE1

.stack:

{}>STACKPAGE1

8.3主程序编写

主程序的编写包括多项关键技术:

(1)首先定义中断服务程序的标号为全局变量,以备中断服务程序使用,如“.def_TINT0_ISR”。

(2)定义中断服务程序中用到的标号或变量。

如“.def_c_int00”“.def__ret”。

(3)修改IPTR值,使其指向中断服务程序的入口地址处。

(4)屏蔽所有中断,设置相关中断,然后使能相关中断,开启全局中断。

参考文献:

[1]汪安明

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2