所有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