Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: justice_for_all - 17 Haziran 2015, 12:46:08

Başlık: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: justice_for_all - 17 Haziran 2015, 12:46:08
Merhaba arkadaslar ADC nin iki kanalından ölçülen değeri DMA ile  iki pwme ayrı ayrı atmanın bir yolu varmı? ben suan ADC -> DMA -> PWM tekli olarak yapabiliyorum ama bana

ADC 1. kanal -> DMA -> PWM kanal1 duty
ADC 2. kanal -> DMA -> PWM kanal2 duty

yapmak istiyorum.Hiç Çalışsan oldumu bu konu ile ilgili.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: MrDarK - 17 Haziran 2015, 12:48:58
Aynı anda yapmak yerine 1.nin işi bittikten sonra 2.ye kaydırıp atamaz mısın ?
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: justice_for_all - 17 Haziran 2015, 12:51:22
Benim maksadım ben programda CPU ya iş yüklememek. DMA halletsin o işi istiyorum.

mesaj birleştirme:: 17 Haziran 2015, 13:43:06

Galiba şu şekilde olabilir duty 1 ve duty 2 register adreslerine baktım ardışık (aradaki fark 32 bit).DMA ile peripheral increment yaparsam data size 32 bit yaparsam şu şekilde olur.

DMA ADC kanal 1. okudu duty1 e aktardı sonra peripheral adresi 1 arttırdı.artık yazılacak adres duty2 nin adresi oldu .
DMA ADC kanal 2 yi okudu duty2 ye aktardı işlemi bitirdi.

Siz ne düşünüyorsunuz bu konuda?
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: MrDarK - 17 Haziran 2015, 13:46:21
Olması lazım söylediğiniz gibi. Denemek lazım.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: justice_for_all - 17 Haziran 2015, 13:48:30
Ben şuan işyerinde olduğum için deneyemiyorum akşam denerim artık hocam.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: CLR - 17 Haziran 2015, 13:55:59
Alıntı yapılan: justice_for_all - 17 Haziran 2015, 12:51:22
Benim maksadım ben programda CPU ya iş yüklememek. DMA halletsin o işi istiyorum.

Bu söylediğin kısmen doğru, dma işi halleder ama cpu'nun zamanından çalarak halleder, yani dma'nın kendine ait bus'ı olmadığı için cpu ve dma aynı bus'ı kullanır. Dma sadece seni periyodik iş yükünden kurtarır.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: z - 17 Haziran 2015, 15:22:50
Emin olarak mı konuşuyorsun?

Dediğin olabilir de olmayabilir de. ARM işlemcilerde araştırmadım ve dediğin gibi olacağını sanmıyorum. Daha doğrusu ARM işlemciye bunu yakıştıramam.

DMA donanım tasarımında bir kaç yol var.

Birincisi dediğin gibi DMA aktifleştiğinde işlemciyi susturmak.

Diğeri Bus'ın aktif olmadığı anlarda DMA transferi yapmak.

CPU atıyorum CLK=1 iken bus'ı kullanırken DMA de CLK=0 iken bası kullanması gibi.

Neye dayanarak söyledin bunu?
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: CLR - 17 Haziran 2015, 20:57:33
Emin olarak konuşuyorum tabii ki,  işlemleri "tam olarak" paralel yapmıyorlar, aynı data bus'ı kullanan dma ve cpu  görev paylaşımlı çalışır daha doğrusu round robin algoritmasına göre çalışırlar ama dma daha önceliklidir.
Aşağıda açıklıyor.



When the DMA is transferring the data. the main CPU is free to do the work for some other process.
This forms the basis of multiprogramming. But there is a hitch in this scheme. Exactly at the time when
the DMA is using the data bus. the CPU cannot execute any instruction such as LOAD or STORE which
has to use the data bus. In fact. if the DMA and the CPU both request the data bus at the same time, it is
the DMA which is given the priority. In this case. the DMA 'steals' the cycle from the CPU. keeping it
waiting. This is why it is called cycle stealing. The CPU. however. can continue to execute the
instructions which involve various registers and the ALU while the DMA is going on.



Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: z - 17 Haziran 2015, 21:07:29
Nadiren DMA kullansam da ARM'a yakıştıramadım.

