LM3S8962 Buton Kullanım Örneği

  • LM3S8962 arm cortex m3 kartındaki butonları kullanan bir uygulamadır.

#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "drivers/rit128x96x4.h"
void
GPIOFIntHandler(void)
{
    //
    // Clear the GPIO interrupt.
    //
    GPIOPinIntClear(GPIO_PORTF_BASE, GPIO_PIN_1); 
    RIT128x96x4StringDraw("SELECT", 48, 32, 15);
}
void
GPIOEIntHandler(void)
{
    //
    // Clear the GPIO interrupt.
    //
   GPIOPinIntClear(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);

   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_0) == 0)
		RIT128x96x4StringDraw("UP     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1) == 0)
		RIT128x96x4StringDraw("DOWN     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2) == 0)
		RIT128x96x4StringDraw("LEFT     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_3) == 0)
		RIT128x96x4StringDraw("RIGHT     ", 48, 32, 15);  
}
int
main(void)
{
    //
    // Set the clocking to run directly from the crystal.
    //
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_8MHZ);
    //
    // Enable the peripherals used by this application.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
    //
    // Configure the push button as an input and enable the pin to interrupt on
    // the falling edge (i.e. when the push button is pressed). basılmasında kesme olsun
    //
    GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_1);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA,
                     GPIO_PIN_TYPE_STD_WPU);
    GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_FALLING_EDGE);
    GPIOPinIntEnable(GPIO_PORTF_BASE, GPIO_PIN_1);
    IntEnable(INT_GPIOF);

	//
	// E portu ayarlanıyor.
	//
    GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_0);
    GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 
    				| GPIO_PIN_3, GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
    GPIOIntTypeSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 
    				| GPIO_PIN_3, GPIO_FALLING_EDGE);
    GPIOPinIntEnable(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
    IntEnable(INT_GPIOE);
    //
    // Initialize the OLED display.
    //
    RIT128x96x4Init(1000000);
    RIT128x96x4StringDraw("But. Int Ex.", 30, 16, 15);
    //
    // Loop forever.  This loop simply exists to display on the OLED display
    //
    while(1)
    {   
    }
}

  • Select butonu için ve diğer butonlar için kesme tanımlandı.
  • OLED ayarlanıp, hangi butona basıldı ise ekranda o butonun adı yazdırılıyor.
  • startup_ccs.c dosyası altında butonlara tanımlanan kesmeler vektor tablosuna kaydedilir.
extern void GPIOFIntHandler(void);
extern void GPIOEIntHandler(void);
GPIOEIntHandler,                       // GPIO Port E
GPIOFIntHandler,                        // GPIO Port F

Kaynaklar
  1. Luminary Micro gpio_jtag örneği 

userdir altında php çalışmama problemi

public_html altında php çalışmasını  sağlamak için, /etc/apache2/mods-enabled/php5.conf, dosyası altında şu satırlara ‘#’ işareti koyularak php userdir altında aktif hale getirilir.

<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_value engine Off
</Directory>
</IfModule>

Kaynak
[1] http://devplant.net/2010/05/04/linux-php-not-working-in-userdir-public_html/

Mips & Airteis

  • Airteis RT-205 modemi kullanmaktayım.  İçerisinde linux çekirdeği bulunmaktadır.  Modeme telnet ile bağlanıp çeşitli bilgileri almak mümkündür.

Modeme Telnet ile Bağlanmak
loginde kullanıcı olarak “root” yazıyoruz, passwordu boş bırakabiliriz. Eğer web arayüzü için bir şifre tanımlamışsak burada o şifreyi kullanıyoruz.

gurcan@yavuz:~$ telnet 192.168.2.1
Trying 192.168.2.1...
Connected to 192.168.2.1.
Escape character is '^]'.

BusyBox on localhost login: root
Password:

* Bağlandığımızda aşağıdaki ekran bizi karşılar:

