Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Texas Instruments => Konuyu başlatan: erenbasturk - 26 Ocak 2013, 18:28:59

Başlık: BeagleBone Gpio
Gönderen: erenbasturk - 26 Ocak 2013, 18:28:59
Merhabalar,

BeagleBone'un gpio'larını herhangi bir gpio driver olmadan adresler yardımıyla kontrol etmeye çalışıyorum . Aşağıda gpio1_6'yı çıkış olarak ayarlamak üzere bir program yazdım fakat gpio1_6'ya bağladığım led'de herhangi bir degişiklik olmadı. Sizce nerede hata yapıyor olabilirim ?


#include <stdlib.h>
#include <stdio.h>
#include <hw/inout.h>
#include <sys/mman.h>
#include <sys/neutrino.h>
#include <stdint.h>

#define AM335X_GPIO_SIZE 0x00001000
#define AM335X_GPIO1_BASE       0x4804C000
#define GPIO_DATAOUT            0x8C
#define GPIO0                   (1<<6)

/*
*  GPIO0 = GPIO1_6
*/

uintptr_t *gpio_base;
uint32_t *val;


int main(int argc, char *argv[]) {


ThreadCtl (_NTO_TCTL_IO,NULL);

gpio_base =  mmap_device_io(AM335X_GPIO_SIZE,AM335X_GPIO1_BASE);

while(1)
{

val = ~GPIO0;
out32(gpio_base + GPIO_DATAOUT, val);
delay(1000);

}

return 0;
}


Cevaplarınız için şimdiden teşekkür ederim.
Başlık: Ynt: BeagleBone Gpio
Gönderen: Firzen - 26 Ocak 2013, 19:59:56
Sanırım CCS kullanıyorsunuz benim tavsiyem beaglebone içine Angstrom Cloud9 IDE li sürümünü kurup kullanmanız.Çünkü bunun sayesinde içinde yani Cloud9 içinde tanımlı olan kütüphaneye ulaşabiliyorsunuz. Kod yazım sistemi javascript ile yapılıyor.
Ben bu şekilde deneme yaptım gayet güzel oluyor.
Birde eclipse deneyenler var ama o biraz uzun sürüyor.

son olarak böyle bir paylaşım yaptığınız için teşekkür ederim çünkü nette bu konu hakkında çok az deney yapan sizde bende karşılık deney yapıp paslaşalım sitede paylaşalım.
Başlık: Ynt: BeagleBone Gpio
Gönderen: erenbasturk - 26 Ocak 2013, 20:31:15
Alıntı yapılan: Firzen - 26 Ocak 2013, 19:59:56
Sanırım CCS kullanıyorsunuz benim tavsiyem beaglebone içine Angstrom Cloud9 IDE li sürümünü kurup kullanmanız.Çünkü bunun sayesinde içinde yani Cloud9 içinde tanımlı olan kütüphaneye ulaşabiliyorsunuz. Kod yazım sistemi javascript ile yapılıyor.
Ben bu şekilde deneme yaptım gayet güzel oluyor.
Birde eclipse deneyenler var ama o biraz uzun sürüyor.

son olarak böyle bir paylaşım yaptığınız için teşekkür ederim çünkü nette bu konu hakkında çok az deney yapan sizde bende karşılık deney yapıp paslaşalım sitede paylaşalım.

Eclipse tabanlı bir IDE kullanıyorum. Üstte belirttiğim örnek program olarak sorunsuz olarak beaglebone üzerinde çalışıyor fakat gpio1_6'ya bağladığım led'de herhangi bir degişiklik olmuyor. Daha önce cloud sistemini kullanıp io'lar ile ilgili çalışma yapmıştım fakat benim belirttiğim uygulama ; herhangi bir derleyicide am3359 işlemcisine ait adresleri kullanarak armv7 için derlediğiniz uygulamayı BeagleBone üzerinde çalıştırmak.
Başlık: Ynt: BeagleBone Gpio
Gönderen: fatihinanc - 27 Ocak 2013, 04:45:43
Eren Selamlar,

