Gömülü Yazılıma MSP430 ile Başlamak

Mesut Topuzlu
5 min readMay 28, 2020

--

Merhaba sevgili okurlar ve gömülü yazılım geliştiricileri. Bu yazımda (aslında yayımladığım ilk yazım benim) sizlerle Texas Instruments ürünü olan MSP430 mikrodenetleyici (bazen kısaca işlemci diyorum ağız alışkanlığı) ailesinden bahsedeceğim.

MSP430, Texas Instruments (kısaca TI) firması tarafından piyasaya sürülen ve birçok alt öğesi olan 16-bit mikrodenetleyici ailesidir. Düşük güç tüketim modları, dahili analog karşılaştırıcı (comparator) birimleri ve uygulamaya yönelik seçilebilir osilatör vb. özellikleriyle günümüzde birçok projede yerini almış ve almaya devam etmektedir. Tabii bu özelliklerden hangisinin sizi daha çok cezbedeceği sizin uygulamalarınıza kalmış ki şahsen beni en çok cezbeden ve projelerimde kullanmama neden olan kısımları düşük güç tüketimi ve birazdan bahsedeceğim ferroelectric RAM (FRAM)’e sahip olmasıdır. Ayrıca, bazı modellerinde dahili segment LCD sürücüsü barındırır.

Yukarıda da bahsettiğim gibi MSP430 bir mikrodenetleyici ailesidir ve çeşitli özelliklerdeki birçok mikrodenetleyiciye sahiptir. Texas Instruments ürün isimlendirme politikasına göre konuşursak MSP430F ve MSP430G (F serisinin biraz özellik yoksunu) şeklinde başlayan denetleyiciler flash memory yapıya sahip olmakla beraber MSP430FR ile başlayanlar FRAM’e yapıya sahiptirler. FRAM yapısının ne olduğuna ve nasıl çalıştığına açıkçası burada çok fazla değinmeyeceğim. https://en.wikipedia.org/wiki/Ferroelectric_RAM ve http://www.ti.com/lit/ml/slat151/slat151.pdf linklerinden detaylı bilgilere ulaşılabilir. Basit olarak belirtmek gerekirse;

1. Non-volatile (yani geçici/uçucu olmayan) bir hafızadır.

2. Okuma/yazma hızı flash yapıya göre çok hızlıdır (ki SRAM o/y hızına yetiştiği iddia edilir).

3. Düşük güç tüketir.

4. En önemliside okuma/yazma ömrü (r/w cycle) çok çok fazladır (yaklaşık 100 trilyon kadar).

MSP430 birçok osilatör ve clock seçeneğine sahiptir. Kendi içerisinde CPU ve diğer çevresel birimlerine ACLK, MCLK ve SMCLK clock sinyallerini sağlar. Bu clock sinyalleri, ileride bahsedeceğimiz düşük güç modları (LPM) ile kapatılarak sistemin çektiği akım dolayısıyla güç azaltılabilir. Peki nedir bu clock sinyalleri?

ACLK (Auxiliary CLocK) : Düşük frekans ile çalışmayı talep eden çevresel birimleri beslemek için kullanılır. 10 KHz VLO veya 32.768 KHz düşük frekanslı harici bir kristal (LFXT) osilatöründen sentezlenebilir. Örneğin RTC (Real Time Clock) için ACLK güzel bir kaynaktır. En güzel taraflarından biri de LPM3 güç modunda çalışmaya devam edebilmesidir. Bu da RTC’un ACLK ile beslendiği durumda LMP3 moduna girilse dahi çalışmaya (daha doğrusu zamanı ilerletmeye) devam etmesi anlamına gelir. Düşük güç tüketimi gerektiren projelerde (özellikle pil/batarya beslemeli projeler) fazlasıyla kullanılır.

MCLK (Master CLocK): CPU ve sistemin genel clock ihtiyacını karşılar. VLO/LFXT, DCO veya destekliyor ise yüksek frekanslı kristal XT (ya da HFXT) ile sentezlenebilir.

