所有SGI都是边缘触发的,sgi的灵敏度类型是固定的,不能改变。
软中断初始化流程
1、初始化异常处理
2、初始化中断控制器
3、注册异常处理回调函数到CPU
4、连接软中断信号与注册软中断回调函数
5、使能中断控制器中的软中断中断
6、使能异常处理
int initSwIntr(){
int status;
Xil_ExceptionInit();
GicPtr=XScuGic_LookupConfig(GIC_VEC_ID);
status=XScuGic_CfgInitialize(&ScuGic,GicPtr,GicPtr->CpuBaseAddress);
if(status!=XST_SUCCESS){
return XST_FAILURE;
}
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,(void *)&ScuGic);
status=XScuGic_Connect(&ScuGic,CPU0_SW_INTR,(Xil_ExceptionHandler)cpu0IntrHandler,(void *)&ScuGic);
if(status!=XST_SUCCESS){
return XST_FAILURE;
}
Xil_ExceptionEnable();
return XST_SUCCESS;
}
使用时:
例,中断cpu1
XScuGic_SoftwareIntr(&ScuGic,CPU1_SW_INTR,XSCUGIC_SPI_CPU1_MASK);
XScuGic_SoftwareIntr(XScuGic *InstancePtr, u32 Int_Id, u32 Cpu_Id)
u32 Int_Id:中断目标的cpu的中断ID。
u32 Cpu_Id:(目的cpu号)Cpu_Id is the list of CPUs to send the interrupt.例如cpu1 XSCUGIC_SPI_CPU1_MASK
cpu0 XSCUGIC_SPI_CPU0_MASK