lpc2104- interrupt startup kodunda nasıl bağlanır

Başlatan c0bra, 15 Kasım 2010, 21:22:42

c0bra

Merhaba arkadaşlar, armda I2C yi kullanayım dedim. interruptları çalıştıramadım. Bu startup koduyla ilgili bi sorun var heralde. I2C ile interrupt üretiyorum. ancak interrupt a dallanma olmuyor. I mean,  interrupt function doesnt start. Please help.



Startup kodunda aşağıdaki kod alanına bişeyler yazmam gerekiyor. ama bi türlü yazamadım.nerdeyse 3 gün olacak. bayram bile geldi.

     
Vectors      
         
            
         
            LDR     PC, Undef_Addr
                LDR     PC, SWI_Addr
                LDR     PC, PAbt_Addr
                LDR     PC, DAbt_Addr
                NOP                            ; Reserved Vector
            LDR     PC, IRQ_Addr
                LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr
                LDR     PC, FIQ_Addr


 
Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                      ; Reserved Address
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
IRQ_Handler     B       IRQ_Handler
FIQ_Handler     B       FIQ_Handler      

main{
     /* Initialize VIC for I2C use */                           VICVectCntl1= 0x29; /* highest priority and enabled */
                                                VICVectAddr1=(unsigned)I2CISR;                                  VICIntEnable= 0x200; /* enabling I2C */

                        PINSEL0=0X50;//pinleri i2c olarak ayarla
                        PINSEL1=0X00;
                        IODIR0 = 0xFFFFFF50;
/////////////////////////////////////////////////////////////////////////////////////
                                   I2CONCLR=0x6c; /* clearing all flags */
         I2CONSET=0x40; /* enabling I2C */
                                                I2SCLH=25;
                                                I2SCLL=25;   
       MemAddress=0;
      I2CAdres =  0xA0;
         I2CONCLR=0XFF;
      I2CONSET=0x40;
      I2CONSET=0x20;

while(1)    ;


//  bu alttaki yere dallanmıyor. halbuki I2C interrupt isareti SI enable oluyor. ama ne iş, bi türlü anlayamadım altta ISR ye dallanmıyor.

   void I2CISR(void) __irq
          {

                           IOSET0=IOSET0|0XF0000000;// buda interrupta geçmiş mi diye bakıyorum.

                                           // burda ilgili case ler falan var.
}

Selam ve saygılar.

c0bra

abi biri bi cevap yazsın bi zahmet, bayram öncesi sevaptır.

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

c0bra

devre yok, keil de debug yardımıyla çıktılara bakıyorum.  interrupt fonksiyonun içine  "IOSET0=IOSET0|0XF0000000;" yazdım. debugda çalıştırdığımda ilgili portlar çıkış vermiyor. keil de debug yapıyorum.

ahmet2004

Proje olarak ekleyebilirmisin animasyon dosyasınıda ekle bakalım.

justice_for_all

arkadsim peki I2C pininde nasil kesme olusturuyosun ki...devre olmadan
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

c0bra

I2C pininde interrupt oluşmaz. external interrupt değil bu.  I2C de start verildiği anda I2C nin status registeri  içeriği değişir.Bun değişim sonrası I2C has olan SI biti set olur. Bunun sonucunda da ilgili fonksiyona(benim kodumda I2CISR dir) dallanır.

   VICVectCntl1= 0x29; /* highest priority and enabled */
                VICVectAddr1=(unsigned)I2CISR;
   VICIntEnable= 0x200; /* enabling I2C */

Ahmet in dediği animasyondan bişey anlamadım. ben keil da programı debug yardımıyla koşturuyorum

http://www.resimupload.com/ds961640058_asr.html 
buraya naptığımı gösteren resim koydum.

c0bra

keil in ayarlarını yapmak lazımmış. ayarlardaki linker sekmesinde ufak bi tik atınca oluyor.


ahmet2004

Şu ufak tik kısmınıda bir resimle perçinlesen çok açıklayıcı olurdu.

Nasıl yapıldığını bilmek isteriz.

c0bra

alt f7 ye tıkla deyince resimdeki pencere çıkıyor.
ordan linker sekmesini tıklıyoruz.
ordan da en üstte bulunan "use memory layout..." u tıklıyoruz

resim e aşağıdaki linkten ulaşabilirsiniz.

http://www.resimupload.com/ds918895691_aysquaresi.html

Selamlar.