SMCLK (Sub-system Master CLocK): Çevresel birimlerin (örneğin SPI, UART vb.) clock ihtiyacını karşılar. DCO veya XT ile sentezlenebilir.

Peki nasıl sentezleyeceğiz? Az önce bahsettiğim sistem clock sinyalerini sentezlemek için MSP430 bize aşağıdaki osilatör seçeneklerini sunmuştur;

VLO (Very Low-frequency Oscillator): MCU bünyesinde bulunan tipik 10 KHz frekanslı düşük güç tüketen internal (dahili) osilatördür. Herhangi bir pin veya kristal veya kapasitör bağlantısı gerektirmez. Dezavantajı sıcaklık vb. etkenlerle stabilitesinin bozulabilmesidir.

LFXT (Low-Frequency XTAL): Adından da anlaşılacağı üzere düşük frekanslı harici bir kristal ve (eğer gerekli ise) yük kapasitörleri ile ilgili pinlere bağlanması ile gerçekleştirilir. VLO ile karşılaştırıldığında oldukça stabildir ve zamanlama hassasiyetinin gerektiği devrelerde kullanılır. Düşük güç tüketir. Genel olarak 32.768 KHz kristal kullanılır.

DCO (Digitally Controlled Oscillator): Yazılımsal olarak frekansı ayarlanabilen dahili osilatördür. MCU’in yüksek frekanslar ile çalışmasını istiyorsak MCLK ve SMCLK clock sinyallerini DCO’den sentezleyebiliriz. Frekansı 16 Mhz’e kadar çıkabilmektedir.

XT (ya da HFXT (High-Frequency XTAL)): İlgili pinlere yüksek frekanslı kristal ve yük kapasitörlerinin bağlanmasıyla oluşturulur.

Yukarıda saydığım osilatör seçeneklerinin haricinde REFO ve MODOSC seçenekleri de mevcuttur. Fakat her mimaride bulunmayabilir. Aslında şimdiye kadar bahsettiğim ve bundan sonra bahsedeceğim her özellik mikrokontrolörden mikrokontrolöre farklılık gösterebilmektedir. O halde yapılabilecek en iyi şey genel konsepte aşina olunduktan sonra aradaki farkları referans dokümanları vasıtasıyla incelemektir.

Düşük güç tüketimi batarya/pil destekli uygulamaların olmazsa olmazıdır. TI bu konseptini “Low Power Mode” olarak isimlendirmiştir. Modlar ise LPMn {n : 0,1,2,3,3.5 ve 4.5} olarak gösterilir.

Aşağıdaki resimlerden de görüldüğü üzere her LPM modunun deaktif ettiği bir birim vardır. Peki LPM’u her zaman kullanmalı mıyım? Aslında bu tamamen uygulamanızın özelliklerine bağlı bir durum. Örnek vermek gerekirse diyelimki bir projeniz var ve proje bir şekilde şehir şebekesinden doğrultucular (trafo, SMPS vb.) yoluyla besleniyor. Burada hangi LPM moda girsem ne zaman uyutsam ne zaman uyandırsam diye düşünmezsiniz değil mi? (lakin her zaman düşük güç tüketimi ve enerji verimliliğini savunurum). Fakat projeniz şebeke voltajı ile değil de bir pil veya batarya grubu ile besleniyorsa ve de pil ömrünün çok uzun süre olması şartı koşulmuş ise mikroamper mikroamper hesap yapmak zorundasınız (tabii sistemin ne kadar güç tükettiği donanım dizaynı ile de doğrudan alakalıdır) Aşağıda hangi LPM modunda ne kadar akım çekildiği hangi birimlerin aktif/deaktif olduğu gösterilmiştir;

Peki nereden ve nasıl başlayacağız?

Evet bu kadar teorik bilgi yeter başlangıç için. Şimdi gelgelim kullanacağımız alet edevata.