Halbuki aynı zamanda bus'ı kullanabilen yapılar mevcut. Belki mimariden kaynaklanıyordur.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: CLR - 17 Haziran 2015, 21:29:37
DMA'nın özel bus'ı varsa öyledir, . Daha farklı birşey söylüyeyim.

iki dma'yı aynı anda kullanırsan(dma1 ve dma2) ayrıca cpu (hepsi anda bus isteği yaparsa)  bu durumda hangi dma diğerine göre öncelikli ise(DMA1) o burst modunda çalışır yani diğer dma2 ve cpu bekler, sonra iş bitince, dma1 susar, diğerleri(cpu ve dma2) bus stealing modunda çalışır(önceki mesajımdaki gibi).
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: Karamel - 17 Haziran 2015, 21:47:32
Hocam oyleyse code lari dma ile calistirmak ile normal calistirmak arasinda pekte fark yok?
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: CLR - 17 Haziran 2015, 22:08:04
Arkadaşın konusu dağıldı kusura bakmasın.

Var, mesle st işlemcilerde çok kanal adc okuma var, hatta her okuduğun kanalın data buffer'ı var, mesela 4 kanal okusan 4 data buffer olsa toplam 16byte data yapar, bu okumaları continuous modda yaparsan, dataları manuel bir yere transfer etmeye kalkarsan yetiştiremezsin, yeni datalar öncekilerin üzerine yazılır ama dma ile yaparsan yetişir, 

adc veya diğer modülleri dma'yı birkez ilişkilendirisen sürekli çalışır, manuel yapmaya çalışırsan çok iş yükü olur ve manuel yaparak çok cycle kaybedilir.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: z - 17 Haziran 2015, 23:49:03
Bus ile alakalı değil. İki bus olsa bu kez Ramın da çift portlu olması lazım.

Daha önceki mesajımda dediğim gibi system clogun 1 ve 0 ında sıra ile kullanan MCU lar var. Fakat demekki ARM da bu mümkün değil.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: CLR - 18 Haziran 2015, 00:21:11
Arm'da bus'la alakalı, merak edip diğer işlemcileri veya yüksek seviyeli işlemcileri incelemedim ama mesela stm32f4'de cpu/dma/ethernet/dma1-2 controller'lar aynı databus'ı kullanıyor ama onda "multilayer bus matrix" denilen bir sistem var, bus switching yapıyor. Yani controller'dan cpu veya diğer controller'a yol verilirken bekleme süreleri var.   
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: z - 18 Haziran 2015, 00:30:03
Demek istediğim Ram ile bağlantılı DMA işlemi yapılacaksa ikinci bir bus avantaj getirmiyor.

DMA ve CPUnun rama erişmek istemeleri durumunda ikinci bus tek başına yeterli değil Ramin da çift kapılı olması lazım. Bu da astarı yüzünden pahalı olur.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: justice_for_all - 18 Haziran 2015, 08:13:49
Alıntı yapılan: CLR - 17 Haziran 2015, 22:08:04
Arkadaşın konusu dağıldı kusura bakmasın.


yok hocam olurmu öyle şey bişe daha öğrendim sayende.
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: mistek - 18 Haziran 2015, 08:37:26
Alıntı yapılan: CLR - 17 Haziran 2015, 13:55:59
Bu söylediğin kısmen doğru, dma işi halleder ama cpu'nun zamanından çalarak halleder, yani dma'nın kendine ait bus'ı olmadığı için cpu ve dma aynı bus'ı kullanır. Dma sadece seni periyodik iş yükünden kurtarır.



DMA kullanım oranı %100 olursa CPU %0 olacak yani hiç kod işlenmeyecek. DMA şu kadar süreden fazla BUS'ı meşgul edemez gibi bir sınırlama var mı acaba?
Bütün donanımlara dma görevlendirirsem CPU ne kadar zaman kaybedeceğini nerden öğrenebiliriz?
Başlık: Ynt: STM32F030 ADC + DMA + PWM ile ilgili bir soru
Gönderen: CLR - 18 Haziran 2015, 10:43:42
Dma kullanımı %100 olması için dma1 controller dma2 controller ve cpu aynı anda istek yapmalı çoğu durumda %100 olmaz round robin algoritması kullanılır st'de bu 1 cycle dma 1 cycle cpu çalışır şeklindedir yani %50 diyebiliriz