平潭城鄉(xiāng)住房建設(shè)廳網(wǎng)站如何推廣小程序
前言
今天花時(shí)間看了一下,SIUL2模塊的相關(guān)內(nèi)容,并參照文檔,以及例程作了一些小記錄,知道該如何使用這個(gè)外設(shè),包括引腳的配置,中斷配置,以及常用函數(shù)的使用等,但對(duì)其中的一些細(xì)節(jié)還需要跟深入的學(xué)習(xí)和了解。
一、SIUL2是什么?
系統(tǒng)集成單元:System Integration Unit Lite2 (SIUL2) 提供外部設(shè)備引腳上的功能和電氣特性的控制和可配置性。
通過其功能框圖可以看出其實(shí)就是一個(gè)用來管理引腳功能的單元,包括中斷配置,DMA,端口復(fù)用等。
上表中展示了S32K3XX系列的引腳功能
外部中斷實(shí)現(xiàn)概述:
芯片上的REQ輸入引腳是中斷或DMA請(qǐng)求的源。芯片為SIUL2提供了四種可能的中斷向量。32個(gè)中斷請(qǐng)求源映射到向量和通道如下:
二、GPIO使用步驟
1.配置參數(shù)
將PTB18配置成GPIO模式且為輸出管腳(LED)
引腳參數(shù)選用默認(rèn)即可,需要注意引腳的初始狀態(tài)!
2.常用API
**Siul2_Port API**
Siul2_Port_Ip_PortStatusType Siul2_Port_Ip_Init(uint32 pinCount,const Siul2_Port_Ip_PinSettingsConfig config[])
用S32DS配置工具生成的給定結(jié)構(gòu)初始化引腳。void Siul2_Port_Ip_SetPullSel(Siul2_Port_Ip_PortType * const base,uint16 pin,Siul2_Port_Ip_PortPullConfig pullConfig)
啟用給定引腳的上拉/下拉設(shè)置。**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 )
翻轉(zhuǎn)指定引腳電平。
2.Demo
通過延時(shí)實(shí)現(xiàn)LED閃爍。
三、外部中斷配置
1、引腳配置
將引腳配置為外部輸入中斷,可以看出其中斷通道為 20
2、中斷配置
關(guān)于中斷配置有兩種方式,其一是使用Siul2_Icu,另一種是使用通用的中斷控制器IntCtrl_Ip_1,選擇其中一種方式即可。
使用Siul2_Icu配置:
其中我們需要關(guān)心的就是,觸發(fā)方式,工作模式,以及中斷服務(wù)函數(shù)。
啟用這個(gè)IRQ通道中斷
注意的是通道號(hào)需要與對(duì)應(yīng)起來,就可以了。
使用IntCtrl_Ip_1配置:
1、添加一個(gè)Interrupt Controller
使能對(duì)應(yīng)的中斷向量,與前面的分組表有關(guān),中斷引腳使用的是IRQ_20所以在此使能SIUL_2_IRQn。
然后需要給其分配中斷服務(wù)函數(shù)入口標(biāo)識(shí)。
后面的回調(diào)函的名字需要與對(duì)應(yīng)外設(shè)的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);/*中斷服務(wù)函數(shù)*/
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
/*用于注冊(cè)一個(gè)處理函數(shù)(pfNewHandler)。*/
void IntCtrl_Ip_InstallHandler( IRQn_Type eIrqNumber,const IntCtrl_Ip_IrqHandlerType pfNewHandler,IntCtrl_Ip_IrqHandlerType* const pfOldHandler/* 使能相應(yīng)的中斷(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)/* 設(shè)置通道的檢測(cè)狀態(tài),上升沿、下降沿、雙邊沿 */
Void Siul2_Icu_Ip_SetActivationCondition(uint8 instance, uint8 hwChannel, Siul2_Icu_Ip_EdgeType edge)
部分內(nèi)容來源于網(wǎng)絡(luò),侵權(quán)請(qǐng)聯(lián)系刪除!