1. Deney kiti: Gömülü yazılım dünyasına yeni adım atıyorsanız muhtemelen kendi tasarlamış olduğunuz bir test board elinizde yoktur. Her (neredeyse) mikrodenetleyici üreticisinin yaptığı gibi TI’in de ürettiği hazır deney kitleri çözüm olacaktır. Örneğin MSP430FR6989 mikrodenetleyicisi için MSP EXP430 FR6989 LaunchPad kiti piyasada satılmaktadır. Flash programlayıcı ve debugger donanımı dahili olarak kite entegre edilmiştir. Sadece USB kablo ile bilgisayara bağlamak yeterli olacaktır.

2. Geliştirme ortamı (IDE): Şimdi ihtiyacımız olan bir adet editör, derleyici (compiler), hata ayıklayıcı (debugger) bla bla… Peki hepsi bir arada olmaz mı? Olur. Code Composer Studio ya da kısaca CCS, TI tarafından üretilen tümleşik geliştirme ortamı (IDE). Peki ne yapıyoruz TI’in web sayfasından indiriyoruz ve bilgisayarımıza driver’lar ile birlikte kuruyoruz.

3. Driver, kütüphane ve örnek uygulamalar : TI bize CCS ortamına entegre edebileceğimiz üçüncü parti yazılımlar da sunar. Örneğin donanım soyutlama sürücüsü (driver lib) kullanarak MCU register’larının arasında boğulmadan kod yazabilirsiniz (yeni başlayanlara tavsiyem bu sürücüyü kullanmalarıdır. Spesifik bir MCU’e aşina olunduktan sonra isterseniz register seviyesinde daha sade kodlar yazabilirsiniz). Ayrıca IQ-Math sabit noktalı işlem kütüphanesi, DSP kütüphanesi vb. birçok kütüphaneyi örnekleriyle birlikte bize sunar. İşte tüm bunlar MSP430Ware çatısı altındadır. O halde ne yapıyoruz. MSP430Ware’i indirip bilgisayarımıza kuruyoruz.

4. Şimdi sıra geldi basit bir kod ile deney kitini test etmeye (test etmeden önce deney kitinin dokümanı dikkatlice okumanızı tavsiye ederim). CCS, eclipse tabanlı bir geliştirme ortamıdır ve eğer daha önce eclipse veya türevi bir IDE’i incelediyseniz yeni bir proje oluşturmak zor olmayacaktır. Burada adım adım proje oluşturma safhalarını anlatmayacağım açıkçası. İşlemcimizi ve derleyicimizi (TI veya GNU) proje oluşturma safhasında seçiyoruz. Ardından main.c dosyamıza aşağıdaki minik test kodunu yazıyoruz;

Evet yukarıdaki kodu (MSP EXP430 FR6989 kullandığımızı varsayıyorum) derleyip işlemciye yüklediğimizde board üzerindeki LED1 yaklaşık 1 saniye periyotlar ile (hiçbir clock ayarı yapılmamış ise default olarak işlemci clock frekansı 1 Mhz civarındadır. O yüzden 1000000 saykıl gecikme kaba olarak 1 saniye gecikmeye tekabül eder) yanıp sönmeye başlaması gerekir. Eğer bu oluyorsa buraya kadar en azından işlemciyi ayağa kaldırabilmişiz demektir.

Son olarak

Gömülü yazılım dünyasına MSP430 ailesi ile merhaba demek isteyenler için şimdiye kadar edindiğim bilgilerimi yazıya dökmek istedim. Ayrıca minik bir kod örneği ile işlemciyi kaba olarak ayağa nasıl kaldırırızı anlatmaya çalıştım. Unutulmamalıdır ki yukarıda anlatmaya çalıştığım özellikler işlemciden işlemciye farklılıklar gösterebilir. En güzeli işlemcinin datasheet dokümanı incelemek ve işlemciye özgü kod örneklerinden faydalanmaktır.

Mutlu ve huzurlu çalışmalar…

--

--