200 likes | 374 Views
高速 DSP 原理、应用及实践. 自动化测试与控制研究所 许永辉 2011.3.2. Part2 :中断控制. 1. 中断概述. 中断是为使 CPU 具有对外界异步事件的处理能力而设置的。当这些事件发生时, DSP 应及时执行这些事件所要求的任务。 中断就是要求 CPU 暂停当前的工作,转而去处理这些事件,处理完以后,再回到原来被中断的地方继续原来的工作。这些中断源可以是片内的,如定时器等,也可以是片外的,如 A/D 转换及其他片外装置。 显然,一个中断服务包括保存当前处理现场,完成中断任务,恢复各寄存器和现场,然后返回继续执行被暂时中断的程序。. 2. 中断概述.
E N D
高速DSP原理、应用及实践 自动化测试与控制研究所 许永辉 2011.3.2
1 中断概述 • 中断是为使CPU具有对外界异步事件的处理能力而设置的。当这些事件发生时,DSP应及时执行这些事件所要求的任务。 • 中断就是要求CPU暂停当前的工作,转而去处理这些事件,处理完以后,再回到原来被中断的地方继续原来的工作。这些中断源可以是片内的,如定时器等,也可以是片外的,如A/D转换及其他片外装置。 • 显然,一个中断服务包括保存当前处理现场,完成中断任务,恢复各寄存器和现场,然后返回继续执行被暂时中断的程序。
2 中断概述 • 中断管脚上一个跳变(上升沿/下降沿)将会在中断标志寄存器(IFR)置一个即将发生的中断状态。 • 如果这个中断被使能,则CPU开始处理这个中断,将当前程序流程转向中断服务程序。 • 当几个中断源同时向CPU请求中断时,CPU会根据中断源的优先级别,优先响应级别最高的中断请求。 • DM642有8个寄存器管理中断服务。
3 中断类型和中断信号 • 中断类型 • RESET:复位 • NMI:不可屏蔽中断 • INT4-15:可屏蔽中断 • 来源 • RESET:管脚信号 • NMI:管脚信号 • INT4-15:管脚信号或片内外设
4 复位(RESET) 复位是最高级别中断,它被用来停止CPU工作,并使之返回到一个已知状态。复位与其他类型中断在以下方面是不同的: • RESET是低电平有效信号,而其他的中断是在转向高电平的上升沿有效。 • 为了正确地重新初始化CPU,在RESET再次变成高电平之前必须保持10个时钟脉冲的低电平。 • 复位使所有正在进行的指令执行都被打断,所有的寄存器返回到它们的默认状态。 • 复位中断服务取指包必须放在地址为0的内存中。 • 复位不受转移指令的影响。
5 不可屏蔽中断(NMI) • NMI优先级别为2,它通常用来向CPU发出严重硬件问题的警报,如电源故障等。为实现不可屏蔽中断处理,在中断使能寄存器中的不可屏蔽中断使能位(NMIE)必须置1。如果NMIE置l,阻止NMI处理的惟一可能是不可屏蔽中断发生在转移指令的延迟间隙内。 • NMIE在复位时被清零以防止复位被打断。当一个NMI发生时,NMIE也被清零,这样就阻止了另一个NMI的处理。NMIE不可人为地清0,但可以用程序置位,使嵌套NMI能够运行。在NMIE为0时,所有可屏蔽中断(INT4-INTl5)也都被禁止。
6 可屏蔽中断(INT4-INT15) 2.3 1、DM642的CPU有12个可屏蔽中断,它们被连接到芯片外部或片内外设,也可由软件控制或者不用。 2、中断发生时将中断标志寄存器(IFR)的相应位置1。 3、假设一个可屏蔽中断不发生在转移指令的延迟间隙内,它还须满足下列条件才能得到响应,受到处理。 • 控制状态寄存器(CSR)中的全局中断使能位(GIE)置l。 • 中断使能寄存器(IER)中的NMIE位置1。 • IER中的相应中断使能位置l。 • 在IFR中没有更高优先级别的中断标志(IF)位为1。
7 中断控制寄存器
8 控制状态寄存器(CSR) • CSR包含控制和状态位,其中2位GIE和PGIE用于控制中断。全局中断使能位(GIE,Global Interrupt Enable)是CSR的bit0,控制GIE的值可以使能或禁止所有的可屏蔽中断。 • CSR的bitl是PGIE,PGIE保存先前的GIE值,即在响应可屏蔽中断时,保存GIE的值,而GIE被清0。这样在处理一个可屏蔽中断期间,就防止了另外一个可屏蔽中断的发生。
9 中断使能寄存器(IER) • IER控制每一个中断源是否使能。通过IER中相应某个中断位置l或者清0可以使能或禁止某个中断。 • IER的bit 0对应于复位,该位只可读(值为1)不可写,由于bit 0总为l,所以复位总被使能。 • bitIE4-IEl5写1或写0分别使能或禁止相关中断。 • NMIE=0时,禁止所有非复位中断;NMIE=l时,GIE和相应的IER位一起控制INTl5-INT4中断使能。对NMIE写0无效,只有复位或NMI发生时它才清0。
10 中断标志寄存器(IFR) • 中断标志寄存器(IFR)包括INT4~INTl5和NMI的状态。 • 当一个中断发生时,IFR中的相应位被置1,否则为0。 • 读取IFR,可检查中断状态。 • 如上图所示, IFR的高16位与IER一样,为保留位。
11 中断设置/清除寄存器(ISR/ICR) • ISR和ICR可以用程序设置和清除IFR中的可屏蔽中断位 • 对ISR的IS4-ISl5位写1会引起IFR对应中断标志位置1 • 对ICR的IC4-ICl5位写1会引起IFR对应标志位置0 • 对ISR和ICR的任何位写0无效,设置和清除ISR和ICR的任何位都不影响NMI和复位。 • 从硬件来的中断有优先权,它废弃任何对ICR的写入。当同时对ICR和ISR的同一位写入时,对ISR写入优先。
12 中断选择器和外部中断 • DM642的DSP内核支持16个优先级别的中断 • INT0是不可屏蔽中断,被DSP的复位中断源占用,不能通过软件使能或禁止,优先级别最高。INT1被NMI中断占用,INT2和INT3保留未用。 • DM642中断源多于16个,12个可屏蔽中断(INT_4-INT_15)的中断源可以通过修改中断选择控制寄存器MUX和HMUXL来进行编程。INT_15优先级别最低。
13 DM642可用的中断源
14 中断选择器 • DM642有22个外设中断源(C6000最多有32个),CPU只提供12个可用中断 • 中断多路复用寄存器决定了DM642中断源与CPU从4到15中断(INT4-INT15)的映射关系。外部中断极性寄存器设置了外部中断的极性。
15 外部中断极性寄存器(EXPOL) 外部中断极性寄存器,如图3-11所示,允许用户改变4个外部中断(EXT_INT4-7)的极性 XIP值为0时,一个从低到高的上升沿触发一个中断 XIP值为1时,一个从高到低的下降沿触发一个中断 XIP的默认值是0
16 中断选择寄存器 • MUX中的INTSEL域,允许映射中断源为特定的中断。 INTSEL4-15对应CPU中断INT4-INT15 • 通过设定INTSEL域为所期望的中断选择号,如表3-3所示可以映射任何中断源到任何CPU中断
17 C语言中断服务程序 • Interrupt关键字 • 必须用interrupt声明中断函数 • 中断函数入口和返回值必须是void类型 • 库函数dev6x.lib • dev6x.lib实现了中断向量段.vec 无需再编写vectors.asm • 使用dev6x.lib步骤 • 将dev6x.lib加到工程中 • 在.cmd文件中把.vec 段配置到0地址 • 在主程序中包含头文件intr.h • 在主程序main函数中调用intr.reset函数 • 调用intr_hook等函数
18 中断服务程序例子 #include "intr.h“ interrupt void example(); void main() { *(int*)extpol=0x00000000; //设置外部中断极性是上升沿 intr_reset(); //初始化中断向量表 intr_hook(example,CPU_INT4); //“挂中断” INTR_ENABLE(CPU_INT4); //使能CPU_INT4. INTR_ENABLE(NMIE); //使能不可屏蔽中断 INTR_GLOBAL_ENABLE(); //使能全局中断 … } Interrupt void example() { … }