您的位置 首页 开关

LPC1114外中止使用

LPC1114微处理器每一个GPIO都可以中断,不过在设计中断时需要注意,下面就举例说明:/**************************************************…

LPC1114微处理器每一个GPIO都可以中止,不过在规划中止时需求留意,下面就举例说明:

/**************************************************************************************
* global variable
**************************************************************************************/
volatile uint8 KeyValue = 0;

/**************************************************************************************
* FunctionName : KeyInit()
* Description : 初始化按键
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void KeyInit(void)
{
// 设置为输入端口
GPIOSetDir(PORT1, KEY1, 0);
GPIOSetDir(PORT1, KEY2, 0);
GPIOSetDir(PORT1, KEY3, 0);
GPIOSetDir(PORT1, KEY4, 0);
GPIOSetDir(PORT1, KEY5, 0);
GPIOSetDir(PORT1, KEY6, 0);

// 设置为低电平中止
GPIOSetInterrupt(PORT1, KEY1, 1, 0, 0);
GPIOSetInterrupt(PORT1, KEY2, 1, 0, 0);
GPIOSetInterrupt(PORT1, KEY3, 1, 0, 0);
GPIOSetInterrupt(PORT1, KEY4, 1, 0, 0);
GPIOSetInterrupt(PORT1, KEY5, 1, 0, 0);
GPIOSetInterrupt(PORT1, KEY6, 1, 0, 0);

// 使能中止
GPIOIntEnable(PORT1, KEY1);
GPIOIntEnable(PORT1, KEY2);
GPIOIntEnable(PORT1, KEY3);
GPIOIntEnable(PORT1, KEY4);
GPIOIntEnable(PORT1, KEY5);
GPIOIntEnable(PORT1, KEY6);

NVIC_EnableIRQ(EINT1_IRQn); // 使能PORT1中止
}

/**************************************************************************************
* FunctionName : PIOINT1_IRQHandler()
* Description : 中止服务函数
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void PIOINT1_IRQHandler(void)
{
uint32 key;

key = GPIOIntStatus(PORT1, KEY1);
if (key == 1)
{
KeyValue = K1;
GPIOIntClear(PORT1, KEY1);
return ;
}

key = GPIOIntStatus(PORT1, KEY2);
if (key == 1)
{
KeyValue = K2;
GPIOIntClear(PORT1, KEY2);
return ;
}

key = GPIOIntStatus(PORT1, KEY3);
if (key == 1)
{
KeyValue = K3;
GPIOIntClear(PORT1, KEY3);
return ;
}

key = GPIOIntStatus(PORT1, KEY4);
if (key == 1)
{
KeyValue = K4;
GPIOIntClear(PORT1, KEY4);
return ;
}

key = GPIOIntStatus(PORT1, KEY5);
if (key == 1)
{
KeyValue = K5;
GPIOIntClear(PORT1, KEY5);
return ;
}

key = GPIOIntStatus(PORT1, KEY6);
if (key == 1)
{
KeyValue = K6;
GPIOIntClear(PORT1, KEY6);
return ;
}
}

/**************************************************************************************
* End Of File
**************************************************************************************/

在中止函数中需求留意的是,假如直接运用如下格局,将无法读取端口中止状况。

if (GPIOIntStatus(PORT1, KEY6) == 1)
{
KeyValue = K6;
GPIOIntClear(PORT1, KEY6);
return ;
}

需求先界说一个暂时变量,读取端口状况,再经过变量值进行判别,此问题现已记过验证。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/275993.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部