bendeki am3359 header dosyasında GPIO_DATAOUT offset adresi 0x13C olarak görünüyor.
am335x.h dosyasını buraya ekleyebilir misin ?

mesaj birleştirme:: 27 Ocak 2013, 04:56:46

Kodu aşağıdaki şekilde derler misin ?
GPIO yu map ettikten sonra çıkış olarak tanımlama kısmını eksik bir de.


#include <stdlib.h>
#include <stdio.h>
#include <hw/inout.h>
#include <sys/mman.h>
#include <sys/neutrino.h>
#include <stdint.h>

#define AM335X_GPIO_SIZE 0x00001000
#define AM335X_GPIO1_BASE       0x4804C000
#define GPIO_DATAOUT            0x13C
#define GPIO_OE                 0x134
#define GPIO0                   (1<<6)

/*
*  GPIO0 = GPIO1_6
*/

uintptr_t *gpio_base;
uint32_t *val;


int main(int argc, char *argv[])
{
    ThreadCtl (_NTO_TCTL_IO,NULL);

    gpio_base =  mmap_device_io(AM335X_GPIO_SIZE,AM335X_GPIO1_BASE);
   
    val  = in32(gpio_base + GPIO_OE);
    val &= ~(GPIO0);
    out32(gpio_base + GPIO_OE, val);

    while(1)
    {

        val = ~(GPIO0);
        out32(gpio_base + GPIO_DATAOUT, val);
        delay(1000);
    }

    return 0;
}
Başlık: Ynt: BeagleBone Gpio
Gönderen: erenbasturk - 27 Ocak 2013, 19:47:48
Merhaba Fatih,

Bendeki am335x.h ve am3359 datasheet'tindeki GPIO_DATAOUT offset adresi 13C. Bir forumda kodları paylaşıtığımda gelen yorumda offset adresini degiştirmem gerektiği söylendiğini için adresi 8C olarak degiştirdim.



Hi,

Based on the BeagleBone docs from here:

http://beagleboard.org/static/beaglebone/latest/Docs/Hardware/BONE_SRM.pdf (http://beagleboard.org/static/beaglebone/latest/Docs/Hardware/BONE_SRM.pdf)

It would appear that GPIO1_6 has an offset from the AM335X_GPIO1_BASE of 140 (0x8C),
so I think you need to change GPIO_DATAOUT to 0x8C.


Programı yukarıdaki şekilde ve GPIO_DATAOUT offset adresi 8C olarak derledim. Uygulamalar BeagleBone üzerinde çalışıyor fakat Led'de herhangi bir değişiklik olmadı.

Yorumun için teşekkür ederim.
Başlık: Ynt: BeagleBone Gpio
Gönderen: fatihinanc - 28 Ocak 2013, 00:32:03
Offset adresleri olduğu gibi kalmalı Eren. Base adres ile offset adres ekleme işlemini zaten out32 fonksiyonu yapıyor.

Bu arada kodda 2 tane hata gözüme çarptı. Bunları düzeltip tekrar ekliyorum aşağıya.

1. val değişkenini pointer tanımlamışsın. Normal olması gerekiyor. Fonksiyonlara doğrudan veri göndermen gerekiyor yani.
2. main fonksiyonu içerisinde GPIO yu tersleyen rutin yanlış olmuş. Doğrusunun val ^= GPIO0; olması lazım.


#include <stdlib.h>
#include <stdio.h>
#include <hw/inout.h>
#include <sys/mman.h>
#include <sys/neutrino.h>
#include <stdint.h>

#define AM335X_GPIO_SIZE 0x00001000
#define AM335X_GPIO1_BASE       0x4804C000
#define GPIO_DATAOUT            0x13C
#define GPIO_OE                 0x134
#define GPIO0                   (1<<6)

/*
*  GPIO0 = GPIO1_6
*/

