ADC & DMA aktarma süresi hesabı ?

Başlatan seyityildirim, 25 Ocak 2017, 16:37:51

seyityildirim

ADC + DMA kullanarak yazdığım bir kodda aktarma sürelerini, adc değerinin ne kadar sürede yazılımdaki değişkeni etkilediğini nasıl hesaplayabilirim ? veya debug yaparken görebilir miyim ? Başka bir yöntem var mı ?

Klein

Yazılımdaki değişkeni etkilemekten kasıt nedir?
Çevirim başladıktan sonra ne kadar süre içinde değişkene yazıldığını mı öğrenmek istiyorsunuz?
DMA için hesap biraz zor olabilir. DMA CPU ile bus paylaşıyor. O yüzden kesin hesap zor olabilir. ADC çevirim süresi de kesin olmamakla birlikte hesaplanabilir.
Ama sizin istediğiniz sanırım hesaplamaktan ziyade, ölçerek görmek.

Çevirim başlarken timer başlatıp, TC kesmesi geldiğinde sayıcıyı durdurup değeri görebilirsin. Fakat kesme giriş süreleri, veriyi oluma süresi gibi etkenler nedeniyle ölçüm sonucun çok yanlış çıkacaktır. Muhtemelen DMA'nın transfere başlayıp bitirme süresi kesmeye girme sürenden daha kısa olacaktır.

Şöyle bir senaryo olabilir.
ADC çevirimini Timer başlatır. Böylece timer başlangıcı ile ADC çeviriminin başlangıcı senkron olur. İşin bu kısmı kolay. Fakat Transfer bittiğinde Timer nasıl durdurulur? onun için biraz datasheet karıştırmak gerekebilir.

seyityildirim

@Klein hocam, yazılımdaki değişkeni etkilemekten kasıt dediğiniz gibi çevirim başladıktan sonra ne kadar süre içinde değişkene yazıldığını mı öğrenmek.

İlla ölçeceğim diye bir kısıtlama yok. Teorik olarak bilmek yeterli.

Adc için zaten kaç çevrimde biteceği datasheet te mevcut.

Dma için ise şimdi bulduğum bir sitede şöyle geçiyor:

DMA takes 5 AHB bus cycles for single word transfer between memory – three of them are still left for CPU access. This means that DMA only takes maximum 40% of buss time

Sanırım ADC çevrim süresine 5 AHB çevrim süresi eklesem buluyorum.

Klein