高速 dsp 原理、应用及实践

20
高高 DSP 高高 高高高高高 自自自自自自自自自自自 自自自 2011.3.2

Upload: tamyra

Post on 13-Jan-2016

74 views

Category:

Documents


2 download

DESCRIPTION

高速 DSP 原理、应用及实践. 自动化测试与控制研究所 许永辉 2011.3.2. Part2 :中断控制. 1. 中断概述. 中断是为使 CPU 具有对外界异步事件的处理能力而设置的。当这些事件发生时, DSP 应及时执行这些事件所要求的任务。 中断就是要求 CPU 暂停当前的工作,转而去处理这些事件,处理完以后,再回到原来被中断的地方继续原来的工作。这些中断源可以是片内的,如定时器等,也可以是片外的,如 A/D 转换及其他片外装置。 显然,一个中断服务包括保存当前处理现场,完成中断任务,恢复各寄存器和现场,然后返回继续执行被暂时中断的程序。. 2. 中断概述. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 高速 DSP 原理、应用及实践

高速DSP原理、应用及实践

自动化测试与控制研究所

许永辉

2011.3.2

Page 2: 高速 DSP 原理、应用及实践

Part2 :中断控制

Page 3: 高速 DSP 原理、应用及实践

① 中断是为使 CPU具有对外界异步事件的处理能力而设置的。当这些事件发生时, DSP应及时执行这些事件所要求的任务。

② 中断就是要求 CPU暂停当前的工作,转而去处理这些事件,处理完以后,再回到原来被中断的地方继续原来的工作。这些中断源可以是片内的,如定时器等,也可以是片外的,如 A/D转换及其他片外装置。

③ 显然,一个中断服务包括保存当前处理现场,完成中断任务,恢复各寄存器和现场,然后返回继续执行被暂时中断的程序。

中断概述1

Page 4: 高速 DSP 原理、应用及实践

④ 中断管脚上一个跳变(上升沿 / 下降沿)将会在中断标志寄存器( IFR)置一个即将发生的中断状态。

⑤ 如果这个中断被使能,则 CPU开始处理这个中断,将当前程序流程转向中断服务程序。

⑥ 当几个中断源同时向 CPU 请求中断时, CPU 会根据中断源的优先级别,优先响应级别最高的中断请求。

⑦ DM642有 8 个寄存器管理中断服务。

中断概述2

Page 5: 高速 DSP 原理、应用及实践

① 中断类型RESET:复位NMI:不可屏蔽中断INT4-15:可屏蔽中断

② 来源RESET:管脚信号NMI:管脚信号INT4-15:管脚信号或片内外设

中断类型和中断信号3

Page 6: 高速 DSP 原理、应用及实践

复位是最高级别中断,它被用来停止 CPU 工作,并使之返回到一个已知状态。复位与其他类型中断在以下方面是不同的:①RESET 是低电平有效信号,而其他的中断是在转向高电

平的上升沿有效。②为了正确地重新初始化 CPU ,在 RESET 再次变成高电

平之前必须保持 10个时钟脉冲的低电平。③复位使所有正在进行的指令执行都被打断,所有的寄

存器返回到它们的默认状态。④复位中断服务取指包必须放在地址为 0的内存中。⑤复位不受转移指令的影响。

复位( RESET )

4

Page 7: 高速 DSP 原理、应用及实践

① NMI 优先级别为 2,它通常用来向 CPU 发出严重硬件问题的警报,如电源故障等。为实现不可屏蔽中断处理,在中断使能寄存器中的不可屏蔽中断使能位 (NMIE) 必须置 1。如果 NMIE 置 l,阻止 NMI 处理的惟一可能是不可屏蔽中断发生在转移指令的延迟间隙内。

② NMIE 在复位时被清零以防止复位被打断。当一个 NMI发生时, NMIE 也被清零,这样就阻止了另一个 NMI的处理。 NMIE 不可人为地清 0,但可以用程序置位,使嵌套 NMI 能够运行。在 NMIE 为 0时,所有可屏蔽中断 (INT4-INTl5) 也都被禁止。

