اطلاعیه

Collapse
No announcement yet.

کار نکردن وقفه در keil

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

    کار نکردن وقفه در keil

    سلام خدمت همه ی دوستان
    می خواستم وقفه ی keil رو برای تایمر فعال کنم ولی هر کاری کردم نشد که نشد.
    برنامه ی تایمر با وقفه داخل فرومای دیگه ام کار نمیکنه.
    خواهشن هر کسی میتونه راهنمایی کنه ...
    (تایمر عمل میکنه ولی وقفه نمیده)
    [tt]#include <AT91SAM7X256.H> /* AT91SAMT7X256 definitions */
    #include <delay.H>

    //int k=0;

    void timer0_Handler(void)__irq
    {
    while(1){*AT91C_PIOB_SODR=(1<<21);delay_ms(2 00);*AT91C_PIOB_CODR=(1<<21);delay_ms(200);}
    //if(k%2)
    // *AT91C_PIOB_SODR=(1<<21);
    // else
    // *AT91C_PIOB_CODR=(1<<21);
    //k++;
    //*AT91C_AIC_EOICR=*AT91C_TC0_SR;
    }

    int main (void)
    {
    *AT91C_WDTC_WDMR=(1<<15); //*AT91C_WDR_MR=(1<<15); *AT91C_WDTC_WDMR=AT91C_WDTC_WDDIS;
    *AT91C_RSTC_RMR=0xA5000001; //*AT91C_RSTC_MR=0xA5000001;

    *AT91C_CKGR_MOR=0xf01; //strtup time
    *AT91C_CKGR_PLLR=0xec3f57;//50Mhz
    *AT91C_PMC_MCKR=0x03;
    *AT91C_PMC_SCER=0x01;

    *AT91C_PMC_PCER=(1<<AT91C_ID_PIOB);
    *AT91C_PIOB_PER=(1<<21);
    *AT91C_PIOB_OER=(1<<21);


    *AT91C_PMC_PCER=(1<<AT91C_ID_TC0);//|(1<<AT91C_ID_PIOB); //|(1<<0)|(1<<30)|(1<<31)
    *AT91C_PIOB_PDR=(1<<23);
    *AT91C_PIOB_MDER=(1<<23);
    *AT91C_PIOB_ASR=(1<<23);

    *AT91C_PIOB_SODR=(1<<21);delay_ms(500);*AT91 C_PIOB_CODR=(1<<21);delay_ms(500);
    *AT91C_PIOB_SODR=(1<<21);delay_ms(500);*AT91 C_PIOB_CODR=(1<<21);delay_ms(500);


    *AT91C_TC0_CMR=0x3C004; //
    *AT91C_TC0_RA=0x5f5e; // (50M/1024)*0.5
    *AT91C_TC0_RC=0xBEBC; // (50M/1024)*1
    *AT91C_TC0_CCR=AT91C_TC_CLKEN | AT91C_TC_SWTRG;

    AT91C_AIC_SVR[AT91C_ID_TC0]=(unsigned long)timer0_Handler; //
    AT91C_AIC_SMR[AT91C_ID_TC0]=0x07; // AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE|5
    *AT91C_AIC_ICCR=(1<<AT91C_ID_TC0); //
    *AT91C_TC0_IER=AT91C_TC_CPBS; //
    //*AT91C_AIC_ISCR=(1<<AT91C_ID_TC0);
    *AT91C_AIC_IECR=(1<<AT91C_ID_TC0); //

    while(1);
    }



    [/tt]
    من تو برنامهی بالا فعلا فقط میخوام یه بار عمل کنه تا بعد ...

    #2
    پاسخ : کار نکردن وقفه در keil

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

    ولی بدنه برنامه باید یکی باشه ، به نظرم اشکال برنامه تون اینه که :

    1. وقفه سراسری فعال نشده .
    2. در ابتدای روتین وقفه باید رجیستر وضعیت پریفرال مورد نظر یعنی تایمر/کنتر0 به صورت زیر خونده بشه :


    کد:
    unsigned int dummy;
    dummy = AT91C_BASE_TC0->TC_SR;
    dummy = dummy;

    دیدگاه


      #3
      پاسخ : کار نکردن وقفه در keil

      تو keil فکر نکنم روشن کردن وقفه ی سراسری داشته باشیم
      تو این قسمت رجیستر وضعیت خونده میشه
      //*AT91C_AIC_EOICR=*AT91C_TC0_SR;
      تو نرم افزار keil نباید واسه کار با وقفه تنظیمات خاصی انجام داد؟

      دیدگاه


        #4
        پاسخ : کار نکردن وقفه در keil

        این جا رو ی نگاه بنداز حتما به دردت میخوره

        http://armcenter.org/?page_id=19
        www. a r m c e n t e r. o r g

        دیدگاه


          #5
          پاسخ : کار نکردن وقفه در keil

          سلام. منم یِ همچین مشکلی داشتم. این تایپیکو نگاه کن برنامه ای که مربوط به تایمر هستش که آخرش مشکلشو برطرف کردم :agree:

          دیدگاه


            #6
            پاسخ : کار نکردن وقفه در keil

            نوشته اصلی توسط slh
            سلام. منم یِ همچین مشکلی داشتم. این تایپیکو نگاه کن برنامه ای که مربوط به تایمر هستش که آخرش مشکلشو برطرف کردم :agree:
            سلام.ببخشید کدوم تایپیک!؟

            دیدگاه


              #7
              پاسخ : کار نکردن وقفه در keil

              سلام دوستان
              من هم با وقفه در keil مشکل دارم.فعال کردن وقفه سراسری چه جوری است؟
              دوستان لطفا راهنمایی کنید :redface:

              دیدگاه


                #8
                پاسخ : کار نکردن وقفه در keil

                با عرض سلام خدمت دوستان ارمی
                مشکل وقفه در keil حل شد:
                1-اولا در keil فعال کردن وقفه سراسری نداریم.وتنها کافی است رجیسترهای معمول وقفه پر شود.
                2-در اخر اسم روتین وقفه باید irq_ نوشته شود.(تنها در جایی که برنامه روتین را مینوسیم)

                دیدگاه


                  #9
                  پاسخ : کار نکردن وقفه در keil

                  کلا برناممو بدون وقفه تموم کردم رفت.ولی یه چیز خیلی جالب فهمیدم که چرا وقفه کار نمی کرد...
                  هیچ چیزی ایراد نداشت فقط یه مساله بود اونم اینکه نرم افزار لایسنس نداشت (کرک نکرده بودم)
                  وقتی کیل رو کرک نکنی برنامت کامپایل میشه ولی با هزار تا مشکل ریز درشت

                  دیدگاه

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