uintptr_t *gpio_base;
uint32_t   val;


int main(int argc, char *argv[])
{
    ThreadCtl (_NTO_TCTL_IO,NULL);

    gpio_base =  mmap_device_io(AM335X_GPIO_SIZE,AM335X_GPIO1_BASE);
   
    val  = in32(gpio_base + GPIO_OE);
    val &= ~GPIO0;
    out32(gpio_base + GPIO_OE, val);

    while(1)
    {
        val ^= GPIO0;
        out32(gpio_base + GPIO_DATAOUT, val);
        delay(1000);
    }

    return 0;
}
Başlık: Ynt: BeagleBone Gpio
Gönderen: erenbasturk - 29 Ocak 2013, 03:28:36
"val" degişkenindeki pointer'ı foruma eklerken uygulamada unuttuğumu düşünerek eklemiştim. "val ^= GPIO0;"  şeklinde degiştirip üsteki kodları derledim. Uygulama çalıştı fakat led'de bir degişiklik olmadı. Birde beaglebone'un usr led'leri üzerinde programı çalıştırmayı denedim usr led'leride yanmadı. Programda eksik bir yerde göremedim.



Başlık: Ynt: BeagleBone Gpio
Gönderen: Erhan YILMAZ - 31 Ocak 2013, 13:19:40
Merhabalar hocam konuyla alakası yok ama bişey sorcaktım. Beaglebone üzerinde c/c++ kod yazmak için neler gerekli? Hangi IDE, işletim sistemi neler yapmak gerekiyor v.s.?
Başlık: Ynt: BeagleBone Gpio
Gönderen: erenbasturk - 31 Ocak 2013, 19:40:32
Alıntı yapılan: Erhan YILMAZ - 31 Ocak 2013, 13:19:40
Merhabalar hocam konuyla alakası yok ama bişey sorcaktım. Beaglebone üzerinde c/c++ kod yazmak için neler gerekli? Hangi IDE, işletim sistemi neler yapmak gerekiyor v.s.?

Merhaba Erhan,

Editörde yazdığın kodları beaglebone'un üzerinde bulunan işlemiye göre derleyebilmek için sistemine çapraz derleyici kurman gerekiyor. Daha sonra derleme sırasında sisteme kurduğun çapraz derleyici kullanıyorsun.

Bir de kendi içinde çapraz derleyicileriyle gelen editörler bulunuyor "codeblocks" gibi herhangi bir çapraz derleyici kurmadan bu editörlede işlemci mimarisini belirterek derleme işlemini yapabiliryorsun.
Başlık: Ynt: BeagleBone Gpio
Gönderen: yamak - 31 Ocak 2013, 20:35:19
Alıntı yapılan: Erhan YILMAZ - 31 Ocak 2013, 13:19:40
Merhabalar hocam konuyla alakası yok ama bişey sorcaktım. Beaglebone üzerinde c/c++ kod yazmak için neler gerekli? Hangi IDE, işletim sistemi neler yapmak gerekiyor v.s.?
Hocam biraz  reklam gibi olacak ama aşağıdaki yazıyı inceleyebilirsin :)
http://www.yusufyamak.com/beaglebone-ve-qt/ (http://www.yusufyamak.com/beaglebone-ve-qt/)
Başlık: Ynt: BeagleBone Gpio
Gönderen: Erhan YILMAZ - 31 Ocak 2013, 21:29:04
Teşekkür ederim cevaplarınız için. Yazıyı okudum hocam anladığım kadarıyla cross compiler gerekiyor. Fakat linux konusunda eksiklerim var bahsettiğiniz qt geliştirme ortamımıdır? Codeblock kurulumuda qtmake kadar karışık mı? Linuxta çalıştırılabilir dosya uzantısı nedir? .exe .apk v.s.? Diyelimki derleme işlemini yapıp çalıştırılabilir dosyayı elde ettim. Bunu nasıl beaglebona atıp çalıştırcam? Beaglebonun sd kartına atıp dizini göstererek çalıştırabilirmiyim? Şuanda angstron yüklü başka bir sistem yüklemeye gerek var mı? Angstrom ne kadar iyidir? En uygun ide hangisi başlangıç için?
Başlık: Ynt: BeagleBone Gpio
Gönderen: erenbasturk - 31 Ocak 2013, 22:55:14
Alıntı yapılan: Erhan YILMAZ - 31 Ocak 2013, 21:29:04
Teşekkür ederim cevaplarınız için. Yazıyı okudum hocam anladığım kadarıyla cross compiler gerekiyor. Fakat linux konusunda eksiklerim var bahsettiğiniz qt geliştirme ortamımıdır? Codeblock kurulumuda qtmake kadar karışık mı? Linuxta çalıştırılabilir dosya uzantısı nedir? .exe .apk v.s.? Diyelimki derleme işlemini yapıp çalıştırılabilir dosyayı elde ettim. Bunu nasıl beaglebona atıp çalıştırcam? Beaglebonun sd kartına atıp dizini göstererek çalıştırabilirmiyim? Şuanda angstron yüklü başka bir sistem yüklemeye gerek var mı? Angstrom ne kadar iyidir? En uygun ide hangisi başlangıç için?

Codeblokcs kurulumu oldukça basit ubuntu yazılım merkezinde codeblokcs olarak arama yapıp yükle butonuna basacaksınız. Aslında biraz linux'le çalışınca qmake konusuda karışık gelmeyecektir. Linux'ta derlediğiniz program  sonunda size uzantısı olmayan bir dosya verilir. Bu dosya kullandığınız kabuğa göre "./program" ," program & ", "sh program" şeklinde çalıştırılabilir.

Derlediğin yazılımı BeagleBone'un sd kartına atıp çalıştırabilirsin fakat bu yöntemden ziyade beaglebone'un ethernet bağlantısı yapıp derleme işlemlerini ethernet üzerinden beaglebone üzerinde eş zamanlı olarak görebilirsin.

Başlık: Ynt: BeagleBone Gpio
Gönderen: erenbasturk - 01 Şubat 2013, 00:58:54
Sorunu hallettim ilgilenen herkese teşekkür ederim.



#include <stdlib.h>
#include <stdio.h>
#include <hw/inout.h>
#include <sys/mman.h>
#include <sys/neutrino.h>
#include <stdint.h>

#define AM335X_GPIO_SIZE                0x00001000
#define AM335X_GPIO1_BASE               0x4804C000
#define GPIO_DATAOUT                    0x13C
#define GPIO_OE                         0x134

#define LED0                (1<<21)
#define LED1                (1<<22)
#define LED2                (1<<23)
#define LED3                (1<<24)
#define LEDS(n)             ((n&0xf)<<21)

int main(int argc, char *argv[])
{
        int i = 0;
        uintptr_t        gpio_base;
        uint32_t        val;
        ThreadCtl (_NTO_TCTL_IO,NULL);

   
    gpio_base = mmap_device_io(AM335X_GPIO_SIZE, AM335X_GPIO1_BASE);
    if(gpio_base == MAP_DEVICE_FAILED)
    {
        perror("Can't map device I/O");
        return 0;
    }

 
    val  = in32(gpio_base + GPIO_OE);
    val &= ~(LED0|LED1|LED2|LED3);
    out32(gpio_base + GPIO_OE, val);

        while(i<16)
        {
                printf("i = %i\n", i);
               
                val  = in32(gpio_base + GPIO_DATAOUT);
                val &= ~(LED0|LED1|LED2|LED3);
                val |= (LEDS(i++));
                out32(gpio_base + GPIO_DATAOUT, val);
                sleep(5);
        }

    munmap_device_io(gpio_base, AM335X_GPIO_SIZE);

    return 1;
}

