Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: erenbasturk - 03 Temmuz 2014, 09:07:14

Başlık: LPC1768 Timer İnterrupt Problemi
Gönderen: erenbasturk - 03 Temmuz 2014, 09:07:14
İyi Günler,

LPC 1768 ile çalışmaya başladım. Bir timer kesmesi kullanarak bir ledi terslemek istiyorum. Aşağıdaki programın çalışması gerekiyor. Sizde nerede bir hata olabilir?


#include <lpc17xx.h>

int main(void)
{
    LPC_GPIO2->FIODIR |= 1 << 3;
    LPC_SC->PCONP |= 1 << 1;
    LPC_SC->PCLKSEL0 |= 1 << 3;
    LPC_TIM0->TCR &= 0 << 1;
    LPC_TIM0->MCR |= 0x00000003;
    LPC_TIM0->MR0 |= 6000000;
    NVIC_EnableIRQ(TIMER0_IRQn);
    LPC_TIM0->TCR |= 0x00000001;
    while(1){}
    return 0 ;
}

void TIMER0_IRQHandler (void)
{
    if((LPC_TIM0->IR & 0x01) == 0x01)
    {
        LPC_TIM0->IR |= 1 << 0;
        LPC_GPIO2->FIOPIN ^= 1 << 3;
    }
}
Başlık: Ynt: LPC1768 Timer İnterrupt Problemi
Gönderen: yamak - 03 Temmuz 2014, 09:33:54
Eren yanlış hesaplamadıysam 24 ms de bir kesme oluşturuyo senin program.MR0 register'ına 25000000 yükleyip tekrar dener misin?Belki kodun çalışıyodur da sen farketmiyosundur.

Edit:Pardon ben 6000000 u 600000 olarak görmüşüm :)

mesaj birleştirme:: 03 Temmuz 2014, 09:45:34

Timer init ayarlarını aşağıdaki gibi değiştirip tekrar dener misin?

      LPC_TIM0->TCR=0x02;
      LPC_TIM0->IR=0xFF;
      LPC_TIM0->MR0=25000000;
      LPC_TIM0->MCR=0x01;
      LPC_TIM0->TCR=0x01;
      LPC_TIM0->PR=0x00;
  NVIC_EnableIRQ(TIMER0_IRQn);
Başlık: Ynt: LPC1768 Timer İnterrupt Problemi
Gönderen: erenbasturk - 03 Temmuz 2014, 09:52:40
Yusuf dediğin gibi degiştirdim degişmedi . Acaba PLL ayarlarıyla ilgili bir şey yapmalıyım acaba?

#include <lpc17xx.h>

int main(void)
{
    LPC_GPIO2->FIODIR |= 1 << 3;
    LPC_SC->PCONP |= 1 << 1;
    LPC_SC->PCLKSEL0 |= 1 << 3;
    LPC_TIM0->TCR=0x02;
    LPC_TIM0->IR=0xFF;
    LPC_TIM0->MR0=250000000;
    LPC_TIM0->MCR=0x01;
    LPC_TIM0->TCR=0x01;
    LPC_TIM0->PR=0x00;
NVIC_EnableIRQ(TIMER0_IRQn);
    while(1){}
    return 0 ;
}

void TIMER0_IRQHandler (void)
{
    if((LPC_TIM0->IR & 0x01) == 0x01)
    {
        LPC_TIM0->IR |= 1 << 0;
        LPC_GPIO2->FIOPIN ^= 1 << 3;
    }
}


mesaj birleştirme:: 03 Temmuz 2014, 10:05:56

yusuf kusura bakma abi ya dünden beri "reset and run" işaretli değilmiş :D
Başlık: Ynt: LPC1768 Timer İnterrupt Problemi
Gönderen: yamak - 03 Temmuz 2014, 10:07:53
Evet o gözümden kaçmış.
C:\Keil_v5\ARM\Boards\Keil\MCB1700\Blinky klasöründen system_LPC17xx.c dosyasını senin proje klasörüne kopyalayıp daha sonra keil'dan Add existing file to .... dan dosyayı projene dahil edip main fonksiyonunun başında SystemInit() fonksiyonunu çağırıp deneyebilir misin?
Başlık: Ynt: LPC1768 Timer İnterrupt Problemi
Gönderen: erenbasturk - 03 Temmuz 2014, 10:17:02
kodlar çalıştı şuan, sorun ben dün keil'i kapatıp açmıştım kapatıp açınca "reset and run" kutucuğundaki seçili işaret kalkmış şuan sorun yok :D
Başlık: Ynt: LPC1768 Timer İnterrupt Problemi
Gönderen: yamak - 03 Temmuz 2014, 10:19:45
Ondan dolayı bi sorun olmaması lazım aslında.SystemInit i çağırmadan çalıştı mı?

Edit:Startup dosyasına baktım orda çağırılıyomuş SystemInit.Benim uğraştığım zamanlarda çağırılmıyodu :)