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的是能够不必声明的
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/263153.html