Pic16f1825 Interrupt Priority Level Sorunu ve Çözüm Önerisi

Başlatan yldzelektronik, 16 Eylül 2013, 18:08:21

yldzelektronik

Selamlar.

Bir uygulamada Pic16f1825 mcu üzerinde hem usart rx interrupt hem de timer 4 interrupt kullanmam gerekiyor.
Malumunuz üzere 16f serisinde kesme önceliği ataması yok.Benim için rx interrupt daha önemli.
Zaten timer 4 interrupt içinde sayaç arttırılıyor ve beklenen 2 değerde mi sorgulanıyor.Yani fazla kalmıyorum.
Ancak mcu timer 4 interrupt içinde iken rx interrupt gelirse ne yapacağım?
PIR bayrağını kontrol edip bakabilirim ancak 1 ise hangi adrese yönlendireceğim ki?Bilemedim.

Öneriniz nedir?Nasıl çözebilirim?

#INT_RDA
void  RDA_isr(VOID) 
{
   disable_interrupts (INT_RDA);
   disable_interrupts(INT_TIMER4);
   .
   .
   .
   enable_interrupts (INT_RDA);
   enable_interrupts(INT_TIMER4);
   set_timer4(0);
}

#int_TIMER4
void  TIMER4_isr(void) 
{
   counter++;
   if(counter == 100)
      Masurement_Flag = 1;
   else if(counter == 200)
      Send_Flag = 1;
}


#byte MCU_PIR1 = 0x011
#bit    MCU_RCIF = MCU_PIR1.5
if(MCU_RCIF){
    xxxx
}


İle sorgulayabilirim.Ancak en uygun nerde sorgulamam ve sorgu sonucu mcuyu hangi adrese yönlendireceğim?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

JKramer

Rx kesme bayrağı, Timer4 kesmesindeyken de set edilir. Timer4 kesmesinden çıkıldıktan sonra Rx kesmesine gidilir. Sizin Timer4 kesmesi altında bayrağı sorgulamanıza gerek yok.

Sizin tespit etmeniz gereken; Timer4 kesmesinde en fazla ne kadar zaman harcandığı (giriş-kesme-çıkış) ve usart ile gelen iki byte arasındaki minimum zamandır. Bunun dışında usart'ın alıcı kısmında bir buffer olması lazım (kaç byte'lık olduğunu hatırlamıyorum, kataloğa bakmak lazım); mesela buffer 3 byte'lıksa gelen data'lar arasındaki minimum zaman x 3 olabilir.

Rx'den alamadığınız (kaçırdığınız) data olup olmadığını da overrun (tam adı bu olmayabilir) bayrağının durumuyla anlayabilirsiniz.

yldzelektronik

Timer4 int içinde sadece sayaç arttırdım. Hiç de korktuğum gibi olmadı.Timer isr içinde beklemediğinden veri kaçırmıyorum.

Teşekkürler.

Ek: Rx buffer 1 byte.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.