BusyBox v0.61.pre (2007.08.15-10:02+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

#

Cpu ait bilgiler
Modemin işlemcisine ait bilgiler.

# cat /proc/cpuinfo
processor               : 0
cpu model               : MIPS 4KEc V4.8
BogoMIPS                : 140.90
wait instruction        : no
microsecond timers      : yes
extra interrupt vector  : yes
hardware watchpoint     : yes
VCED exceptions         : not available
VCEI exceptions         : not available

Modemdeki işletim sistemine ait bilgiler

# cat /proc/version
Linux version 2.4.17_mvl21-malta-mips_fp_le (onur@otavil) (gcc version 2.95.3 20010315 (release/MontaVista)) #4 Wed Aug 15 13:09:13 EEST 2007

Memory Bilgileri

# cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:  14606336 14200832   405504        0   651264  5005312
Swap:        0        0        0
MemTotal:        14264 kB
MemFree:           396 kB
MemShared:           0 kB
Buffers:           636 kB
Cached:           4888 kB
SwapCached:          0 kB
Active:           5464 kB
Inactive:         2364 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:        14264 kB
LowFree:           396 kB
SwapTotal:           0 kB
SwapFree:            0 kB

Dış ip numarasını öğrenmek

# ifconfig | grep P-t
 inet addr:88.240.246.86  P-t-P:88.240.244.1  Mask:255.255.255.255

Kaynaklar
[1] http://www.pmx.it/DG834v2.html [erişim : 02.05.2011]

Dosyalarda String Aramak

 

 

 

Bulunulan dizin içerisindeki dosyalarda içinde ‘string ‘ kelimesi geçen dosyaları buluyor.

find . | xargs grep 'string' -sl

Kaynaklar

  1. http://www.liamdelahunty.com/tips/linux_find_string_files.php

ARM Cortex-M3

Özellikleri

  • Cortex™-M3 32-bit mikroişlemcidir.
  • It has a 32-bit data path, a 32-bit register bank, and 32-bit memory interfaces
  • Cortex-M3 işlemci, ARMv7-M mimarisi tabanlı ilk ARM işlemcisidir. Tasarım amacı, güçte yüksek performans ve düşük maliyetli gömülü sistemdir.
  • Cortex-M3 işlemci, 3-stage pipeline gelişmiştir.
  • Harvard Mimarisi tabanlıdır.
  • branch speculation, single cycle multiply ve hardware divide özelliklerer sahiptir.
  • Sadece Thumb-2 komut kümesi desktelenir.
  • Düşük maliyetli, düşük güç tüketimli 32 bit RISC işlemcidir.
  • CPU çekirdeğinin yanında, bir çok bileşene sahiptir. Bunlar; NVIC, MPU, Debug Access Port (DAP).
  • Sabit memory map sahiptir.

Kullanım Alanları

  • Düşük Maliyetli Mikrodenetleyicilerde
  • Endüstriyel kontrol sistemlerinde
  • kablosuz ağlarda
  • Otomobil gövde sistemlerinde
  • Tüketici Ürünlerinde
  • Veri iletişim Uygulamalarında : Örneğin Bluetooth ve ZigBee

Cortex-m3 işlemci ile Cortex-m3 tabanlı MCU

  • Cortex-m3 işlemcisi mikrodenetleyici chipin cpusudur. Buna ek olarak, Cortex-m3 tabanlı mikrodenetleyici başka bileşenlerede ihtiyaç duymaktadır.
  • Chip üreticileri Cortex-m3 işlemcisi lisansını aldıktan sonra , cortex-m3 işlemcisini kendi silikon tasarımlarına koymaktadırlar. Buna bellek, çevre ortamları ve giriş çıkışlar eklemektedirler. Her üreticinin farklı özelliklere sahip cortex-m3 tabanlı ürünleri mevcuttur.

Cortex-m3 ürünü seçim kriterleri

  • Çevrebirimi
  • Bellek
  • Saat Hızı
  • Kapladığı Alan (footprint)

Kaynaklar

[1] The Definitive Guide to the ARM CORTEX-M3, Joseph Yiu, 2nd Edition
[2] Workbook version 1-4 Stellaris Full Day.pdf
[3] Application Note 179 Cortex™-M3 Embedded Software Development

CCS 4 LM3S8962 Proje Oluşturma

 Mevcut Projeyi Dahil Etmek 

  • Project > Import Existing CCS/CCE Eclipse Project >

 Yeni Proje Oluşturmak 

  •  ”’File > New > CCS Project”’
  • “Project Name ” Kısmında projenin ismi belirlenir.
  •  ”Project Type” kısmında ”’ARM”’ Seçilir.
  •  ”Referenced Projects” kısımdan ”’driverlib”’ projeye dahil edilir.
  •  ”CCS Project Settings” penceresinde “Device Variant” bölümünden gerekli mikrodenetleyici seçilir. Ben LM3S8962 seçiyorum.
  •  Projeyi oluşturduk ancak herhangi bir kaynak dosya koymadık. Ayar işlemlerini yapacak olan ”’startup”’ dosyasını oluştururuz. StellarisWare örneklerinden herhangi birinden kopyalanır.
  •  Projeye kaynak dosyası ekleriz. ”’File > New > Source File >”’ Kaynak Dosyanın ismi belirtilir.
  • ”’File > New > Target Configuration File”’ dosyası ile ayar dosyası projeye eklenir. General Setup bölümünde Board kısmından hedef board seçilir.
  •  Projenin özellikleri içinde ”’Properties > C/C++ Build > Build Steps > Post Build Step”’ altındaki Command kısmına altaki satır kopyalanır.
"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${BuildArtifactFileName}" 
"${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd470.exe" "${CG_TOOL_ROOT}/bin/hex470.exe" 
"${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe"
  •  driverlib.lib dosyası ekleniyor. ”’C/C++ Build > Tool Settings > Basic Settings: > TMS470 Linker > File Search Path > Include library~”’ altına eklenir.
"${workspace_loc:/driverlib/Debug/driverlib.lib}"
  •  ”’C/C++ Build > Tool Settings > Basic Settings: > TMS470 Compiler > Include Options”’ buraya derleyicinin bakacağı yolları ekliyoruz. Aşağıdaki iki yol ekleniyor:
C:\StellarisWare
C:\StellarisWare\boards\ek-lm3s8962
  •  Eğer LWIP bir proje yapılıyorsa şunlarda path eklenmesi gerekiyor:
"C:\StellarisWare\third_party\lwip-1.3.2\src\include"
"C:\StellarisWare\third_party\lwip-1.3.2\src\include\ipv4"
"C:\StellarisWare\third_party\lwip-1.3.2\apps"
"C:\StellarisWare\third_party\lwip-1.3.2\ports\stellaris\include"
"C:\StellarisWare\third_party"

 Kaynaklar
[1] Quickstart-Eval-Kit-CCS.pdf

Python ile Seri Port Haberleşme

  • Gerekli paket kurulumu yapılıyor

# apt-get install python-serial

  • Seri port ile haberleşme yapılacak kartın (LM3S8962 EVB) bağlantı noktası belirleniyor.

gurcan@yavuz:~$ dmesg | tail
[35973.398531] usb 1-4.4: Ignoring serial port reserved for JTAG
[35973.399204] ftdi_sio 1-4.4:1.1: FTDI USB Serial Device converter detected
[35973.399329] usb 1-4.4: Detected FT2232C
[35973.399335] usb 1-4.4: Number of endpoints 2
[35973.399341] usb 1-4.4: Endpoint 1 MaxPacketSize 64
[35973.399346] usb 1-4.4: Endpoint 2 MaxPacketSize 64
[35973.399352] usb 1-4.4: Setting MaxPacketSize 64
[35973.399763] usb 1-4.4: FTDI USB Serial Device converter now attached to ttyUSB0
[35973.399802] usbcore: registered new interface driver ftdi_sio
[35973.399807] ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver

 

  • ttyUSB0 noktasına bağlandığı görülüyor.

Seri Port ile bağlanma

  • Bağlantı yapabilmek için root haklarına sahip olmak gerekir.

>>> ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
>>> x = ser.read(10)  # 10 byte  okunuyor
>>> ser.close()

Kaynaklar
[1] http://pyserial.sourceforge.net/shortintro.html [erişim : 19.06.2011]

LM3S8962 Buton Kullanım Örneği

Buton.c dosyası içeriği

  • Kütüphaneler dahil edililiyor

#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "drivers/rit128x96x4.h"

  •  Kartın üzerindeki Select butonu için kesme tanımlanıyor

void
GPIOFIntHandler(void)
{
    // Clear the GPIO interrupt.
    GPIOPinIntClear(GPIO_PORTF_BASE, GPIO_PIN_1);
    RIT128x96x4StringDraw("SELECT", 48, 32, 15);
}

  • Diğer butonlar(up,down,right,left) için kesme tanımlanıyor

void
GPIOEIntHandler(void)
{
    // Clear the GPIO interrupt.
   GPIOPinIntClear(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);

   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_0) == 0)
		RIT128x96x4StringDraw("UP     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1) == 0)
		RIT128x96x4StringDraw("DOWN     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2) == 0)
		RIT128x96x4StringDraw("LEFT     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_3) == 0)
		RIT128x96x4StringDraw("RIGHT     ", 48, 32, 15);
}

  • Ana Fonksiyon saat ayarlamaları yapılıyor

int
main(void)
{
    // Set the clocking to run directly from the crystal.
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_8MHZ);

  • Kullanılacak portlar aktif hale getiriliyor

    // Enable the peripherals used by this application.
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

  •  Butonlar giriş olarak ayarlanıyor. Butonların kesmelerinin düşen kenara göre ayarlanıyor.  Kesme aktif hale getiriliyor.

    GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_1);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA,
                     GPIO_PIN_TYPE_STD_WPU);
    GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_FALLING_EDGE);
    GPIOPinIntEnable(GPIO_PORTF_BASE, GPIO_PIN_1);
    IntEnable(INT_GPIOF);

	// E portu ayarlanıyor.
    GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_0);
    GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2
    				| GPIO_PIN_3, GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
    GPIOIntTypeSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2
    				| GPIO_PIN_3, GPIO_FALLING_EDGE);
    GPIOPinIntEnable(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
    IntEnable(INT_GPIOE);

  •  OLED ayarlanıyor

    RIT128x96x4Init(1000000);
    RIT128x96x4StringDraw("But. Int Ex.", 30, 16, 15);

  •  Sonsuz Döngü

    while(1)
    {
    }
}

