ARM nedir....?

Başlatan Andromeda, 11 Ekim 2011, 11:40:40

Andromeda

Başlıklara baktım ama ,ben mi bulamadım.......
Entegre  mi, PIC mi, kit mi , kart mı , zart mı......?
Kısa ve öz olarak nedir...?
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

MC_Skywalker

ARM mikro işlemci çekirdeği tasarlayan bir firmanın adı ve bir kaç sene öncesine kadarda bu çekirdeklere verdiği isimdir. artı CORTEX olarak adlandırlıyor. 32 bit mimariye sahiptir.

Chip üreticileri bu firmanın çekirdeklerini alıp çevre birmleri vs. ekleyerek fiziksel chip üretirler. NXP, ST, Ti vb.

CORTEX - M  MCU Micro Controller Unit Core
CORTEX - A  Aplication based Core
CORTEX - R  Realtime Core

CoşkuN

Devamlı blogumun reklamını yapıyor gibi de görünmek istemiyorum ama konuyla ilgili bir yazı yazmıştım: http://coskuntasdemir.net/arm
Reklama giriyorsa lütfen admin arkadaşlar uyarsın beni...

The Gariban

#3
peki 2.soruyu ben sorayım.
Biz örneğin ST nin satın aldığı ARM nin işlemcisi için kod yazdığımızda ST " Tamam ben bu kodları anladım çalışırım " dediğinde; bu kodlar Texas Inc.yada Philips in ARM işlemcisi takılı cihazlarda da "kodda hiçbir değişiklik yapmadan" çalışacakmı?

Andromeda

#4
1. soruya devam edeyim... :)
Bizim gibi son kullanıcıları ARM nin ürettiği  (anladığım kadarı ile fiziksel birşey üretmiyor, plan proje çiziyor... :)...)
ilgilendirmiyor...
Peki diğerlerinin ürettiği entegre devre değil yani...(PIC gibi değil...)  bir çeşit kart üretiyorlar....
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

MC_Skywalker

#5
2.)

Değişiklik yapman gerekmekte. Her Chip üreticisin en azında pin adlandırmalarında farklılıklar olamkta (bağzı pic modellerinde GPIO ve PORTA farkı gibi) Fakat her C/C++ projesi gibi kod taşıman çok kolay

1.) devamı
ARM sadece işlemci kısmını tasarlamakta üretim yapmamakta. (ASIC)
NXP, ST, Ti. Nvidia vb. fiziksel olarak chip üretmekte (pic gibi). Ayrıca  bu üreticiler kendi chipleri için geliştirme kartları üretmekteler.

Örnek verekcek olursak Ge Force ekran kartı chip üreticisi Nvidia,  ARM firmasından CPU çekirdeğini lisanslayıp kendi GPU çekrtiği ile birleştirerek Tegra250 bir chip üretti.

Aşağıdaki örnekler de bahsetiğim minik farkı görmektesizni. Fakat her içi chip NXP firmasının üretimi ama Core farkı var.


ARM7 cerkirdekli NXP LPC2138 için yazıldı

#include <LPC21xx.H> 						//islemcinin kaynak dosyasi ekleniyor.
/* Gecikme Fonksiyonu */
void Gecikme (long int sure)
{
long int i,k;								// 16 bitlik i degiskeni tanimlaniyor.
for (i=1;i<=sure;i++) 						// girilen deger i degiskeninden büyük olana kadar for içerisinde dön
	{
		for (k=0;k<=12000;k++)
		{}
	}
}
/* Ana Fonksiyon */
int main (void) {
IODIR0 = 0x00000001; 						//giris cikis ayarlama komutu 1 cikis 0 giris
											// 1. biti cikis digerleri giris
while (1) 
	{										//sonsuz döngü
		IOSET0 = 0x00000001; 				//1. biti 1 yap
		Gecikme(500); 						//bekleme yap (yaklasik 500 msn - 12Mhz de)
		IOCLR0 = 0x00000001; 				//1. biti 0 yap
		Gecikme(500); 						//bekleme yap (yaklasik 500 msn - 12Mhz de)
	}
}



