سلام
یه نمونه کد برای راه اندازی 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
}