前言
S32的外部中断配置不复杂,本例就简单说明一下硬件及引脚,然后主要介绍一下中断程序的编写。
硬件说明
LED1:PTB2 低电平点亮,由按键PTC15进行电平翻转控制(加入外部中断的)
LED2:PTB3 低电平点亮,每200us自动翻转电平,作为程序运行指示灯用
编写外部中断程序不需要再额外对GPIO进行配置,直接写好程序就可以用外部中断啦!
中断程序编写
一、中断事件处理函数
在main函数外面编写中断事件处理函数,函数名自拟,本例函数名写为PTC_EXT_IRQ
void PTC_EXT_IRQ (void) //中断处理函数,函数名在之后的中断函数中调用就可以跳转了
{
uint32_t b = PINS_DRV_GetPortIntFlag(PORTC) & (1 << 15 ); //获取中断标志位状态
if( b !=0 ) //中断处理
{
PINS_DRV_TogglePins(PTB, 1<<2 ); //LED1电平翻转
}
PINS_DRV_ClearPortIntFlagCmd(PORTC); //清除中断标志
}
二、 中断函数编写
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);//时钟初始化
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);//GPIO初始化
/*设置中断触发条件*/
PINS_DRV_SetPinIntSel(PORTC,15,PORT_INT_RISING_EDGE); //设置PTC15上升沿触发中断
/*设置并使能中断函数*/
INT_SYS_InstallHandler(PORTC_IRQn,&PTC_EXT_IRQ,NULL); //函数名为 PTC_EXT_IRQ 的中断函数
INT_SYS_EnableIRQ(PORTC_IRQn); //使能PTC中断
三、while
while(1)
{
PINS_DRV_TogglePins(PTB, 1<<3 );//LED2闪烁
OSIF_TimeDelay(200);
}
以上一、二步就完成了中断函数的编写,三为程序运行的指示灯,LED2会不停的闪烁,若此时LED1亮,当按下按键PTC15时,会进入中断处理函数,LED1引脚电平翻转,LED1灭,如此反复。