64+的中断系统和以往的不同,中断是基于事件的。整个硬件CPU接收15个中断,实际用户可用12个可屏蔽中断,但系统可以支持最多128个中断源。64+将中断源视为事件"Event",128个事件可以分别通过配置连接到12个可屏蔽中断。而128个事件每连续32个可以合并到四个固定的事件中,即Event0(对应事件号0-31)、Event1(对应事件号32-63)、Event2(对应事件号64-95)、Event3(对应事件号96-127)(实际最大有效中断源为124个)。这样可以通过数量有限的CPU中断来管理大量的中断源,使用灵活。下图是系统事件映射图:
中断控制器通过上述这些事件向C64x+ CPU输出如下信号:
1.一个可屏蔽,硬件异常(EXCEP)
2.12个可屏蔽硬件中断(INT4到INT15)
3.一个可用于中断或才异常的不可屏蔽中断(NMI)
4.一个复位中断(RESET)
中断控制器包括以下几个模块,用于将事件路由到中断或者异常:
1.中断选择器:将系统事件路由到12个可屏蔽中断中
2.事件组合器:将大量的事件减小到四个组合后的事件。
3.异常组合器:系统所有事件异常组合成一个CPU的异常输入
以下是中断控制器的框图:
在DSP/BIOS下进行基于事件的中断配置如下(假设我们要配置的是idma1传输完成中断, idma1的完成中断事件号是14,将其路由到INT4):
1.首先,在dsp/bios图形配置文件中选择HWI-Hardware Interrupt Service Routine Manager,选择HWI_INT4,右键它,点“Properties”,打开属性编辑框。
2.其次,在"Genral"选项中的“interrupt selection number ”中输入0,(因为idma1事件号是14,属于Event0),点击“应用”,这时"function"中会自动生成"_ECM_dispatch"。点“确定”退出属性设置。
3.选择“ECM-Event Combiner Manager”,点右键“Properties”,选择属性框中"Enable event combiner manager"中的复选框
4.在源文件中编写idma1中断服务程序,isr_idma1(),
5在EVENT14中点右键,选择"Properties",打开属性框,在"function"中输入"_isr_idma1"."arg"框中输入14(事件号),同时选中"unmask event source“,点确定
6.设置完毕,运行程序,当idma1传输完成即可执行isr_idma1函数