اطلاعیه

Collapse
No announcement yet.

وفقه های sam7

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

    وفقه های sam7

    با سلام به دوستان
    واسه RTT(real time timer یه برنامه نوشتم ولی بعد از اجرای روتین وقفه برنامه به main بر نمی گرده اخر روتین AT91C_BASE_AIC->AIC_EOICR = 0; رو هم نوشتم چیزی دیگه هم می خواد؟
    وقفه هم فقط یه بار اجرا می شه!

    #2
    پاسخ : وفقه های sam7

    سلام دوست عزیز
    در اول برنامه RTT باید Flag مربوطه رو ریست کنی

    دیدگاه


      #3
      پاسخ : وفقه های sam7

      این برنامه منه
      اول از status register خوندم status=rtt->RTTC_RTSR ;
      .
      .
      .
      در اخر هم
      rtt->AIC_RTSR=0; پاک کردن statu register
      AT91C_BASE_AIC->AIC_EOICR=0; به اصرار دیتاشیت
      بعدهم چه با return چه بدون return برنامه انگار وامیسته دوباره اجرا شدن وقفه پیشکش چرا به main بر نمی گرده
      این هم روتین خود اتمل

      [tt]void ISR_Rtt(void)
      {
      unsigned int status;

      // Get RTT status
      status = RTT_GetStatus(AT91C_BASE_RTTC);

      // Time has changed, refresh display
      if ((status & AT91C_RTTC_RTTINC) == AT91C_RTTC_RTTINC) {

      RefreshDisplay();
      }

      // Alarm
      if ((status & AT91C_RTTC_ALMS) == AT91C_RTTC_ALMS) {

      alarmed = 1;
      RefreshDisplay();
      }
      }[/tt]

      دیدگاه


        #4
        پاسخ : وفقه های sam7

        یا خود برنامت رو بزار یا توی یدونه فایل متنی قرار بده تا همه جاش رو بشه دید . شاید مشکل از یک جای هست که اصلا به فکرش نبودی .

        دیدگاه


          #5
          پاسخ : وفقه های sam7

          یه مشکل اساسی با H-jtag دارم
          وقتی h-flasher رو باز می کنم و sam7s256 رو انتخاب میکنم id اون 0x270D0940 هست وقتی check رو تو مرحله 4 میزنم id ای سی منو 0x270B0951 می زنه و میگه مطابقت نداره کسی به این مشکل برخورده؟

          دیدگاه


            #6
            پاسخ : وفقه های sam7

            راستش من از JLINK استفاده می کنم و در این مورد نمی تونم کمک کنم.

            دیدگاه


              #7
              پاسخ : وفقه های sam7

              کمک کمک این وقفه ها من رو بیچاره کرد
              دفعه قبل که گفتم برنامه به main بر نمی گرده اشتباه از خودم بود ولی این بار وقفه درست اجرا میشه ولی فقط و فقط یک بار اجرا می شه هرچی هم تو main دوباره config می کنم فایده نداره :angry:

              دیدگاه


                #8
                پاسخ : وفقه های sam7

                برنامه رو بزار تا بهتر کمک بشه .

                دیدگاه


                  #9
                  پاسخ : وفقه های sam7

                  http://www.4shared.com/file/hz__9_L6/io_interrupt.html

                  دیدگاه


                    #10
                    پاسخ : وفقه های sam7

                    دوست عزیز مشکل برنامه شما این بود که وقتی که وارد اینتراپت می شود بعد از اتمام کارتان باید در رجیستر AIC_ICCR بیت مربوط به اینتراپت مورد نظر را باید یک می کردی تا اینتراپت بعدی را بتواند پوشش دهد . برنامه رو قسمت انتراپتش رو درست کردم .
                    کد:
                    void isr_rtt(void)
                    {
                    		
                    		 I = AT91C_BASE_AIC->AIC_ISR;
                    	//	 I = pPIO->PIO_ISR;
                    	//	 I &= pPIO->PIO_IMR;
                    		 pPIO->PIO_SODR = (AT91C_PIO_PA19|AT91C_PIO_PA21|AT91C_PIO_PA18|AT91C_PIO_PA16);
                    		 pPIO->PIO_CODR = (AT91C_PIO_PA17|AT91C_PIO_PA20|AT91C_PIO_PA22|AT91C_PIO_PA23);
                    		  for(I=0; I<30000; I++);
                    
                    		 pPIO->PIO_CODR = (AT91C_PIO_PA19|AT91C_PIO_PA21|AT91C_PIO_PA18|AT91C_PIO_PA16);
                    		 pPIO->PIO_SODR = (AT91C_PIO_PA17|AT91C_PIO_PA20|AT91C_PIO_PA22|AT91C_PIO_PA23);
                    		 for(I=0; I<30000; I++);
                    
                    		 AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_IRQ1); /* Interrupt Ack*/
                         AT91C_BASE_AIC->AIC_EOICR = 0; /* End of Interrupt*/
                    		 
                    }

                    دیدگاه


                      #11
                      پاسخ : وفقه های sam7

                      ممنون از توجه تون
                      من این خط رو هم اضافه کرده بودم حتی تمام رجیستر های AIC قابل نوشتن رو صفر کردم (چون برای اجرای دوباره وقفه ای سی باید reset بشه :cry: )
                      ولی جواب نداد
                      راستی شما از چه کامپایلری استفاده می کنید؟ من امروز از یکی از دوستان شنیدم که او هم با وقفه با keil مشکل داشت ولی با iar نه :cry2:

                      دیدگاه


                        #12
                        پاسخ : وفقه های sam7

                        راستی تو دیتاشیت نوشته وقتی از AIC_ISR خونده بشه و حالت وقفه روی level sensitive باشه نیازی به این رجیستر نیست و فقط در حالت edge trigger لازمه که استفاده بشه منظورم AIC_ICCR هست

                        دیدگاه


                          #13
                          پاسخ : وفقه های sam7

                          والا من که دیگه نمی دونم من تمام و یا بیشتر قسمت های arm رو ظرف 3 روز و اون هم با اینتراپتاش کار کردم و الان هم داره کار می کنه و همین جوری هم نوشتم .
                          من با keil می نویسم .

                          دیدگاه


                            #14
                            پاسخ : وفقه های sam7

                            میشه یه sample ساده با وقفه های pio یا irq بگذارید ممنون میشم

                            دیدگاه


                              #15
                              پاسخ : وفقه های sam7

                              اینم یک نمونه
                              وقتی که داخل اینتراپت می شود برنامه پایه 8 رو معکوس می کنه اللبته فرکانسش ممکنه که بالا باشه و چشمکش رو نبینی .
                              کد:
                               #include "AT91SAM7S64.h"
                              #include "lib_AT91SAM7S64.h"
                              
                              unsigned int led;
                              
                              void tim1_isr (void) __irq
                              {
                              if (led == 0) {*AT91C_PIOA_CODR|=((1<<7)); led =1;} /* LED OFF */
                              else {*AT91C_PIOA_SODR|=((1<<7)); led =0;} /* LED ON */
                              
                              
                              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*/
                              }
                              
                              void timer_init()
                              {
                              
                              AT91C_BASE_TC1->TC_CMR = 0 | AT91C_TC_WAVE | AT91C_TC_CPCTRG ; 	
                              AT91C_BASE_TC1->TC_RC = 10000; // period is 
                              AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS; 
                              /* TIM1 Interrupt: Mode and Vector with Lowest Priority and Enable */
                              AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC1] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 5;
                              AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC1] = (unsigned long) tim1_isr;
                              AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_TC1);
                              
                              AT91C_BASE_TC1->TC_CCR = (AT91C_TC_CLKEN | AT91C_TC_SWTRG) ; // Enable timer
                              };
                              
                              
                              int main (){
                              long i=0,j=0 ;
                               AT91C_BASE_PMC->PMC_PCER =((1 << AT91C_ID_TC1) | (0X00000004));  // Enable clock to TC0
                               *AT91C_PIOA_PER |=0xfffffffe;//((1<<8)|(1<<7)|(1<<23)|(1<<10));
                               *AT91C_PIOA_IFDR|=0x0ffff000;
                               *AT91C_PIOA_OER|=((1<<8)|(1<<7)|(1<<10));
                               
                               timer_init();
                              
                              while (1)
                              {
                              
                              };
                              }

                              دیدگاه

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