Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

DMA Nedir ?

Başlatan muhittin_kaplan, 16 Kasım 2012, 21:23:10

muhittin_kaplan

Bu Kısaltmayı 1996 yılında duymuş ve bir müddet çalışmıştım. 1116 adında büyük boy bir bilgisayarda Bulunan Kartın Adıydı DMAB, Direct Mem. Access Buffer.
Bazı Yan Cihazların Bu 1116 bilgisayarının hafızasına doğrudan erişmeyi Sağlıyordu.

Cortexlerde Ne iş yapıyor neden kullanıyoruz ?

SpeedyX

Mesela ben debug için kullandığım seri port çıkışını DMA ile yaptım, gönderilecek string bufferının adresini ve veri uzunluğunu 2 register a yazıp bir flag ı aktif ediyorum ve string gönderme programından çıkıyorum, o donanımsal olarak 115200 baud da gönderiyor. Bu sayede debug rutinleri ek zaman harcamıyor ve istersem interrupt içinde bile uzun stringler yazdırabiliyorum ;)
Ayrıca SPI dataflash a yazma rutinlerim de DMA kullanıyor, gönderilecek datayı verip işi DMA modülüne yıkıyorsun, kendi gönderip işlemleri yapıyor, istersen kesme ile yada flag ile sana haber de veriyor. Bunun dışında memcpy memset yerine de DMA rutinlerim var, onlar arka planda burst block transfer ile bir bloğu başka bir yere taşıyor veya değer veriyorlar, bu işlem için belli bir döngüde beklemek zorunda değilim.

speak48

memory<=>memory memory<=>donanım ve donanım<=>memory veri akışlarını cpudan geçmede bağımsız olarak yapmaya yarayan köprü diyebiceğimiz şeydir.

ben Scatter-Gather dma diye bir şey kullanmıştım cpu ile memoriye data yazdırıyodum sgdma da memorideki verileri sürekli monitöre basıyordu.

XX_CİHAN_XX

FSMC ile TFT lcd kontrolü yapıyorum. LCD ye gönderdiğim resim datalarını (const uint8_t tipindeki dizileri) DMA ile LCD ye basabilir miyim?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

hanibal

buffer transferlerinde software yükünü hardware e aktarır.
ne kadar esnekse  init ve control prosedürü o kadar karmaşık olur.

Elektroemre

Fat32 - SDCard işlemleri için ne zamandır elm-chan'in FatFs'sini STM32'nin DMA modülüyle kullanacak lib'i yazmak istiyorum kısmet olmadı.
Orta katmanlarda da değişiklik yapmak gerekecek gibi biraz uğraştıracak, ama sonra dadından yinmez  ::)

muhittin_kaplan

olayı biz cahil cüheda ekibin anlayacağı seviyeye indirgeyebilirmisiniz?

yamak

Hocam örneğin adc den gelen verileri seri porttan göndermek istiyorum.Normalde şu şekilde işliyo adc çevre biriminden gelen veriler işlemciye geliyo işlemci de verileri uart a yönlendiriyo. Ama dma kullanırsak adc dene gelen veriler işlemciye hiç uğramadan direkt uart a gidiyo.
DMA sız

ADC ------> CPU ------->UART

DMA lı

ADC----------->UART

Klein

Elinde bir dizi var. bunun tüm elemanlarını başka bir yere transfer edeceksi.
Örneğin usart ile göndereceksin.

Bunu yapmanın bi kaç yolu var.
Ya main loopta göndereceksin , loopa her girdiğinde veri gitmiş mi diye bakıp, gittiyse yeni veriyi TX registerine koyacaksın. Ta ki dizinin tüm elemanları gidene kadar.

Diğer yol, yukarıdaki işlemi TX kesmesi ile yapmak. Burada da mantık değişmiyor. Bir byte gittiğinde sana kesme geliyor, kesme rutinine girince , dizinin bir sonraki elemanını tampona yerleştiriyorsun. Dizinin tümünü gönderene kadar deva ediyorsun.

Üçüncü ve  en efektif yol ise, DMA kullanmak.
DMA'ya  diyorsun ki : Benim bir dizim var. Adresi bu, uzunluğu şu. Bunu Usart ile göndermek istiyorum.  Start veriyorsun. Dizinin tüm elemanları gönderilene kadar sana dokunmuyor. Sen o arada rahat rahat işini yapıyorsun.  Dizinin tümünün gönderilmesi bittikten sonra, DMA diyor ki , tamam. Bu iş bitti yeni işe hazırım.

Yemek yaparken, arada bir karıştırmaya gidip, pişmiş mi diye bakmak yerine, ne yemek istediğini hatuna söyleyip, televizyonun karşısında yemek hazır  çağrısını beklemek gibi bir şey.

Veli B.

MCU yu genel müdürlük ve DMA yı da şube müdürlüğü gibi düşünün Muhittin Hocam. Genel Müdür " şu iş için gereken malzemeleri alın ve üretin diyor". Şube müdürü gerisini yapıyor ve genel müdürün evrak işleri ile imza onay vb işlerle ilgili olarak zaman ayırmasına gerek kalmıyor.

muhittin_kaplan

Teşekkür ederim. yani Bilgi Bu Buraya Gidecek Diyoruz.
peki Bu bilgiye ekleme çıkarma vs işlemler yapmak istersek ?
0xAA bilgisini 0x05 ile toplayıp göndermek istersek ne oluyor ?

Klein

Hatun yemeği yaparken, arada bir gelip sizin yerinize kanalı da değiştirsin istiyorsunuz yani :)

kantirici

Merhaba, bende şunu merka ettim. Adc den gelen verileri dma ya atıp buradan seri iletişimle gönderecegiz ve program sırasında oluşan bir diziyide dma ile biryerlere taşıyacağız. Bu işlem tam olarak nasıl oluyor acaba, bu işlemler için ilgili registerler felan var herhalde.Mümkünse akış diyagramı tadına bir satır bilgi verebilirmisiniz, tam kafamda canlandıramadım da olayı.  :)

muhittin_kaplan

Alıntı yapılan: Klein - 16 Kasım 2012, 22:45:16
Hatun yemeği yaparken, arada bir gelip sizin yerinize kanalı da değiştirsin istiyorsunuz yani :)
Mesela Yeteneği Varsa (DMA kanal sayısıyla alakalı sanırım)
Yemek Yapsın, Ütü Yapsın, Çay Demlesin, Omzuma Maşaj Yapsın, Çocukla İlgilensin, Börek yapsın,
(Bilerek kasıtlı olarak 7 adet iş yazacaktım ama düşündüm düşündüm 6 da kaldım.)
7 adet değilmi DMA kanalı?

XX_CİHAN_XX

Hocam bildiğim kadarıyla bir defa da yanlızca bir dma kanalını çalıştırabiliyorsunuz. Yani hatuna işleri sırayla yaptırmanız gerek e tabi ona da yazık :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.