基于MCAL的S32K3 GPIO外部中断使用
0、简介
本文基于S32K312 介绍GPIO的外部中断,主要是记录开发流程,本文基于《基于MCAL的S32K3 MCU使用》的工程,环境如下:
MCU:NXP S32k312
RTD版本:SW32K3_S32M27x_RTD_R21-11_4.0.0_D2311
EB版本:tresos Studio 29.0
本文是软件模拟SPI(后简称SSPI)的前提,故使用相关pin。
2、MCAL
2.1 PORT配置
2.2 ICU配置
IcuHwInterruptConfigList
根据需求添加硬件物理中断通道,并使能中断。
IcuSiul2
在IcuSiul2中添加中断通道号
IcuChannel
请记得将相关MCAL 静态代码放入工程,并添加相关include路径:
同时,需要依赖Rte_TS_T40D34M40I0R0,同理处理。
2.3 Platform
Interrupt controller
SUIL_0_IRQn对应0-7的外部引脚中断
SUIL_1_IRQn对应8-15的外部引脚中断
SUIL_2_IRQn对应16-23的外部引脚中断
SUIL_3_IRQn对应24-31的外部引脚中断
本项目使用的中断通道号为22,23。故只需使能SUIL_2_IRQn中断。
SIUL2_EXT_IRQ_16_23_ISR中断的处理函数如下:
2.3 代码
其中Icu_ChannelType Channel号见Icu_Cfg.h
int main(void)
{
/* Initialize Platform driver */
Platform_Init(NULL_PTR);
/* Install ISRs */
Platform_InstallIrqHandler(SIUL_2_IRQn, &SIUL2_EXT_IRQ_16_23_ISR, NULL_PTR);
/* Enable ISRs*/
Platform_SetIrq(SIUL_2_IRQn, TRUE);
Icu_Init(&Icu_Config);
Port_Init(&Port_Config);
Icu_EnableEdgeDetection(IcuChannel_0_PTC14_EIRQ22); //使能边沿检测
Icu_EnableEdgeDetection(IcuChannel_1_PTC15_EIRQ23);
Icu_EnableNotification(IcuChannel_0_PTC14_EIRQ22); //使能回调
Icu_EnableNotification(IcuChannel_1_PTC15_EIRQ23);
}
void IcuSginalEdgeDetection_SSPI_CS_Notification(void){
static uint32_t SSPI_CS_count=0;
SSPI_CS_count++;
}
void IcuSginalEdgeDetection_SSPI_SCK_Notification(void){
static uint32_t SSPI_SCK_count=0;
SSPI_SCK_count++;
}
2.4 试验
另一端接spi主机产品。
2.5 AUTOSAR OS
若引入AUTOSAR OS之后,应将ISR注册给OS。
(OS配置对应中断,并在程序中注册处理函数)