Başlık: Ynt: BeagleBone Gpio
Gönderen: Erhan YILMAZ - 01 Şubat 2013, 21:26:28
Alıntı yapılan: erenbasturk - 31 Ocak 2013, 22:55:14
Codeblokcs kurulumu oldukça basit ubuntu yazılım merkezinde codeblokcs olarak arama yapıp yükle butonuna basacaksınız. Aslında biraz linux'le çalışınca qmake konusuda karışık gelmeyecektir. Linux'ta derlediğiniz program  sonunda size uzantısı olmayan bir dosya verilir. Bu dosya kullandığınız kabuğa göre "./program" ," program & ", "sh program" şeklinde çalıştırılabilir.

Derlediğin yazılımı BeagleBone'un sd kartına atıp çalıştırabilirsin fakat bu yöntemden ziyade beaglebone'un ethernet bağlantısı yapıp derleme işlemlerini ethernet üzerinden beaglebone üzerinde eş zamanlı olarak görebilirsin.
Hocam teşekkür ederim dahada şekillendi olaylar kafamda. Az önce codeblocks'u marketten kurdum. Mesela bu yazdığınız kodları Codeblock üzerinde beaglebone için derleyip atabilir miyim? Bunun için proje açıp derleme işlemini yapmak yeterli mi? Kabuktan kastınız linux dağıtımı mı? Beagle üzerinde angstrom kurulu örneğin angstrom için hangi komut gerekli? Angstromda kalmaya devam etmeli miyim yoksa ubuntu, android yada başka sistemlere geçmekte fayda var mı? Ethernet üzerinden  bağlanmak için cross kablo gerekiyor sanırım? Elimde olmadığı için sd karta kopyalamayı düşündüm hocam. Kusura bakmayın biraz fazla soruyorum linux üzerinde yeni olduğum için anlamaya çalışıyorum. İlginiz için teşekkürler. :)
Başlık: Ynt: BeagleBone Gpio
Gönderen: Firzen - 01 Şubat 2013, 21:57:04
@Erhan Yılmaz Aynı soruları be soracaktım siz yerime söylediniz herşeyi :)
Başlık: Ynt: BeagleBone Gpio
Gönderen: erenbasturk - 01 Şubat 2013, 22:43:36
Alıntı yapılan: Erhan YILMAZ - 01 Şubat 2013, 21:26:28
Hocam teşekkür ederim dahada şekillendi olaylar kafamda. Az önce codeblocks'u marketten kurdum. Mesela bu yazdığınız kodları Codeblock üzerinde beaglebone için derleyip atabilir miyim? Bunun için proje açıp derleme işlemini yapmak yeterli mi? Kabuktan kastınız linux dağıtımı mı? Beagle üzerinde angstrom kurulu örneğin angstrom için hangi komut gerekli? Angstromda kalmaya devam etmeli miyim yoksa ubuntu, android yada başka sistemlere geçmekte fayda var mı? Ethernet üzerinden  bağlanmak için cross kablo gerekiyor sanırım? Elimde olmadığı için sd karta kopyalamayı düşündüm hocam. Kusura bakmayın biraz fazla soruyorum linux üzerinde yeni olduğum için anlamaya çalışıyorum. İlginiz için teşekkürler. :)

Üstte yazılan kodları ben beaglebone üzerinde çalışan başka bir işletim sistemi için yazmıştım. Codeblocks ile derlemen için bu işletim sisteminin kütüphanelerini codeblocks'a ekleyip derleyebilirsin. Kabuk linux dağımlarında komut yorumlama sistemidir diyebilirim. User space ve kernel arasındaki iletişimi sağlayan kısımda denilebilir. Ethernet kablosundan kastım yanlış anlaşıldı sanırsam beaglebone'a modemden bir ethernet kablosu bağlayıp beaglebone'u network'e dahil edip derleme işlemlerini beaglebone üzerinde yapmak denilebilir. Angstrom işletim sistemi iyi bir işletim sistemi fakat işletim sistemi seçimi sizin yapacağınız işlere göre degişiklik göstercektir.