• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Arm7 Nxp 2104 işlemci ile basit bir Uygulama

  • Posted by Kodedu
  • Categories Genel, Uncategorized, Yazılar
  • Date 11 Ekim 2011

 

ARM işlemcisi ( Acorn Risc Machine), Acorn firmasının lisansına sahip, bir RISC (indirgenmiş komut seti) mimarili işlemcidir. Gömülü sistemlerde özellikle cep telefonlarında ve tablet bilgisayarlarda sık olarak kullanılmaktadır. Birçok mikroişlemci üreticisi ARM işlemcisinin çekirdeğini kullanmaktadır.

RISC mimarili işlemciler, CISC ( karmaşık komut seti ) mimarili işlemcilere nazaran çok az sayıda komut setine sahiptir. Örneğin Arm işlemcilerin çekirdeğinde, çarpma işlemini icra edecek bir komut yoktur. Peki bu işlemci çarpma işlemini nasıl icra ediyor? ( cevap : toplama işlemini döngüleyerek. ) Makine dilinden  daha yüksek seviyeli dillere geçişte;

Makine dili > Assembly > C > C++ || Java

şeklinde bir geçiş söz konusu. Assembly dili ( asm ) Makine dilinin bir üstünde, makine dilini cover ederek, geliştiricilere daha kolay yazılım geliştirmeyi sağlıyor ( artık ne kadar kolay denirse.. ). Asm dilini mevcut işlemcinin makine diline çevirmek için ise her işlemciye ( bir mikrodenetleyici de olabilir) ait olarak geliştirilen Assembler yazılımlar kullanılıyor.

Her işlemcinin komut seti farklı olduğundan dolayı, geliştirici kullandığı işlemcinin Asssembly sözdizimini bilmek zorunda kalıyor. Buda geliştiriciye her bir aygıt için yeni bir Assembly sözdizimi öğrenmesini şart koşuyor. Bu tip problemlerden ötürü gömülü yazılım geliştiricileri C diline geçmişlerdir.  C dili çok güçlü bir dil ve yine C dilinde geliştirilen bir gömülü yazılım, mevcut Compiler (Derleyici)’ ın desteği düzeyinde, Assembly diline veya doğrudan o işlemcinin makine diline dönüşüm sağlayabiliyor. Fakat şunu bilmek gerekirki, dilin seviyesi arttıkça oluşturulan makine kodu uzamakta ve komutları koşturma süresi de buna mütakiben artmaktadır. Bir sonraki basamakta ise bizi C++ dili karşılıyor, bu dilin en büyük avantajı ise Nesneye yönelik programlamaya destek sağlaması.

Aslında C dili gömülü yazılım geliştirmek için fazlasıyla yeterli, fakat gömülü yazılım geliştiricileri neden C++ dilini de kullanıyor dersek (cevap : Büyük projelerde, kolay dökümantasyon avantajı ve kontrol edilebilirlik sağlaması diyebiliriz). Bir üst seviye yada yan seviye olarakta Java dili kabul edilebilir. Fakat şu anda core (çekirdek) seviyede Java dili pek tercih edilmiyor. JVM (Java Sanal Makinesi ) şu anda, genel olarak konak bir işletim sistemi üzerinde koşturulduğu için, gömülü bir işletim sistemi gerek görülmeyen projelerde, Java dilini istesekte kullanamıyoruz. Aslında doğrudan byte kodları donanım seviyesinde yorumlayan işlemcilerin varlığını da bilmek gerekir. Byte kodlar genel olarak donanım seviyesinde koşturulmadığı için, RTOS (Gerçek zamanlı işletim sistemi ) sistemlerinde Java’yı çok sevsekte kullanamıyoruz. Tabi ki zaman kısıtının çok önem arzetmediği projelerde Java’dan faydalanabiliriz. Burada Java dilinin en büyük avantajı  byte kodlarını JVM’in doğrudan makine diline dönüştürebilmesidir.

Bu yazımda incelemiş olduğum Arm7 Nxp 2104 işlemci ile basit bir yürüyen ışık göstermek istiyorum. Projede C dilini tercih ettim. Öncelikle devremizi Proteus da şekildeki gibi kuralım. ( Kaynak kodlar kısmından proje dosyalarına erişebilirsiniz. ) Proteus elektronik devrelerin simulasyonu amacıyla en çok tercih edilen yazılımdır.

