
Merhaba Arkadaşlar,
Elektrik-Elektronik Mühendisliği bölümünde muhtemelen haberleşme derslerinden sonra en çok zorlanılan ders Mikroişlemciler dersidir. Karadeniz Teknik Üniversitesinde bu ders Texas Insturments (TI) firmasının geliştirdiği MSP430 işlemcisi üzerinden anlatılmaktadır. Programlama işlemi ise işlemcinin Assembly dili ile gerçekleştirilmektedir. Öğrencilik dönemimde araştırdığımda Assembly dili ile programlamanın anlatıldığı bir kaynak bulmakta oldukça zorlandım. Bu yazı serisinde kaynak oluşturması açısından temel olarak Assembly ile MSP430 programlamayı anlatmaya çalışacağım.
Assembly dili düşük seviyeli bir dildir. Bunun anlamı kodların insanın anlayabileceği yapıdan uzak olduğudur. Bu nedenle Assembly “Makine dili” olarak da adlandırılmaktadır. Biz de bu dili iyi anlayabilmek için öncelikle makinenin yani işlemcimizin çalışma şeklini temel olarak bilmemiz gerekmektedir. O zaman Şekil 1’de görülen MSP430’un blok diyagramını inceleyerek işe başlayalım.

Bu diyagrama ilk baktığımızda basitçe şu yorumu yapabiliriz;
“Bir sürü modül var. Bu modüller MAB ve MDB olmak üzere iki hat üzerinden birbirine bağlılar. Bütün yollar CPU’ya gittiğine göre müdürümüz o galiba. Bir de Clock System sol üst tarafta bir işler karıştırıyor gibi ama hadi hayırlısı” 🙂
Aslında bu yorumu yapabiliyorsak oldukça iyi bir başlangıç olduğunu söyleyebilirim. O zaman sırayla önemli modüllerin ne işe yaradığına değinecek olursak.
- Clock System bütün modüllere ihtiyacı olan clock işaretini sağlayan modüldür. Clock işareti işlemcimizin kalp atışları gibidir. Nasıl bizim kalp atışlarımız kanımızın damarlarımızda bir miktar ilerlemesini sağlıyorsa, clock işareti de işlemcinin bir sonraki komuta geçmesini sağlar. Ayrıca tüm modüller clock işaretine göre işlemlerini yaptığından dolayı senkronizasyon da clock işareti ile sağlanmış olur.
- CPU bütün modülleri bizim ona söylediğimiz şekilde yöneten modüldür. Örneğin bir ADC modülünün kaydedicisine bir değer yazarak (tabii kaydediciden daha bahsetmedim ama) girişindeki analog veriyi alarak sayısala dönüştürmeye başlamasını söyleyebilir.
- Flash ve RAM yapıları farklı olsa da iki modül de veri depolayan bellek bölgeleridir. Farklarına ileride değineceğim.
- Analog to Digital Converter (ADC) dışarıdan alacağımız analog veriyi sayısala dönüştüren modüldür.
- Port Px sayısal giriş veya çıkış sağlayabildiğimiz modüllerdir. Bu modüller sayesinde örneğin bir butondan gelen işareti okuyabilir veya bir LED’i yakıp söndürebiliriz. Tabii çok daha fazlasını da yapabiliriz.
- Universal Serial Communication Interface (USCI) seri haberleşme protokollerinin gerçekleştirildiği modüldür.
- Timer modülleri ise kendisine uygulanan clock işaretlerini sayarak zamana göre işlem yapmamızı sağlamaktadır. Örneğin bir clock periyoru 100 ns olsun. Timer’a 1000’e kadar saydıktan sonra bize haber ver dediğimizde bu 0,1 ms sonra işlem yapacağımız anlamına gelir.
Şimdilik modüller hakkında bu bilgiler yeterli. İşlemcinin nasıl çalıştığına gelecek olursak. Blok diyagramda bütün modülleri birbirine bağlayan Main Adress Bus (MAB) ve Main Data Bus (MDB) yollarını görüyorsunuz. İsimlerinden anlaşılabileceği gibi MAB üzerinden adresler, MDB üzerinden ise veriler iletilir. Her modülün kullandığı bir adres aralığı bulunmaktadır. CPU erişmek istediği modülün adresini MAB üzerinden tüm modüllere gönderir ancak sadece ilgili modül aktif olur. Daha sonra eğer ilgili modülün adresine veri yazmak istiyorsa bu veriyi MDB ile gönderir veya o adresteki veriyi okumak istiyorsa modülün yine MDB üzerinden ona veri göndermesini bekler. Aslında ne kadar basit değil mi? 🙂
Sıra bellek bölgelerine geldi. Şekil 2’de MSP430’un bellek haritası görülmektedir. Belleğin pek çok parçaya ayrıldığını görüyorsunuz ama korkmayın hepsiyle ilgilenmeyeceğiz. Şimdilik sadece Program ve RAM bölümlerini inceleyelim.

