这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【S32K3XX】S32DS 中断管理

共1条 1/1 1 跳转至

【S32K3XX】S32DS 中断管理

高工
2025-11-21 15:10:49     打赏

【简介】

S32K3 系列芯片的中断管理是通过IntCtrl进行管理,以下是IntCtrl 的中断使能的接口。

/**
 * @brief      Enables an interrupt request.
 * @details    Enables an interrupt request.
 *
 * @param[in]  eIrqNumber    Interrupt number.
 *
 * @return     void
 */
void IntCtrl_Ip_EnableIrqPrivileged(IRQn_Type eIrqNumber)
{

#if (INT_CTRL_IP_DEV_ERROR_DETECT == STD_ON)
    /* Check IRQ number - dev_irqNumber is used to avoid compiler warning */
    DevAssert(0 <= (sint32)eIrqNumber);
    DevAssert((sint32)eIrqNumber <= (sint32)INT_CTRL_IP_IRQ_MAX);
#endif /*(INT_CTRL_IP_DEV_ERROR_DETECT == STD_ON) */
    /* Enable interrupt */
#if ((INT_CTRL_IP_CORTEXR == STD_ON) || (INT_CTRL_IP_CORTEXA == STD_ON))
    #if (MCAL_PLATFORM_ARM == MCAL_ARM_AARCH64)
    S32_GICD->GICD_ISENABLER[((uint32)(eIrqNumber) >> 5U)] = (uint32)(1UL << ((uint32)(eIrqNumber) & (uint32)0x1FU));
    #else
    uint32 u32CpuId;
    if ((uint32)(eIrqNumber) < GIC500_MIN_SPI_ID)
    {
        u32CpuId = IntCtrl_Ip_gic500_convertAffinityToLinearId(IntCtrl_Ip_read_MPIDR());
        #if (INT_CTRL_IP_DEV_ERROR_DETECT == STD_ON)
        DevAssert(GIC500_CPU_COUNT > u32CpuId);
        #endif /*(INT_CTRL_IP_DEV_ERROR_DETECT == STD_ON) */
        IP_GIC500->CPU[u32CpuId].GICR_SGII.ISENABLER0 = (uint32)(1UL << ((uint32)(eIrqNumber) & (uint32)0x1FU));
    }
    else
    {
        S32_GICD->GICD_ISENABLER[((uint32)(eIrqNumber) >> 5U) - 1U] = (uint32)(1UL << ((uint32)(eIrqNumber) & (uint32)0x1FU));
    }
    #endif
#else
    /*LDRA_NOANALYSIS*/
    MCAL_INSTRUCTION_SYNC_BARRIER();
    MCAL_DATA_SYNC_BARRIER();
    /*LDRA_ANALYSIS*/
    /* Code intended for Cortex M */
    S32_NVIC->ISER[(uint32)(eIrqNumber) >> 5U] = (uint32)(1UL << ((uint32)(eIrqNumber) & (uint32)0x1FU));
    /*LDRA_NOANALYSIS*/
    MCAL_INSTRUCTION_SYNC_BARRIER();
    MCAL_DATA_SYNC_BARRIER();
    /*LDRA_ANALYSIS*/
#endif
}

从上述的接口实现可知该接口是在芯片架构层之上封装了一层可以让A/R/M 核的芯片中断接口标准化。

以下的代码是本地使用IntCtrl 接口配置中断的代码。

    /* Install LPUART irq handler */
    IntCtrl_Ip_InstallHandler(LPUART2_IRQn,&LPUART_UART_IP_2_IRQHandler,NULL_PTR);

    IntCtrl_Ip_SetPriority(LPUART2_IRQn, 3U);

    /* Enable LPUART interrupt. */
    IntCtrl_Ip_EnableIrq(LPUART2_IRQn);

上述的代码主要用于配置中断ISR入口,并使能uart2中断并配置中断优先级,本地是直接使用了IntCtrl  的接口来配置中断,除了上述调用接口的方式外我们还可以使用S32DS的配置工具来生成中断的配置。我们可以在此配置中断信息。

image.png

在此处我们添加uart2 中断配置,添加后就会生成uart2 的中断配置结构。

image.png

生成配置后替换原有方法使用Intctrl 的接口进行中断的配置。

image.png

代码运行验证正常,使用S32DS 的配置工具来管理中断可以针对中断进行统一管理。

              


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]