Sosyal Medya  

FacebookTwitterDiggLinkedinRSS Feed
   

   
   

Adım Adım ARM Programlama 3 - Kesmeler ve Olaylar isimli makalemde, ARM işlemciler için kesmeler konusuna giriş yapmıştık. Bu makalemde de kesmeler konusuna biraz daha yakından bakacağız ve dış kesmeler üzerinde(EXTI) duracağız. Eğer kesmeler hakkında çok fazla bilginiz yoksa, bu makaleye geçmeden önce bir önceki makalemi(Adım Adım ARM Programlama 3 - Kesmeler ve Olaylar) okumanızı öneririm. Konu, makale boyunca STM32F107x mikroişlemcisi üzerinden ele alınacaktır. Ayrıca bir sonraki makalemde de konuyla ilgili STM32F107x entegresi kullanılarak örnek bir uygulama yazacağız.

 Niçin Kesme Kullanılır?

Kesmeler, bir sistemin doğru çalışması için hayati öneme sahiptir. Çevremizdeki bir çok sistem kesmeler ile kontrol edilmekte. Örneğin; bir elektrik sayacı düşünün. Kişinin ne kadar elektrik harcadığını ölçebilen bir sistem. Elektrik sayacında bulunan sensör, her 1 watt harcandığında, 1 pals üretir. Sisteminizde kullandığınız işlemci, her pals geldiğinde hafızasında tuttuğu değeri 1 arttırmaktadır. Sistemimizin en önemli görevi bu pals sinyalini yakalamak olduğundan dolayı, hiç bir şekilde bu pals sinyallerini kaçırmaması gerekir. İşte burada dış kesme kullanılır. İşlemciye her pals gelişince, işlemci o an her ne yapıyorsa o işi bırakır ve hafızasında tutmuş olduğu sayaç değerini 1 arttırır.

Bir başka örnekte; bir pres makinası düşünelim. 3adet butonu olsun: aşağı, yukarı, dur. Aşağı butonuna basılıyken pres aşağı doğru hareket eder, yukarı butonuna basılıyken de yukarı doğru hareket eder, dur butonuna basıldığında da pres o an hangi konumdaysa orada durur. Sistemin buradaki ana görevi, butonların basıldığını anlamak ve basılan butona göre presi hareket ettirmek. Burada üç buton için üç farklı dış kesme kulanılır. Dur butonu burada en önemli özelliğe sahiptir ve acil durumlarda bu buton kullanılır. Bu yüzden Dur butonu basıldığında diğer butonların hangi durumda olduğu önemli değildir. Yani Dur butonunun önceliği diğer iki butondan yüksek olmalıdır.

Son örneğimizde de bir asansör düşünelim. Asansörde birçok buton bulunmakta. Bu butonların içinde bir acil durum butonu da yer alır. Ayrıca yeni asansörlerde, kapı hizasında sensörler de bulunmakta. Normal şartlarda işlemcimiz, hangi katın numarası basıldıysa, motoru çalıştırır ve asansörü o kata yönlendirir. Asansör haraket ederken, asansör ile duvar boşluğu arasına bir cismin sıkışması anında sensörler devreye girer ve asansörün durdurmasını sağlar. Aynı görevi acil durum butonu da yapmaktadır. İşlemcimiz, sensörden veya butondan gelen sinyali kaçırırsa can ve mal kaybı yaşanabilir. İşlemci, asla ve asla bu sinyalleri kaçırmamaldır. Bu yüzden de acil durum butonu ve sensörler için dış kesme kurulmalıdır. Böylece, sensörden veya acil durum butonundan bilgi gelldiğinde, işlemci o an her ne yapıyorsa o işi bırakır ve kesme fonksiyonuna gidip motoru durdurur.

Dış kesmeleri günlük hayatımızda bulundan hemen hemen bir çok sistemde görebiliriz. Bu yüzden bu konunun iyi anlaşılması ve yapacak olduğumuz bir çok uygulamada bu kesmelerin kullanılması gerekmekterdir.

External Interrupt Controller(EXTI)

STM32F107x mikroişlemcisinde 20adet kenar tetiklemeli dış keme bulunmakta. Peki nedir kenar tetiklemeli? Dış kesmeye bağlı sinyallerimiz, normal durumdayken ya 1 ya da 0 konumunda bulunmaktadır. Ne zaman ki sinyalimiz 1'den 0'a veya 0'dan 1'e geçti, işte tam bu geçiş anında işlemcimiz dış kesme alır ve dış kesme fonksiyonuna gider. Bu olaya kenar tetiklemeli kesme denir.  Eğer sinyalimiz 1'den 0'a geçtiğinde kesme almak istiyorsak düşen kenar kesmesi, eğer 0'dan 1'e geçtiğinde kesme almak istiyorsak da yükselen kenar kesmesi oluşturulmalıdır. Bazı durumlarda hem düşen hem de yükselen kenarda kesme sinyali almak isteriz. STM32F107x GPIO pinleri için hem yükselen kenar hem de düşen kenar kesmelerini de desteklemektedir.

STM32F107x ARM mikroişlemcisinin dış kesme blok diyagramı aşağıdaki gibidir.

