Sosyal Medya  

FacebookTwitterDiggLinkedinRSS Feed
   

Bu makalemde ARM işlemciler üzerinde kesme işlemlerinin nasıl yapıldığını inceleyeceğiz. Konuyu, ST firmasının üretmiş olduğu STM32F107VCT mikroişlemcisi üzerinden anlatmaya çalışacağım. Ama kesmeler ve olaylar diğer ARM işlemcileri için de aynı mantığı içermekte. Bu yüzden, burada öğreneceğiniz bilgileri bir başka ARM serisinde de ullanabilirsiniz. Daha önceki makalelerimde de söylediğim gibi; işin aslı, elinizde bulunan ARM işlemcisi için yazılmış olan kütüphaneleri güzel bir şekilde okuyup yorumlayabilmektir.

Kesme Nedir?

Yazılmış olan bir program normal akışında devam ederken, kurulu olan herhangi bir olaydan dolayı oluşan özel durum için; o an yapmakta olan işini bırakıp, bu özel durumun belirtmiş olduğu fonksiyona giderek, o fonksiyonu yerine getirmesi ve daha sonra kaldığı yerden normal akışına devam etmesine kesme denir.

Örneğin; bir otelde ışıkları kontrol eden bir otomasyon sistemi olduğunu düşünelim. Bu otomasyon sistemine bir de duman sensörü kesme olarak tanımlansın. Normal durumlarda bu sistem, sadece oteldeki ışıkları kontrol etmekte. Ne zamanki otelde yangın çıktı ve duman sensörü bu dumanı algılayıp işlemcimize haber verdi, işte o anda işlemcinin işi ne olursa olsun, o işi bırakıp alarmı çalıştırmak için belirtilen fonksiyona gider ve alarmı çalıştırır. Bir başka örnekte; bir aracın elektronik kısımlarını kontrol eden bir işlemci, ne zaman bir kaza yapsa; o anda işini bırakıp hava yastıklarının şişmesini sağlamakta.

Kesmeler bir sistemin belkemiğidir diyebiliriz. Çok önemli olayları, hiç bir aksaklık yaşamadan yerine getirmek için sistemlerimizde kesme kullanmamız şart.

 Nested Vectored Interrupt

STM32F107x serisi nested vectored interrupt özelliğine sahiptir. Peki nedir bu özellik? Nested; Türkçe'de iç içe geçmiş anlamına gelir. Vectored; kelimesi de ARM içerisinde bulunan her bir kesme için belirli bir adres ayrıldığını ifade eder. Nested Vectored Interrupt; birden fazla kesmenin iç içe çalışabildiğini söylemekte. 

Konu bir örnekle çok daha iyi anlaşılabilir. İşlemcimiz çalışırken, önceliği düşük olan bir kesme aktif oldu ve programımız aktif olan kesme içerisine girdi. Programımız, aktif olan kesme fonksiyonu içerisinde işlem yaparken, önceliği yüksek olan bir kesme daha geldi. İşte tam burada; programımız, içinde bulunduğu kesmenin işlemini durdurmakta ve önceliği yüksek olan kesmenin fonksiyonuna gitmekte. Buradaki işi bittikten sonra programımız tekrar yarım bıraktığı kesme fonksiyonunun içerisine girer ve işlemini kaldığı yerden devam eder. Normal şartlarda PIC mikrodenetleyici ailesi ile çalışıyor olsaydık, programımız önce içinde bulunduğu kesmenin işlemini bitirir ve daha sonra diğer gelen kesme fonksiyonunun içine girerdi. İşte bu özellik Nested Vectored Interrupt yani iç içe geçmiş kesmeler diye adlandırılır.

STM32F107x Kesme Özellikleri

  • 68 adet programlanabilir kesme kanalı
  • 16 adet programlanabilir öncelik sırası: Kesmeler öncelik sırasına göre çalışmakta. Aynı anda iki kesme geldiğinde, önce hangi kesmenin yerine getirileceğini bu öncelik sıraları belirlemekte.
  • Kesme fonksiyonuna geçişi sırasında düşük gecikme süresi(low latency): İşlemcilerde herhangi bir kesme oluştuğunda, program öncelikle elindeki verileri ve kaldığı adresi hafızasına kaydeder. Daha sonra kesme fonksiyonuna gider. Haliyle arada bir zaman kaybı oluşmaktadır. STM32F107x serisinde bu zaman kaybı 6us kadardır. İşlemci normal programından kesme fonksiyonuna giderken 6us süresi boyunca elindeki verileri kaydeder. Kesme fonksiyonundan çıkıp tekrar normal programına dönmesi için, öncelikle hafızasından kaldığı yeri ve mevcut verileri alması gerekir. Bunun için de 6us kayıp oluşur. Yani toplamda 12us kayıp oluşmakta. Bu süre işlemci perdormansın orta seviyelerde olduğunu gösterir.
  • Güç yönetimi: Günümüzde enerji tasarrufu oldukça önem kazanmıştır. Yapılan bir sistemin, ufak bir pille çok uzun süre çalışmasını hedefleriz. Bunun için de sistemi mümkün olduğunca az güçte çalıştırmamız gerekir. STM32F107x uyku modunda çok az enerji harcamaktadır. Bu yüzden programımızı kesmeler üzerine kurup, işlemcimizi uyku moduna geçirdiğimizde, işlemci kesme gelmesini bekler ve kesme geldiği anda uyku modundan çıkarak gerekli işlemleri yapar. Böylece sistemden çok az enerji harcanmış olur.
  • Sistem kontrol kayıtçılarından kontrol edilebilme: Tüm kesmeleri, doğrudan sistem konrol kayıtçılarından kurabilir, kaldırabilir veya programın herhangibir anında müdahale edebilrisiniz.

STM32F107x Kesmeleri ve Vektör Tablosu

 

 

Bu makalemde STM32F107x arm işlemcisini göz önüne alarak, kesmelere giriş yaptık. Adım Adım ARM Programlama 4 - EXTI isimli makalemde kesmelere daha yakından inceliyoruz ve dış kesmeler hakkında bilgi sahibi oluyoruz.

Şimdilik sağlıcakla kalın...

Yorumlar   

-6 # efe 29-06-2014 07:57
hocam merhaba; ben stm32 kiti ile mesafe ölçüm uygulamasını yapacağımda hc-sr04 sensörü ile acaba gerekli keil kodları hakkında yardımcı olacilirmisiniz .
Cevap
0 # Cem üstün 30-03-2020 05:32
Kesmeleri bir türlü yapamadim , donanimin nekadar iyi olsada işlemcin kesmeye harici tetikleme gelmedende giriyor
Cevap

Yorum ekle


Güvenlik kodu
Yenile

   
© muhammetefe.com

Joomla Hata Ayıklama Konsolu

Oturum

Profil Bilgisi

Bellek Kullanımı

Veritabanı Sorguları