宁乡网站建设在哪,加强校园网站建设方案,wordpress系统要求,制作人韩剧前言
今天花时间看了一下#xff0c;SIUL2模块的相关内容#xff0c;并参照文档#xff0c;以及例程作了一些小记录#xff0c;知道该如何使用这个外设#xff0c;包括引脚的配置#xff0c;中断配置#xff0c;以及常用函数的使用等#xff0c;但对其中的一些细节还需…前言
今天花时间看了一下SIUL2模块的相关内容并参照文档以及例程作了一些小记录知道该如何使用这个外设包括引脚的配置中断配置以及常用函数的使用等但对其中的一些细节还需要跟深入的学习和了解。
一、SIUL2是什么
系统集成单元System Integration Unit Lite2 (SIUL2) 提供外部设备引脚上的功能和电气特性的控制和可配置性。
通过其功能框图可以看出其实就是一个用来管理引脚功能的单元包括中断配置DMA端口复用等。 上表中展示了S32K3XX系列的引脚功能
外部中断实现概述
芯片上的REQ输入引脚是中断或DMA请求的源。芯片为SIUL2提供了四种可能的中断向量。32个中断请求源映射到向量和通道如下: 二、GPIO使用步骤
1.配置参数
将PTB18配置成GPIO模式且为输出管脚LED
引脚参数选用默认即可需要注意引脚的初始状态
2.常用API
**Siul2_Port API**
Siul2_Port_Ip_PortStatusType Siul2_Port_Ip_Init(uint32 pinCount,const Siul2_Port_Ip_PinSettingsConfig config[])
用S32DS配置工具生成的给定结构初始化引脚。void Siul2_Port_Ip_SetPullSel(Siul2_Port_Ip_PortType * const base,uint16 pin,Siul2_Port_Ip_PortPullConfig pullConfig)
启用给定引脚的上拉/下拉设置。**Siul2_Dio API**
void Siul2_Dio_Ip_WritePin(Siul2_Dio_Ip_GpioType * const base, Siul2_Dio_Ip_PinsChannelType pin, Siul2_Dio_Ip_PinsLevelType value)
向指定的引脚写入高低电平。
void Siul2_Dio_Ip_TogglePins(Siul2_Dio_Ip_GpioType * const base,Siul2_Dio_Ip_PinsChannelType pins )
翻转指定引脚电平。 2.Demo 通过延时实现LED闪烁。
三、外部中断配置
1、引脚配置
将引脚配置为外部输入中断可以看出其中断通道为 20
2、中断配置
关于中断配置有两种方式其一是使用Siul2_Icu,另一种是使用通用的中断控制器IntCtrl_Ip_1选择其中一种方式即可。 使用Siul2_Icu配置
其中我们需要关心的就是触发方式工作模式以及中断服务函数。
启用这个IRQ通道中断 注意的是通道号需要与对应起来就可以了。
使用IntCtrl_Ip_1配置
1、添加一个Interrupt Controller 使能对应的中断向量与前面的分组表有关中断引脚使用的是IRQ_20所以在此使能SIUL_2_IRQn。
然后需要给其分配中断服务函数入口标识。
后面的回调函的名字需要与对应外设的peripheral_Ip_Irq.c或者peripheral_Ip.c中的中断名字一致。比如GPIO的就要选择Siul2_Icu_Ip_Irq.c文件中的SIUL2_EXT_IRQ_16_23_ISR填入。
三、Demo
/* Initialize clock */Clock_Ip_InitClock(Mcu_aClockConfigPB[0]);Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);/* Install Siul2 ISR */IntCtrl_Ip_InstallHandler(SIUL_2_IRQn, SIUL2_EXT_IRQ_16_23_ISR, NULL_PTR);IntCtrl_Ip_EnableIrq(SIUL_2_IRQn);/* Initialize the Icu driver */Siul2_Icu_Ip_Init(0,Siul2_Icu_Ip_0_Config_PB_VS_0);UserCountIrqCH0 0U;BlinkCount 0U;Siul2_Icu_Ip_EnableInterrupt(0,20);Siul2_Icu_Ip_EnableNotification(0,20);/*中断服务函数*/
void User_EdgeDetect0(void)
{/* increment IRQ counter */UserCountIrqCH0;if(UserCountIrqCH0 % 2 0){Siul2_Dio_Ip_WritePin(Digital_Output_LED_BLUE_PORT, Digital_Output_LED_BLUE_PIN, 1);}else{Siul2_Dio_Ip_WritePin(Digital_Output_LED_BLUE_PORT, Digital_Output_LED_BLUE_PIN, 0);}
}四、常用中断API
/*用于注册一个处理函数pfNewHandler。*/
void IntCtrl_Ip_InstallHandler( IRQn_Type eIrqNumber,const IntCtrl_Ip_IrqHandlerType pfNewHandler,IntCtrl_Ip_IrqHandlerType* const pfOldHandler/* 使能相应的中断eIrqNumber */
void IntCtrl_Ip_EnableIrq(IRQn_Type eIrqNumber);/* Icu模块初始化 */
Siul2_Icu_Ip_StatusType Siul2_Icu_Ip_Init(uint8 instance, const Siul2_Icu_Ip_ConfigType* userConfig)/*Icu模块中断使能*/
void Siul2_Icu_Ip_EnableInterrupt(uint8 instance, uint8 hwChannel)/*Icu模块user callback function使能。User callback function is registered in function Siul2_Icu_Ip_Init()*/
void Siul2_Icu_Ip_EnableNotification(uint8 instance, uint8 hwChannel)/* 设置通道的检测状态上升沿、下降沿、双边沿 */
Void Siul2_Icu_Ip_SetActivationCondition(uint8 instance, uint8 hwChannel, Siul2_Icu_Ip_EdgeType edge)部分内容来源于网络侵权请联系删除