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...?
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
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...
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ı?
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....
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)
}
}
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
ç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.
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.
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...?
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.
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?
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
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;
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ı?
Dspicler daha cok sinyal isleme gibi konularda kendini gosteriyo 1msps adc hizlari olanlar var ama arm cekirdekli islemcilerde adc hizi bu kadar fazla degil mesela lpc1768 inki 200ksps. Ama cevre birimlerinin zengiligi ve cevre birimleri bircok sekjlde ozellestirebilme bakimindan arm cekirdekli mcu lar daha fazla on plandadir.
Alıntı yapılan: yamak - 11 Ekim 2011, 15:33:46
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;
Peki hocam bu örnekte yazılmış olan "LPC_PINCON->PINSEL4 = ( 0 << 20);" "LPC_GPIO0->FIODIR=0x000000FF;" buradaki ile aynı işimi görüyor. Ben bu Pınsel4 kısmını anlayamadım. Ben yeni başladım ARm ye ALttaki kodları yorumlamaya çalışıyodum.Biraz yardımcı olurmusunuz?
#include "LPC17xx.H" /* LPC17xx definitions */
volatile unsigned long SysTickCnt; /* SysTick Counter */
void SysTick_Handler (void) { /* SysTick Interrupt Handler (1ms) */
SysTickCnt++;
}
void Delay (unsigned long tick) { /* Delay Function */
unsigned long systickcnt;
systickcnt = SysTickCnt;
while ((SysTickCnt - systickcnt) < tick);
}
int main (void) { // Main Program
SystemInit();
//SysTick_Config(SystemFrequency/1000 - 1); // Generate interrupt each 1 ms
LPC_PINCON->PINSEL4 = ( 0 << 20); // set pin P0.20 as GPIO Pin 0
LPC_GPIO0->FIODIR = (1 << 20); // set pin P0.20 as output (Output = 1, Input = 0)
for (;;) { /* Loop forever */
LPC_GPIO0->FIOPIN |= (1<< 20); //Turn On LED - set pin P0.20 to HIGH
Delay(100); // Delay 500ms
LPC_GPIO0->FIOPIN &= ~(1<< 20); //Turn On LED - set pin P0.20 to LOW
Delay(500); // Delay 500ms */
}
}
Bu kodlar çalışıyo mu? GPIO0 ın 20. pinine ait konfigrasyonlar pinsel1 den yapılıyo fakat yukarıda pinsel4 kullanılmış bir de "SysTick_Config(SystemFrequency/1000 - 1);" yazan satır yorum haline getirilmiş bu kod çalışmazsa delay de çalışmaz. Şimdi gelelim asıl sorunuza FIODIR ilgili porta ait istenilen pinlerİ çıkış yapmaya yarıyo.Mesela gpıo0 ın 6. pinini çıkış yapmak istersen LPC_GPIO0->FIOPIN=1<<6; yazarsın.PINSEL ile ilgili pinin hangi çevre birimi tarafından kullanılması gerektiğini belirliyosun. Mesela GPIO0.20 için örnek verecek olursak. LPC_PINCON->PINSEL1|=0<<8|0<<9; yapılırsa normal giriş çıkış portu olarak kullanılır yani gpio. Eğer LPC_PINCON->PINSEL1|=1<<8|1<<9; dersek i2c nin clock giriş çıkışı olarak olarak kullanmış oluruz.
Hocam bu kod çalışıyor :) Keil derliyo lpc1769 ledi yakıp söndürüyor. LPC_PINCON->PINSEL1|=0<<8|0<<9; buradaki kodun ne olduğunu anladım ama 0<<8 0<<9 buradaki mantığı nedir?
Bit kaydırma işlemi yapılıyo orda. Mesela 1<<2=4 dür yani 1 i 2 bit sola kaydırdım.Bir de bişey soracam "SysTick_Config(SystemFrequency/1000 - 1);" bu komutu neden yorum haline getirdin. Yani başına // karakterlerin neden koydun.
hocam aslında o komut yorum halinde değildi ilk derlediğimde .hex i başarılı şekilde oluşturmuştu. SystemFrequency de keil hata veriyodu yaklaşık 1 hafta önce bende yorum haline getirdim program derledi ama kite atıp denemedim. Hala aynı problem mevcut .hex i çıkarmıyor.
https://www.picproje.org/index.php/topic,35833.msg255923.html#msg255923 burada yazmış olduğunuz SystemCoreClock i değiştirdim ve .\Flash\Blinky.axf: Error: L6218E: Undefined symbol SystemCoreClock (referred from blinky.o). bu hatayı verdi. Teşekkürler.
#include <LPC17xx.h>
#include "system_LPC17xx.c"
volatile unsigned long SysTickCnt; /* SysTick Counter */
void SysTick_Handler (void) { /* SysTick Interrupt Handler (1ms) */
SysTickCnt++;
}
void Delay (unsigned long tick) { /* Delay Function */
unsigned long systickcnt;
systickcnt = SysTickCnt;
while ((SysTickCnt - systickcnt) < tick);
}
int main(void)
{
SystemInit();
SysTick_Config(SystemCoreClock/1000 - 1); // Generate interrupt each 1 ms
LPC_PINCON->PINSEL0 = 0 << 8 | 0 << 9 |0 << 10 |0 << 11 |0 << 12 |0 << 13 |0 << 14 | 0 << 15 | 0 << 16 |0 << 17 |0 << 18 |0 << 19; // Bacakları Gpıo olarak ayarladık
LPC_GPIO0->FIODIR = 1 << 4 | 1 << 5 |1 << 6 |1 << 7 |1 << 8 |1 << 9; // set pin P0.20 as output (Output = 1, Input = 0)
for (;;) {
LPC_GPIO0->FIOSET =0x00000010;
Delay(100);
LPC_GPIO0->FIOCLR =0x00000010;
LPC_GPIO0->FIOSET =0x00000020;
Delay(100);
LPC_GPIO0->FIOCLR =0x00000020;
LPC_GPIO0->FIOSET =0x00000040;
Delay(100);
LPC_GPIO0->FIOCLR =0x00000040;
LPC_GPIO0->FIOSET =0x00000080;
Delay(100);
LPC_GPIO0->FIOCLR =0x00000080;
LPC_GPIO0->FIOSET =0x00000100;
Delay(100);
LPC_GPIO0->FIOCLR =0x00000100;
LPC_GPIO0->FIOSET =0x00000200;
Delay(100);
LPC_GPIO0->FIOCLR =0x00000200;
}
}
Ben bunu yazdım gecikme kısmını da örneklerden aldım. program çalışıyor. ama set ve clr ederken çok meşakketli oldu her pin içinhexleri buldum falan daha kısa bir yolu yokmudur? Gecikme kısmını SysTick gibi şeyler olmadan nasıl yazarız? Bu arada SysTick ne demek?
SysTick timer benzeri bir çevre birimi. Ayarlarmaları yaptığında o ayarlardaki zamana göre kesme oluşturur. Ayrıca pin değerlerini bulmakta zorlanıyosun windows calculator ın programcı modunu kullanabilirsin.
LPC_GPIO0->FIOPIN |= (1<< 20);
örnekte böle yapmış, ledi yakıyor
LPC_GPIO0->FIOPIN &= ~(1<< 20);
Buda ledi söndürüyor. Ben tek tek bitleri buldum hex. çevirdim Örnekteki ledi yakıp söndürme mantığı nedir?
| --> VEYA --> + (Toplama)
0 | 0 --> 0 VEYA 0 --> 0+0 = 0
0 | 1 --> 0 VEYA 1 --> 0+1 = 1
1 | 0 --> 1 VEYA 0 --> 1+0 = 1
1 | 1 --> 1 VEYA 1 --> 1+1 = 1
& --> VE --> x (Çarpma)
0 & 0 --> 0 VE 0 --> 0x0 = 0
0 & 1 --> 0 VE 1 --> 0x1 = 0
1 & 0 --> 1 VE 0 --> 1x0 = 0
1 & 1 --> 1 VE 1 --> 1x1 = 1
1<<20 : 1'i 20 kez sola kaydır.
LPC_GPIO0->FIOPIN |= (1<< 20);
ile
LPC_GPIO0->FIOPIN = (LPC_GPIO0->FIOPIN) | (1<< 20);
aynı şey.
Peki
LPC_GPIO0->FIOPIN &= 1<< 20);
buradaki "~" işaretide terslememi yapıyor?
~ operatörü bit tersleme yapar. Mesela:
x sayısı 0000 0001 olsun.
~x ise 1111 1110 olur.
~(1<<20) ise 1 uzuntamsayı olarak değerlendirilip 20 bit sola kaydırılır ve bu uzuntamsayı bitleri terslenir.Yani
(1<<20) işlemi
0000 0000 0001 0000 0000 0000 0000 0000
ardından ~ işlemi
1111 1111 1110 1111 1111 1111 1111 1111
sonra &= işlemi ile AND yapılarak sadece 20.bit sıfırlanmış olur. Diğer bitler konumları korunmuş olur.
x sayısı 0000 0001 olsun.
~x ise 1111 1110 olur.
~(1<<20) ise 1 uzuntamsayı olarak değerlendirilip 20 bit sola kaydırılır ve bu uzuntamsayı bitleri terslenir.Yani
(1<<20) işlemi
0000 0000 0001 0000 0000 0000 0000 0000
ardından ~ işlemi
1111 1111 1110 1111 1111 1111 1111 1111
sonra &= işlemi ile AND yapılarak sadece 20.bit sıfırlanmış olur. Diğer bitler konumları korunmuş olur.
afedersiniz :S ARM ile FPGA arasındaki ilişki nedir acaba ?
Alıntı yapılan: yusufburak - 12 Mart 2013, 15:16:03
afedersiniz :S ARM ile FPGA arasındaki ilişki nedir acaba ?
yok. sadece içinde arm olan fpga ler var.
içli dışlı veya yanyana ilişkileri mevcuttur.
arm işlemci çekirdekleridir fpga proglanabilir lojik.
yanyana: aynı pcb üzerinde arm coru ile fpga olabilir
dışlı: fpga çipinin içine arm konmuş olabilir.
içli: armcoru fpga içine programlanmış olabilir.
:) peki programlamasında benzerlik var mıdır ? bildiğim kadarı ile FPGA'da giriş çıkışları belirlemek bizim elimizde ya ARM'de durum böyle mi ? yoksa ARM bi PIC'ın dahada gelişmiş hali mi ?
Evet,
ARM bir işlemci çekirdeği bunu alıp NXP,ST, TI gibi firmalar yanına yönüne başka çevresel üniteler koyup (usart, eeprom vb) kullanıyor
ST için örnek STM32F407
NXP için LPC1769
ARM modifiye edilmiş PIC gibi o zaman :) eğlenceli...
Alıntı yapılan: yusufburak - 12 Mart 2013, 17:57:23
ARM modifiye edilmiş PIC gibi o zaman :) eğlenceli...
Yok, Yapıları Oldukça Farklı.
Modifiyeden Kastın, eğer "daha güçlü" ise, oda söföre göre değişir.
hmm :S kastım donanımının daha iyi olduğu ve daha çok işlevi olduğu idi. ve bu ek donanımlar elimizi güçlendirip işimizi kolaylaştıran şeyler olur genelde :S
Yusuf bey. İşlemcinin kendiside farklı modifiye felan değil.
"PIC" microchip firmasının ürettiği bir MCU ailesi. Ve kendisinden başkası üretmiyor. ARM dediğimiz ise bir MCU çekirdeği.
yada şöyle yapalım. ARM, otomobil motoru üreten bir firma. Bunu Renoda alıyor, Ford da diğer markalarda (Bu arada aynı sistemi kullanan bir PSA motors vardır, citroen, ford ve pejo kullanıyordu motoru)
ama PIC, woswos ve motorunuda kendi yapıyor çamurluğunuda.
Peki şimdi anladım :) kızdırdı isem afedersiniz :S
Yok neden Kızayım.
:) anlamamakta ısrar ettim de :) teşekkür ederim