NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4703 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 6 از 6

موضوع: Dma

  1. #1
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نام
    Tehran
    نوشته ها
    154
    تشکر
    61
    تشکر شده 45 بار در 34 پست

    Icon17 Dma

    کسی با DMA Controller کار کرده؟

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدیر باز نشسته t.o.e آواتار ها
    تاریخ عضویت
    Sep 2010
    نوشته ها
    191
    تشکر
    150
    تشکر شده 122 بار در 60 پست

    پیش فرض

    سلام:
    http://en.wikipedia.org/wiki/Direct_memory_access

    برای چه کاری می خواهید استفاده کنید تا دقیقتر بتونم راهنمایی کنم یا سایت معرفی کنم.

  4. #3
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نام
    Tehran
    نوشته ها
    154
    تشکر
    61
    تشکر شده 45 بار در 34 پست

    پیش فرض

    من ADC ها رو تو مد Free Running گذاشتم (6 تا ADC)
    می خوام 6 تا متغییر آرایه ای 1000 تایی تعریف کنم و با DMA اونا رو با مقدار ADC ها پر کنم و CPU مشغول این کار نشه، فقط محاسبات رو روی آرایه ها انجام بده.

    ممنونم

  5. #4
    مدیر انجمن
    تاریخ عضویت
    Jul 2007
    نام
    امید آزاده
    نوشته ها
    357
    تشکر
    177
    تشکر شده 279 بار در 133 پست

    پیش فرض -

    سلام دوست عزیز ... لطفا مطلب mini multi tasking تو مجله شماره 13 رو ببینید ... میتونید از اون روش خیلی بهتر از توانایی های میکرو استفاده کنید

  6. #5
    کاربر فعال pooriya آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    پوریا علیزاده
    نوشته ها
    316
    تشکر
    163
    تشکر شده 676 بار در 217 پست

    پیش فرض

    سلام.
    تا جائی که من یادمه بخشی برای تنظیمات dma تو کدویژن ندیدم که خودتون باید بصورت مستقیم(کار با رجیستر ها) و با کد نویسی کارتون رو انجام بدید در ضمن کار با dma مستلزم مهارت کافی است.

    در این زمینه بهترین راهنما همون کتابخونه های اماده atmel هستش که برای هر قسمت ارائه شده.(تو سایتش هست)

  7. #6
    کاربر فعال pooriya آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    پوریا علیزاده
    نوشته ها
    316
    تشکر
    163
    تشکر شده 676 بار در 217 پست

    پیش فرض

    سلام
    یه نمونه کد برای راه اندازی adc وdma میزارم امیدوارم که کارتو راه بندازه و طرز عملکرد این قسمت دستت بیاد.کد مورد نظر در avrstudio 4 نوشته شده
    کد:
    void adca_init(void)
    {
    
    // Free Running mode: On
    // Conversion mode: Unsigned
    ADCA.CTRLB=(ADCA.CTRLB & (~(ADC_CONMODE_bm | ADC_FREERUN_bm | ADC_RESOLUTION_gm))) |
    	ADC_RESOLUTION_12BIT_gc | ADC_FREERUN_bm;
    
    // Clock frequency: 62,500 kHz
    ADCA.PRESCALER=(ADCA.PRESCALER & (~ADC_PRESCALER_gm)) | ADC_PRESCALER_DIV512_gc;
    
    // Reference: AREF pin on PORTB
    // Temperature reference: On
    ADCA.REFCTRL=(ADCA.REFCTRL & ((~(ADC_REFSEL_gm | ADC_TEMPREF_bm)) | ADC_BANDGAP_bm)) |
    	ADC_REFSEL_AREFB_gc | ADC_TEMPREF_bm;
    
    // Read and save the ADC offset using channel 0
    // ADC0 pin connected to GND
    ADCA.CH0.CTRL=(ADCA.CH0.CTRL & (~(ADC_CH_START_bm | ADC_CH_GAINFAC_gm | ADC_CH_INPUTMODE_gm))) |
    	ADC_CH_INPUTMODE_SINGLEENDED_gc;
    
    ADCA.CH0.MUXCTRL=(ADCA.CH0.MUXCTRL & (~(ADC_CH_MUXPOS_gm | ADC_CH_MUXNEG_gm))) |
    	ADC_CH_MUXPOS_PIN0_gc;
    // Enable the ADC in order to read the offset
    ADCA.CTRLA|=ADC_ENABLE_bm;
    // Insert a delay to allow the ADC common mode voltage to stabilize
    
    delay_us(2);
    
    
    
    
    
    }
    
    void dma_init(void)
    {
    // DMA.CH0 aktivieren
    
    DMA.CTRL = DMA_ENABLE_bm;
    
    // reload source addr nach burst, incr src/des, reload dest end block
    DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc |  
    				   DMA_CH_DESTRELOAD_BLOCK_gc | DMA_CH_DESTDIR_INC_gc;// 0x95
    
    DMA.CH0.TRIGSRC   =  0x10; // ADCA CH0 is trigger source
    DMA.CH0.TRFCNT    =  12; // buffer size
    DMA.CH0.DESTADDR0 =  (((uint16_t)samples)>>0*8) & 0xFF;
    DMA.CH0.DESTADDR1 =  (((uint16_t)samples)>>1*8) & 0xFF;
    DMA.CH0.DESTADDR2 =  0;									
    DMA.CH0.SRCADDR0  =  (((uint16_t)0x224)>>0*8) & 0xFF; //(uint16_t)0x24;"high-byte" ADCA.CH0.RESH;
    DMA.CH0.SRCADDR1  =  (((uint16_t)0x224)>>1*8) & 0xFF; //(uint16_t)0x02;"low-byte" 	
    DMA.CH0.SRCADDR2  =  0;									
    // oder
    // (uint16_t)0x24; "low-byte "  oder (uint16_t) 0x10; ADCA.CH0.RESL; 
    // (uint16_t)0x02; "high-byte"  oder (uint16_t) 0x02; ADCA.CH0.RESH;
    
    // enable,repeat,single,2 byte burst
    DMA.CH0.CTRLA = DMA_CH_ENABLE_bm | DMA_CH_REPEAT_bm | DMA_CH_SINGLE_bm | DMA_CH_BURSTLEN_2BYTE_gc;//0xa5
    
    }

  8. تشکرها از این نوشته :


مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •