Dma - WordPress.com

advertisement
#DMA Nedir?#
Bu konuya ilk olarak mp3 player projesiyle ilgilendiğimde girmiştim. Gördüğüm örnek
şemanın tasarımcısı 18lfxx serisi denetleyicilerden kullanmıştı. Aynı donanım özellikleri dışında 3.3v
olması sebebiyle tercih edildiği aşikardı. Bende Türkiye’de bu denetleyiciyi bulamayacağım
düşüncesiyle 18j25j50 ye yöneldim. Spi donanımını araştırırken data sheet içinde mssp diğer
kanaldan kullanıldığında spi dma olarak da kullanılabildiğinden bahsedildiğini gördüm. Dma Arm
çekirdeğine sahip birkaç denetleyicide de gördüğüm bir donanımdı. O zaman pek önemseyip de
araştırmamıştım ancak bu kez ilgimi çekti. Buradan anladığım kadarıyla bir şeyleri geçiştirip de
sonraya bırakmamak lazım. 
Dma (Direct Memory Access) güzel Türkçemize Direk Bellek Erişimi olarak çevrilmiş, oldukça
yetenekli bir yapı birimidir. Bu donanım arm çekirdeğine sahip denetleyicilerde de mevcut olmasına
rağmen biz Microchip’in güzel ve bir o kadar “gıcık” ürünlerinden olan Pic18F25J50’deki kadarını
inceleyeceğiz. En azından şimdilik.
Direk Bellek Erişimi (bundan sonra DBE yada DMA olarak anılacak) belleğe veri aktarımını ve
bellekten veri okumayı merkezi işlem birimini veri transferi sırasında devre dışı bırakarak işlemci
yükünü azaltan bir donanım birimidir.
Normal şartlarda bir adresten veri okumak istediğimizde yada veri yazmak istediğimizde
cpuyu o bellek adresine yönlendirir, orada yapmak istediğimiz işlemi (veri okuma/yazma) yapar cpuyu
tekrar diğer işlerimize yönlendiririz. Bu bizim için ekstra bir işlem yükü ve zaman demektir. Ki bu
durumu okuduğumuz veride hiçbir değişiklik yapmadığımız durumlar için düşünün. İşte bu durumun
önüne geçmek için bahsedilen modülü kullanıp okuma/yazma yapmak istediğim adres yollarını modül
kontrolüne bırakıyoruz ve modül işini bitirdiğinde kendisine tahsis edilmiş interrupt kaynaklarını
kullanarak bizi haberbar edebiliyor.
Bölüm: Register Düzeyinde DMA
Bu birimde spidan alınan verileri sram vasıtasıyla istenen adrese gönderilebiliyor. Bahsi geçen mcuda
iki adet spi donanımı mevcut. İlk spi kanalı bildiğimiz spi/i2c standartlarında bir donanım. Ancak ikinci
spi kanalı bizi çok farklı dünyalara açan özelliklere sahip bir donanım. Dma da bu kanalda.
-1
Muhammet YILDIZ! Bir Mekatronikçinin hatıraları…!
-
1. MSSP1 MODÜLÜ (MASTER
SYNCHRONOUS SERIAL PORT)
Bu modül seri iletişim arayüzünü
kullanarak denetleyiciyi diğer donanımlarla
haberleştiren bir seri iletişim portudur. İki
modda çalıştırılabilecek şekilde tasarlanmış
bu modül spi ve i2c modlarını destekler.
Burada i2cden pek bahsetmeyeceğiz. İşimiz
daha çok spi donanımıyla olacaktır.
Bu modülü kontrol etmek üzere denetleyici 3
adet kaydedici (register) barındırır. Bunlar bir
adet durum kaydedicisi (SSPxSTAT) ve iki adet
kontrol kaydedicisidir (SSPxCON1,SSPxCON2). Bu
kaydediciler kullanılarak Mssp modülü spi veya
i2c modda çalıştırılabilir. Spi mod; 8 bit senkron
seri veri aktarımını ve data alımını bütün modları
kapsayacak şekilde destekler.
1.1. Spi Bağlantı Pinleri
Spi bağlantısı için;
. Serial Clock (SCKx) RB4/KBI0/SCK1/SCL1/RP7 or SCK2/Remappable
. Serial Data In (SDIx) RB5/KBI1/SDI1/SDA1/RP8 or
SDI2/Remappable
Figür: Msspx Modülünün Spi Mod için blok diagramı.
. Serial Data Out (SDOx) RC7/RX1/DT1/SDO1/RP18 or
Burada dikkat edilmesi gereken bir nokta var. O da pin diagramında 1. kanal olarak görürken
SDO2/Remappable
yukarıda “remappable” ibaresine rastlıyoruz. Buradan çıkarmamız gereken aynı pinleri birinci
yada ikinci kanal olarak kullanabiliyoruz. Yani ikisinden birini seçmemiz
gerekli.
Pinleri kullanılmaktadır.
Slave modda
. Slave Select (SSx) –
RA5/AN4/SS1/HLVDIN/RCV/RP2 or
SS2/Remappable
Pini de kullanılmalıdır.
Bölüm: Register Düzeyinde DMA
kullanılmak istendiğinde
-2
Muhammet YILDIZ! Bir Mekatronikçinin hatıraları…!
-
1.1. Spi Mod İçin Kaydediciler
Mssp modülünün spi mod çalışması için dört adet kaydedicisi mevcut. Bunlar;
-
Mssp Control Register 1 (SSPxCON1)
Mssp Status Register (SSPxSTAT)
Serial Data Transmit/Receive Buffer (SSPxBUF)
MSSP Shift Register (SSPxSR) – Bu kaydedici direk erişilebilir değildir.
SSPxSTAT kaydecisinin düşük değerlikli 6 biti sadece okunabilir, yüksek 2 değerlikli biti ve
SSPxCON1 kaydedicileri okunabilir/yazılabilir kaydedicilerdir.
SSPxSTAT kaydedicisi;
Bölüm: Register Düzeyinde DMA
SSPxSR kaydedicisi veri alımında ve veri aktarımında verinin kaydırılmasında (sıradaki veriye
geçilmesinde) kullanılırken SSPxBUF kaydecisi veri yazmada ve okumada buffer olarak kullanılır.
-3
Muhammet YILDIZ! Bir Mekatronikçinin hatıraları…!
-
Bölüm: Register Düzeyinde DMA
Bu kaydedicideki bütün bitler spi donanımı için kullanılmıyor. 1-5 dahil arasındaki bitler i2c
modda kullanılan bitlerdir.
-4
Muhammet YILDIZ! Bir Mekatronikçinin hatıraları…!
-
Bu arada şunu da belirtelim ki pinlerimizden bazıları (SDOx ve SCKx) open drain yani açık kollektör
olarak seçilebiliyor. Bunun sebebi ise yüksek voltaj seviyelerinde gereken seviye dönüşümüdür.
Bu opsiyon aktif edildiğinde bahsi geçen pinler yüksek voltaj seviyesine pull up yapılır.
Aşağıda örnek bir kod mevcut. Veri aktarımı tamamlandığında bufferdaki veriyi rx e ve tx buffera
kopyalayan bir program örneğidir.
Bölüm: Register Düzeyinde DMA
SSPxCON1 Kaydedicisi;
-5
Muhammet YILDIZ! Bir Mekatronikçinin hatıraları…!
-
Bölüm: Register Düzeyinde DMA
512 Byte Spi Master Mod ve Donanım Kurulumu
-6
Muhammet YILDIZ! Bir Mekatronikçinin hatıraları…!
-
Bölüm: Register Düzeyinde DMA
-7
Muhammet YILDIZ! Bir Mekatronikçinin hatıraları…!
-
Download