STM8S105 işlemci kullanarak program geliştiriyorum. Kodlar çok yoğun olduğu için buraya koyamıyorum. Programın neredeyse tümünü dış kesmelerle yönetiyorum. Programımda 9 EXTI, 1 tane delay maksatlı timer(1ms periyotlu,tim4), 1 tane de tim2 ile pwm çıkışı mevcut. Timer4 normal main içerisinde sağlıklı çalışıyor ancak EXTI rutinleri devreye girdiği an tim4 kesmeye girmiyor. Öncelik vermeye çalıştım ancak başarılı olamadım.
Kısaca hem exti hem de timer kesmesi iç içe kullanılamıyor mu?
Flasha veri mi yazıyorsun exti sırasında eğer flasha ulaşıyorsan , benimde başıma geldi bir süre kesiliyor interruplar.
Bunun dışında çok daha yüksek hızlarda kullandım böyle sorunla hiç karşılaşmadım.
Acaba exti interruputu üst üste çağırıyor olabilirmisin çünkü daha işlem bitmeden yeniden aynı interrupt çağrılırsa mcu yu çok meşgul edebilir.
RIm SIM komutu var. SIM interruptları kapatır RIM interruptları açar , exti de çağrılan fonksiyonun ilk satırına rim ekleyip deneyebilirsin.
Bir tavsiye daha;
Bir integer tanımlarsın exti interrupt çalıştığı an inte bir değer atasın mesela 3
main içinde tanımladığın integer değer , eğer 3 ise fonksiyonu çağırsın iş bittiğinde değeri 0 yapsın.
Merhaba,
Belki basit bir yaklaşım olacak ama EXTI interrupt'ını çıkışta temizleyememe durumun olabilir mi ? Bu sebeple interrupt'dan çıkış yapamazsın.
@iboibo nested interruptları destekliyor. Verdiğim önceliğe göre kesme içerisinde kesme geldiğinde o kesme fonksiyonunu yarıda kesip öncelikli olan kesme işlemini yapması gerekiyor.
Flasha veri yazmıyorum. Tamamen I/O kontrolü yapmıyorum. TIM4 üzerinden kullandığım delay fonksiyonunu kesme içerisinde kullanınca böyle bir sorunla karşılaşıyorum.
@MrDarK exti için temizleme bayrağı yok. TIM için var onu temizliyorum
Problemi çözdüm. Delay fonksiyonuna giderken tekrar enableInterrupts() yapıyorum tekrar ve çalışıyor. enableInterrupts() = RIM demek.
Ya STL kütüphanesinden kaynaklanan bir problem ya da exti içerisinde kesmeden çıkana kadar otomatik kesmeyi kapatıyor.