Port 8-15 arasında renkli ledlerimizden ekliyoruz. V18 girişine 1.8 voltluk bir DC kaynak bağlıyoruz. V3 girişlerinede ismi üzere 3 er Volt uyguluyoruz. Simulasyon kısmımız bu kadar gelelim kod bölümüne. Derleyici olarak Keil Uvision 4 kullandık, ücretli bir derleyici, demo sürümünü deneyebilirsiniz. Kodları anlayabilmek için basit C bilgisi ve Hexadecimal-Binary sayı tabanlarını bilmek yeterli.

Main Code : X.c ;


#include <lpc210x.h> 

static int i;
int main (void)
{
//static int leds[] = { 0x0000,0x0100, 0x0200, 0x0400,
                        0x0800, 0x1000, 0x2000, 0x4000, 0x8000};
static int leds[] = { 0x0300,0x0C00, 0x3000, 0xC000};
IODIR |= 0x0000FF00; 
// 32 adet port mevcut ; 0000 0000 0000 0000 1111 1111 0000 0000
// 1' ler > input (giriş) , 0' lar > output (çıkış)

   while(1) {
  for (i=0;i<4;i++)
  {
      IOSET|=leds[i];
      delay(350000);
  }
  for (;i>=0;i--)
  {
        IOCLR|=leds[i];
        delay(350000);
  }
  }
}
int delay(int d)
{     
  for(; d; --d);
}

Başlangıçta lpc210x.h kütüphanesini projemize ekliyoruz. Bu olmazsa olmazımız değil fakat işlemciye ait tüm adres tanımlamaları burada hazır olarak bir değişkene tanımlanmış. Bu kod örneğimiz ikişer ikişer ledleri yakmakta ardından sona geldiğinde ise ikişer ikişer led’leri söndürmektedir. While(1) deyimiylede bu işlem makine pert olana kadar devam edebilecektir ( sonsuz döngü) :P . Ledlerimizi ( yani port adreslerini ) leds[] adında bir diziye atadık. IODIR ; lpc210x.h kütüphanemizdeki giriş çıkış adresini referans alıyor. Burada 0x den sonra 8 rakam içermekte her bir rakam 4 biti temsil ediyor en sağdan, yani low bit den başlarsak; İlk 8 bit 0 sonraki 8 bit 1 ve en son geriye kalan 16 bit ise 0 olarak tanımlanmış. Yani sadece 8. bit den 15. bite kadar olanlar aktif edilmiş. IOSET ledlerimize logic 1 uyguluyor, IOCLR ise logic 0, ve her yakıp sönme işleminden sonra 350000 ms bekliyor. Teker teker yanıp sönmesi içinde pasif olan leds tanımlamasını aktif edebiliriz ve tabiki döngülerdeki 4 rakamını 8 yapmalıyız. En sonda C kodlarını bir Hex uzantılı dosyaya derleyip Proteus da tanıtmalıyız. Bu işlemi ise Proteus projesi üzerinde, işlemciye çift tıklayarak yapabiliriz.

Şimdi ise lpc210x.h kütüphanesine göz atalım ;

Bu kütüphane olmazsa olmazımız değil demiştik. Fakat geliştiricilere ayrılmış tüm özel adres tanımlamalarına buradan kolayca erişebilmekteyiz.

Kütüphane dosyasında, entegremize ait birçok adres tanımalamaları mevcut MAM, Watchdog, RealTime Time Clock. Biz ise sadece GPIO ( General Purpose Input Output ) ,  yani Genel Amaçlı Giriş Çıkış bölümünü kullandık. Entegremizin hangi adreslemeleri kullandığını ise işlemcimizin datasheet‘ in den ayrıntılı olarak erişebiliriz..

Kaynak Kodlar

 

Tag:arm, keil, nxp, risc, yürüyen ışık

  • Share:
author avatar
Kodedu

Previous post

Sanal web browser - HtmlUnit
11 Ekim 2011

Next post

Atlassian' ın bulut bilişime sunduğu hizmetler..
26 Ekim 2011

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    1 Comment

  1. Mustafa Dinc
    9 Mart 2020
    Cevapla

    Doğrusu hazır çalışırda arm projesi bulmak zor, biz öğrenciler için, Gösterdiğiniz ilgi ve alakanız için bir öğrenci olarak çok Teşekkür ederim, Daha başarılı yaşamlar diyelim .

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Hafif bir Kod Editörü – Brackets
30Haz2012
Java’da Record’lar
27Oca2020
Reflection ile Dependency Injection nasıl gerçekleştirilir?
04Eyl2012
Integration of Spring MVC and Mustache
02Ağu2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.