TI DSP kit kullanımı?

Başlatan Firzen, 06 Ocak 2016, 22:36:37

Firzen

Merhabalar;
TI C2000 Piccolo veya Delfino serisi kitleri kullanmasını bilen varsa temel olarak kullanımı konusunda biraz paylaşım yapabilr mi acaba? kod yazarken nasıl yazmak lazım ne yapmak lazım geçenlerde yine bir deneme yapayım dedim çalıştıramadım.
Kararsız...

Logan

Merhaba.

Birkaç sene önce TMS302F28027 MCU'lu küçük bir kart ile çalışmıştım. Daha sonra kartın şemasını netten çekip üzerinde TMS320F28035 olan bir deneme kartı yaptım. PWM'ler, ADC'ler, Canbus falan çok sağlam çalıştı. Daha sonraları ise kendi izole XDS100 V1 programlayıcımı tasarlayıp projelerde kullanmaya başladım. Halen de o şekilde devam ediyorum. Ancak şunu belirtmek isterim ki Code Composer Studio kadar berbat çalışan başka bir derleyici daha görmedim.

Kod yazma işinde bir şey yok. Zaten kendi örneklerinin hepsi çalışıyor. Onlarla başlayabilirsin.
İmza.

Firzen

Hocam size kesinlikle katılıyorum bu CodecomposerStudio konusunda. Kendi örnekleri çalışıyor hata ben birde  " http://azimsgarage.blogspot.in/p/blog-page.html " sitesinden yarralanmaya çalışıyorum. Örneğin buton ekleyip ardından onunla bir kod çalıştırmaya çalıştığım zaman hata alıyorum :(
Kararsız...

Logan

Biraz daha detay verebilir misin?

Mesela hangi örnek programı çalıştırdın? Ayrıca yazdığın programı da gönder bir göz atalım.
İmza.

Firzen

Hocam elimde düzenlemeye çalıştığım bir kod bakın isterseniz nasıl bir hata yapıyorum?

#include "DSP28x_Project.h"     // DSP28x Headerfile
#include "f2802x_common/include/clk.h"
#include "f2802x_common/include/gpio.h"
#include "f2802x_common/include/pll.h"
#include "f2802x_common/include/wdog.h"


#define buton GPIO_Number_12

void main()
{
 WDOG_Handle myWDog;
 myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));
 WDOG_disable(myWDog);

#ifdef _FLASH
    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif

 CLK_Handle myClk;
 PLL_Handle myPll;
 myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
 myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));

  CLK_setOscSrc(myClk, CLK_OscSrc_Internal);  ///selecting Internal Oscillator

  PLL_setup(myPll, PLL_Multiplier_12, PLL_DivideSelect_ClkIn_by_2);  // Selecting 60Mhz InternalClock

  GPIO_Handle myGpio;
  myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));

  GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_0, GPIO_Direction_Output);
  GPIO_setMode(myGpio, GPIO_Number_1, GPIO_1_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_1, GPIO_Direction_Output);
  GPIO_setMode(myGpio, GPIO_Number_19, GPIO_19_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_19, GPIO_Direction_Output);
  GPIO_setMode(myGpio, GPIO_Number_34, GPIO_34_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_34, GPIO_Direction_Output);

  GPIO_setMode(myGpio, buton, GPIO_12_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, buton, GPIO_Direction_Input);

  GPIO_setHigh(myGpio, GPIO_Number_0);
  GPIO_setHigh(myGpio, GPIO_Number_1);
  GPIO_setHigh(myGpio, GPIO_Number_19);
  GPIO_setHigh(myGpio, GPIO_Number_34);

  int state = 0 ;

  while(1)
  {

	  state = buton ;

if (state == 1 ){
    GPIO_setHigh(myGpio, GPIO_Number_0);
    GPIO_setHigh(myGpio, GPIO_Number_1);
    GPIO_setHigh(myGpio, GPIO_Number_19);
    GPIO_setHigh(myGpio, GPIO_Number_34);
}
else{
    GPIO_setLow(myGpio, GPIO_Number_1);
    GPIO_setLow(myGpio, GPIO_Number_19);
    GPIO_setLow(myGpio, GPIO_Number_34);
    GPIO_setLow(myGpio, GPIO_Number_0);
}
  }

}


Buradaki kod azimin sayfasından alınma bende extradan buton falan ekledim ledlerin yerini değiştirdim.
Ama Buton çalışmadı.
Kararsız...

batigol

Hocam GPIO_Number_12 diyerek o pini okuyamazsınız. Okumak için fonksiyon var.

state = GPIO_getData(myGpio, GPIO_Number_12);


şeklinde satırı düzenlerseniz çalışır diye düşünüyorum. API driver kütüphanesine ait fonksiyonları anlatan pdf ControlSuite içinde mevcut. ControlSuite programının yüklü olduğu klasöre girerseniz "\controlSUITE\device_support\f2802x\v230\doc" bu uzantıyı izleyerek pdf dosyasına ulaşabilirsiniz.

Firzen

Alıntı yapılan: batigol - 11 Ocak 2016, 23:58:28
Hocam GPIO_Number_12 diyerek o pini okuyamazsınız. Okumak için fonksiyon var.

state = GPIO_getData(myGpio, GPIO_Number_12);


şeklinde satırı düzenlerseniz çalışır diye düşünüyorum. API driver kütüphanesine ait fonksiyonları anlatan pdf ControlSuite içinde mevcut. ControlSuite programının yüklü olduğu klasöre girerseniz "\controlSUITE\device_support\f2802x\v230\doc" bu uzantıyı izleyerek pdf dosyasına ulaşabilirsiniz.

Tamamdır hocam dediğinize bakacağım :)
Kararsız...

Firzen

@batigol hocam denedim ama bir türlü çalışmadı verdiğiniz sistem referanstan da okudum isterseniz kodu burada paylaşayım.
Kararsız...

batigol

Paylaşsanız iyi olur ama yarın yoğunum biraz anca akşamüstü bakabilirim. Kişisel tavsiyem hazır fonksiyonlar yerine registerlara erişerek programlamaya alışmanız çünkü sadece f28027 için fonksiyon kütüphanesi var. C2000 serisinden başka bir işlemciye geçeceğiniz zaman tüm uğraşlarınız boşa gidecek.

Firzen

Registerler ile nasıl yapabilirim ? Yani bir referans kaynak bulabilir miyim? Zaten hep c2000 serisi kullanacağım f28027 f28335 f28377d başka seri kullanmam :D
Tamam hocam size mail atıyorum özelden.
Kararsız...

batigol

Örnek kodların olduğu dosya yolunda iki farklı klasör var biri "f2802x_examples_drivers" diğeri "f2802x_examples_structs". structs yazan klasördeki örnekleri incele.
Kaynak olarak bu pdfi inceleyebilirsin; http://www.ti.com/lit/ug/spruhy0/spruhy0.pdf