اطلاعیه

Collapse
No announcement yet.

راهاندازی وقفه تایمر 0

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

    راهاندازی وقفه تایمر 0

    سلام
    من میخام هر چند میکرو ثانیه یه بار تایمر وقفه بخوره و بره یه کاری کنه و برگرده سر جایه اولش؟
    چکار کنم
    ایا از دوستان کسی کد اماده داره؟
    انجام پروژه هاي برنامه نويسي اندرويد
    [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
    http://cafebazaar.ir/app/?id=com.atxdroid

    #2
    پاسخ : راهاندازی وقفه تایمر 0

    دوست من سلام
    من کد آماده ندارم ولی این کاری رو که می گید به راحتی میشه انجام داد
    on interrupts lable برای پرش به یک جای برنامه است .
    دستور return هم اونو بر می گردونه.
    شرمنده من از تو سرج اومدم اینجا این چیزی که نوشتم bascam بود. متاسفانه گزینه ای برای حذف ندیدم.
    نیا باران . . . زمین جای قشنگی نیست !
    من از اهل زمینم خوب می دانم که
    گل در عقد زنبور است ولی سودای بلبل دارد و پروانه را هم دوست می دارد . . .

    دیدگاه


      #3
      پاسخ : راهاندازی وقفه تایمر 0

      سلام من این برنامه رو خودم نوشتم تو سرویس وقفه میره یک پیغام روی lcd نمایش میدهشما هر چی دوست داشتی میتونی تو سرویس وقفه بنویسی اگه بازم سوالی داشتی در خدمتم
      #include<AT91SAM7S256.H>
      #include<delay.h>
      #include<lib_AT91SAM7S256.h>
      #include<PIO.H>
      #include<lcd4bit.h>
      void timer0_irq_handler(void)__irq
      {
      lcd_clear();
      delay_s(1);
      lcd_putsf("INTERUPt active timer0"
      delay_s(2);
      lcd_clear();
      AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_TC0->TC_SR;
      }
      void main()
      {
      lcd_pin(1,0,1,2,3,6,5);
      lcd_clear();
      lcd_putsf("test interupt timer"
      delay_s(4);
      AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOA); //inable unit clock for pio
      AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_TC0); //inable unit clock for timer
      AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, AT91C_PIO_PA0);
      AT91F_PIO_SetOutput(AT91C_BASE_PIOA, AT91C_PIO_PA0);
      AT91C_BASE_TC0->TC_CMR=0X4004;
      AT91C_BASE_TC0->TC_RC=0XFFF2;
      AT91C_BASE_TC0->TC_CCR=0X5;
      AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0]=(unsigned int)timer0_irq_handler;
      AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0]=0X7;
      AT91C_BASE_AIC->AIC_IVR=0;
      AT91C_BASE_AIC->AIC_ICCR=(1<<AT91C_ID_TC0);
      AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_TC0);
      AT91C_BASE_TC0->TC_IER=AT91C_TC_CPCS;
      AT91C_BASE_AIC->AIC_IECR=(1<<AT91C_ID_TC0);
      while(1)
      {
      lcd_putsf("loop timer"
      delay_s(1);
      }
      }

      دیدگاه


        #4
        پاسخ : راهاندازی وقفه تایمر 0

        این خط برنامه به چه معناست؟
        AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_TC0->TC_SR;

        دیدگاه


          #5
          پاسخ : راهاندازی وقفه تایمر 0

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

          دیدگاه


            #6
            پاسخ : راهاندازی وقفه تایمر 0

            ممنون،اگه میشه دستورای زیر رو هم توضیح بدین
            AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0]=(unsigned int)timer0_irq_handler;
            AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0]=0X7;
            AT91C_BASE_AIC->AIC_IVR=0;
            AT91C_BASE_AIC->AIC_ICCR=(1<<AT91C_ID_TC0);
            و همین طور AT91C_BASE_AIC->AIC_IECR=(1<<AT91C_ID_TC0); ؟؟؟؟؟؟

            دیدگاه


              #7
              پاسخ : راهاندازی وقفه تایمر 0

              با سلامsvr مربوط به بردار وقفه است که نام بردار وقفه باید با نام سرویس وقفه یکی باشد---smr مربط به رجیستر مد است که سطح اولویت و نوع حساسیت به سطح یا لبه را مشخص میکند---iecr مربوط به فعال سازی وقفه ---ivr مهم نیست ننوییسش--iccr پاکشدن وقفه قبلی. :read:

              دیدگاه

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