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 
Reklamlar

No comments yet

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: