مشکل با وقفه gpio در lpc1768

ساخت وبلاگ
سلام
من یه برنامه نوشتم که وقتی روی keypad یه دکمه فشار داده میشه، وارد وقفه میشه و یه کارهایی رو انجام میده و سپس به تابع main بر میگرده.
حالا مشکلی که هست وقتی به تابع main برمیگرده، دیگه وقفه کار نمیکنه. درصورتی که من دستور LPC_GPIOINT->IO0IntClr = 1<<15; رو هم اجرا کرد
ممنون میشم راهنمایی کنید
کد برنامه:
#include "lpc17xx.h"
#include "lcd.h"
#include "delay.h"
#include "ocf_lpc176x_lib.h"
#include "keypad.h"
void settings(void);
void EINT3_IRQHandler(){
LPC_GPIOINT->IO0IntClr = 1<<15;
LCD_DisplayString("interrupt");
uint8_t key;
key = KEYPAD_GetKey();
if ( key == 83){
settings();
}
}
int main()
{
LPC_GPIOINT->IO0IntEnF = 1<<15;
NVIC_SetPriority(EINT3_IRQn, 0);
NVIC_ClearPendingIRQ(EINT3_IRQn);
NVIC_EnableIRQ(EINT3_IRQn);
SystemInit();
/*Connect RS, RW, EN and data bus to PORT0.4 to PORT0.7*/
LCD_SetUp(P0_0,P0_1,P0_2,P_NC,P_NC,P_NC,P_NC,P0_3,P0_4,P0_5,P0_6);
LCD_Init(2,16);
// Keypad setup
KEYPAD_Init(P0_8,P0_9,P0_10,P0_11,P0_15,P0_16,P0_17,P0_18); // Keypad is connected to P0_8 - P0_18
initTimer0(); //For delayMS()
while(1)
{
LCD_DisplayString("main");
delayUS(1000000);
LCD_DisplayChar(86);
delayUS(1000000);
}
}
void settings(void){
//LCD_GoToLine(0);
LCD_DisplayString("settings");
uint8_t key;
key = KEYPAD_GetKey();
if (key == 49){
main();
}else if(key == 50){
LCD_Clear();
while(1);
}
}
دستگاه پوشال زن...
ما را در سایت دستگاه پوشال زن دنبال می کنید

برچسب : نویسنده : pushalzan بازدید : 164 تاريخ : پنجشنبه 14 آذر 1398 ساعت: 15:11