不可屏蔽中断( NMI )

5

Page 8: 高速 DSP 原理、应用及实践

2.3

1 、 DM642 的 CPU 有 12 个可屏蔽中断,它们被连接到芯片外部或片内外设,也可由软件控制或者不用。

2、中断发生时将中断标志寄存器 (IFR) 的相应位置 1。3、假设一个可屏蔽中断不发生在转移指令的延迟间隙内,它

还须满足下列条件才能得到响应,受到处理。①控制状态寄存器 (CSR) 中的全局中断使能位 (GIE) 置 l

。②中断使能寄存器 (IER)中的 NMIE位置 1 。③IER中的相应中断使能位置 l 。④在 IFR中没有更高优先级别的中断标志 (IF)位为 1 。

可屏蔽中断( INT4-INT15 )

6

Page 9: 高速 DSP 原理、应用及实践

中断控制寄存器7

Page 10: 高速 DSP 原理、应用及实践

① CSR包含控制和状态位,其中 2 位 GIE 和 PGIE用于控制中断。全局中断使能位 (GIE , Global Interrupt Enable) 是 CSR 的

bit0,控制 GIE的值可以使能或禁止所有的可屏蔽中断。② CSR 的 bitl 是 PGIE , PGIE保存先前的 GIE值,即在响应可屏蔽

中断时,保存 GIE的值,而 GIE被清 0 。这样在处理一个可屏蔽中断

期间,就防止了另外一个可屏蔽中断的发生。

控制状态寄存器( CSR )8

Page 11: 高速 DSP 原理、应用及实践

① 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

Page 12: 高速 DSP 原理、应用及实践

① 中断标志寄存器 (IFR)包括 INT4~INTl5和 NMI的状态。② 当一个中断发生时, IFR中的相应位被置1 ,否则为0 。③读取 IFR,可检查中断状态。④ 如上图所示, IFR的高 16位与 IER一样,为保留位。

中断标志寄存器( IFR )

10

Page 13: 高速 DSP 原理、应用及实践

① 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

Page 14: 高速 DSP 原理、应用及实践

① DM642 的 DSP 内核支持 16 个优先级别的中断② INT0 是不可屏蔽中断,被 DSP 的复位中断源占用,不

能通过软件使能或禁止,优先级别最高。 INT1 被 NMI

中断占用, INT2 和 INT3 保留未用。③ DM642 中断源多于 16 个, 12 个可屏蔽中断( INT_4-

INT_15 )的中断源可以通过修改中断选择控制寄存器MUX 和 HMUXL 来进行编程。 INT_15 优先级别最低。

中断选择器和外部中断12

Page 15: 高速 DSP 原理、应用及实践

DM642 可用的中断源13

Page 16: 高速 DSP 原理、应用及实践

① DM642有 22个外设中断源( C6000最多有 32个), CPU只提供 12个可用中断

② 中断多路复用寄存器决定了 DM642中断源与 CPU从 4到 15中断( INT4-INT15)的映射关系。外部中断极性寄存器设置了外部中断的极性。

中断选择器14

Page 17: 高速 DSP 原理、应用及实践

① 外部中断极性寄存器,如图 3-11所示,允许用户改变4 个外部中断( EXT_INT4-7)的极性

② XIP值为 0 时,一个从低到高的上升沿触发一个中断③ XIP值为 1 时,一个从高到低的下降沿触发一个中断④ XIP的默认值是 0

外部中断极性寄存器( EXPOL)

15

Page 18: 高速 DSP 原理、应用及实践

16

① MUX中的 INTSEL域,允许映射中断源为特定的中断。 INTSEL4-15对应 CPU中断 INT4-INT15

② 通过设定 INTSEL域为所期望的中断选择号,如表 3-3所示可以映射任何中断源到任何 CPU中断

中断选择寄存器

Page 19: 高速 DSP 原理、应用及实践

① 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

Page 20: 高速 DSP 原理、应用及实践

#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