K60 GPIO外部中断

来源:互联网 发布:php程序员的发展方向 编辑:程序博客网 时间:2024/05/21 21:37
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的是可以不用声明的
K60 <wbr>GPIO外部中断