240x的CPU内核提供给用户6个可屏蔽中断INT1~6。而这6个中断级别的每1个都可以被很多外设中断请求共享,图2-14为外设中断扩展(Periphera l Inte rrupt Expansion,PIE)模块框图。PIE专门管理来自各种外设或外部引脚的40多个中断请求。
1.中断请求层次和结构
由于外设中断个数较多,所以用两级中断结构来扩展可响应的中断个数。中断请求/应答硬件逻辑和中断服务程序软件都有两级层次的中断。
在低层次中断中,从几个外设来的外设中断请求(PIRQ)在中断控制器处进行或运算,产生一个INTn(n=1~6)中断请求。在高层次中断中,INTn中断请求产生一个到CPU的中断请求。在外设寄存器中,对每一个产生外设中断请求的事件都有中断使能位和中断标志位。如果一个引起中断的外设事件发生且相应的中断使能位被置1,则会产生一个外设到中断控制器的中断请求。这个中断请求反映了外设中断标志位和中断使能位的状态,当中断标志位被清零时,中断请求也被清零。对某些要设置中断优先级的外设事件,当这类事件发生时,其中断优先级的值也被送到中断控制器,而中断请求也保持到中断应答或者软件将其清零。
图2-14 外设中断扩展(PIE)模块框图
如果一个外设既可产生高级的中断请求,又可产生低级中断请求(如SCI、SPI、ADC等),对应的中断优先级位的值将被送到外设中断扩展模块PIE来进行判断。
中断请求(PIRQ)标志位一直保持到中断应答自动清除或用软件将其清除。在高层次中断中,“或”逻辑运算的多个外设中断请求INTn(n=1~6)将产生一个到CPU的中断请求,它是两个CPU时钟脉冲宽的低电平脉冲。
当多个外设同时发出中断请求时,CPU总是响应优先级高的中断请求。
注意:外设中断请求标志位在CPU响应中断时自动清除,即在高层次中断时清零,而不是在外设中断级即低层次中断时清零。
2.中断向量
当CPU接受中断请求时,它并不知道是哪一个外设事件引起的中断请求。为了使CPU能够区别不同外设引起的中断事件,需经过PIE模块译码,判定哪个中断请求被响应。某个外设的中断请求有效时,会产生唯一的外设中断向量,被装载到外设中断向量寄存器(PIVR)中。CPU应答外设中断请求时,从PIVR中读取相应的中断向量,并产生一个转到该通用中断服务子程序(General Inte rrupt Serv ice Routine,GISR)入口地址的向量。
实际上240x程序设计一般有两个中断向量表:CPU向量表和外设向量表。CPU向量表用于得到响应中断请求的通用中断服务子程序。外设向量表用于获取响应某外设事件的特定中断服务子程序(Specific ISR,SISR)。对于中断申请数量比较少的情况,可以将通用与特定中断服务子程序合在一起。
在通用中断服务子程序GISR中可读出寄存器PIVR中的值,保护现场后,用PIVR中的值来产生一个转到SISR的向量。例如,可屏蔽中断XINT1(高级模式级别为INT1,优先级为7)产生一个中断请求,CPU对其响应。这时,0001h(XINT1的外设中断向量)被装载到PIVR中,CPU获取被装载到PIVR中的值之后,用这个值来判断是哪一个外设引起的中断请求,接着转移到相应的SISR。将PIVR中的值装载入累加器时需先左移(每一条转移指令两个字节),再加上一个固定的偏移量,然后程序转到累加器指定的入口地址,这个地址将指向SISR,从而执行XINT1的中断服务子程序。
(1)假中断(Phanto m)向量
如果一个中断被响应,但没有获得相应的外设中断请求,那么就使用假中断。假中断向量特性可以保证中断系统的完整性,从而使中断系统一直可靠安全地运行,而不会进入无法预料的中断死循环中。
以下情况会产生假中断:(www.xing528.com)
●CPU执行一个软件中断指令INTR,使用参数1~6,用于请求服务6个可屏蔽中断(INT1~INT6)之一。
●当外设发出中断请求,但是其INTn(n=1~6)标志位却在CPU应答请求之前已经被清零。
在上述两种情况下,并没有外设中断请求送到中断控制器,因此中断控制器不知道哪个外设中断向量装入到PIVR中,此时向PIVR中装入假中断向量0000h,从而避免程序进入中断死循环中。
(2)软件层次
中断服务子程序通常有两级:通用中断服务子程序(GISR)和特定中断服务子程序(SISR)。在GISR中保存必要的现场,从外设中断向量寄存器(PIVR)中读取外设中断向量,这个向量用来产生转移到SISR的地址入口。对每一个从外设来的中断都有一个特定的SISR,在SISR中执行对该外设事件的响应。
程序一旦进入特定中断服务子程序后,所有的可屏蔽中断都被屏蔽。GISR必须在中断被重新使能之前读取PIVR中的值,否则在另一个中断请求发生之后,PIVR中将装入另一个中断请求的中断向量值,这将导致原外设中断向量参数的永久丢失。
外设中断扩展模块(PIE)不包括像复位和NMI这样的不可屏蔽中断。
(3)不可屏蔽中断(NMI)
240x DSP无NMI引脚,在访问无效的地址时,不可屏蔽中断(NMI)就会发出请求。当NMI被响应后,程序将转到不可屏蔽中断向量入口地址0024h处。240x DSP没有与NMI相对应的控制寄存器。
3.全局中断使能
状态寄存器ST0中有一个全局中断使能位INTM(ST0.9),在初始化程序和主程序中,常常需要使用该位对DSP的全局中断进行开放和关闭操作。初始化过程中,需要关全局中断,而在主程序开始执行时,需要开全局中断。
C语言编程:
执行完中断服务子程序后,一定要打开全局中断。因为进入中断服务程序时,系统自动关中断,不允许在中断服务程序中响应其他中断,即不允许中断嵌套。所以从中断返回时需要重新打开全局中断。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。