全局中断控制器(CIC)
FT-M6678 芯片集成了众多的外设,这些外设都可产生中断事件源,这些中断事件如何被服务取决于用户的特殊应用。在FT-M6678 芯片中,EDMA 和CorePac 都能够为事件服务,为了最大限度的增加系统中事件使用的弹性和适应性,集成了芯片级的中断控制器CIC。该中断控制器主要完成外部中断事件的路由,实现众多外设的中断事件到8 个CorePac 和3 个EDMA 的通路映射,使得CorePac 或EDMA 对外设进行响应并完成具体功能操作。
CIC 中断控制器的拓扑结构如下图所示:
CIC 中断控制器在内部分为4 个部分CIC0~CIC3。其中可以对CIC0 和CIC1 进行配置使得其对外设的中断事件进行路由后分发给8 个CorePac,以触发内核的中断服务程序,由CPU对外设进行伺服;而对CIC2 和CIC3 进行配置使其对外设的中断事件进行路由后分发给3 个EDMA,以触发EDMA 的传输事件,由EDMA 对外设进行伺服。CIC 中断控制器内部集成了一个CrossNet 命令通路的从机接口,CPU 通过该命令通路实现对CIC 的配置或对CIC 配置参数和外部中断事件标志位的读取。
CIC 的主要功能是接收外部设备发送的中断事件,通过配置CIC 内部的功能寄存器对外设中断事件进行使能控制和映射控制,将这些中断事件路由后产生主机中断分发给CorePac 和EDMA。具体的工作流程分为四个步骤:使能; 状态;通道映射;主机映射。
中断控制器CIC 将一个外设中断路由的第一步是使能这个外设中断,通过中断使能寄存器来对相应的中断事件进行使能,没有被使能的外设事件中断不能生成任何主机中断。
外设中断事件的状态分为两种:自然状态和使能状态。外设发送的中断事件被CIC 捕获后,被存入自然状态寄存器,若该中断事件被使能,则该事件的使能状态寄存器被置1。用户可通过软件程序对中断事件的自然状态寄存器进行设置来产生中断事件而非一定需要由外设触发产生。
被使能了的外设中断事件需要通过内部通道来进行映射,这些内部通道使得众多的外设中断能够缩减数目以能够进行下一步的主机映射。多个外设中断进行内部通道映射时可以使用相同的内部通道,任意的一个中断事件有效则其内部通道输出有效。
最后一步是主机映射,内部通道映射后产生的内部事件经主机映射后产生主机中断,主机映射是固定的一一映射。在相应的主机中断事件使能和全局使能打开后,产生的主机中断事件最终被发送给EDMA 或CorePac。
CIC0/CIC1中断时间表如下:
INTC输入事件表如下:
代码示例:
void Chip_Initial()
{
//*******************中断初始化*********************************//
//全局使能8号中断向量
C6678_Int_GlobalEnable(8);
//INTC 初始化
C6678_CoreInt_Init();
//中断服务表设置
Interrupt_Service_Table((int )0x00800000);
//CIC 初始化
C6678_ChipInt_Init(0);
C6678_ChipInt_Init(1);
C6678_ChipInt_Init(2);
C6678_ChipInt_Init(3);
//下面给一个参数的例子,比如需要使用CIC0 6号事件(DMA)
C6678_ChipInt_Set(0, 6, 0);//6号事件
C6678_CoreInt_Set(102, 8); //8号中断
}
同时,在verctor.asm中添加中断向量: