中断:AMP 软中断的过程和GPIO中断差别

ZYNQ笔记(5):软中断实现核间通信 - 咸鱼IC - 博客园 (cnblogs.com)

ZYNQ基础----AMP核间软中断_zynq核间中断-CSDN博客

 中断:AMP 软中断的过程和GPIO中断差别_第1张图片

中断:AMP 软中断的过程和GPIO中断差别_第2张图片

        相较于GPIO中断,省去了对中断触发敏感类型的配置(软中断不可配),对中断管脚(Bank)的中断使能,对GPIO回调函数的设置(GPIO中断自己也可以省略这个步骤)。

        这是因为GPIO中断实际上是共享同一个中断号的,所以要使能,设置具体的管脚。

        具体用什么中断实际上是在第四步连接中断号之后才确定的:

        s32 XScuGic_Connect(XScuGic *InstancePtr, u32 Int_Id, Xil_InterruptHandler Handler, void *CallBackRef)

    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
                                (Xil_ExceptionHandler) XScuGic_InterruptHandler,
                                &Interrupt_Gpio_instance);     

    Status = XScuGic_Connect(&Interrupt_Gpio_instance,
                    Interrupt_ID_Gpio,
                    (Xil_InterruptHandler )XGpioPs_IntrHandler,
                    (void *)&GPIO_Decive
                    );   

        但是怎么去中断已经在第三步中配置妥善:

    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
                                (Xil_ExceptionHandler) XScuGic_InterruptHandler,
                                &Interrupt_Gpio_instance);     

触发中断的函数:

        指定CPU:Cpu_Identifier上的编号为:Int_Id的中断源触发软中断。

s32 XScuGic_SoftwareIntr(XScuGic *InstancePtr, u32 Int_Id, u32 Cpu_Identifier)

        Allows software to simulate an interrupt in the interrupt controller. This function will only be successful when the interrupt controller has been started in simulation mode. A simulated interrupt allows the interrupt controller to be tested without any device to drive an interrupt input signal into it.

参数:
        InstancePtr – is a pointer to the XScuGic instance.
        Int_Id – is the software interrupt ID to simulate an interrupt.
        Cpu_Identifier – is the list of CPUs to send the interrupt.

/** @name SPI 目标寄存器 0x​​800-0x8FB * 每个字节引用一个单独的 SPI 和程序,最多 8 个 CPU * 接口将发送待处理中断。
* 每个 CPU 接口在偏移量 0x800 到 0x81C 处都有寄存器。每个地址最多有 8 个寄存器别名。
* SPI 中断寄存器组可用于所有 CPU 接口。
* 最多有 255 个寄存器从位置 0x820 开始。
* * 该驱动程序不支持多CPU接口。这些包含在 * 中以获取完整的文档。
* @{ 
*/ 
#define XSCUGIC_SPI_CPU7_MASK 0x00000080U  /**< CPU 7 掩码*/ 
#define XSCUGIC_SPI_CPU6_MASK 0x00000040U  /**< CPU 6 掩码*/ 
#define XSCUGIC_SPI_CPU5_MASK 0x00000020U  /**< CPU 5 掩码*/ 
#define XSCUGIC_SPI _CPU4_MASK 0x00000010U /**< CPU 4 掩码*/ 
#define XSCUGIC_SPI_CPU3_MASK 0x00000008U  /**< CPU 3 掩码*/ 
#define XSCUGIC_SPI_CPU2_MASK 0x00000004U  /**< CPU 2 掩码*/ 
#define XSCUGIC_SPI_CPU1_MASK 0x00000002U  /**< CPU 1 掩码*/ 
#define XSCUG IC_SPI_CPU0_MASK 0x00000001U /**< CPU 0 掩码*/

你可能感兴趣的:(FPGA学习,ZYNQ裸机开发,单片机,嵌入式硬件)