#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ı…! -