Bellek haritasına göre 05C00h-0FFFFh ve 10000h-45BFFh adresleri arasında yer alan Program bölümü işlemciye yapmasını söylediğimiz komutların yani yazdığımız kodların saklandığı bölümdür. Bu bölge yukarıda bahsettiğimiz Flash modülüne karşılık gelmektedir. Bu bölgeye programımız çalıştığı sırada herhangi bir yazma işlemi yapamıyoruz yani sadece yazılanları okuyabiliyoruz. 01C00h-05BFFh adresleri arasında yer alan RAM bölgesi ise programımız çalıştığı sıradaki yaptığımız işlemleri saklayabileceğimiz bellek bölgesidir. Ancak bu adresler tüm MSP430 türlerinde aynı değildir. Bu adresleri öğrenmek için kendi işlemcinizin datasheet’ini incelemeniz gerekmektedir. İlerleyen derslerde bu adreslere ve içerisine neler yazabileceğimize detaylı olarak geleceğiz. Daha bu giriş dersi acele etmeyin 🙂
Son olarak kaydediciler (registers) konusundan bahsedelim. Kaydediciler içerisinde bilgi saklayan elemanlardır ve sakladıkları bilgilere göre adlandırılırlar. Anlaşılması açısından CPU’nun bazı önemli kaydedicilerinden örnek verecek olursak.
- Status Register (SR, Durum Kaydedicisi) gelen olarak işlemcinin son durumu hakkındaki bilgileri saklar. Bunlar bir işlemin sonucunun sıfır, negatif, eldeli olması, işlemcinin çalışma modlar (uyku, düşük güç vb.) ve taşma olup olmadığı durumlarıdır.
- General Purpose Registers (R4- R15) istediğimiz herhangi bir veriyi saklayabileceğimiz genel amaçlı kaydedicilerdir.
- Program Counter (PC) işlemi gerçekleştirilen komutun program belleğin hangi adresinde olduğu bilgisini saklayan kaydedicidir.
Bu kaydediciler gibi her modülün farklı bir görevi olan kaydedicileri bulunmaktadır ve tüm kaydedicilerin de bir adresi vardır. CPU bu adresler yardımıyla ilgili modülün ilgili kaydedicisine erişebilmektedir. Kaydediciler konusunda da şimdilik söyleyeceklerim bu kadar. Şimdilik 🙂
Bence pek çok şeye değindiğimiz güzel bir giriş yazısı oldu. İlerleyen dersleri anlamanız açısından bu yazının çok önemli olduğunu belirtmek isterim. Yani bir sonraki yazıda görüşene kadar kendinize iyi bakın ve sıkı çalışın efendim. 🙂
emekleriniz için teşekürler
Faydalı olabildiysem ne mutlu 😊
Çok açıklayıcı ve anlaşılır hazırlanmış bir içerik, teşekkürler
Yorumunuz için teşekkür ederim. Faydalı olabildiysem ne mutlu bana 😊
başka kaynak yok yeminle