سلام من یه برنامه نوشتم که وقتی روی 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); } }