اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل با وقفه 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);
    }
    }

    #2
    پاسخ : مشکل با وقفه gpio در lpc1768

    سلامحق نداری تابع main رو از توابع دیگه صدا کنی

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    وقتی وارد وقفه میشی باید به سرعت به برنامه اصلی برگردی نوشتن روی LCD و ... اونجا جاش نیست
    یکی از راههای خوب استفاده از بیت های پرچم و ذخیره داده تو رجیستر های global هستش
    بهتره وقتی کارت تو وقفه تموم شد بهتره بنویسی IO0IntClr

    دیدگاه

    لطفا صبر کنید...
    X