NXP ARM7 – LED on/off

led_12 Merhaba , Öncelikle bu sitede benim amacım programlama yada elektronik donanım tasarımı hakkında eğitim vermek değil ama zamanım ve bilgim düzeyinde bazı tecrübelerimi anlatmayı planlıyorum. Daha çok sitenin amacı kendimi ve yaptığım bazı projelerimi tanıtmak amaçlıdır.

LPC2148’e giriş niteliğinde sizlere bazı programlama bilgileri ve programları vereceğim. LPC2148’in çoğu donanım modülünün nasıl kullanılacağını(IIC,ADC,SPI vs) öğreneceğiz ve böylece 32bit bir uc’lara yetersiz kaynaktan dolayı başlayamayanlar için referans olacaktır.

Bu ilk projemizde NXP firmasının LPC2148 uicro’sunun herhangi bir portuna bağlı led’i nasıl on/off yapacağımız anlatacağım.

Uygulama için gerekenler :

1) LPC2148 geliştirme boardu (LPC21xx’den herhangi board olabilir fakat aralarında register isimlerinde küçük farklılar var dolayısıyla küçük modifikasyonlar gerekir)

2) Derleyici olarak Keil’in free versiyonunu kullanacağız. Keil’de bir proje oluşturmayı bildiğinizi ve derlemeyi yapabildiğinizi varsayıyorum.

3) Uygulamada kullanılacak elektronik malzemeler , aletler ve donanımı en doğru şekilde kurduğunuzu ve kullandığımızı varsayıyorum. (led, direnç ,ölçü aletleri, digital scop varsa iyi olur).


/*****************************************************************************/

// Aykut ULUSAN, Elektronik Mühendisi, IZMIR

/*****************************************************************************/

#include "lpc214x.h" // Nxp LPC2148 için header file

// Fast I/O'yu kullanacağım ve

// Programda kolaylık için bazı atamalar yapıyorum

// Portu low'a çekelerek

#define LED1_ON FIO0CLR = 0x00200000 // led1 port 0.21 on
#define LED1_OFF FIO0SET = 0x00200000 // led1 port 0.21 off
#define LED2_ON FIO0CLR = 0x00400000 // led2 port 0.22 on
#define LED2_OFF FIO0SET = 0x00400000 // led2 port 0.22 off

void
DLY_MS(long ms){ // CCLK=60MHz iken 1ms
long i; int j;
for (i = 0; i < ms; i++ )
for (j = 0; j < 7500; j++ );
}

//program buradan başlar

int
main(void){
// öncelikle sistem ve bus(port) hızını ayarlayacağım
PLL0CFG=0x24; // Processor clock=5*12Mhz=60Hz (sistemde 12mHz xtal var) PLL çarpanını 5 yaptık
// PLLCON ve PLLCFG registerleri içerigi degistirildiginde , asagidaki
// proses uygulanir, 1) PLL0FEED=0xAA ve 2)PLL0FEED=0x55
PLL0FEED=0xAA; // Feed process
PLL0FEED=0x55;

PLL0CON=0x1; // PLL'i enable et
PLL0FEED=0xAA; // Feed process
PLL0FEED=0x55;
while(!(PLL0STAT&0x400)) ; // PLL kitleninceye kadar bekle (5*12Mhz=60Mhz'e kitlenir)

PLL0CON=0x3; // PLL'i clock kaynagi olarak ayarla
PLL0FEED=0xAA; // Feed process
PLL0FEED=0x55;

MAMCR=0x2; // MAM Enable
MAMTIM=0x4; // fetch 4CCLK
// bus clock 30Mhz
VPBDIV=0x02; // PCLK = 30 MHz

SCS = 0x03; // I/O portlar fast mode'da olsun
FIO0DIR |= 0x00600000; // pin P0.21 ve P0.22 çikis

while (1){ // sonsuz loop
LED1_ON; // P0.21 ON
LED2_OFF; // P0.22 OFF
DLY_MS(500); // Delay 500 ms
LED2_ON; // P0.22 ON
LED1_OFF; // P0.21 OFF
DLY_MS(500); // Delay 500 ms
}
}
/*****************************************************************************/

Program derlenip çalıştırıldığında 0,5sn aralıkla bir led ışık saçarken diğeri sönüktür.

11 Yorum

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir