2. ders hayırlı olsun ---konuyu arm öğreniyoruza açamıyorum o yüzden buraya açtım
https://www.youtube.com/watch?v=1NGsEaB2aCg&feature=youtu.be (https://www.youtube.com/watch?v=1NGsEaB2aCg&feature=youtu.be)
//ADC DMA1 1. KANAL
#define ADC1_DMA_MEMTOMEM_ENABLE hdma_adc1.Instance->CCR|=0x00004000 //memory to memory dma aktarimi enable
#define ADC1_DMA_MEMTOMEM_DISABLE hdma_adc1.Instance->CCR&=0xFFFFBFFF //memory to memory dma aktarimi dsable
#define ADC1_DMA_PRIORITY_LOW hdma_adc1.Instance->CCR&=0xFFFFCFFF //dma kanal onceligi secimi
#define ADC1_DMA_PRIORITY_MEDIUM hdma_adc1.Instance->CCR|=0x00001000 //dma kanal onceligi secimi
#define ADC1_DMA_PRIORITY_HIGH hdma_adc1.Instance->CCR|=0x00002000 //dma kanal onceligi secimi
#define ADC1_DMA_PRIORITY_VERYHIGH hdma_adc1.Instance->CCR|=0x00003000 //dma kanal onceligi secimi
#define ADC1_DMA_MEMORYSIZE_8BITS hdma_adc1.Instance->CCR&=0xFFFFF3FF //memoryden okunacak yazilacak bilgi boyutu
#define ADC1_DMA_MEMORYSIZE_16BITS hdma_adc1.Instance->CCR|=0x00000400 //memoryden okunacak yazilacak bilgi boyutu
#define ADC1_DMA_MEMORYSIZE_32BITS hdma_adc1.Instance->CCR|=0x00000800 //memoryden okunacak yazilacak bilgi boyutu
#define ADC1_DMA_PERIPHERALSIZE_8BITS hdma_adc1.Instance->CCR&=0xFFFFFCFF //peripheralden okunacak yazilacak bilgi boyutu
#define ADC1_DMA_PERIPHERALSIZE_16BITS hdma_adc1.Instance->CCR|=0x00000100 //peripheralden okunacak yazilacak bilgi boyutu
#define ADC1_DMA_PERIPHERALSIZE_32BITS hdma_adc1.Instance->CCR|=0x00000200 //peripheralden okunacak yazilacak bilgi boyutu
#define ADC1_DMA_MEMINC_ENABLE hdma_adc1.Instance->CCR|=0x00000080 //memory adres yukseltme enable
#define ADC1_DMA_MEMINC_DISABLE hdma_adc1.Instance->CCR&=0xFFFFFF7F //memory adres yukseltme disable
#define ADC1_DMA_PERIPINC_ENABLE hdma_adc1.Instance->CCR|=0x00000040 //peripheral adres yukseltme enable
#define ADC1_DMA_PERIPINC_DISABLE hdma_adc1.Instance->CCR&=0xFFFFFFBF //peripheral adres yukseltme disable
#define ADC1_DMA_CIRCULAR_ENABLE hdma_adc1.Instance->CCR|=0x00000020 //circular yani isi bittiginde basa donme modu enable
#define ADC1_DMA_CIRCULAR_DISABLE hdma_adc1.Instance->CCR&=0xFFFFFFDF //circular yani isi bittiginde basa donme modu disable
#define ADC1_DMA_READ_FROM_MEMORY hdma_adc1.Instance->CCR|=0x00000010 //memoryden okunup peripherale yazilacagini belirtme
#define ADC1_DMA_READ_FROM_PERIPHERAL hdma_adc1.Instance->CCR&=0xFFFFFFEF //periperalden okunup memoriye yazilacagini belirtme
#define ADC1_DMA_TRANSFER_ERROR_INTERRUPT_ENABLE hdma_adc1.Instance->CCR|=0x00000008 //transfer error interrupti enable
#define ADC1_DMA_TRANSFER_ERROR_INTERRUPT_DISABLE hdma_adc1.Instance->CCR&=0xFFFFFFF7 //transfer error interrupti disable
#define ADC1_DMA_HALF_TRANSFER_INTERRUPT_ENABLE hdma_adc1.Instance->CCR|=0x00000004 //half transfer interrupti enable
#define ADC1_DMA_HALF_TRANSFER_INTERRUPT_DISABLE hdma_adc1.Instance->CCR&=0xFFFFFFFB //half transfer interrupti disable
#define ADC1_DMA_TRANSFER_COMPLETE_INTERRUPT_ENABLE hdma_adc1.Instance->CCR|=0x00000002 //transfer complete interrupti enable
#define ADC1_DMA_TRANSFER_COMPLETE_INTERRUPT_DISABLE hdma_adc1.Instance->CCR&=0xFFFFFFFD //transfer complete interrupti disable
#define ADC1_DMA_NUMBER_DATA_TRANSFER hdma_adc1.Instance->CNDTR //kac data tasinacagini belirten register
#define ADC1_DMA_PERIPHERAL_ADDRESS hdma_adc1.Instance->CPAR //periperhalin adresini tutan register
#define ADC1_DMA_MEMORY_ADDRESS hdma_adc1.Instance->CMAR //memorynin adresini tutan register
#define ADC1_DMA_CHANNEL_ENABLE hdma_adc1.Instance->CCR|=0x00000001 //dma kanali enable
#define ADC1_DMA_CHANNEL_DISABLE hdma_adc1.Instance->CCR&=0xFFFFFFFE //dma kanali disable
uint16_t adc_value[10],y=0;
void ADC_CALIBRATION()
{
ADC1->CR2|=0x00000001;//adc yi baslat
ADC1->CR2|=0x00000008;//adc reset calibration yap
while(ADC1->CR2&0x00000008);//reset calibration olana kadar bekle
ADC1->CR2|=0x00000004;//adc calibrationi baslat
while(ADC1->CR2&0x00000004);//adc calibre olana kadar bekle
__HAL_RCC_DMA1_CLK_ENABLE();//DMA CLOCKU AKTIF ET
hdma_adc1.Instance->CCR&=0x00000000;//INIT ETMEK ICIN HERSEYI SIFIRLA
ADC1_DMA_MEMTOMEM_DISABLE; //MEMORYDEN MEMORYE AKTARIM KAPALI
ADC1_DMA_PRIORITY_LOW;//DMA ONCELIGI DUSUK
ADC1_DMA_MEMORYSIZE_16BITS; //MEMORYDEN 16 BITLIK TRANSFER YAPILACAGINI BELIRTIYORUZ
ADC1_DMA_PERIPHERALSIZE_16BITS; //PERIPHERALDEN 16 BITLIK TRANSFER YAPILACAGINI BELIRTIYORUZ
ADC1_DMA_MEMINC_ENABLE;//MEMORY OTOMATIK ADRES YUKSELTMEYI ACIYORUZ
ADC1_DMA_PERIPINC_DISABLE;//PERIPHERAL OTOMATIK ADRES YUKSELTMEYI KAPATIYORUZ
ADC1_DMA_CIRCULAR_ENABLE;//DMA CIRCULAR MODU ACIYORUZ
ADC1_DMA_READ_FROM_PERIPHERAL;//DATA TRANSFERININ PERIPHERALDEN MEMORYE YONLENDIGINI BELIRTIYORUZ
ADC1_DMA_NUMBER_DATA_TRANSFER=10;//KAC ADET DATA TRANSFERI YAPILACAGINI BELIRTIYORUZ
ADC1_DMA_PERIPHERAL_ADDRESS=(uint32_t) &ADC1->DR; //PERIPHERAL ADRESI
ADC1_DMA_MEMORY_ADDRESS=(uint32_t) &adc_value; //MEMORY ADRESI
/* DMA1_Channel1_IRQn interrupt configuration */
// HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);//DMA1 CHANNEL 1 INTERRUPT PRIORITY
// ADC1_DMA_TRANSFER_COMPLETE_INTERRUPT_ENABLE;//DMA1 TRANSFER COMPLETE INTERRUPT ENABLE
// HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);//DMA1 INTERRUPT ENABLE
ADC1_DMA_CHANNEL_ENABLE;//DMA KANALINI AKTIF EDIYORUZ
ADC1->CR2|=0x00000101;//adc yi dma ile baslat
}
Emeklerinize sağlık, güzel bir çalışma olmuş.
Adc ölçüm sonuçlarını DMA ile taşıma işemi biter bitmez DMA intrrupt u ile okuya bilirmiydik?.
Tek basına 1 kanal ADC örneği çok basit olur demişsiniz ama anlaşılabilirlik açısında daha iyi olurdu diye düşünüyorum.
videoların devamını bekliyoruz..
evet hocam dma transfer complete interruptini kullanarak dediğiniziyapabilirdiniz. Videonun sonundada belirttiğim gibi dma v.s herhalde biraz hızlı geldi. O yüzden dma kullanımını 2-3 ders sonraya bırakayım. Dma sız adc ve usartı anlatayım...
@sakara1214 hocam kütüphanenizde varsa , flash da bir bölgeyi eeprom gibi kullanmayıda anlatabilirmisiniz ?
Anlatacağım hocam hiç merak etmeyin😁 su an yurt dışındaki dönünce anlatacagim