:::: MENU ::::

Pin Muxing (AM335x EVM)

Bu yazida, AM335x EVM board icin external olarak kesme (interrupt) olusturmak icin gerekli pinmuxing ile gpio uzerinden export islemleri anlatilacaktir.

Dokuman uzerinde bahsi gecen islemler https://github.com/eckucukoglu/linux-tools/tree/master/gpio-interrupt uzerinden orneklenecektir.

  • Oncelikle interrupt gonderilmek istenen gpio portlari tespit edilmelidir. Bu nedenle debugfs mount islemi gerceklestirilerek, kullanimda olan gpio pinlerinin durumu (in/out, high/low) incelenmelidir.
    Bunun icin oncelikle mount -t debugfs none /sys/kernel/debug/  ile debugfs mount edilmelidir. Ardindan cat /sys/kernel/debug/gpio ile sistemde kayitli gpio listesine erisilebilinir. gpio-int.c ile user space interrupt islemlerimizde 40. ve 41.pinleri AM335x EVM boardu uzerinde, sirasiyla, interrupt gondermek (signal generator kullanarak) ve yakalanan interrupt sonucunda cikti alabilmek (osiloskop kullanarak) icin kullaniyoruz.
  • Bir sonraki adimda bu gpio pinlerinin board uzerindeki yerini bulmaliyiz. Bu nedenle http://www.ti.com/… adresinden indirdigimiz AM335x processors guide (am3359.pdf) ile ilgili gpio’larin hangi pin’e denk geldigini buluyoruz.
    Ornegin gpio-40 ve gpio-41 icin, dokumanda gpio1_8 ve gpio1_9 degerlerini bakiyoruz. (1*32+8 ve 1*32+9)
    gpio1_8 icin pin isminin UART0_CTSn ve mode’un ise 7 oldugunu gozlemliyoruz.
  • Ardindan http://processors.wiki.ti.com/ind… adresinden indirebileceginiz schematic (am335x_gpevm_zczbaseboard_3h0002_schematic_rev1_5c.pdf) ile expansion connector kismindan UART0_CTSn pininin yerini buluyoruz.
    UART0_CTSn -> Dokumandan gorulecegi gibi J5 21.koluna denk geliyor.
  • Su anda board uzerindeki pinin, kernel’de hangi gpio’a denk gelebilecegini biliyoruz. Bundan sonra 2 adim izlenmesi gerekiyor. Ilki gpio-40 in sisteme kayitlanmasi ve UART0_CTSn uzerinde mode ayarini 7 yaparak gpio1_8 olarak calismasini saglamak.
  • Ilk adimi /sys/class/gpio  icindeyken
    echo 40 > /sys/class/gpio/export

    yaptiktan sonra gpio40’i tanimlamak ve ardindan /gpio40 klasoru icerisindeki direction, edge ve active_low degerlerini istenildigi gibi ayarlayabiliriz.
    Bununla birlikte gpio-int.c icerisinde de gozlemlenebilecegi gibi

gpio_set_dir(gpio, 0);
gpio_set_edge(gpio, "rising");

seklinde de yapmak mumkundur.

  • Ikinci adim icin ise oncelikle; /sys/kernel/debug/omap_mux/ klasoru altinda iken,
    cat uart0_ctsn

    yaparak, secilebilir mode’lari gormek mumkundur. Burada su sekilde bir cikti almaliyiz:

name: uart0_ctsn.gpio1_8 (0x44e10968/0x968 = 0x0007), b NA, t NA
mode: OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT
signals: uart0_ctsn | NA | d_can1_tx | i2c1_sda | spi1_d0 | NA | NA | gpio1_8

Belirtilen mode’lardan 7.si yani gpio1_8 isteniyor. Dolayisiyla

echo 7 > uart0_ctsn

yaparak mode degistirmek mumkundur.


So, what do you think ?