STM32F103C8 DMA transfer hızı neden düşük? Ben mi hata yapıyorum?

Başlatan z, 22 Kasım 2015, 16:06:28

z

72Mhz de koşturulan işlemcimde bus frekansları 72 Mhz.

En yüksek öncelikte DMA ile "RAM"dan "GPIO"ya veri aktarımında 1 byte verinin yaklaşık 0.15 us de aktarıldığını ölçüyorum.

Bu değer bana yavaş geldi.

Hata mı yapıyorum. Veri aktarım hızını araştıran oldumu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

magnetron


yldzelektronik

@z nasıl ölçüm yapıyorsunuz?

Veri almayı başlattığınız yerde timer başlatıp veri kopyalandı isr içinde timer ölçerek mi?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

X-Fi

Hocam DATA BUS üzerinde CPU, DMA'dan daha yüksek önceliğe sahiptir. Bus stealing yapıldığına göre CPU ram haberleşmesi için DATA BUS'a çıkıyor ise DMA işlerinde gecikme yaşanılır. Yavaş görmenizin sebebi o andaki CPU'nun işlevi olabilir.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

z

DMA veri aktarımı yaparken CPU'yu boş boş sonsuz döngüde tutuyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Peripheral - dma aktarımında ST dökümanına göre  8 veya 9 clk gerektiği  yazıyor, clk hızı 72Mhz ise total 125ns yapar ki bu da doğru ölçtüğünü gösterir.

Knowledge and Experience are Power

z

Dokümanlar kabarık ve sayıca çok olunca gözden kaçabiliyor.

Hangi dokumanda ve kaçıncı sayfada yazıyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Using the STM32F1x and STM32L1x DMA controller,
Bölüm 2.3,
sayfa 5/12
Knowledge and Experience are Power


z

Ramde bekleyen 1KByt verim var. DMA'yi kurdum ve Enb yaptığımda soft start vermiş oluyorum ve 1K verim hedefe gidiyor.

Bu start verme işlemini soft olarak değil de timer ile vermek istiyorum. Timerın ilk update işlemi gerçekleştiğinde 1Kb veri transferi başlarmı anlayamadım.

Timerın her update'inde bir 1 byte mı gider?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Dma data boyutunu ve data counter'a kaç yazdıysan o kadar gider
Dma data boyutu 1 byte ise ve dma counter 1 ise 1 byte gider, data boyutunu 32bit yaparsan dma counter max 1024/4 olmalı.(1Kb için)
Knowledge and Experience are Power

Klein

Alıntı yapılan: z - 23 Kasım 2015, 10:32:44
Ramde bekleyen 1KByt verim var. DMA'yi kurdum ve Enb yaptığımda soft start vermiş oluyorum ve 1K verim hedefe gidiyor.

Bu start verme işlemini soft olarak değil de timer ile vermek istiyorum. Timerın ilk update işlemi gerçekleştiğinde 1Kb veri transferi başlarmı anlayamadım.

Timerın her update'inde bir 1 byte mı gider?
Yok hocam. 1K ayarladıysan 1K gider.

z

Timer registerlerin açıklamalarının yapıldığı bölümde en son kısımda Timer'ın DMA ile ilgili registerlerinden hiç bir şey anlamadım.

Bu kısmın daha detaylı ele alındığı bir doküman biliyormusunuz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Daha detaylı bir doküman bilmiyorum.
Anlamadığınız kısım  hangisi?