CortexM3 cerkirdekli NXP LPC1768  için ufak değişiklikler yapıldı.

#include <LPC17xx.H> 						//islemcinin kaynak dosyasi ekleniyor.
/* Gecikme Fonksiyonu */
void Gecikme (long int sure)
{
long int i,k;								// 16 bitlik i degiskeni tanimlaniyor.
for (i=1;i<=sure;i++) 						// girilen deger i degiskeninden büyük olana kadar for içerisinde dön
	{
		for (k=0;k<=12000;k++)
		{}
	}
}
/* Ana Fonksiyon */
int main (void) {
LPC_GPIO1->FIODIR = 0x000000FF; 						//giris cikis ayarlama komutu 1 cikis 0 giris
											// 1. biti cikis digerleri giris
while (1) 
	{										//sonsuz döngü
		LPC_GPIO1->FIOSET = 0x00000001; 				//1. biti 1 yap
		Gecikme(500); 						//bekleme yap (yaklasik 500 msn - 12Mhz de)
		LPC_GPIO1->FIOCLR = 0x00000001; 				//1. biti 0 yap
		Gecikme(500); 						//bekleme yap (yaklasik 500 msn - 12Mhz de)
	}
}


The Gariban

#6
Yani son örneğe göre:
Philips bir işlemci için ARM den lisans alıp  PH1 diye işlemci çıkardıysa ,bir süre sonra PH2 yi de ARM den aldı ise ,PH1 de çalışan kodlarımız ,PH2 için çalışmıyor olabilecekmi?(yada onlarda bile küçük değişiklikler mi yapılmalı?)
*Takılı olan işlemcinin ismi hızı vb kodlar hariç demek istiyorum

MC_Skywalker

çalışmayan kod olmayacak sadece ufak değişklikler yapmak gerekecek.

Söyle düşünün yazdığınız kodu güncellemiş olcaksınız.

aykut54

#8
Alıntı yapılan: CoşkuN - 11 Ekim 2011, 11:52:58
Devamlı blogumun reklamını yapıyor gibi de görünmek istemiyorum ama konuyla ilgili bir yazı yazmıştım: http://coskuntasdemir.net/arm
Reklama giriyorsa lütfen admin arkadaşlar uyarsın beni...


Merhaba Coşkun hocam  yazmış olduğunuz yazı en azından arm için birkaç bilgi içermekte. Açıkçası kendi görüşüm reklama girdiğini zannetmem. Sonuça bir bilgi içeriyor. İlginize teşekkürler.

MC_Skywalker Hocam LPC2138 ve cortex tabanlı  arm işlemciler için yazdığınız kodları gördüm. Yani şöyle söylemem gerekirse. ARM7 için yazılan bir kodu CORTEX tabanlı bir işlemcide sadece LPC_GPIO1 Tanımlamalarını değiştirerek kodu çalıştırabilirimiyim?

Vermiş olduğunuz öyle diyor. Fakat kod içeriği arttıkça ne olur bilmiyorum.

Ayrıca vermiş olduğunuz kod için teşekkür ederim.

Andromeda

Bu forumda da adı geçen "geliştirme kartları"  yazılan kodun kontrol edildiği deneme kartı mıdır...?
En basit "mikro denetleyici" ve en basit "mikroişlemci" hangisidir...?
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

MC_Skywalker

#10
LPC2138 ve LPC1768 ile çok basit uygulamalar yaptım.
Daha yolun çok başındayım. Bu minik kod çalışıyor, fakat daha büyük ve komplike kodda nasıl bir yol izlemek gerekmekte onu açıkçası tam anlamıyla bilmiyorum. Benimde öğrenmem gerekmekte. Hatta LPC2138 için yapılmış bir PWM kodunu lpc1768 nasıl aktarırım diye uğraşıyorum.

Daha doğrusu elimde LPC2138 için yapılmış örnekler var fakat benim elimde LPC1768 kit var örnekleri akararak uygulamaya çalışıyorum
sanırm bunalmış üstamızın vereceği dersler ile bunu çözecek konuma geleceğiz.

The Gariban

