ARM7 mimarisi, özellikleri ve ARM/Thumb programlama

Başlatan Petek, 13 Ocak 2006, 13:23:06

engin_

Güzel ve zevkli bir uğraş edinmişssiniz. Herkese başarılar.

Bu arada Karaşimşek dediğiniz terminalden çıkan ses mi? Ondan başka bir şey olmuyor çünkü.

mcan

o dosya bi lisansla serial üretiyor ama help e bastığımda genelde buralarda olan serial girilecek yer yok benimkinde şimdi emulede ki dosyayı arayacağım

Petek

Alıntı yapılan: "engin_"Güzel ve zevkli bir uğraş edinmişssiniz. Herkese başarılar.

Bu arada Karaşimşek dediğiniz terminalden çıkan ses mi? Ondan başka bir şey olmuyor çünkü.
Teşekkürler...
Terminalden ses çıkıyor evet. Ama bahsettiğimiz yürüyen ışık tabir edilen şey. Terminalin bağlı olduğu porta şimdilik müdahele edemediğimiz için (malum demo versiyonunda ancak bu kadar müsaade ediliyor) sadece pinin 1 olduğunu gösteren kırmızı rengin portun 8 pininde gezindiği için Kara şimşek demiştik.

Şu ISIS ın yeni versiyonu kırılırsa çok daha güzel şeyler yaparız  ;)
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

Petek

Alıntı yapılan: "encryptedcode"o dosya bi lisansla serial üretiyor ama help e bastığımda genelde buralarda olan serial girilecek yer yok benimkinde şimdi emulede ki dosyayı arayacağım
Helpin aldında değil File menüsünde License Manager a bakacaksınız.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

aYe

Merhaba,
Biraz geriden takip ediyorum ama mesela ben bu PROTEUS'u sevmedim pek tutarli çalışmıyor ayrıca satranç'ta bana yenildi:) Elimden bir tane ARM olsaydı ISIS'ı kurana kadar proje biterdi heralde. Yazilanlari okudum bir şey anlamadim çok karışmış herşey birbirine girmiş gibi gözüküyor. Şimdilik benden katkı adına bir şey yok sadece takip ettiğimi belirtmek amacıyla yaziyorum.

"Teşvik mesajıdır ciddiye almayınız"
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

Petek

Alıntı yapılan: "tatlisukurnazi"Merhaba,
Biraz geriden takip ediyorum ama mesela ben bu PROTEUS'u sevmedim pek tutarli çalışmıyor ayrıca satranç'ta bana yenildi:) Elimden bir tane ARM olsaydı ISIS'ı kurana kadar proje biterdi heralde. Yazilanlari okudum bir şey anlamadim çok karışmış herşey birbirine girmiş gibi gözüküyor. Şimdilik benden katkı adına bir şey yok sadece takip ettiğimi belirtmek amacıyla yaziyorum.

"Teşvik mesajıdır ciddiye almayınız"
Hocam sizin yendiğiniz ISIS değil, gnuchess programı  :P Bunun daha basit versiyonları 18F452, 68H?? için yazılmış ve örnek klasöründe var. Arm7 modelini yeni eklemişler. Başlangıçta ufak tefek hataları çıkabilir. Aslında Proteus değil de derleyici bulmak zaman aldı. İlginçtir, Keilin derlediklerine ISIS hata verdi.

Şu anki geldiğimiz noktada her iki derleyicide de program derleyebiliyoruz. Keil'in download sayfasndan indirdiğim lpc21xx_insidersguide.zip dosyasına bakıyorum. İçerisinde seri haberleşme yapan bir örnek vardı. Onu GNU ya aktardım. Keilin simulatöründe çalıştırdım. UART0 a aktarıp ISIS te deneyeceğim. Anladığım kadarıyla sıkıntı adres alanını stacklara, programa ve datalara ayırmakta, ARM/Thumb karışık derlemede (GNU da özellikle) ve işlemciye özel regsiterleri bilmemekte.

Burada exception handler programlarından bahsetmedim. Onlar nasıl şekillenir programa göre değişecek. Ama 2 yada 3 hatırlayamadım interrupt var ki bunları kesinlikle bloke edemiyorsunuz ve bunlar aktiflendiğinde gidilen adreslerde neler yapılacağı herhalde biraz yapılan projeye özel geliştirilecek.

Biraz üzerinde çalışıldıktan sonra dökümanlar tekrar okunsa bu iş daha da kolaylaşacak...

Desteğin için teşekkürler ...
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

aYe

