贞明电子

LPC1114/LPC1343使用GPIO中断

0
阅读(4706)

测试平台为贞明电子M0综合开发板,使用普通GPIO的中断来读取按键,但是按键存在抖动,因此会出现错误,需要解决的是使用硬件消抖方法。以下为按键按下,对应的LED点亮,在按键速度不是很快的情况下,几乎没有抖动。以下程序可以作为学习GPIO中断的示例。需要开发板原理图和整个程序工程的可以给我留言和发邮件。djbgreen@163.com      QQ:1459557489    http://djbgreen.taobao.com 

/*****************************************************************************
 *   gpiotest.c:  main C entry file for AutoHome-M0 Develop Board
 *   Copyright(C) 2010, 贞明电子
 *   All rights reserved.
 *  http://djbgreen.taobao.com
 *   History
 *   2010.12.12  ver 1.00   绿无涯
******************************************************************************/
#include "LPC11xx.h"   /* LPC11xx Peripheral Registers */
#include "gpio.h"

void Delay(uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}

void PIOINT1_IRQHandler(void)   //中断服务函数
{
  uint32_t regVal;
  regVal = GPIOIntStatus( PORT1, 4 ); //读取该IO组的中断状态
  if ( regVal )
  {
 LPC_GPIO3->DATA^=(1<<4);  //P3_4闪动1次  LED3
 GPIOIntClear( PORT1, 4);  //清除中断标志
  }  
  return;
}

void PIOINT2_IRQHandler(void)
{
  uint32_t regVal;
  regVal= GPIOIntStatus( PORT2, 11); 
  if(regVal)
  { 
   LPC_GPIO2->DATA^=(1<<8); //P2_8闪动1次  LED1 
 GPIOIntClear( PORT2, 11);
  } 
  return;
}

void PIOINT3_IRQHandler(void)     
{
  uint32_t regVal;
  regVal= GPIOIntStatus( PORT3, 5); 
  if(regVal)
  { 
   LPC_GPIO2->DATA^=(1<<9); //P2_9闪动1次    LED2 
 GPIOIntClear( PORT3, 5);
  } 
  return;
}

void UserIO_Init(void)
{
// LPC_IOCON
 LPC_GPIO2->DIR=(1<<8)|(1<<9); //P2_8,P2_9  LED1,LED2
 GPIOSetDir(PORT3,4,1); //P3_4 output LED3
 GPIOSetDir(PORT2,11,0); //Set P2.11 input
 GPIOSetDir(PORT1,4,0); //P1_4
 GPIOSetDir(PORT3,5,0); //P2_5
 //LPC_GPIO2->DIR=~((1<<11)|(1<<5));
 //LPC_GPIO1->DIR=~(1<<4);
 GPIOSetInterrupt(PORT2,11,0,0,1);//端口号, 位地址, sense, single/doube, 上升/下降沿
 GPIOSetInterrupt(PORT3,5,0,0,1);
 GPIOSetInterrupt(PORT1,4,0,0,1);
 GPIOIntEnable(PORT2,11);   //使能该端口中断P2_11
 GPIOIntEnable(PORT3,5);    //使能该端口中断P3_5 (LPC1343为P2_5)
 GPIOIntEnable(PORT1,4);    //使能该端口中断P1_4
}

int main(void)
{
 SystemInit();    //系统初始化
 GPIOInit();     //GPIO初始化,包括GPIO时钟初始化
 UserIO_Init();    //用户使用的IO初始化(设置IO方向、中断、IO功能选择)
        //有时所有配置正确,却得不到功能,就是没有进行IO功能选择
 while(1)
 {
 
 }
}
 
/*********************************************************************************
**                            End Of File
*********************************************************************************/