ARM Cortex-M3’e Isınma Turları… LPC1768 JoyStick Deneme Programı…


Yeni edindiğim deneme kartım POWERAVR-LPC1768 üzerinde bu işlemciye alışabilmek için “Keil uVision” da yazıp derlediğim küçük bir joystick programı…

POWERAVR-LPC1768

Program joyStick’ten gelen bilgiye göre swicth-case döngüsü içerisinde bağlı LED lere çeşitli animasyonlar yaptırıyor.
Evet yazdığım program-CIK(!) LPC 1768 gibi 32bitlik 512Kb belleği ve 100MHz gibi çalışma frekansı olan bir işlemci için hakaret olsada bir yerden başlamak zorundaydım:)


/*---------------------------------------------------------------------*/ 
//  project by Erkan ÇİL  
//  project name joystick and led  
//  project developmend time 10/09/2011  
//  enjoy coding....  
/*---------------------------------------------------------------------*/ 
 
#include "LPC17xx.h"  
uint8_t joyStick;  
/*---------------------------------------------------------------------*/ 

void ledConfig(void)  
{  
	LPC_GPIO2->FIODIR    |=  ((1UL<<0)|(1UL<<1)|(1UL<<2)|(1UL<<3)|  
                             (1UL<<4)|(1UL<<5)|(1UL<<6)|(1UL<<7));  
 }  
/*---------------------------------------------------------------------*/ 

 void joystickConfig(void)  
 {  
	LPC_GPIO1->FIODIR    &=~((1<<25)|(1<<26)|(1<<27)|(1<<28)|(1<<29));  
	LPC_GPIO0->FIODIR     =  0x00200000;  
    LPC_GPIO0->FIOPIN    |=  0x00200000;  

 }  
 /*---------------------------------------------------------------------*/ 
 void delay(void)  
 {  
    volatile unsigned int dl;  
    for(dl=0;dl<2200000;dl++);  
 }  
/*---------------------------------------------------------------------*/ 

 void ledShow1(void)  
{  

 unsigned int led;  
 LPC_GPIO2->FIOPIN = 0x01;  
 for(led=0;led<8;led++)  
 {  
 delay();  
 LPC_GPIO2->FIOPIN = LPC_GPIO2->FIOPIN << 1;  
 }  
 }  

/*---------------------------------------------------------------------*/ 

 void ledShow2(void)  
 {  
 unsigned int led;  
 LPC_GPIO2->FIOPIN = 0x80;  
 for(led=0;led<8;led++)  
 {  
 delay();  
 LPC_GPIO2->FIOPIN = LPC_GPIO2->FIOPIN >> 1;  
 }  
 }  
 /*---------------------------------------------------------------------*/ 

 void ledShow3(void)  
 {  
 unsigned int led,i;  
 for(i=0;i<4;i++){  
 LPC_GPIO2->FIOPIN = 0x01;  
 for(led=0;led<8;led++)  
 {  
 delay();  
 LPC_GPIO2->FIOPIN = LPC_GPIO2->FIOPIN << 1;  
 }  
 LPC_GPIO2->FIOPIN = 0x80;  
 for(led=0;led<8;led++)  
 {  
 delay();  
 LPC_GPIO2->FIOPIN = LPC_GPIO2->FIOPIN >> 1;  
 }  
 }  
 }  
 /*---------------------------------------------------------------------*/ 

 void ledShow4(void)  
 {  
 unsigned int led;  
 LPC_GPIO2->FIOPIN = 0x81;  
 for(led=0;led<5;led++)  
 {  
 LPC_GPIO2->FIOPIN = 0x81;  
 delay();  
 LPC_GPIO2->FIOPIN = 0x42;  
 delay();  
 LPC_GPIO2->FIOPIN = 0x24;  
 delay();  
 LPC_GPIO2->FIOPIN = 0x18;  
 delay();  
 LPC_GPIO2->FIOPIN = 0x42;  
 delay();  
 LPC_GPIO2->FIOPIN = 0x81;  
 delay();  
 }  
 }  
 /*---------------------------------------------------------------------*/ 

 void ledShow5(void)  
 {  
 unsigned int led;  
 LPC_GPIO2->FIOPIN = 0x00;  
 for(led=0;led<255;led++)  
 {  
 delay();  
 LPC_GPIO2->FIOPIN = LPC_GPIO2->FIOPIN + 0x01;  
 }  
 }  
 /*---------------------------------------------------------------------*/ 

 int main (void)  
 {  
     SystemInit();  
     ledConfig();  
     joystickConfig();  
 /*---------------------------------------------------------------------*/ 
     while (1)  
     {  
         joyStick = (LPC_GPIO1->FIOPIN >> 25) & 0X1F;  
    
         switch ((~joyStick) & 0X1F)  
             {  
             case 1  : ledShow3();   break;  
             case 2  : ledShow4();   break;  
             case 4  : ledShow1();   break;  
             case 8  : ledShow2();   break;  
             case 16 : ledShow5();   break;  
             default :{  LPC_GPIO2->FIOPIN = 0x55; delay();  
                         LPC_GPIO2->FIOPIN = 0xAA; delay();  
                         break;  
                     }  
             }  
     }  
 } 
  1. #1 by Hasan GÖKKAYA on 26 Aralık 2013 - 12:18

    Erkan Bey uygulamalarınız benim gibi ARM tabanlı işlemcileri öğrenmeye yeni başlayanlar için sınırlı sayıdaki yol gösterici kaynaklardan biri. Bu nedenle uygulamalarınızın devamı özellikle benim için hayati öneme sahip. Ayrıca uygulamalarınızda daha açıklayıcı olursanız çok daha öğretici olacak.Mesela SystemInıt(); fonksiyonu nedir, nasıl yapılandırılır, ne için yapılandırılır vb. gibi olmazsa olmaz bilgiler çok önemli.
    Ben de POWER AVR LPC1768 kiti aldım fakat o kadar zorlanıyorum ki, daha bir arpa boyu yol alamadım. Çevremde ilgili birisi de yok. Konu hakkında desteklerinizi bekliyorum…
    İyi çalışmalar dilerim…..

(yayınlanmayacak)