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.
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.
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.
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;
}
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.
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;
}
"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.
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.?
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.
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/)
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?
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.
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;
}
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. :)
@Erhan Yılmaz Aynı soruları be soracaktım siz yerime söylediniz herşeyi :)
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.