现在的位置: 首页 > 综合 > 正文

C64x+ CPU中断 .

2018年04月11日 ⁄ 综合 ⁄ 共 1867字 ⁄ 字号 评论关闭

 

中断类型   

    在 CPU 中有 4 种中断类型:

• 复位

• 可屏蔽

• 不可屏蔽

• 异常 ( 仅 C64x+ 核 )

复位

    复位是最高优先级的中断,用来暂停 CPU 并使其返回到一个已知状态。复位中断在多种方式中是独特的:

• 复位信号低电平有效。所有其他的中断都是高电平有效。

• 复位信号在它再次变高来重新正确初始化 CPU 前必须持续 10 个周期低电平。

• 正在执行的指令停止并且所有的寄存器返回到默认状态。

• 复位中断服务取包必须在特定的地址。

• 复位不会被其他打断。

 

非屏蔽中断 (NMI)

    对于发生的 NMI 的处理,位于中断使能寄存器 (IER) 中的非屏蔽中断使能 (NMIE) 位必须设置为 1 。如果 NMIE 设置为 1 ,唯一可以阻止 NMI 处理的是当 NMI 发生在其他中断的延时时。

    在复位时 NMIE 被设置为 0 来阻止复位中断。在一个 NMI 产生是将其清零可以阻止另外一个 NMI 进行处理。不可以手动清除 NMIE ,但是可以设置 NMIE 来允许嵌套 NMIs 。当 NMI 被清除时,所有的可屏蔽中断 (INT4-INT15) 被禁止。

    在 C64x+ CPU 中,如果在一个 SPLOOP 操作中一个 NMI 被识别,其表现将和 NMI 作为一个异常使能一样。 SPLOOP 操作将立即停止。在 NMI/ 异常任务状态寄存器 (NTSR) 中的 SPLX 位被设置。 NMI 服务程序必须将此视为一个是否返回到中断代码的可能的一个因子。如果 NTSR 中的 SPLX 位已经设置,那么返回到中断代码结果将是错误的操作。

 

可屏蔽中断 (INT4-INT15)

      CPU 有 12 个可屏蔽的中断。拥有最低的优先级。这些中断可以用于外部器件、片上外设、软件控制等。

    假设一个可屏蔽中断不发生在其他的分支时延上,处理一个可屏蔽中断则下面的条件必须满足:

• 控制状态寄存器 (CSR) 中的全局中断使能位 (GIE) 设置为 1 。

• 中断使能寄存器 (IER) 中的 NMIE 位设置为 1 。

• 中断使能寄存器 (IER) 中对应的中断使能 (IE) 位设置为 1 。

• 相应的中断发生,在中断标记寄存器 (IFR) 中设置相应的位为 1 并且没有高优先级的中断标记位在 IFR 中被设置。

 

中断服务表

    当 CPU 开始处理一个中断时,它将引用中断服务表 (IST) 。 IST 是一个获取包含服务中断代码的包的表。 IST 包含 16 个连续的获取包。每一个中断服务获取包 (ISFP) 包含最多 14 条指令。一个简单的中断服务程序可以放入一个独立的获取包中。

 

中断服务获取包 .

    一个 ISFP 是一个用于服务一个中断的获取包。一个 ISFP 包含一个中断服务程序并足够小能置于一个获取包中。为了返回主程序, FP 包含一个放回指针指令 (B IRP ) 。后面跟着
NOP 5 指令来允许能够执行流水线。对于一个获取包放不下的情况请参照手册。

中断服务表指针

    复位获取包必须位于默认位置,但是剩下的 IST 可以置于程序存储区的任何在 256 字边界范围内。 IST 的位置由中断服务表指针寄存器 (ISTP) 中的中断服务表基址 (ISTB) 域决定。

    因为在 ISTP 中的 HPEINT 域给最高优先级中断的值来等待和使能,整个 ISTP 给最高优先级中断地址。

全局使能和禁止中断

    在控制状态寄存器 (CSR) 中包含控制中断的两个域,即 GIE 和 PGIE 。

    在 C64x+CPU 中,有一个物理的 GIE 位映射到 CSR 和 TSR 的第 0 位。同样地是,有一个物理的 PGIE 位,映射到 CSR.PGIE( 位 1) 和 ITSR.GIE( 位 0) 。修改任何其中的位将反映到其映射的位。

    全局中断使能 (GIE) 允许通过控制单个位的值来使能或禁止所有的可屏蔽中断。

• GIE = 1 使能可屏蔽中断使之能够进行处理

• GIE = 0 禁止可屏蔽中断使之不能被处理

       C64x+ CPU 提供两个新的指令来更加简单安全操作 GIE 位。

DINT 指令通过以下来禁止中断 :

– 拷贝 CSR.GIE ( 和 TSR.GIE) 值到 TSR.SGIE

– 清除 CSR.GIE 和 TSR.GIE 为 0( 立即禁止中断 )

CPU 在包含 DINT 的 执行包和其后的执行包之间 不会响应中断。

RINT 指令通过以下来恢复中断到以前状态:

– 拷贝 TSR.SGIE 的值到 CSR.GIE( 和 TSR.GIE)

– 清除 TSR.SGIE 为 0

 

独立的中断控制

    有效的为中断提供服务要求对所有 3 种类型的中断进行独立的控制。通过中断使能寄存器 (IER) 可以使能或禁止单一的中断。等待中断的状态存在中断标记寄存器 (IFR) 。通过使用中断设置寄存器 (ISR) 和中断清除寄存器 (ICR) 来手动完成中断处理。中断返回指针中保存了响应不可屏蔽和可屏蔽中断后的上下文。

 

抱歉!评论已关闭.