Petek hocam bende IAR ARM derleyici kurulu. Derle diyorsun derliyor hiç bir sorun yok. Biraz inceledim simüle sırasında asembler kod'u görmen mümkün hatta asembler görünüm için;Thumb mod, ARM mod, Current prosessor mod ve Auto mod şeklinde 4 tane de seçim sunmuşlar. Şunu deneme baabında olsun indirip bir kursan belki keil ve gnu'dan daha iyi sonuçlar alıcaksın. Anladiğim kadariyla ARM7-9-10 hepsini de kapsıyor. Ayrıca ben teşekkür ederim. Kolay gelsin...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

engin_

Linux da simulatör olarak ne kullanılabilir diye bakınıyordum. Proteus gibi bir simulatör yok malesef ama gömülü bilgisayar sistemleri için bir simulatör var.

http://www.skyeye.org/index.shtml

Bu aşamada ne kadar işe yarar bilmem ama bazı video görüntülerini izledim.

http://gro.clinux.org/frs/download.php/834/demovideo.tar.bz2

Doğrusu ilgi çekici.

Petek

Alıntı yapılan: "tatlisukurnazi"Petek hocam bende IAR ARM derleyici kurulu. Derle diyorsun derliyor hiç bir sorun yok. Biraz inceledim simüle sırasında asembler kod'u görmen mümkün hatta asembler görünüm için;Thumb mod, ARM mod, Current prosessor mod ve Auto mod şeklinde 4 tane de seçim sunmuşlar. Şunu deneme baabında olsun indirip bir kursan belki keil ve gnu'dan daha iyi sonuçlar alıcaksın. Anladiğim kadariyla ARM7-9-10 hepsini de kapsıyor. Ayrıca ben teşekkür ederim. Kolay gelsin...
IAR sitesinden formu doldurdum ve indireyim dedim. ama 82 MB ı görünce işyerinden indirmeye karar verdim. Linkini e-mail ile kendime gönderdim :)

Şimdi bu aşamada ciddi bir karar vermem gerekiyor. Bu karar bundan sonra üzerine yoğunlaşacağım işlemci hangisi olmalı sorusunun cevabı olacak. Ona göre işlemcinin iç yapısını öğrenmeye ve hatta ezberlemeye başlayacağım. Bundan sonra yazacağım programlar da o işlemci üzerine olacak. Göstergeler şimdilik LPC leri gösteriyor. Ankarada bir arkadaşımın çalıştığı firma 100 bin adet alacakmış bunlardan. O nedenle derleyiciyi falan ücretsiz vermişler onlara. Teknik destek açısından bu seride sorun yaşamayacağım gibi. Aster hocamın tavsiye ettiği STR710FZ1 de fena değil. Şimdilik dediğim gibi öğrenme aşamasında LPC olsa belki daha çabuk öğreneceğim. Derleyici için şimdilik IAR'ı görmeden bir karar vermek istemedim. Tavisye ettiğinize göre mutlaka pek çok sebebi vardır. Bir kısmını önceki mesajlarda ve başka başlıklarda okumuştum. Mutlaka deneyeceğim. Daha çalışmaya yeni başladık ... :)
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

Petek

Alıntı yapılan: "engin_"Linux da simulatör olarak ne kullanılabilir diye bakınıyordum. Proteus gibi bir simulatör yok malesef ama gömülü bilgisayar sistemleri için bir simulatör var.

http://www.skyeye.org/index.shtml

Bu aşamada ne kadar işe yarar bilmem ama bazı video görüntülerini izledim.

http://gro.clinux.org/frs/download.php/834/demovideo.tar.bz2

Doğrusu ilgi çekici.
Gerçekten güzel bir çalışma yapmışlar. Fakat sanıyorum bu simulusyon belirli tasarımlar için (touch scree ekranlı geliştirme kartları için) olsa gerek. Ama Linux üzerinde Arm simulasyonu ile uclinux çalıştırıyorsun ve same oyununu oynuyorsun. Güzel çalışma gerçekten...
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

engin_

Eğer istenilirse kendi bilgisayarınızı yapmanız için bir engel yok gibi. Network den yaptığınız donanıma ulaşabiliyorsunuz. Onun üzerinde program koşturabiliyorsunuz. Linux gerekli yazılım desteğini veriyor.

Burada işin donanımsal kısmına değinmemişler. Nasıl bir tasarım yapılacak. Çevre birimler nasıl yerleşecek. Gerçi kullanılan programlar incelendiğinde belki fikir elde edilebilir. Benim varmak istediğim, donanım tasarımının ve yazılım desteğinin buluştuğu yere varmak.

http://www.linux-sevenler.org/Lapis_Single_News_Display.478+M50a6e51fcd2.0.html?&tx_ttnews[arc]=1&tx_ttnews[pL]=2674799&tx_ttnews[pS]=1109624400

