新聞中心

LPC1114外中斷應(yīng)用

作者: 時(shí)間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
LPC1114微處理器每一個(gè)GPIO都可以中斷,不過在設(shè)計(jì)中斷時(shí)需要注意,下面就舉例說明:

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

/**************************************************************************************
* FunctionName : KeyInit()
* Description : 初始化按鍵
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void KeyInit(void)
{
// 設(shè)置為輸入端口
GPIOSetDir(PORT1, KEY1, 0);
GPIOSetDir(PORT1, KEY2, 0);
GPIOSetDir(PORT1, KEY3, 0);
GPIOSetDir(PORT1, KEY4, 0);
GPIOSetDir(PORT1, KEY5, 0);
GPIOSetDir(PORT1, KEY6, 0);

本文引用地址:http://2s4d.com/article/201611/317380.htm

// 設(shè)置為低電平中斷
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 : 中斷服務(wù)函數(shù)
* 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
**************************************************************************************/

在中斷函數(shù)中需要注意的是,如果直接使用如下格式,將無法讀取端口中斷狀態(tài)。

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



需要先定義一個(gè)臨時(shí)變量,讀取端口狀態(tài),再通過變量值進(jìn)行判斷,此問題已經(jīng)記過驗(yàn)證。



關(guān)鍵詞: LPC1114外中

評(píng)論


技術(shù)專區(qū)

關(guān)閉