startup_ccs.c

  • startup_ccs.c dosyası içerisinde kesmeler tanımlanır.

extern void GPIOFIntHandler(void);
extern void GPIOEIntHandler(void);

  • Vektor tablosuna gerekli yerlere eklemeler yapılır. Burada ilgili kesmelere fonksiyonlar tanımlanır.

    GPIOEIntHandler,                       // GPIO Port E
    GPIOFIntHandler,                        // GPIO Port F

= Kaynaklar =
[1] Texas Instruments, gpio_jtag.c, GPIO JTAG Recovery Örneği

[2] http://www.ti.com/tool/ek-lm3s8962

[3] http://www.ti.com/tool/ccstudio?DCMP=dsp_ccs_v4&HQS=Other%252BOT%252Bccs

VirtualBox ve Kabuk

VirtualBox kabuk altında kontrol etmek için,

Sanal Makineyi Çalıştırmak

$ VBoxHeadless --startvm "debian-1"

 Mevcut Diskleri Listelemek 

$ VBoxManage list hdds

 Sanal Makinelerin Bilgileri Listelemek 

$ VBoxManage showvminfo "debian-1"

 OVF Dosyasını Import Etmek 
VBoxManage import debian.ovf

Kaynaklar

[1] http://femhub.org/doc/src/vbox.html

Terminali Burada Aç eklentisi

Dizinleri gezerken kabuk açmak istediğinizde bir kabuk açıp cd komutu ile o dizine gitmek gerekmektedir. Bu eylemi kısaltmak için nautilus eklentisi kurulabilir. Mevcut dizin içinde kabuk açmayı, sağ tıklayarak açmamıza imkan sağlar.

# apt-get install nautilus-open-terminal

Kaynak
[1] http://ubuntu-tutorials.com/2007/05/13/nautilus-open-terminal-terminal-quick-launch/

Follow

Get every new post delivered to your Inbox.