NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4796 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 3 از 3

موضوع: وقفه

  1. #1
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نام
    Tehran
    نوشته ها
    154
    تشکر
    61
    تشکر شده 45 بار در 34 پست

    Icon17 وقفه

    با سلام
    در مورد وقفه ها و راه اندازی اونا مطلبی تو مجله ها پیدا نکردم.
    اگه کسی اطلاعاتی داره که کمک می کنه تو این موضوع قرار بدید تا همه استفاده کنن.
    خودمم دست بکار می شم.
    با تشکر

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند hmg آواتار ها
    تاریخ عضویت
    Sep 2009
    نوشته ها
    36
    تشکر
    99
    تشکر شده 64 بار در 28 پست

    پیش فرض

    سلام
    برنامه زیر اینتراپت PA.15 رو فعال میکنه که حساس به لبه بالارونده از صفر به یک میباشد به این صورت که اگر قبل از اتصال تغذیه به میکرو PA.15 رو گراند کنیم، با اتصال تغذیه، برنامه main اجرا شده و led متصل به PB.21 شروع به چشمک زدن میکند و در صورتیکه PA.15 رو از GND جدا کنیم برنامه وقفه اجرا میشود و led متصل به PB.19 به مدت 5 ثانیه روشن میشود و سپس خاموش میشود. اما مشکل اینجا است که روتین اینتراپت فقط یکبار اجرا میشود. و مشکل احتمالا در زیربرنامه وقفه میباشد و باید به رجیستر های AIC_EOICR و AIC_ICCR مقادیر مناسب رو اختصاص داد. در هر صورت آیا کسی میتونه مشکل این برنامه رو حل کنه؟


    #include "AT91SAM7X256.h"
    #include "lib_AT91SAM7X256.h"
    #include "delay.h"
    //*************************interrupt rutine********************
    void isr_pi_ob (void)
    {

    AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB19);
    delay_s(5);
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);

    //AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_TC1->TC_SR;

    //AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_TC1); /* Interrupt Ack*/

    *AT91C_AIC_EOICR = 0; /* End of Interrupt*/
    }
    //****************************************8
    main(void){

    // Setup interrupts
    AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_PIOA, AT91C_AIC_PRIOR_LOWEST, 0, isr_pi_ob);
    AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_PIOA);

    // Setup PIO
    AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA); // Enable clock
    AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB); // Enable clock
    AT91F_PIO_CfgInput(AT91C_BASE_PIOA, AT91C_PIO_PA15); // Input on PA15
    AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA, AT91C_PIO_PA15); // Interrupt on PA15


    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);
    while(1){

    AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);
    delay_s(1);
    AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB21);
    delay_s(1);
    }
    }

  4. کاربران : 3 تشکر کرده اند از شما hmg برای ارسال این پست سودمند:


  5. #3
    کاربر علاقه مند hmg آواتار ها
    تاریخ عضویت
    Sep 2009
    نوشته ها
    36
    تشکر
    99
    تشکر شده 64 بار در 28 پست

    Icon2008 وقفه fiq

    سلام
    برنامه زیر اینتراپت FIQ رو که مختص پایه PA.29 است فعال میکنه

    //Moazami 89.12.17

    #include "AT91SAM7X256.h"
    #include "lib_AT91SAM7X256.h"
    #include "delay.h"
    //*************************interrupt rutine********************
    void Ext_FIQ_handler (void)__irq
    {

    AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB19);

    delay_s(5);

    AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);


    *AT91C_AIC_EOICR = AT91C_BASE_AIC->AIC_ISR;
    }
    void FIQ_init()
    {
    AT91C_BASE_PMC->PMC_PCER |= (1<<AT91C_ID_FIQ);
    AT91C_BASE_PIOA->PIO_PDR=1<<29; //disable PA29
    AT91C_BASE_PIOA->PIO_ASR=1<<29; // PA29= mode A
    AT91C_BASE_AIC ->AIC_SMR[AT91C_ID_FIQ]=0x0;
    AT91C_BASE_AIC -> AIC_SVR[AT91C_ID_FIQ]=(unsigned int) Ext_FIQ_handler;
    AT91C_BASE_AIC ->AIC_IECR=(1<<AT91C_ID_FIQ);
    }

    main(void){


    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);

    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);

    AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);


    FIQ_init();


    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);

    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);

    AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);

    while(1){

    AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);

    delay_s(1);

    AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB21);

    delay_s(1);
    }
    }

  6. کاربران : 2 تشکر کرده اند از شما hmg برای ارسال این پست سودمند:


مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •