【简介】
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的配置工具来生成中断的配置。我们可以在此配置中断信息。

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

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

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