本文章介绍外部中断的实现方式,比如检测到上升沿或者下降沿,就触发中断,让LED灯状态反转。
提一点实际应用,外部中断在实际工程中的应用比较少,但是也有,通常都是用采集高低电平的方式,实现外部信号的采集,比较少会去采集跳变沿。
首先在PIN配置中,设置哪个脚为采集(输入)口,在如下例程中,设定PTC13为输入口
代码实现部分就很简单了,初始化中配置配置中断输入口,设置中断函数,最后使能中断即可。
本例程使用的是按键,按下短接到VCC,设定的为上升沿触发中断,因为有时候配置的有多个输入口,需要再次判断对应引脚的中断标志位是否为1,判断不同的中断,再去执行对应的中断函数。
void Ext_Int_IRQ (void) //中断处理函数,函数名在之后的中断函数中调用就可以跳转了
{
if( PINS_DRV_GetPortIntFlag(PORTC) >> 13 &0x0001) //获取中断标志位状态
{
PTD->PTOR = 1 <<16 ; //LED 电平翻转
}
PINS_DRV_ClearPortIntFlagCmd(PORTC); //清除中断标志
}
int main(void)
{
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, 1); // 时钟初始化
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0); //GPIO初始化
PINS_DRV_SetPinIntSel(PORTC,13,PORT_INT_RISING_EDGE); //设置PTC13作为输入
INT_SYS_InstallHandler(PORTC_IRQn,&Ext_Int_IRQ,NULL); //设中断函数
INT_SYS_EnableIRQ(PORTC_IRQn); //使能PTC中断
while(1);
}
实现的效果就是按下按键,LED灯状态反转。