微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > K60 GPIO外部中断

K60 GPIO外部中断

时间:11-21 来源:互联网 点击:
K60几乎可以把任意一个GPIO用作外部中断

要用外部中断,就要配置好寄存器,写好中断函数

我这里用A口的19号引脚作为按键外部中断检测,A口的10号引脚做LED输出

void init_gpio()

{

gpio_init_struct.GPIO_PTx = PTA; //PORTA

gpio_init_struct.GPIO_Pins = GPIO_Pin19; //引脚6、7

gpio_init_struct.GPIO_Dir = DIR_INPUT; //输入

gpio_init_struct.GPIO_PinControl = INPUT_PULL_UP|IRQC_FA; //内部上拉|上升沿中断

gpio_init_struct.GPIO_Isr = porta_isr; //中断函数

LPLD_GPIO_Init(gpio_init_struct);

//使能中断

LPLD_GPIO_EnableIrq(gpio_init_struct);

gpio_init_struct.GPIO_PTx=PTA;

gpio_init_struct.GPIO_Pins = GPIO_Pin10;

gpio_init_struct.GPIO_Dir = DIR_OUTPUT;

gpio_init_struct.GPIO_Output = OUTPUT_H;

gpio_init_struct.GPIO_PinControl = IRQC_DIS;

LPLD_GPIO_Init(gpio_init_struct);

}

第五行的gpio_init_struct.GPIO_Isr = porta_isr;是把中断函数的名字赋给GPIO_Isr,用来存中断函数的地址指针,然后使能中断

中断函数

void porta_isr()

{

if(LPLD_GPIO_IsPinxExt(PORTA, GPIO_Pin19))

{

//去抖

delay();

if(PTA19_I==0)

{

PTA10_O=0;

delay();delay();delay();

delay();delay();delay();

delay();delay();delay();

PTA10_O=1;

}

}

}

这个中断函数的名字就是给GPIO_Isr的值,GPIO的每一个PIN都有中断标志位,而LPLD_GPIO_IsPinxExt(PORTx, GPIO_Piny)就是PORTx的Piny端口的中断标志位。一旦产生中断,标志位为1,执行中断函数内容。

还有提示,这里的中断函数是要声明的,和51不一样,51的是可以不用声明的


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top