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