MC_SkyWalker
Cevaplarınız için teşekkür ederim.
Peki bu ARM nin işlemcilerine C ve Assambler dışında hangi programlama dilleri kullanılabilir?
Yada o dillerin hangi özellik yada kapasiteleri varsa ARM lere program yazılabilir?
Bu konuda bilginiz varmı acaba?

MC_Skywalker

Bildiğim kadarını aktarayım.

HBBR Basic  adında bir BASIC derleyicisi var fakat desteklediği ARM işlemci sayısı çok ama çok az.

Mikroelektronika geniş bir ARM işlemci yelpazesi olan Kendi C, BASIC ve PASCAL derleyicilerini geliştirmekte. Bu ay sonu satışa çıkacakmış.

Tavsiyem KEIL uvision kullanmanız dan yana çünkü ARM firmasının kendi derleyicisi. bu adresten https://www.keil.com/demo/eval/arm.htm lite versionunu indirip denemelere başlaya bilirisiniz

yamak

Yukarıdaki iki kod arasındaki farklılıklar kullanılan kütüphaneden kaynaklanıyo.Kütüphanenin içeriğine bakarsanız ne demek istediğimi anlarsınız.Mesela LPC17xx.h kütühanesinde her çevrebirimini ait registerlar bir struct içinde toplanmış.Mesela gpio portları için konuşursak:
2.portun 3. pinini high yapacaksan LPC_GPIO2->FIOSET=1<<3 deriz 0.portun 4. pinini aktif yapacaksan GPIO0->FIOSET=1<<4; deriz görüldüğü gibi gpıolar LPC_GPIO struct ı içinde toplanmış. Aşağıda daki kodlarda lpc17xx.h kütüphanesi içindeki gpıo struct ına aittir.
typedef struct
{
  union {
    __IO uint32_t FIODIR;
    struct {
      __IO uint16_t FIODIRL;
      __IO uint16_t FIODIRH;
    };
    struct {
      __IO uint8_t  FIODIR0;
      __IO uint8_t  FIODIR1;
      __IO uint8_t  FIODIR2;
      __IO uint8_t  FIODIR3;
    };
  };
  uint32_t RESERVED0[3];
  union {
    __IO uint32_t FIOMASK;
    struct {
      __IO uint16_t FIOMASKL;
      __IO uint16_t FIOMASKH;
    };
    struct {
      __IO uint8_t  FIOMASK0;
      __IO uint8_t  FIOMASK1;
      __IO uint8_t  FIOMASK2;
      __IO uint8_t  FIOMASK3;
    };
  };
  union {
    __IO uint32_t FIOPIN;
    struct {
      __IO uint16_t FIOPINL;
      __IO uint16_t FIOPINH;
    };
    struct {
      __IO uint8_t  FIOPIN0;
      __IO uint8_t  FIOPIN1;
      __IO uint8_t  FIOPIN2;
      __IO uint8_t  FIOPIN3;
    };
  };
  union {
    __IO uint32_t FIOSET;
    struct {
      __IO uint16_t FIOSETL;
      __IO uint16_t FIOSETH;
    };
    struct {
      __IO uint8_t  FIOSET0;
      __IO uint8_t  FIOSET1;
      __IO uint8_t  FIOSET2;
      __IO uint8_t  FIOSET3;
    };
  };
  union {
    __O  uint32_t FIOCLR;
    struct {
      __O  uint16_t FIOCLRL;
      __O  uint16_t FIOCLRH;
    };
    struct {
      __O  uint8_t  FIOCLR0;
      __O  uint8_t  FIOCLR1;
      __O  uint8_t  FIOCLR2;
      __O  uint8_t  FIOCLR3;
    };
  };
} LPC_GPIO_TypeDef;

zamzam23

Ben de şunu merak ediyorum:
dspic ler le arm kullanılarak yapılmıs işlemci arasındakı fark nedır.
suan piclere asınayız ve dspic32 mesela ogrenmek daha mantıklı gıbı duruyor farkları yoksa.ama eger belırgın farkları varsa tabıkı arm ögrenmek mantıklı olur.bu konudakı fıkırlerınız nedır
picleri programlamak daha kolay dip entegrelerı mevcut. arm ler ıcın de aynı sey gecerlı mı?