Bu tür bir sistemde veya daha gelişmiş bir tasarımda farlı işlevlere ağırlık vererek donanımlar yapılıyor. Üzerinde Linux ve apache sunucusu çalışan buna benzer bir örnek vardı. Şimdi onu bulamadım.

CaFFeiNe



THUMB komut seti özellikle program hafızası küçük ARM işlemcilerde kullanılıyor sanırım. Aynı program THUMB komut seti ile yazıldığında %30 az hafıza gerektiriyormuş fakat ARM komut seti ile yazıldığında ise %40 daha hızlı çalışıyormuş

Şemadan görüldüğü gibi THUMB komut seti ARM komut setinin sıkıştırılmış hali yani 32bit genişliğindeki ARM komutları 16bit genişliğindeki THUMB komutlarına sıkıştırılmış bunun için THUMB komutları işlenmeden önce Thumb Decompressor diye bir birim ile ARM komutlarına çevrilerek işleniyor benim anladığım THUMB komut setinin kullanılmasının amacı kısıtlı olan hafızayı gerektiğinde daha efektif olarak kullanabilmek mesela 32KB lik program hafızası olan bir ARM işlemciye program yazmaya başladınız ama hafıza yetmedi THUMB modunda derlerseniz hafıza kurtarabilir ve üst model işlemciye geçmeye gerek duymayabilirsiniz (performanstan feragat etmek kaydıyla tabiiki)
güzel bir özellik, bakalım daha nasıl özelliklerle karşılaşacağız :) PIC lerden sonra ilginç geliyor insana :)

Petek

Alıntı yapılan: "Petek"... Keil'in download sayfasndan indirdiğim lpc21xx_insidersguide.zip dosyasına bakıyorum. İçerisinde seri haberleşme yapan bir örnek vardı. Onu GNU ya aktardım. Keilin simulatöründe çalıştırdım. UART0 a aktarıp ISIS te deneyeceğim....
Bu işlem de tamam.

LPC pinlerine birden fazla fonksiyon verilmiş ve bu fonksiyonlar PINSEL0/1/2 ile seçiliyor.  Datasheet yada User Manual (UM) de (UM_LPC2114_2124_2212_2214_2.pdf) bunlar hakkında detaylı bilgi var. Kısaca özetleyeyim.

PINSEL0 (Adres: 0xE002C000)
PINSEL1 (Adres: 0xE002C004)
PINSEL2 (Adres: 0xE002C014) , Bunların reset değerleri ilkinde 0, diğerleri manuel de.

32 bitlik değerleri 2 şer bit şeklinde gruplanmış. en düşük 2 bit (<1:0>) ve yanındaki 2 bit (<3:2>)şöyle:
PINSEL0  Pin    when 00    when 01      when 10      when 11  Reset_Val
 <1:0>   P0.0  GPIO(0.0)  TxD(UART0)     PWM1       Reserved     00
 <3:2>   P0.1  GPIO(0.1)  RxD(UART0)     PWM3         EINT0      00
...

UART0 ın Rx ve Tx giriş çıkşlarını Port 0 ın 0 ve 1 nolu pinlerine aktarmak için PINSEL0ın son rakamı 5 olmalı (birary 0101).

Port ayarları da
 U0LCR 	= 0x00000083;         /* 8 bits, no Parity, 1 Stop bit     */
  U0DLL 	= 0x000000C2;         /* 9600 Baud Rate @ 30MHz VPB Clock  */
  U0LCR 	= 0x00000003;        /* DLAB = 0                          */

...

UART0 okuma yzama fonksiyonları da 

int putchar (int ch) 			  /* Write character to Serial Port    */
{                  		
  if (ch == '\n')  {
    while (!(U0LSR & 0x20));
    U0THR = CR;              	   /* output CR */
  }
  while (!(U0LSR & 0x20));
  return (U0THR = ch);
}

int getchar (void) 				/* Read character from Serial Port   */
{                    
  while (!(U0LSR & 0x01));
  return (U0RBR);
}
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

mcan

zevkli olmaya başladı tabi kara cahil gibi kod yazıyorum  :D  ,benim şu kod neden acayip bişeyler yazıyor satranç daki yere ben 123 yazmasını istedim ama o hbhbhb  ..... yazıyor

Petek

Alıntı yapılan: "encryptedcode"zevkli olmaya başladı tabi kara cahil gibi kod yazıyorum  :D  ,benim şu kod neden acayip bişeyler yazıyor satranç daki yere ben 123 yazmasını istedim ama o hbhbhb  ..... yazıyor
UART0 a bağlı terminale mi? LPC2124 frekansını 12 den 60 MHz'e çıkart belki düzelir, bende öyle düzeldi.

Bahsettiğin şeyi grafik LCD ekrana yazdırıyorsan kodlarını isterim :)
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein