İşlemci Kesmeden çıkmıyor

Başlatan strom, 08 Kasım 2010, 04:10:40

strom


#include <LPC213X.H>
void EXTInt1(){

      IO0SET = 0x00003800;
     EXTINT = 0x2;
      VICVectAddr = 0;
}
void Delay(){
   unsigned int i = 0x000fffff;
   while(i--);
}

int main(){
   PINSEL0 = 0X20000000;
   IO0DIR = 0x00003C00;

   VICVectCntl0 = 0x2F;               //EINT1
    VICVectAddr0 = (unsigned) EXTInt1;
   VICIntEnable = 0x00008000;
   while(1){
      IOSET0 = 0x00000400;
      Delay();
      IOCLR0 = 0x00000400;
      Delay();
   }
}

Yukarıdaki kodu kullanıyorum ve malesef program kesmeye giriyor ve çıkmıyor.Normalde p0.10 bacağındaki led yanıp sönüyor.Olması gereken p0.14 bacağından bir tetikleme gelince p0.11, p0.12 ve p0.13'deki ledlerin yanması ve p0.10'daki ledin yanıp sönmeye devam etmesi.Ne yazık ki durum böyle değil.Kesmeye giriyor.Yanması geeken ledler yanıyor ve bir daha asla kesmeden çıkmıyor (bunuda p0.10 bacağındaki ledin yanıp sönmemesinden anlıyorum)
Kodu Barış Samancı hocamın notlarından aldım.Aynı kodu kullanmama rağmen böyle bir hata aldım.Sizce sebep ne olabilir?

(Keil uVision 4.02 versiyonunu kullanıyorum)

Bu da startup kodu;

Not: Keil'in debug özelliğini kullandığımda gördüm ki program
__user_initial_stackheap

                LDR     R0, =  Heap_Mem
                LDR     R1, =(Stack_Mem + USR_Stack_Size)
                LDR     R2, = (Heap_Mem +      Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR
                ENDIF
satırında takılı kalıyor.

ahmet2004


EXTInt1 in IRQ olduğunu programa bildirmemişsin.

void EXTInt1(void) __irq
{

}

strom

Nasıl olduysa gözümden kaçmış.Böyle bir hataya sebebiyet verebileceğinide denemesem  bilemezdim.Çok teşekkür ederim.Çalıştı şimdi.

c0bra

abicim sen kesmeden çıkaramamışsın, ben kesmeye dallanamıyoru. kesme oluştuğunu debugdan anlıyorum ama bi türlü kesmeye girmiyor. startup kodunda bişeyler mi yapmak lazım.??

Selamlar.

strom

Hangi kesmeyi ve hangi derleyiciyi kullanıyorsun?

c0bra

keil uvision4 lpc2104 kullanıyorum. vector ayarlarını falan hepsini yaptım. dallanmıyor.

strom

Benim kodu bir denesene.Acaba kullandığın kesme için gereken ayarlarımı yapamıyorsun yoksa VIC'i mi ayarlayamıyor kod.Büyük ihtimalle kullanacağın donanım kesmesini aktif etmekte problem yaşıyorsun.Yukardaki kodu bir dene bakim.
void EXTInt1() __irq{

      IO0SET = 0x00003800;
     EXTINT = 0x2;
      VICVectAddr = 0;
}

bu eklemeyi yaparak

c0bra

#7
senin kodu debug da denedim dostum.
Şunları yaptım:
-Debug ı çalıştırdım
-Menüden peripherals dan GPIO seçtim.
-Kodu koşturdum
- GPIO pencerisinde P0 ın 10. pini yanıp sönüyor.
-GPIO  penceresinden, ext_int1 için  p0 14 nolu pini enable yapıyorum.
-ve sonuç: interrupta dallanmıyor.

Dediğin gibii donanım kesmesini aktif edemiyorum. enable_IRQ gibi bişey yapmam lazım. bu startup kodunda bişey mi var ne ? yada  main kodda bu  IRQ  yu aktif mi etmem lazım? yoksa hiçbiri mi? Ne yapmam lazım acep?

benim kod burda:
https://www.picproje.org/index.php/topic,30443.0.html