اطلاعیه

Collapse
No announcement yet.

مشکل با DMA

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

    مشکل با DMA

    سلام دوستان
    با استفاده از کد های بخش http://www.eca.ir/forum2/index.php?topic=38976.180 قسمت dma رو میخوام راه اندازی کنم. اما هیچ تغییری روی خروجی dac دیده نمیشه.
    اشکال کارم کجاست؟

    کد:
    /*
     
     XMEGA64A3__ADC_DMA_PWM.c*
     Author: Chavosh*
     
    */
    
    #include <avr/io.h>
    
    int a=0;
    int main(void)
    {
    	
    	
     SREG = 0X80;
     PMIC_CTRL = PMIC_MEDLVLEN_bm|!(PMIC_IVSEL_bm);
      
     CCP = CCP_IOREG_gc;
     OSC_CTRL = OSC_RC32MEN_bm;
     while(!(OSC_STATUS & OSC_RC32MRDY_bm));
     CLK_CTRL = 0x01;
     
     PORTC_DIR = PIN0_bm;
     TCC0_PER=2047;
     TCC0_CTRLB=TC_WGMODE_SS_gc|TC0_CCAEN_bm;
     TCC0_CTRLA=TC_CLKSEL_DIV2_gc;
     
    DACB_CTRLB=DAC_CHSEL_SINGLE_gc;
    DACB_CTRLC=0;
    DACB_CTRLC=DAC_REFSEL_AREFA_gc;
    DACB_CTRLA=DAC_ENABLE_bm|DAC_CH0EN_bm;
    
     
     DMA_CTRL=DMA_ENABLE_bm;
     DMA_CH0_ADDRCTRL=DMA_CH_SRCRELOAD_BURST_gc|DMA_CH_SRCDIR_INC_gc|DMA_CH_DESTRELOAD_BURST_gc|DMA_CH_DESTDIR_INC_gc;
     DMA_CH0_TRIGSRC=DMA_CH_TRIGSRC_TCC0_CCA_gc;
     DMA_CH0_TRFCNT = 0;
     DMA_CH0_SRCADDR0 =(((uint16_t)(&a))>>0*8)&0xFF;
     DMA_CH0_SRCADDR1 =(((uint16_t)(&a))>>1*8)&0xFF;
     DMA_CH0_DESTADDR0 =(((uint16_t)(&DACB_CH0DATA))>>0*8)&0xFF;
     DMA_CH0_DESTADDR1 =(((uint16_t)(&DACB_CH0DATA))>>1*8)&0xFF;
     DMA_CH0_CTRLA=DMA_CH_SINGLE_bm|DMA_CH_REPEAT_bm|DMA_CH_BURSTLEN_2BYTE_gc|DMA_CH_ENABLE_bm;
     
     while(1);
     
    }
    گفت که دیوانه نهی لایق این خانه نهی

    #2
    پاسخ : مشکل با DMA

    کد اصلی که از آن برداشت کرده اید و همچنین کد فعلی دارای یکسری اشکال است. بصورت دقیق توضیح دهید که قصد دارید خروجی کد چه عملکردی داشته باشد؟
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : مشکل با DMA

      خیلی ممنون
      من میخوام مقدار متغیر a که به صورت سراسری تعریف کردم روی DACB کانال صفر نمایش داده بشه.
      گفت که دیوانه نهی لایق این خانه نهی

      دیدگاه


        #4
        پاسخ : مشکل با DMA

        یه مشکل دیگه هم دارم:
        من از میکرو xmega128A1 استفاده میکنم. زمانی که میخوام با استفاده از asf قسمت DMA رو به برنامه اضافه کنم برنامه هنگ میکنه و Close Solution رو میده. ولی زمانی که یه میکروی دیگه مثلا xmega128AU1 رو انتخاب میکنم قسمت DMA به راحتی به برنامه اضافه میشه. شما دلیل این کار رو نمیدونید؟
        گفت که دیوانه نهی لایق این خانه نهی

        دیدگاه


          #5
          پاسخ : مشکل با DMA

          نوشته اصلی توسط Finder_
          من میخوام مقدار متغیر a که به صورت سراسری تعریف کردم روی DACB کانال صفر نمایش داده بشه.
          یک نمونه کد را قبلا برای انتقال نتیجه adc به dac بوسیله dma قرار داده ام که می توانید به جزئیات آن مراجعه کنید و نحوه کدنویسی را برای انتقال منبع مورد نظر (که در آن مثال رجیسترهای خروجی adc است) به dac مشاهده کنید:

          http://knowledgeplus.ir/userfiles/DMA_ADCDAC_0.rar
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه

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