اطلاعیه

Collapse
No announcement yet.

تایمر و وقفه

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

    تایمر و وقفه

    با سلام خدمت دوستان
    من با میکرو کنترلر ARM سری AT91SAM7X256 و کامپایلر KEIL کار میکنم، در یه قسمتی از برنامم نیاز به تایمر و وقفه دارم، ولی اصلا ازش سردرنمیارم، خواهشا اگه کسی نمونه برنامه ساده ای از تایمر داره قرار بده

    #2
    پاسخ : تایمر و وقفه

    سلام
    برنامه وقفه و تایمر گذاشتم
    فقط ببین برنامه تایمر رو جواب می گیری یا نه ، اگه جوای گرفتی خبر بده،ممنون

    وقفه : با فشار کلید وقفه فعال شده و LED را روشن کند
    کد:
    #include <AT91SAM7X256.H>
    #include <delay.h>
    
    void vaghfe(void)__irq
    {
    *AT91C_PIOB_SODR=1<<19;		
    delay_ms(2000);
    *AT91C_AIC_EOICR=0X0;	
    }
    
    
    
    int main ()
    {
    *AT91C_PIOB_PER=1<<19;
    *AT91C_PIOA_PER=1<<30;
    *AT91C_PIOB_OER=1<<19;
    *AT91C_PIOA_ODR=1<<30;
    *AT91C_PIOA_PPUER=1<<30;
    *AT91C_PMC_PCER=(1<<2|1<<30);
    AT91C_AIC_SMR[30]=0X01;
    AT91C_AIC_SVR[30]=(unsigned int) vaghfe;	
    *AT91C_AIC_IECR=1<<30;	
    	
    while(1)
    {	
    *AT91C_PIOB_CODR=1<<19;	
    }
    }

    تایمر: یک سیگنال با فرکانس 1 هرتز تولید کنید

    کد:
    #include "AT91SAM7X256.H"
    
    int main()
    {
     *AT91C_PIOB_PDR=0X00800000;
    	*AT91C_PIOB_BSR=0X00800000;
    
     *AT91C_PMC_PCER=0X00001000;
     *AT91C_TC0_CCR=0X00000005;
     *AT91C_TC0_CMR=0X000CC004;
     *AT91C_TC0_RC=23400;
     	while(1);
    }
    هرچيزى‏زكاتى دارد و زكات دانش، آموختن آن است به اهلش.
    امام صادق (ع)

    دیدگاه


      #3
      پاسخ : تایمر و وقفه

      سلام
      فک کنم ایشون منظورشون وقفه ی تایمر بوده .
      =========
      آقای s.tj
      لطفا
      اینجارو بخونید http://www.eca.ir/forum2/index.php?t...6196#msg626196
      1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
      من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
      !Electronic On! Programming On
      هوشمندانه سوال بپرسیم!
      http://ir02x6.persiangig.com/logo/eca/tanks_01.png

      دیدگاه


        #4
        پاسخ : تایمر و وقفه

        سلام
        ببخشید خیلی دیر شد، ولی من در کدم باید از وقفه ی داخلی و نرم افزاری استفاده کنم و اینکه تایمر به گونه ای باشد که در آن از کانتر استفاده شده باشه، با TFTLCD کار می کنم، به فرض باید وقتی وارد صفحه ای شد در مدت زمانی که واسش تعریف می کنم اگه صفحه لمس نشد این دستور را اجرا کند، اینکه کانتر به چه شکل تعریف کنم و ارتباط مدت زمان و مقدار کانتر را چیجوری حساب کنم اصلا سردر نمیارم، اگه فایل برنامه کامپایل شده با توضیح اینکه هر خط از برنامه چه می کنه تا بتونم برناممو بنویسم دارید ممنون میشم قرار بدید

        دیدگاه


          #5
          پاسخ : تایمر و وقفه

          salam, man ye barnameye sade neveshtam va kar karde( albate ba simulator e keil emtehanesh kardam faghat)

          #include <AT91SAM7X256.h>
          #include <stdio.h>
          #include <stdlib.h>
          #include "delay.h"

          //global variables
          unsigned int T_Counter;
          unsigned int TimerFlag;



          void TC_irq_handler(void) __irq;


          int main (void)
          {
          unsigned int dummy ;


          *AT91C_PMC_PCER = (1<<AT91C_ID_PIOA );
          *AT91C_PMC_PCER = (1<<AT91C_ID_TC0 );
          *AT91C_PIOA_PER = (AT91C_PIO_PA1)|(AT91C_PIO_PA2); //LED 1
          *AT91C_PIOA_OER = (AT91C_PIO_PA1)|(AT91C_PIO_PA2); //LED 2

          //*AT91C_PIOA_SODR=(AT91C_PIO_PA1);
          // delay_ms(500);


          AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; // Disable TC clock
          AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF; // Disable interrupts
          dummy = AT91C_BASE_TC0->TC_SR; // Clear status register
          AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV5_CLOCK | AT91C_TC_CPCTRG; // Set mode

          AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN ; // Enable the Clock counter
          AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;

          AT91C_BASE_AIC->AIC_IDCR = 0x1 << AT91C_ID_TC0;
          AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (unsigned int) TC_irq_handler;
          AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | 4 ;
          AT91C_BASE_AIC->AIC_ICCR = 0x1 << AT91C_ID_TC0;
          AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_TC0;

          AT91C_BASE_TC0->TC_RC = 56179;
          AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG;



          while(1)
          {
          if(TimerFlag==1)
          {
          *AT91C_PIOA_SODR=(AT91C_PIO_PA2); //timer int LED notification
          delay_ms(100);
          *AT91C_PIOA_CODR=(AT91C_PIO_PA2);
          TimerFlag = 0;
          }
          }
          }


          void TC_irq_handler(void) __irq{
          volatile unsigned int dummy;

          dummy = AT91C_BASE_TC0->TC_SR;
          dummy = dummy;

          T_Counter++;
          TimerFlag = 1;


          dummy = AT91C_BASE_TC0->TC_CV;
          *AT91C_AIC_EOICR = 0;

          AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_TC0->TC_SR; // Interrupt Ack
          AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_TC0); // Interrupt Ack

          AT91C_BASE_TC0->TC_CCR |= AT91C_TC_CLKEN | AT91C_TC_SWTRG;

          AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_AIC->AIC_EOICR; //interrupt acknowledge
          }

          دیدگاه

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