Peripheral I/O larin pinlere dagitimi karmasasi

Başlatan bunalmis, 05 Aralık 2010, 13:31:06

z

ARM ciplerde  peripheral I/O larin pinlere dogrudan cikmayip bunlarin hangi pinlere atanacagi isleminin de yazilimla yapiliyor olmasi yani pinlerin kullanimi, programlanabilir ciplerdeki (PAL/CPLD vs) gibi esnek olmus.

Fakat pinlere gorev tanimi bile basli basina bir is. Dagitimi kagit uzerinde kalemle yapmaya basladigimda bunaliyorum. Cunku hata yapmaya cok musait.

Sirf bu amacla PCde program yazayim diyorum ama bu bile cok zaman alacak bir is.

TI Stellaris ailesinde bu bana iskence gibi geldi.

Acaba birileri bu konuya el atip da kullanilan islemcinin pin dagitim tablosunu bir kere tanimlayip ardindan pin secim islemini bilgisayarda yapmayi kolaylastiran yazilim yapmismidir, boyle bir yazilimla karsilastinizmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#1
24 serisini bilmiyorum. TI Stellaris ciplerinde durum boyle. Dokumanin 75 sayfasi sirf  bununla ilgili tablolara ayrilmis.

Ornek vermek gerekirse

Ornegin PWM4 cikisini

PC7, PC4, PA7, PJ4, PE2, PD5 pinlerinden herhangi birine atayabiliyorsunuz.

Bu sadece PWM4 icindi. Daha PWM1, PWM2....PWM7 var.

Daha CAN-Analog-I2S-QEI vs vs var....

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#2
Keil bu konuda hic yardimci olmuyor. Fakat cipin romuna pek cok fonksiyon eklenmis. Bu daha cok cevrebirimlerin init islemlerinde vs kolaylik saglasa da bu fonksiyonlari kullanmak hic isime gelmiyor. Cunku bunlarin kullanimi ogrenmektense dogrudan registerlerini ogrenmek zor da  olsa daha cok isime geliyor.

TI pin dagilimini esneklestirmekle PCB cizim asamasinda kolaylik saglamis ancak isin zorlugunu yazilimciya yuklemis.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Alıntı yapılan: bunalmis - 05 Aralık 2010, 13:31:06
ARM ciplerde  peripheral I/O larin pinlere dogrudan cikmayip bunlarin hangi pinlere atanacagi isleminin de yazilimla yapiliyor olmasi yani pinlerin kullanimi, programlanabilir ciplerdeki (PAL/CPLD vs) gibi esnek olmus.

Fakat pinlere gorev tanimi bile basli basina bir is. Dagitimi kagit uzerinde kalemle yapmaya basladigimda bunaliyorum. Cunku hata yapmaya cok musait.

Sirf bu amacla PCde program yazayim diyorum ama bu bile cok zaman alacak bir is.

TI Stellaris ailesinde bu bana iskence gibi geldi.

Acaba birileri bu konuya el atip da kullanilan islemcinin pin dagitim tablosunu bir kere tanimlayip ardindan pin secim islemini bilgisayarda yapmayi kolaylastiran yazilim yapmismidir, boyle bir yazilimla karsilastinizmi?

Merhaba

Benzer durum ST'nin STM32 içinde var ama C ile iyi bir kütüphane yaparsanız hiç sorun kalmıyor birkaç örnek göstereyim.


// CAN_REMAP : 2 bitliktir, bu şekilde kütüphane hazırlarsan yanlış maskelemelerle uğraşmazsın
afio_mapr.bits.CAN_REMAP=0x2;                                        // Can Remap, PB8(RX),PB9(TX) olacak

// Burada da jtag portunu kapatıyorum, normal port gibi kullanıyorum
afio_mapr.bits.SWJ_CFG=4; 

// I/O tek pin için
// PA9'u 50Mhz Altarnate çıkış yapıyorum yani, uart, SPI, CAN, I2S vs. gibi  
gpioa_crh.bits.MODE9=GpioMODE_50mhz_out;                // 50mhz output
gpioa_crh.bits.CNF9=GpioCNF_PUPD_in_APP_out;           // alternate pushpull

// I/O 32bit ayarlama
gpiob_crl.b32=0x22222222;                                  // tüm 2mhz pinler output

// 16bit için
gpiob_crl.b16.low=0x2222;                                   // tümü 2mhz çıkış (32bitin düşük 16biti)
gpiob_crl.b16.hi=0x2222;                                      // tümü 2mhz çıkış (32bitin yüksek 16biti)

//timer3 remap, tm3 pwm pinlerini seçmek için
fio_mapr.bits.TIM3_REMAP=2;                                         // TIM3_CH1=PB4, TIM3_CH2=PB5,TIM3_CH3=PB0,TIM3_CH4=PB1


rcc_apb2enr.b16.low=0x007d;                                       // A,B,C,D,E ve AF enable

stk_ctrl.bits.ENABLE=1;                                                  // system tick timer'ın saymasını bekle
while(!stk_ctrl.bits.COUNTFLAG);                                   // 0 iken bekle 

// interrupt priorityler için 
scb_aircr.b32=((u32)0x05FA0000)|((u32)0x500);         // 4 grup priority, 4 subpriority

// pll nable
rcc_cr.bits.PLLON=1;
while(!rcc_cr.bits.PLLRDY);                                            // pll hazır oluncaya kadar bekle

// Can msg outta, 8 byte gönderiyoruz
can_tdl0r.b32=Can_TxDataRegs.G_REG32[0];             // low order word(32bit) 
can_tdh0r.b32=Can_TxDataRegs.G_REG32[1];           // high order word

Vs.


Gerçi işlemciyi register adreslerine göre bit bit tanımlaman gerekir ama bir defada biter, sadece 10gün kadar uğraşırsın ama sonra tüm projelerinde kullanırsın. Fakat dikkatli olmalısın çünkü yanlış adrese tanımlarsan veri yanlış yere yazılır.

Knowledge and Experience are Power


cetinkaya

ayni pdf i ben yukleyecektim size önceden okumussunuzdur diye cekindim.