Şuan geliştirdiğim bir gömülü sistem uygulamasında beyin olarak kullanmak üzere aldığım LPCXpresso kitine giriş niteliğinde bir göz atıp hem kiti hem Cortex-M3 işlemci çekirdeğini hemde LPC1768 işlemcisini yüzeysel olarak inceleyelim. LPCXpresso kitleri şuan için LPC1100, LPC1300 ve LPC1700 ailelerinden işlemcileri desteklemektedir. Benim kullanmış olduğum kitin işlemcisi LPC1768 dir. Kitin genel yapısı aşağıdaki şekil ve fotoğraflarda gözükmektedir.
LPCXpresso ürünü bir çok firmanın ortak çalışmasıdır. Cortex-M3 çekirdeğini ARM firması üretmekte, Philips NXP firması işlemciyi üretmekte ve LPCXpresso ürünlerini pazarlamakta, baskı devre tasarımı ve dizaynını Embedded Artists (isimlerine bayılıyorum :) ) firması yapmakta ve son olarak yazılım geliştirme platformunu Code Red firması geliştirmekte ve NXP ile birlikte yazılım desteği vermektedir. Yani bu üründe dört adet firma çalışmaktadır. İlk düşünüşte insanın gözü korkmuyor değil acaba bu ürünün fiyatı nedir diye, ama şaşırmak için okumaya devam edin :) Kit “Link” ve “Target” olmak üzere iki kısımdan oluşmaktadır. Link kısmı target kısımdaki hedef işlemcimizi programlamak, debug etmek üzere kullanılmaktadır ve üzerinde LPC3154 ARM9 işlemcisi vardır. Dört firmanın kar marjı, baskı devresi ve kit üzerindeki elemanların maliyetine rağmen ürünün fiyatı sadece €20 dur :) Yukarıdaki şekillerde kitin genel yapısı, link ve target kısımları görülmektedir.
Kit bir zarf içerisinde ve yanında sadece aktivasyon kodu ile birlikte gönderilmektedir. Şatafatlı bir kutu,CD veya kağıt dökümantasyon hayali kurmayın :) Hatta maliyeti bu kadar düşürebilmek için usb kablosu bile koymamışlar :) Link kısmındaki usb konnektörü için “Mini-B” kablo kullanılmaktadır. Şanslıysanız eğer bazı cep telefonlarının ve dijital kameraların kablosu kite uymakta :). Kitin şematik çizimlerine şu linkten ulaşabilirsiniz. LPCXpresso 1768 Schematic
Kullanılan IDEyi http://lpcxpresso.code-red-tech.com/LPCXpresso/ adresinden indirebilirsiniz. Şuanki son versiyonu 3.5.0.206 dır. Bunun için linkten kaydınızı yaptırmanız gerekmektedir. Üye olurken kullandığınız mail adresinize kullanıcı adı ve şifreniz gönderilmektedir. Daha sonra siteye giriş yaptıkdan sonra IDEyi indirebilirsiniz. Boyutu 156MB dır ve Eclipse tabanlı bir IDE dir. IDEyi indirdikten sonra aşağıdaki ekrandan kitle beraber gelen aktivasyon kodunuzu girerek ürününüzü aktif hale getirebilirsiniz. Aktif hale getirmedende 8K sınırlamalı evaluation olarak çalışmaktadır. WinXP, Vista, Win7 ve Linux kopyalarında çalışmaktadır. Ayrıca bu IDE ile çalışmanız şart değildirdir, elinizde Keil uVision, IAR gibi IDEler varsa uygun donanımla kiti istediğiniz gibi kullanabilirsiniz.
Cortex-M3
Şimdi Cortex-M3 çekirdeğine bir göz atalım. Cortex işlemciler için önemli gördüğüm noktalardan birtanesi CMSIS tir. Orjinal ismi “Cortex Microcontroller Software Interface Standard” tır. Türkçesi Cortex Mikrodenetleyici Yazılım Arayüzü Standartı dır. Yani cortex çekirdeğine sahip işlemciler üzerinde, üreticiden ve çipten bağımsız olarak basit bir şekilde gerçek zamanlı işletim sistemi kullanabileceğiniz, işlemcinin basit çevresel birimlerini kontrol edebileceğiniz, kütüphane diye nitelendirebileceğimiz yazılım topluluğudur. Ethernet, USB, MMC/SD gibi daha gelişmiş uygulama desteği geliştirilmektedir. Ayrıntılı bilgiyi ve dosyaları www.onarm.com sitesinden temin edebilirsiniz. Çok iddaalı amaçları var :)
Cortex-M3 çekirdeğine dönecek olursak üretim teknolojilerine ve çekirdek versiyonlarına göre 275Mhz frekansa çıkan modelleri vardır. Bizim kitin işlemcisi maksimum 100Mhz de çalışmaktadır ve Dhrystone daki oranı 1.25 tir. Yani 100Mhz frekansta işlemci 125 milyon işlem / saniye olarak çalışmaktadır. İşlemcide hızdan çok işlemci teknolojilerine önem vermişimdir. Bu yüzden M3 pipeline yapısını diğer önemli bir özellik olarak görüyorum. Pipeline nedir diyecek olursanız komutları hafızadan alıp işlemcinin işleyebileceği hale sokan bir yapıdır. Her komut okuma, çözme ve çalıştırma evresinden geçmektedir. Pipeline bu evreleri paralel hale getirerek yüksek performans artışı sağlamaktadır. Pipeline’ın sağlıklı bir şekilde çalışması için kod içerisinde dallanma yapılmaması gerekmektedir. Aksi halde dallanmalarda pipeline boşaltılır ve ilgili adresten itibaren tekrar doldurulmaya başlanır.M3 çekirdeğinin pipeline’ının ne özelliği var diyorsanız, program içerisinde fonksiyon çağrımı gibi dallanma yapılan noktalarda dallanmanın önceden hangi adrese yapılacağı tahmin edilmektedir :) Yani siz bir fonksiyon çağrımı gerçekleştirdiğinizde pipeline boşaltılmaz, ilgili adresten itibaren doldurulmaya devam edilir.
Önemli gördüğüm bir diğer özellik ise geliştirilmiş Thumb-2 teknolojisi ile 8 bit ve 16 bit işlemler için kod boyutunun düşerken hız olarak performansın artmasıdır. Normalde işlemci 32bitlik ARM komut setini kullanmaktadır fakat 16 bitlik thumb komutları ile kod boyutundan tasarrurf edebiliriz. İlgili yazıma www.barissamanci.net/Makale/10/arm-ve-thumb-komut-setleri/ linkinden ulaşabilirsiniz. Aşağıdaki şekilde 8 ve 16 bit işlemler için M3 ün kod boyutu bakımından diğer işlemciler ile karşılaştırılmasını görebilirsiniz.
Yine aynı şekilde 16 bitlik bir çarpma işlemi için arkaplanda 8/16/32 bitlik işlemciler için ne işler dönüyor bir bakalım. 16bitlik çarpma işlemi için assembly komutlarını aşağıdaki şekilde görebilirsiniz.
Çekirdeğin diğer özellikleri ise debug yaparken 8 berakpoint, 4 watchpoint desteği vermesi, güç kazancı için 3 seviye uyku modu, 240a kadar çıkabilen kesme kaynağı ve Mips başına 3.75mW güç tüketimidir. Yani tam gaz çalışmak isterseniz çekirdek 468.75mW güç tüketmektedir :)
LPC1768
Şimdi LPC1768 in özelliklerine bakalım. İşlemci için dataheeti bu linkten indirebilirsiniz.User Manual LPC17xx. Yazının başında bahsettiğim gibi bu işlemciyi gömülü sistem uygulamamda kullanmayı planlıyorum. Bu yüzden şahsi olarak benim için ön plana çıkan 2 adet donanım var :) Bunlardan ilki QEI ( Quadrature Encoder Interface ), ikincisi ise MCPWM ( Motor Control PWM ) dir. MCPWM donanımı motor sürmek için özelleştirilmiş bir PWM donanımıdır ve AC/DC üç faz desteği vermektedir. QEI donanımıyla ise gelen sinyallere göre motorun konum bilgisini, dönüş yönünü ve dönüş hızını işlemciye geribesleme olarak almayı düşünüyorum. Bu iki donanım kullanılarak çok güzel bir kapalı sistem yapılabilir :)
Gözüme çarpan diğer özelliklerden biri ise donanımsal olarak (NVIC) iç içe kesme desteği vermektedir. Daha önce kullanmış olduğum ARM serisi işlemcilerde iç içe kesme desteği yazılımsal olarak verilebiliyordu. Buda kesmelere verilen yanıtın hızını düşürdüğünden bir miktar kayıp yaratıyordu. Tek çip üzerinde USB host, USB device ve USB OTG desteği verilmiş ve etkili DMA kullanımları var. Gelişmiş USB uygulamaları için gayet iyi.
Bu işlemcide beni memnun eden diğer bir özellik ise gerçek zamanlı işletim sistemi veya işletim sistemi benzeri kodlar çalıştırmak için özelleştirilmiş System Tick Timer donanımının olmasıdır. Bu donanım benim yazılımsal olarak yaptığım işi üstlenmektedir :) daha önce yazmış olduğum ilgili yazıya bu adresten ulaşabilirsiniz Mikroişlemcili Sistemlerde Cooperative Multitasking Çalşma Biçimi ve Görevlerin Zamanlanması.
Geri kalan donanımlar standarttır ve önceki kullanmış olduğum ARM işlemcilere göre ufak farklılıklar vardır. Örneğin ADC ve DAC donanımlarının çözünürlüğü 2 bit arttırılarak ADC için 12 bit, DAC için 10 bit yapılmıştır.Çektiğim fotografları ekleyerek ve kalan standart çevresel birimleride toparlayarak bu yazıyı burda bitirelim :)
- 512Kb Flash, 64Kb SRAM
- 10/100 MAC - Ethernet (RMII, MIIM)
- USB2.0 Host, USB 2.0 Device, USB OTG
- Dört adet UART ( UART1 modem destekli )
- İki adet CAN denetleyicisi
- SPI,iki adet SSP,üç adet I2C ve I2S
- Dört adet timer, RTC, Watchdog
- 6 adet PWM
- ADC 12 bit, DAC 10 bit
- JTAG, SWD, ISP, IAP