İşlemciyi Uyandırma Olay Yönetimi (Wakeup Event Management)

 Adım Adım ARM Programlama 3 - Kesmeler ve Olaylar isimli makalemde, sistemler için güç tasarrufunun öneminde ve güç tasarrufu yapmak için boş anlarda işlemciyi uyuttuğumuzdan bahsetmiştik. Uyuyan işlemciyi 2 türlü kesme ile uyandırmamız mümkün:

  1. İşelmcinin kendi dinamiği içinde bulunan kesmelerden herhangibiri geldiğinde
  2. Dış kesmeye sinyallerinden herhangi biri geldiğinde

 Dış Kesmelerin Kurulumu

Dış kesmeler çok geniş bir öleğe sahiptir. Hemen hemen tüm donanımsal kesmeler(USB, ETHERNET, RTC vs) dış kesme olayına tabidir. Ayrıca kendi içerisinde yer alan zamanlayıcılar(Timer) da dış kesme ailesine dahil olmakta.

Donanımsal Kesmelerin Kurulumu

  1. 20 adet dış kesmeden hangisi aktif edilecekse o kesme pini, Interrupt Mask Register(EXTI_IMR) kayıtçısından ayarlanır.
  2. Yükselen ya da Düşen kenar tetiklemeleri için EXTI_RTSR ve EXTI_FTSR kayıtçıları ayarlanır.
  3. Dış kesmelerden hangisi aktif olacaksa, genel dış kesme kayıtçısından (EXTI) aktif edilir.

Yazılımsal Kesmelerin Kurulumu

Interrupt Mask Register(EXTI_IMR), Event Mask Register(EXTI_EMR) ve Software Interrupt Event Register(EXTI_SWIER) kayıtçıları ayarlanır.

 Yukarıdaki tabloda GPIO dış kesmelerinin tablosu bulunmakta. STM32F107x arm mikroişlemcisinde 16 adet GPIO kesmesi buşunur. Geri kalan 4 adet dış kesme de şu şekildedir:

  • EXTI line 16 => Programlanabilir voltaj dedektör (PVD) çıkışı
  • EXTI line 17 => Gerçek Zaman Saati (RTC) alarm olayı
  • EXTI line 18 => USB wakeup olayı
  • EXTI line 19 => Ethernet wakeup olayı

Kesme Kayıtçıları

Interrupt Mask Register ( EXTI_IMR )

 Event Mask Register ( EXTI_EMR )

 

 Rising Trigger Selection Register ( EXTI_RTSR )

Falling Trigger Selection Register ( EXTI_FTSR )

Software Interrupt Event Register ( EXTI_SWIER )

EXTI Register Map

Bu makalemde dış kesmeleri anlattım. ARM Programlama - Uygulama 2 - EXTI isimli makalemde konuyla ilgili örnek bir program yer almaktadır. Umarım sizler için faydalı bir yazı olmuştur.

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

Yorumlar   

+4 # Ayhan 07-01-2014 10:06
Yararlı bir yazı olmuş eline sağlık 8)
Cevap | Alıntıyla Cevapla | Alıntı
0 # Ömer Aydın 23-08-2014 22:41
yazılarınıza ek olarak video ile anlatım yaparsanız çok sevinirim genel olarak yazdıgınız tüm arm yazılarınızı okudum fakat bi yerden sonra takılıyorum ilgilenirseniz sevinirim.Elini ze Emeginize Saglık
Cevap | Alıntıyla Cevapla | Alıntı
+1 # Super User 25-08-2014 07:44
İleriki süreçte video paylaşımlarım olacak ama şuan için altyapım hazır olmadığından video çekemiyorum. Ama inş ilerleyen zamanda bu sorunları da aşacağız. Takıldığınız yerleri belirtirseniz yardımcı olmaya çalışırım.
Cevap | Alıntıyla Cevapla | Alıntı
0 # Mehmet 14-10-2014 15:02
Oldukça yararlı bir çalışma olmuş, elinize emeğinize sağlık..
Cevap | Alıntıyla Cevapla | Alıntı
0 # #Kubilay 10-01-2017 14:30
Anlatım dilin çok sade ve anlaşılır olmuş çok teşekkürler.
Cevap | Alıntıyla Cevapla | Alıntı
+1 # Ahmet Serbey 13-06-2017 11:51
Üstad merhaba, bir eleştirim var.
Ben embedded programmming öğrenmeye çalışıyorum. Bu amaçla bir sürü video izliyorum, bir süür makale okuyorum, evo board aldım STM32 programlamayı çözmeye çalışıyorum. Arrtık anladığımı düşünüyorum.
Çabanızı takdir ediyorum, ayrıca teşekkür ediyorum. Ancak bu arm makaleleriniz biraz yavan. Yani olmamış. Aslında olmuş deme eşiğine yakın ancak biraz daha katkı istiyor.
Mesela bu makale, manual'den kopyalayıp yapıştırmışsını z, bunu araştırıp anlayıp bulup buraya koymak epey emek ama koyduktan sonra iyice olmasa bile biraz açıklamak gerekirdi. Açıklama kısmı eksik. Havada bırakıyor. Bazen havaya da çıkarmıyor.
Lütfen hiç bilmeyen yada az bilen gözüyle bir bakmayı deneyip gözden geçirin makalelerinizi.
Bu eleştirim iyi niyetlidir. Emeğinizin karşılığını bulması dileklerimle..
Teşekkürler..
Cevap | Alıntıyla Cevapla | Alıntı

Yorum ekle


Güvenlik kodu
Yenile

   
   
© muhammetefe.com