Atmel AVR Studio'daki AVR denetleyicisinde kesinti yapın. Kesintiler - AVR'yi incelemek - Makale kataloğu - Mikrodenetleyiciler - çok kolay! Mikrodenetleyici kesintilerini hangi ortamda programlayacağız?

Kesme sistemleri herhangi bir kontrol sisteminin önemli bir parçasıdır.

Mikroişlemci sisteminin işlevlerini ne kadar verimli bir şekilde yerine getirebileceği büyük ölçüde çalışmasına bağlıdır. MK-51 kesme sisteminin genel yapısı Şekil 1'de gösterilmektedir. 14.3.

MK-51 ailesinin mikrodenetleyicileri beş kesme kaynağı için destek sağlar:

* INT0 ve INT1 girişleri yoluyla gelen iki harici kesme (sırasıyla P3: P3.2 ve P3.3 bağlantı noktası hatları);

* zamanlayıcılar/sayıcılar T/C0 ve T/C1'den iki kesinti;

* seri port kesintisi.

Kesme istekleri mikro denetleyicinin özel fonksiyon kayıtlarına kaydedilir: INT0, INT1, T/C0 ve T/C1'den gelen IE0, IE1, TF0, TF1 bayrakları kesme istekleri TCON kontrol kaydında (Tablo 14.4) ve RI bayrakları bulunur ve TI, seri bağlantı noktasını kontrol etmek için SCON kaydındaki seri bağlantı noktasından bir kesinti talep eder.

Tablo 14.4. TCON Kayıt Formatı

0 IT0 Kesinti tipinin ayarlanması INT0

1 IE0 Kesinti isteği bayrağı INT0

2 IT1 INT1 kesinti tipinin ayarlanması

3 IE1 Kesinti isteği bayrağı INT1

4 TR0 Zamanlayıcıyı/sayıcıyı etkinleştir 0

5 TF0 Taşma bayrağı (kesinti talebi) zamanlayıcı/sayıcı 0

6 TR1 Zamanlayıcı/sayaç 1'i etkinleştir

7 TF1 Zamanlayıcı/sayaç 1'in taşma bayrağı (kesinti talebi)

TF0 ve TF1 bayrakları, karşılık gelen zamanlayıcı/sayaç taştığında (daha doğrusu, T/Cx "hepsi birler" durumundan "tamamı sıfırlar" durumuna geçtiğinde) donanım tarafından ayarlanır.

IE0 ve IE1 bayrakları donanım tarafından sırasıyla IT0 ve IT1 harici kesintilerinden ayarlanır. Harici bir istek, ilgili girişteki sinyal seviyesi düşük olduğunda veya bu sinyal yüksek seviyeden düşük seviyeye geçtiğinde (MK'nin harici saat frekansının yarısını aşmayan bir frekansla) bayrağın ayarlanmasına neden olabilir.

İstek türü, TCON kontrol kaydındaki IT0 ve IT1 bitlerinin yazılım tarafından ayarlanmasıyla yapılandırılır. ITx = 0 ayarı, kesme sistemini düşük sinyal seviyesi talep edecek şekilde yapılandırır, ITx = 1 - kesmeyi düşük sinyal seviyesi talep edecek şekilde ayarlar.

TI ve RI bayrakları seri arayüz donanımı tarafından sırasıyla iletimin bitiminden veya alımın bitiminden sonra ayarlanır.

Belirtilen tüm kesme isteği bayrakları, ayarlama ve sıfırlama için programlı olarak mevcuttur. Yazılımda kesme isteği bayrağının ayarlanması, mikro denetleyicinin donanımda aynı bayrağı ayarlamasıyla aynı yanıtı almasına neden olur.

TF0 ve TF1 bayrakları, kontrol ilgili kesme rutinine aktarıldığında donanım tarafından sıfırlanır.

IEx bayraklarının sıfırlanması, yalnızca kesmenin INTx sinyalinin düşüşünü algılayacak şekilde yapılandırılması durumunda, kesmeye hizmet verilirken donanımda gerçekleştirilir. Kesme, istek sinyalinin seviyesini algılayacak şekilde yapılandırılmışsa, IEx bayrağının sıfırlanması, isteği kaldırmak için kesme kaynağına etki eden kesme hizmet programı tarafından gerçekleştirilmelidir.

TI ve RI bayrakları yalnızca yazılımla sıfırlanabilir.

Her bir kesme türü, IE kesme etkinleştirme kaydının karşılık gelen bitlerinin ayarlanması veya silinmesiyle ayrı ayrı etkinleştirilir veya devre dışı bırakılır. Bu kayıt ayrıca tüm kesintiler için genel bir devre dışı bırakma biti içerir. IE kaydının formatı tabloda verilmiştir. 14.5.

Tablo 14.5. IE kayıt bitlerinin atanması

Kayıt konumu

Bit anımsatıcıları

İşlev

Tüm kaynaklardan gelen kesintileri devre dışı bırakın

Kullanılmamış

Kullanılmamış

Kesintiyi devre dışı bırak seri port

T/C1 zamanlayıcı/sayaç kesmesini devre dışı bırak

Kesintiyi devre dışı bırak dış kaynak INT1

Zamanlayıcı/Sayaç Kesintisini Devre Dışı Bırak T/C0

INT0 harici kaynaktan kesmeyi devre dışı bırak

Her kesme türüne programlı olarak iki olası öncelikten biri atanabilir: 0 - en düşük veya 1 - en yüksek.

Öncelikler, IP kesme önceliği kaydındaki karşılık gelen bitin ayarlanması veya silinmesiyle yapılandırılır. Bu kaydın formatı tabloda verilmiştir. 14.6.

Farklı önceliklere sahip kaynaklardan aynı anda kesme istekleri alındığında, yüksek öncelikli kaynaktan gelen istek ilk önce işlenir.

Aynı önceliğe sahip birden fazla kesme isteğinin aynı anda alınması durumunda, bunların işlenme sırası mikrodenetleyici donanımı tarafından belirlenir ve yazılım tarafından değiştirilemez. Bu sıra, yoklama kesme isteği bayraklarının sırasına karşılık gelir ve şuna benzer:

IT0 -> TF0 -> IT1 -> TF1 -> (RI, TI)

Tablo 14.6. IP kaydı bit atamaları

Kayıt konumu Bit anımsatıcı İşlev

7 - Kullanılmıyor

6 - Kullanılmıyor

5 - Kullanılmıyor

4 PS Seri port kesinti önceliği

3 PT1 Zamanlayıcı/Sayaç Kesinti Önceliği T/C1

2 PX1 Harici kaynak INT1'den kesme önceliği

1 PT0 Zamanlayıcı/Sayaç Kesinti Önceliği T/C0

0 PX0 Harici kaynaktan kesme önceliği INT0

Donanımla uygulanan bir kesme işleyici çağrısı aşağıdaki eylemlerden oluşur:

* program sayacının değerini yığına kaydetme;

Her kesme kaynağı için kesme işleyicisi giriş noktaları donanımda sabittir. Değerleri tabloda verilmiştir. 14.7.

Tablo 14.7. Kesme işleyicilerinin giriş noktalarının adresleri

Kesinti Kaynağı

Kesme işleyicilerinin giriş noktalarının adresleri

Harici kesinti( İTO)

Zamanlayıcı-sayaç(TFO)

Harici kesinti(IT1)

Zamanlayıcı sayacı(TF1)

Seri bağlantı noktası(R1 veya T1)

Kesme işleyicisinin ilk komutu belirtilen adreste bulunmalıdır. Kural olarak, böyle bir komut, programda işleyicinin gerçekte bulunduğu yere koşulsuz olarak atlamak için kullanılan bir komuttur.

Kesinti işleme rutinine geçildiğinde, IE kaydının durumuna bakılmaksızın otomatik olarak, hizmet verilen kesmenin öncelik düzeyine eşit öncelik seviyesine sahip tüm kesmeler devre dışı bırakılır - yani eşit öncelik düzeyine sahip iç içe geçmiş kesmeler devre dışı bırakılır . Böylece, düşük öncelikli bir kesme (IP kaydının karşılık gelen bitinde "0"a sahip olan), yüksek öncelikli bir kesmeyle (IP kaydının karşılık gelen bitinde "1"e sahip olan) kesilebilir, ancak bir düşük öncelikli olan. Yüksek öncelikli bir kesmeye hizmet vermek başka bir kaynak tarafından kesintiye uğratılamaz.

Kesme işleyicisinden geri dönüş, kesme işleyicisinin çağrıldığı sırada orada depolanan PC program sayacının değerini ve kesme önceliği mantığını yığından geri yükleyen RETI talimatı kullanılarak gerçekleştirilir.


Kesintilerden bahsedelim. Kesinti kelimesi kendi adına konuşur; ek eylemler gerçekleştirmek için bir süreç bir süre durdurulur. Kesintiler harici veya dahili olabilir. Arkadaşımdan duyduğum basit bir örnek vereyim...

Mutfakta bulaşıkları yıkamaya hazırlandı, heyecanla kolları sıvadı... ama bulaşıklar yağlı çıktı ve raflardan birinde yağlı bulaşıkları yıkamak için deterjan bulmak için durmak zorunda kaldı. mutfak ünitesinde görev yaptıktan sonra tekrar görevine devam etti. Ancak bir noktada telefon çaldı ve işine tekrar ara verdi, telefonu aldı, kayınvalidesi aradı ve ziyarete geleceğini söyledi, bu yüzden o gelmeden önce markete gidip yiyecek satın alması gerekiyordu. ulaşmış. Mağazaya gittim ve ancak o zaman bulaşıkları yıkadım.

Bu örnekte iki tür kesinti gösterilmektedir; birincisi ana işin yürütülmesiyle ilişkilidir - yağlı bulaşıklar için deterjan aramak - dahili bir kesinti, ikincisi - telefon görüşmesi– harici kesinti.
Bir mikro denetleyicide, diğer kaynaklardan gelen sinyaller nedeniyle harici kesintiler meydana gelir, mikro denetleyicinin kendisinde yerleşik cihazlar nedeniyle iç kesintiler ortaya çıkar. Kesintiler neden bu kadar çekici?
Birincisi, başka bir işlevi gerçekleştirmek için ana süreci durdurabilir ve daha sonra bu işleme devam edebiliriz.
İkincisi ve muhtemelen çoğu durumda asıl olanı, iç nedenlerden dolayı tüm işlevleri yerine getirme sürecinin hızlandırılması olarak kabul edilir. ek cihazlar. Örneğimize dönelim. Diyelim ki arkadaşım karısı eve geldiğinde bulaşıkları yıkamaya başladı. Yağlı bulaşıkları görünce ondan bulaşık deterjanı bulmasını ister ve kendisi yıkarken zaten ona bu sıvıyı getirecektir. Ama sonra telefon çaldı, eşim telefonu aldı, annesiyle konuştu ve markete gitti. Birlikte her şey çok hızlı yapıldı!
Ve sıkışıp kalmak daha da kolaydır - yani. ana program yoktur.
Arkadaşım kanepede oturuyor ve hiçbir şey yapmıyor, hizmetçi kirli bulaşıkları görüyor, ona anlatıyor ve izin aldıktan sonra kendini yıkamaya başlıyor. Telefon çaldığında karısına telefonu açmasını söyler, karısı telefonda konuşur, sohbet markete gider... Güzellik! Bu durumda, mikro denetleyicide birkaç G/Ç cihazı aynı anda çalışır (modern mikro denetleyicilerde bunlardan oldukça fazla olabilir) ve genel işlemci performansı birçok kez artar, ancak cihazlardan gelen kesintiler birbiri ardına sırayla işlenir (aynı anda değil) ), önceliğe bağlı olarak (örneğimizde, eşin hizmetçiden daha yüksek önceliği vardır).

Kesintilerin yönetilmesinden çeşitli kayıtlar sorumludur
SREG – durum kaydı(devletler). Giriş/çıkış cihazları tablosuna bakıyoruz. SREG kaydının yedinci biti genel kesme etkinleştirme bayrağı olarak adlandırılan I (kesme) bayrağı. Bayrak atlanırsa (yedinci bit sıfırdır), tüm kesintiler devre dışı bırakılır. Bayrak kaldırılırsa (I'yi 1'e ayarlayın), kesintileri etkinleştiririz.

I bayrağı şu komutlarla ayarlanır ve sıfırlanır:
SEI - kesintileri etkinleştir
CLI - kesintileri devre dışı bırak
Hangi kesmelerin çalışacağı, - adı verilen kayıtlar kullanılarak ayarlanır - kesinti maskeleri.
Kesinti maskeleri aşağıdaki şekilde belirlenir:
TIMSK,..,..,.. – zamanlayıcılardan ve diğer yerleşik cihazlardan kaynaklanan kesintilerin yönetimi.
GIMSK (Mega ailesinde GIKR) - tüm harici kesintilerin yönetimi.
Kesme maskeleri sırasıyla kesme bayraklarına bağlıdır:
Sırasıyla TIFR ve GIFR(genel kesme etkinleştirme bayrağıyla karıştırılmamalıdır).

Yürütme sırasını kesme:
Mikrodenetleyici açıldığında, tüm kesme bayrakları 0'a sıfırlanır. Kesintileri etkinleştirmek için programın SREG kaydının bayrak I'ini 1'e ayarlaması gerekir. Bundan sonra, maske kayıtlarını ayarlanmış yerel kesmelerle kaydedin (ihtiyacımız olan kesintiler) .
Bir kesme isteği (sinyali) geldiğinde, kesme bayrağını yükseltir (kesme devre dışı bırakılsa bile, iç içe kesmeleri ve farklı kesmeler arasındaki önceliği düzenlemek için). Kesintiler devre dışı bırakılmazsa kontrolör uygun yetkililerle iletişime geçecektir. (Kesme Vektörleri) - kesme vektörü, geçerli programı duraklatmak.
Kesinti vektörü program alanında bir kesinti meydana geldiğinde programın gittiği sabit hattır.
Kesinti vektörlerinin tam listesi çağrılır kesme vektör tablosu bulunan program kodunun başında.
Böylece, kesme vektörüne erişildiği anda, SREG kaydının I bayrağı ve kesmeye neden olan bayrak 0'a sıfırlanarak diğer kesintiler devre dışı bırakılır. Kesme yürütülürken başka kesme istekleri ortaya çıkarsa, bu kesmelere ilişkin bayraklar kaldırılmış durumda kalır. Mevcut kesmenin tamamlanması üzerine, SREG kaydının I bayrağı yükseltilerek bir sonrakinin yürütülmesine izin verilir. Birden fazla istek gelirse ve bayrakları kaldırılırsa, tablodaki adreste vektörü daha küçük olan, belleğin başlangıcına daha yakın olan kesme ilk önce yürütülecektir. Bunu ikincisi takip eder ve bu şekilde devam eder. Ek olarak, programcı, kesme programının yürütülmesi sırasında başka bir kesinti meydana geldiğinde, iç içe kesme adı verilen bir kesinti düzenleyebilir. Daha sonra mevcut kesmenin yürütülmesi durdurulur ve yenisi yürütülür, ardından durdurulan kesmenin yürütülmesine devam edilir.

Örnek olarak ATtiny2313 için kesme vektörleri tablosu verilmiştir.

Atmega16 için kesme vektör tablosu aşağıdaki gibidir:

Karşılaştırma yapıldığında tablolar hiç uyuşmuyor.
ATtiny ailesinde kesme vektör çizgisi 16 bit, Mega ailesinde ise 32 bit yer kaplar (kesinti vektörlerinin adreslerine dikkat edin; program alanındaki adres satırının 16 bit ile temsil edildiğini hatırlatayım). -bit kelimesi).

ATtiny2313'ün program kodu şöyle görünebilir:
.cseg .org 0 rjmp Sıfırla rjmp INT_0 rjmp INT_1 rjmp Timer1_capt1 rjmp Timer1_comp1 rjmp Timer1_OVF1 rjmp Timer0_OVF0 rjmp UART_RX rjmp UART_UDRE rjmp UART_TX rjmp ANA_COMP rjmp PCINT rjmp Timer1_compB rjmp Timer0 _compA rjmp Timer0_compB rjmp USI_START rjmp USI_OVERFLOW rjmp EE_READY rjmp WDT_ OVERFLOW

Gördüğünüz gibi kesme vektörü, kesme programı etiketlerine göreli bir atlama oluşturur. Aşağıdaki tablo seçenekleri göstermektedir; 1. Kesinti olmadığında; 2, 3. INT_1 girişinde harici kesme ile.
Etiketler "boş"sa (etiketin altında program yoksa), o zaman hiçbir şey olmaz ve program, kalan etiketleri sırayla "çalıştırır" ve komuta güvenli bir şekilde ulaşır. RETI- Kesme dönüşü - kesme işleyicisinden çıkış Tablonun ilk sütununda gösterildiği gibi.

Örneğin INT_1 girişinde bir kesme programını yürütmek için INT_1: etiketini listeden kaldırmanız gerekir. Bu, tablonun ikinci sütununda şematik olarak gösterilmiştir.
Ancak özellikle tablonun oldukça büyük olduğu son modellerde programcının tüm kesmeleri yazması ve bunlara ayrı ayrı etiketler yazması sakıncalıdır; eğer kesme vektör satırına RETI komutunu hemen yazmak daha kolaydır. kesme kullanılmaz. Daha sonra program tablonun üçüncü sütununda gösterildiği gibi görünecektir.

AVR kontrolörleri modele bağlı olarak 1'den 8'e kadar girişe sahip olabilir harici kesintiler.
Harici kesinti yönetim sistemini ele alalım. Bu amaçla, modele bağlı olarak aşağıdaki I/O kayıt kombinasyonları sağlanır (ilgili Veri Sayfasına bakın):
-GIMSK, EIFR, PCMSK, MCUCR;
-GIKR, GIFR, MCUCR;
- EIMSK, EICR, EIFR;
GIMSK, GIKR, EIMSK - kesme maskeleri,
EIFR, PCMSK, GIFR, EIFR – kesme bayrakları
İzin veya yasaklama için harici kesintiler kontrol kayıtları amaçlanır: GIMSK-(Genel Kesinti Maskesi Kaydı)(Tiny), GICR- (Genel Kesinti Kontrol Kaydı)(Mega), MCUCR – (MCU Kontrol Kaydı)




EIFR- Harici Kesme Bayrak Kaydı: 1 - etkin, 0 - devre dışı. Her bit (bayrak), karşılık gelen pinin bir kesme kaynağı olarak hareket etmesine izin verir.

GIMSK kayıt kontrol bitleri:
Bit 7 – INT1: Harici Kesme İsteği 1 Etkin – INT1 kesme etkinleştirme biti: 1 – etkin, 0 – devre dışı. INT1 pini çıkış olarak yapılandırılsa bile kesme üretilecektir. INT1 biti, EIFR bayrak kaydında kesintiye ayarlanmıştır. INT1 pini saat üreteci ile senkronize edilir.

Bit 6 – INT0: Harici Kesme Talebi 0 Etkinleştir - kesmeyi etkinleştirme biti INT0: 1 – etkin, 0 – devre dışı. INT0 pini çıkış olarak yapılandırılsa bile kesme üretilecektir. INT0 biti, EIFR bayrak kaydında kesintiye ayarlanmıştır. INT10 pini saat üreteci ile senkronize edilir.

Bit 5 – PCIE: Pin Change Interrupt Enable – PCINT0…7 pinlerindeki kesme etkinleştirme biti: 1 – etkin, 0 – devre dışı. PCINT0...7 pinlerinden herhangi birinde yapılacak herhangi bir değişiklik bir kesintiye neden olacaktır. PCINT0...7 pinleri, PCMSK bayrak kaydındaki bitler tarafından ayrı ayrı kesinti için yapılandırılır.

PCMSK- Pin Değiştirme Maskesi Kaydedicisi - bayrak kaydı PCMSK: 1 - izin verildi, 0 - devre dışı. Her bit (bayrak), karşılık gelen pinin bir kesme kaynağı olarak hareket etmesine izin verir. PCINT0...7 pinleri saat üreteci ile senkronize değildir, yani. Herhangi bir pinde değişiklik meydana geldiğinde kesinti meydana gelir.

Mega8

ve ilgili bayrak kaydı


Bit 7

Bit 6 – INT0: Harici Kesme Talebi 0 Etkinleştir - kesmeyi etkinleştirme biti INT0: 1 – etkin, 0 – devre dışı. INT0 pini çıkış olarak yapılandırılsa bile kesme üretilecektir. INT0 biti GIFR bayrakları kaydında kesintiye ayarlandı



GIFR – Genel Kesme Bayrak Kaydı: 1 – etkin, 0 – devre dışı. Her bit (bayrak), karşılık gelen pinin bir kesme kaynağı olarak hareket etmesine izin verir.

GICR kayıt kontrol bitleri:
Bit 7– : Harici Kesinti Talebi 1 Etkinleştir – kesme etkinleştirme biti INT1: 1 – izin verilir, 0 – yasaklanır. INT1 pini çıkış olarak yapılandırılsa bile kesme üretilecektir. INT1 biti GIFR bayrakları kaydında kesintiye ayarlandı

Bit 6 – INT0: Harici Kesinti Talebi 0 Etkinleştir - kesme etkinleştirme biti INT0: 1 – izin verilir, 0 – yasaklanır. INT0 pini çıkış olarak yapılandırılsa bile kesme üretilecektir. INT0 biti, GIFR bayrakları kaydında kesintiye ayarlandı

Bit 5 – INT2: Harici Kesinti İsteği 2 Etkinleştir - kesme etkinleştirme biti INT2: 1 – izin verilir, 0 – yasaklanır. INT2 pini çıkış olarak yapılandırılsa bile kesme üretilecektir. INT2 biti, GIFR bayrakları kaydında kesintiye ayarlandı

Tüm denetleyicilerdeki INT0 ve INT1 girişlerinin işlevleri, MCUCR yazmacının düşük dereceli bitleri tarafından kontrol edilir.

MCUCR – MCU Kontrol Kaydı
Kontrol bitleri:
Bitler 1, 0 – ISC01, ISC00 (Kesinti Algılama Kontrolü 0 Bit 1 ve Bit 0) – bu bitlerin durumu, bir INT0 kesmesi oluşturan INT0 pinindeki olayı belirler:
ISC01=0, ISC00=0 – mantıksal sıfır seviyesi;
ISC01=0, ISC00=1 – mantıksal durumdaki herhangi bir değişiklik;
ISC01=1, ISC00=0 – düşen kenarda;
ISC01=1, ISC00=1 – yükselen kenarda.

Bit 3, 2 – ISC11, ISC10 (Kesinti Algılama Kontrolü 1 Bit 1 ve Bit 0) – bu bitlerin durumu, INT1 kesmesini oluşturan INT1 pinindeki sinyal seviyesini belirler:
ISC11=0, ISC10=0 – mantıksal sıfır seviyesi;
ISC11=0, ISC10=1 – mantıksal durumdaki herhangi bir değişiklik;
ISC11=1, ISC10=0 – düşen kenarda;
ISC11=1, ISC10=1 – yükselen kenarda.

Görünüşe göre dış kesintiler hakkında minimum düzeyde konuştuk.
Kesintilerin işe yaraması için uygun şekilde kaydedilmeleri gerektiği açıktır.
Sinyalin yükselen kenarına minik için başlatılan INT1'deki kesmenin başlatılmasını ekleyelim:

Ldi r16.0x80 ; r16'ya 0b10000000 ldi r17.0x0C sayısını yazın; r17'ye MCUCR,r17'den 0b00001100 sayısını yazın; kesme yükselen kenarda üretilecektir ISC11=1, ISC10=1 out GIMSK,r16 ; INT0 sei maskesini ayarlayın
Bu arada, Tiny2313'te bir kesinti oluşturabilirsiniz. herhangi bir PCINT0…7 pininde Mega'da 48 serisine kadar bu özellikler mevcut değildir...
Programın çökmesine neden olabilecek kesintilerin meydana gelebileceği işlemler vardır. Bu gibi durumlarda işleme başlamadan önce CLI, sonra da SEI yazıyoruz. Bu tür işlemlere denir - atomik.
Herhangi bir kesmenin amacı bir olayı yakalamak olduğundan, kesme programlarının kompakt olması ve maksimum hızda yürütülmesi arzu edilir. eğer göre çeşitli sebepler program yavaş çalışıyor, olayı kaydedip biraz sonra işlemeniz yeterli.

Sunulan materyali gereksiz bilgilerle karıştırmamak için okuyucuların veri sayfalarını kullanmalarını ve her şey net değilse forumlarda daha sık soru sormalarını öneriyorum.
Daha sonra, yerleşik zamanlayıcılara dayalı dahili kesintileri ayrıntılı olarak ele alacağız. okuyucular. Oylamaya katılmak için kayıt olun ve kullanıcı adınız ve şifrenizle siteye giriş yapın.

ATmega8 mikro denetleyicisinin avantajlarından biri, geniş yelpazedeki farklı kesintilerdir.

Yarıda kesmek meydana gelmesi üzerine ana programın yürütülmesinin askıya alındığı ve belirli türde bir kesintiyi işleyen bir fonksiyonun çağrıldığı bir olaydır.

Kesintiler iç ve dış olarak ikiye ayrılır. Dahili kesinti kaynakları, yerleşik mikro denetleyici modüllerini (zamanlayıcılar, USART alıcı-verici vb.) içerir. Mikrodenetleyici pinlerine harici sinyaller ulaştığında harici kesintiler meydana gelir (örneğin, RESET ve INT pinlerindeki sinyaller). Bir kesintinin oluşmasına yol açan sinyallerin niteliği kontrol kaydında ayarlanır MCUCR INT 0 girişi için özellikle - ISC00 (bit 0) ve ISC01 (bit 1) bitlerinde; INT1 girişi için ISC10 (bit2) ve ISC11 (bit3).

ATmega8 mikro denetleyicisinde her kesmenin kendine ait bir özelliği vardır. kesme vektörü(belirtilen kesme rutinine atlama komutunun saklandığı program hafıza alanının başlangıcındaki adres). Mega8'de tüm kesintiler aynı önceliğe sahiptir. Aynı anda birden fazla kesinti meydana gelirse, önce vektör numarası düşük olan kesinti işlenecektir.

Atmega8'deki kesme vektörleri

Adres Kesinti Kaynağı Tanım
0x0000 SIFIRLA Sinyali sıfırla
0x0001 INT0 INT0 girişinde harici kesme isteği
0x0002 INT1 INT1 girişinde harici kesme isteği
0x0003 T/C1 Zamanlayıcı yakalama T/C1
0x0004 T/C1 T/C1 Zamanlayıcısını Karşılaştır Kayıt A'yı eşleştir
0x0005 T/C1 T/C1 zamanlayıcısının B karşılaştırma kaydıyla eşleşme
0x0006 T/C1 T/C1 sayacı taşması
0x0007 T/C0 T/C0 sayacı taşması
0x0008 SPI SPI veri aktarımı tamamlandı
0x0009 UART UART alıcı-vericisi veri almayı tamamladı.
0x000A UART UART veri kaydı boş
0x000B UART UART alıcı-verici tarafından veri iletimi tamamlandı
0x000C ANA_COMP Analog karşılaştırıcıdan kesinti

Kesinti yönetimi

ATmega8'deki kesintilerin yönetilmesinden 4 kayıt sorumludur:

GİMSK(diğer adıyla GICR) - INT0, INT1 girişlerindeki sinyallere dayalı olarak kesintileri yasaklayın/etkinleştirin

GIFR- tüm harici kesintilerin yönetimi

TİMSK, TIFR- zamanlayıcılardan/sayaçlardan kaynaklanan kesintilerin yönetimi

Kayıt olmak GIMSK(GICR)

INTFx=1: INTx girişinde bir kesinti oluştu. Kesinti işleme rutinine girildiğinde INTFx otomatik olarak günlük durumuna sıfırlanır. 0

Kayıt olmak TİMSK

7 6 5 4 3 2 1 0
TOIE1
OCIE1A
OCIE1B
-
TICIE
-
TOIE0
-

TOIE1=1: T/C1 taşma kesintisi etkin

OCIE1A=1: karşılaştırma kaydı A etkinleştirilmiş T/C1 sayacının içeriğiyle eşleştiğinde kesme

OCIE1B=1: karşılaştırma kaydı B etkinleştirilmiş T/C1 sayacının içeriğiyle eşleştiğinde kesinti

TICIE=1: yakalama koşulu karşılandığında kesme etkinleştirilir

TOIE0=1: T/C0 taşma kesintisi etkin

Kayıt olmak TIFR

7 6 5 4 3 2 1 0
TOV1
OCF1A
OCF1B
-
ICF1
-
TOV0
-

TOV1=1: T/C1 taşması meydana geldi

OCF1A=1: karşılaştırma kaydı A, izin verilen T/C1 sayacının içeriğiyle çakıştı

OCF1B=1: karşılaştırma kaydı B, izin verilen T/C1 sayacının içeriğiyle eşleşir

ICF=1: Yakalama koşulları karşılandı

TOV0=1: T/C0 taşması meydana geldi

Kesinti işleme alt yordamına girildiğinde, kesmeye karşılık gelen TIFR kayıt bayrağı otomatik olarak günlük durumuna sıfırlanır. 0

Kesintiler yalnızca SREG durum kaydında genel kesintiler etkinleştirildiğinde çalışır (bit 7 = 1). Bir kesinti meydana geldiğinde, bu bit otomatik olarak 0'a sıfırlanır ve sonraki kesintiler devre dışı bırakılır.

Bu örnekte INT0 pini pull-up giriş modunda etkinleştirilmiştir. Pim bir düğme kullanılarak toprağa kısa devre yapıldığında, üzerinde mantık 0 ayarlanır (sinyalin kenarı besleme voltajından 0'a düşer) ve bağlantı noktasının sıfır pinine bağlı ampulü açarak kesme işleyicisi tetiklenir. B

geçersiz lambaAÇIK()
{
PORTB.0=1;
DDRB.0=1;
}

kesme void ext_int0_isr(void)
{
lambaAÇIK();
}

DDRD.2=0;
PORTD.2=1;

SREG|= (1 while(1) (

Yukarıdaki örnek aynı zamanda Code Vision AVR'de kesme vektörlerinin nasıl ayarlandığını da gösterir (interrupt void ext_int0_isr(void)). Kesinti vektörleri diğer durumlar için benzer şekilde ayarlanır:

EXT_INT0 2
EXT_INT1 3
TIM2_COMP 4
TIM2_OVF 5
TIM1_CAPT 6
TIM1_COMPA 7
TIM1_COMPB 8
TIM1_OVF 9
TIM0_OVF 10
SPI_STC 11
USART_RXC 12
USART_DRE 13
USART_TXC 14
ADC_INT 15
EE_RDY 16
ANA_COMP 17
İKİ 18
SPM_HAZIR 19

Parça AVR mikrodenetleyicileri her biri veri/sinyaller ve diğer bilgiler üzerinde belirli eylemleri gerçekleştirebilen çok sayıda çevresel cihazı (ADC, Zamanlayıcı/Sayaçlar, EXTI, Analog Karşılaştırıcı, EEPROM, USART, SPI, I2C, vb.) içerir. Bu cihazlar, AVR mikrokontrolörlerini temel alan her türlü cihazı geliştirirken uygulama verimliliğini artırmak ve maliyetleri azaltmak için mikrokontrolöre entegre edilmiştir.

İşlemci, Veri Belleğinde bulunan G/Ç Kayıtları aracılığıyla çevresel aygıtlarla iletişim kurar/kontrol eder ve bunların normal değişkenler gibi kullanılmasına olanak tanır. Her cihazın kendi G/Ç kayıtları vardır.

Tüm G/Ç Kayıtları üç gruba ayrılabilir: veri kayıtları, kontrol kayıtları ve durum kayıtları.

Kontrol kayıtları kullanılarak cihaz, belirli bir frekans, doğruluk vb. ile şu veya bu modda çalışacak şekilde yapılandırılır ve Veri Kayıtları kullanılarak işin sonucu okunur. bu cihazın(analogdan dijitale dönüştürme, alınan veriler, zamanlayıcı/sayaç değeri vb.). Görünüşe göre burada karmaşık bir şey yok (aslında burada gerçekten karmaşık bir şey yok :)), cihazı açtım, istenen çalışma modunu belirttim ve sonra geriye kalan tek şey kuponları kırpmak, hazır verileri okumak. ve bunları hesaplamalarda kullanın. Bütün soru, bu verinin "ne zaman" okunacağıdır (cihaz işini tamamladı mı veya hala veri işliyor mu), çünkü tüm çevresel cihazlar mikrodenetleyici çekirdeğiyle paralel ve hatta farklı frekanslarda çalışıyor.İletişimin uygulanması sorunu ortaya çıkıyor. ve işlemci arasındaki senkronizasyon çevresel aygıt.

Muhtemelen zaten tahmin ettiğiniz gibi, cihaz ile işlemci arasındaki iletişimi ve senkronizasyonu gerçekleştirmek için, belirli bir cihazın mevcut çalışma durumunu saklayan "Durum Kayıtları" kullanılır. Cihazın bulunabileceği her durum, bir "bit"e karşılık gelir. mevcut değeri bu cihazın mevcut durumu veya bireysel işlevi hakkında "konuşan" kayıt durumu" (bayrak), (iş tamamlandı/tamamlanmadı, veri işleme sırasında hata, kayıt boş, vb.).

İşlemci ile çevresel aygıt arasındaki iletişim mekanizması, bu aygıtın belirli bir işlevinden sorumlu olan bayrak yoklaması yoluyla gerçekleştirilir. Belirli bir bayrağın (aygıt durumu) değerine bağlı olarak program yürütme akışını (dallanma) değiştirebilirsiniz. Örneğin:

Belirli bir bayrağın ayarlanıp ayarlanmadığını kontrol etme (bazı olaylar meydana geldi):

if (RegX & (1<< Flag) ) // RegX kaydındaki bayrak ayarlanmışsa
{
// bir şey yap
}

Bir eylemin (olayın) tamamlanması bekleniyor:

while(!(RegX & (1<

Bayrakları sorgulamak, hem program boyutu hem de program hızı açısından oldukça kaynak yoğun bir iştir. AVR mikrodenetleyicilerde toplam flag sayısı oldukça fazla olduğundan (bir avantaj), işlemci ile cihaz arasındaki iletişimin flagları yoklayarak uygulanması, yazdığınız programın verimliliğinin (kod hızı/kod boyutu) azalmasına neden olur, Buna ek olarak, program çok kafa karıştırıcı hale gelir ve bu, kodun ayrıntılı hata ayıklamasıyla bile tespit edilmesi zor olan hataların ortaya çıkmasına katkıda bulunur.

AVR mikrodenetleyicilerine yönelik programların verimliliğini artırmak ve bu programların oluşturulması ve hata ayıklama sürecini kolaylaştırmak için geliştiriciler tüm çevresel aygıtları "kesme kaynakları" ile donattılar ( Kesinti kaynakları), bazı cihazların birden fazla kesme kaynağı olabilir.

Kesinti kaynakları kullanılarak uygulanır senkronizasyon mekanizması, işlemci ile çevresel aygıt arasında, yani işlemci, yalnızca aygıt buna hazır olduğunda çevresel aygıtta veri almaya, yoklama işaretlerini ve diğer eylemleri almaya başlayacaktır (veri işlemenin tamamlandığını, işlem sırasında bir hata bildirecektir). veri işleme, kayıt defterinin boş olması vb.) vb.), bir “kesinti talebi” oluşturarak ( Kesinti isteği), bazı işaretlerin (cihaz/işlev/olay durumu) değerine bağlı olarak.

Literatürde, çoğu zaman, "kesinti talebi"nden (IRQ) "kesinti hizmeti prosedürüne" (ISR) kadar tüm olaylar zinciri, kesinti ( Yarıda kesmek).

Kesinti nedir?


Kesme, işlemciye bir olayın meydana geldiğini bildiren bir sinyaldir. Bu durumda, mevcut komut dizisinin yürütülmesi askıya alınır ve kontrol, bu olaya karşılık gelen kesme işleme prosedürüne aktarılır, bundan sonra kodun yürütülmesi tam olarak kesintiye uğradığı noktadan itibaren devam eder (kontrolün geri dönüşü). (Wiki)

Rutini kesme(Kesinti Hizmeti Rutini), belirli bir olay meydana geldiğinde yürütülmesi gereken bir işlev/alt programdan başka bir şey değildir. Diğer tüm işlevlerden farkını vurgulamak için “prosedür” kelimesini kullanacağız.

Prosedür ile basit işlevler arasındaki temel fark, olağan "işlevden dönüş" (derleme komutu RET) yerine "kesmeden dönüş" (birleştirici komutu RETI) kullanmanız gerektiğidir - " Kesintiden Dönüş".

AVR kesme özellikleri:

  • AVR mikrokontrolörlerinin parçası olan her çevresel cihaz en az bir kesme kaynağına sahiptir. Tüm bu kesintilerin arasında, amacı diğerlerinden farklı olan sıfırlama kesintisini de dahil etmek gerekir.
  • Her kesmenin, Kesinti hizmeti rutinine işaret eden, kesin olarak atanmış bir vektörü (bağlantısı) vardır. Tüm kesme vektörleri program belleğinin en başında bulunur ve birlikte "kesme vektörleri tablosunu" oluşturur.
  • Her kesme, belirli bir "Kesme Etkinleştirme biti" ile ilişkilidir. Bu nedenle, belirli bir kesmeyi kullanmak için, onun "Kesme Etkinleştirme biti" - günlüğüne yazmalısınız. birim. Ayrıca, belirli kesintileri etkinleştirip etkinleştirmediğinize bakılmaksızın, mikrodenetleyici, SREG durum kaydındaki "Global Interrupt Enable bit"e mantıksal bir tane yazılana kadar bu kesmeleri işlemeye başlamayacaktır. süresiz), genel kesme etkinleştirme bitine mantıksal bir sıfır yazılmalıdır.

Reset kesmesi, diğerlerinden farklı olarak devre dışı bırakılamaz. Bu tür kesintilere maskelenemeyen kesintiler de denir.

  • Her kesmenin kesin olarak tanımlanmış bir önceliği vardır. Bir kesmenin önceliği, "kesinti vektör tablosu"ndaki konumuna bağlıdır. Tablodaki vektör sayısı ne kadar düşük olursa, kesmenin önceliği o kadar yüksek olur. Yani en yüksek öncelik, ilk önce yer alan sıfırlama kesmesidir. Tabloda ve buna göre bellek programlarında. "Kesinti vektör tablosundaki" Sıfırlama kesmesini takip eden harici kesme INT0, Sıfırlamanınkinden daha düşük, ancak diğer tüm kesmelerden vb. daha yüksek bir önceliğe sahiptir.

Sıfırlama vektörü dışındaki kesme vektör tablosu, GICR kaydındaki IVSEL biti ayarlanarak Flash belleğin Önyükleme bölümünün başına taşınabilir. Sıfırlama vektörü aynı zamanda sigorta biti - BOOTRST programlanarak Flash belleğin Önyükleme bölümünün başına da taşınabilir.



Şekil 1 ATmega16 kesme vektör tablosu

Rutin prototipi kesme


Bir işlevi bir kesme işleme rutini olarak bildirmek için, derleyicinin/bağlayıcının ihtiyaç duyduğunuz kesmeyi kendi işleme rutiniyle doğru şekilde tanımlayabilmesi ve ilişkilendirebilmesi için belirli prototip oluşturma kurallarına uymanız gerekir.

İlk olarak, kesme hizmeti yordamı hiçbir şeyi argüman olarak kabul edemez (void) ve aynı zamanda hiçbir şeyi döndüremez (void). Bunun nedeni, AVR'deki tüm kesintilerin eşzamansız olmasıdır, bu nedenle programın yürütülmesinin nerede kesintiye uğrayacağı, değerin kimden alınacağı ve kime döndürüleceği bilinmemekle birlikte, giriş süresini en aza indirmek ve kesintiden çıkış.

geçersiz isr(geçersiz)

İkinci olarak, fonksiyon prototipinden önce bunun bir kesme işleme prosedürü olduğunu belirtmelisiniz. Bildiğiniz gibi C dilinde sadece ana fonksiyonda kullanılan kod çalıştırılır. Ana fonksiyondaki kesme işleme prosedürü hiçbir yerde kullanılmadığından, derleyicinin bunu gereksiz olarak "atmaması" için, prosedür prototipinden önce bu fonksiyonun bir kesme işleme prosedürü olduğu belirtilmelidir.

AVR Studio ortamında kesinti işleme prosedürünün prototipi

#katmak

ISR (XXX_vect)
{

}

AVR Studio'da (AVR GCC), her kesme rutini bir ISR makro tanımıyla başlar ve ardından parantez içinde aşağıdaki yapı gelir:

XXX_vect

burada "XXX" kesme vektörünün adıdır. Belirli bir AVR mikrokontrolcüsü için tüm vektör adları, mikrokontrolcünün veri sayfasının "kesinti vektör tablosunda" veya başlık dosyasında bulunabilir. Örneğin, ATmega16 mikrokontrolcüsü için "kesme vektör tablosu" Şekil 1'de gösterilmektedir, burada Kaynak sütununda kesme vektörlerinin tüm adları listelenmiştir.Adlar ayrıca bu mikrokontrolcünün başlık dosyasında da bulunabilir (C) :\Program Files\Atmel\AVR Tools\AVR Toolchain\avr\include\avr\iom16.h), bkz. Şekil 2. Tek yapmamız gereken, ihtiyacımız olan vektörün adını tabloda bulmak ve son eki eklemek. "_vect".


Şekil 2 AVR Studio için ATmega16 başlık dosyası

Örneğin, USART (USART, Rx Complete) aracılığıyla bir bayt almak için bir kesme işleme prosedürü yazalım:

ISR (USART_RXC_vect)
{
// Kesme işleyici gövdesi
}

Bu arada: AVR Studio'da herhangi bir kesmeyi kullanmadan önce, projeye io.h ve Interrupt.h başlık dosyalarını eklemelisiniz:

#katmak
#katmak

AVR Studio'daki (AVR GCC) kesme işleyicileri hakkında daha fazla bilgiyi avr-libc'nin kesme işlemeye giriş bölümünde bulabilirsiniz.

ImageCraft ortamında kesinti işleme prosedürünün prototipi

#pragma kesme_işleyicisi : iv_XXX
geçersiz< handler_name>(geçersiz)
{
// Kesme işleyici gövdesi
}

ImageCraft ortamında prototip kesme rutini şuna benzer:

geçersiz< handler_name>(geçersiz)

Nerede , bu kesme işleyicisine vermek istediğiniz isim budur. Kesme işleme prosedürlerini bildirmenin gereksinimlerinden biri, işlev prototipinden önce bunun bir kesme işleyicisi olduğunun belirtilmesidir. Bu bir pragma direktifi kullanılarak yapılır kesme_işleyicisi :

#pragma kesme_işleyicisi : iv_XXX

Nerede bu, kesme işleyicisi olarak kullanılacak fonksiyonun adıdır ve "iv_XXX" yapısı, "iv_" ön ekiyle kesme vektörünün (XXX) adıdır. AVR Studio'da olduğu gibi, tüm vektör adları Belirli bir AVR mikrokontrolcüsü için, belirli bir mikrokontrolcünün veri sayfasının "kesme vektör tablosunda" veya başlık dosyasında bulunabilir (bkz. Şekil 3).


Şekil 3 ImageCraft IDE için ATmega16 başlık dosyası

Örneğin, ImageCraft ortamında USART (USART, Rx Complete) yoluyla bir bayt almak için bir kesmeyi işleme prosedürü şu şekilde görünecektir:

#pragma kesme_işleyicisi usart_rxc_isr: iv_USART_RXC
geçersiz usart_rxc_isr(geçersiz)
{
// Kesme işleyici gövdesi
}

ImageCraft IDE'deki kesme işleme prosedürleri hakkında daha fazla bilgi, geliştirme ortamının Yardım->AVR'nin Programlanması->Kesme İşleyicileri menüsünde bulunabilir.

Bazen birden fazla kesme işleyicisinin aynı şeyi yapması gerekiyorsa, program belleğinden tasarruf etmek için birkaç kesme vektörünü aynı kesme rutinine yönlendirebilirsiniz.

AVR Studio'da şöyle görünür:

ISR (INT0_vect)
{
// Bir şey yap
}
ISR(INT1_vect, ISR_ALIASOF(INT0_vect) ) ;

İlk önce belirli bir vektör için (bu durumda INT0) kesme işleme prosedürü gelir. Diğer tüm prosedürler aşağıdaki yapıyı kullanan herhangi bir kesme işleyicisine başvurabilir:

ISR (YYY_vect, ISR_ALIASOF(XXX_vect) ) ;

burada YYY, XXX vektörü için önceden bildirilen kesme işleyicisine atıfta bulunan kesme vektörünün adıdır.

ImageCraft'ta şöyle görünür:

#pragma kesme_işleyicisi : iv_XXX : iv_YYY
geçersiz< handler_name>(geçersiz)
{
// Kesme işleyici gövdesi
}

#pragma kesme_işleyicisi : iv_XXX
#pragma kesme_işleyicisi : iv_YYY
geçersiz< handler_name>(geçersiz)
{
// Kesme işleyici gövdesi
}

burada XXX ve YYY vektörleri aynı kesme işleyicisine karşılık gelir .

AVR mikrodenetleyicilerinde kesinti nasıl çalışır?

1. Diyelim ki " kesme isteği”(IRQ).

Bu arada: birden fazla kesme işlemi isteği aynı anda meydana gelirse, en yüksek önceliğe sahip olan kesme ilk önce işlenir, diğer tüm istekler yüksek öncelikli kesme tamamlandıktan sonra işlenir.

2. Muayene.

Bu kesme için etkinleştirme biti ayarlanmışsa (Kesme etkinleştirme biti) ve işlemci durum yazmacının (SREG) I-bit'i (genel kesme etkinleştirme biti) ayarlanmışsa, işlemci kesme hizmeti rutinini hazırlamaya başlarken, genel kesme etkinleştirme biti (SREG kaydının I biti) sıfırlanır, böylece diğer tüm kesmeler devre dışı bırakılır. Bu, başka hiçbir olayın mevcut kesmenin işlenmesini kesintiye uğratmaması için gerçekleşir.

Bu arada: kesme işleme prosedüründe I-bit'i günlük durumuna ayarlarsanız. Bu durumda etkinleştirilmiş herhangi bir kesme, mevcut kesmenin işlenmesini kesintiye uğratabilir. Bu tür kesintilere iç içe kesintiler denir.

3. Hazırlık.

İşlemci mevcut derleme talimatının yürütülmesini tamamlar ve ardından bir sonraki talimatın adresini yığına (PC->STACK) yerleştirir. Daha sonra işlemci, hangi kesme kaynağının bir "kesme isteği" (IRQ) gönderdiğini kontrol eder ve ardından bu kaynağın (bağlantı) vektör tablosundaki (her kesme kaynağına sıkı bir şekilde atanmış olan) vektörünü kullanarak, kesme işleme prosedürü (JMP talimatı).İşte bu kadar, işlemci en az 4 saat döngüsü harcıyor (isteğin ortaya çıktığı ana ve mevcut talimatın yürütme süresine bağlı olarak).Bu, IRQ'ya kıyasla çok iyi bir yanıt süresidir. diğer üreticilerin mikro denetleyicileri.

Bu arada: Mikrodenetleyici uyku modundayken bir IRQ meydana gelirse, IRQ'ya yanıt süresi dört saat döngüsü artı SUT1 ve SUT0 sigorta bitlerinde (Başlatma Süresi) depolanan süre kadar artar.

Kesinti - işlemcinin anında yanıt vermesini gerektiren bir olay. Yanıt, işlemcinin mevcut programın işlenmesini kesintiye uğratmasıdır ( kesintiye uğramış program) ve başka bir programı yürütmeye devam eder ( programı kesintiye uğratmak), bu etkinlik için özel olarak tasarlandı. Bu programın tamamlanmasının ardından işlemci, kesintiye uğrayan programı yürütmeye geri döner.

Kesinti gerektiren her olaya, kesme sinyali, bilgisayarı bu konuda bilgilendirdim ve aradım kesme isteği.

Program durumu karşılık gelen zaman noktasında (örneğin, son komut yürütüldükten sonra) tüm depolama öğelerinin durum kümesini temsil eder. Bir kesinti meydana geldiğinde, mikrodenetleyici program sayacının içeriğini yığında saklar ve karşılık gelen kesme vektörünün adresini buna yükler. Kesme rutininin son komutu, ana programa dönen ve önceden saklanan program sayacını geri yükleyen bir komut olmalıdır. Kesme işleyicisi yürütülürken bazı bilgiler değişebilir. Bu nedenle kesme işleyicisine geçerken değiştirilen öğeleri kaydetmek gerekir. Bu tür elemanların kümesi program durum vektörü. Bu durumda, bellek hücrelerinin durumuna ilişkin diğer bilgiler önemli değildir veya program aracılığıyla geri yüklenebilir.

Vektör başlangıç ​​hali programın ilk başlatılması için gerekli tüm bilgileri içerir. Çoğu durumda, başlangıç ​​durum vektörü yalnızca tek bir öğe içerir; başlatılan programın başlangıç ​​adresi.

Kesinti vektörü kesintiye uğrayan programın (işleyicinin) başlangıç ​​durumunun vektörüdür ve başlangıç ​​adresi de dahil olmak üzere işleyiciye gitmek için gerekli tüm bilgileri içerir. Her kesme tipinin, karşılık gelen işleyicinin yürütülmesini başlatan kendi kesme vektörü vardır. Tipik olarak kesme vektörleri, kısa adreslere sahip, özel olarak tahsis edilmiş sabit bellek konumlarında depolanır. kesme vektör tablosu. Uygun kesme programına atlamak için işlemcinin bir kesme vektörüne ve bu vektörün adresine sahip olması gerekir. Bu adreste, kural olarak, kesme işleme alt yordamına koşulsuz bir atlama komutu vardır.

Kural olarak, saklama ve geri döndürme kontrolü kesme işleyicisine atanır. Bu durumda, işleyici üç bölümden oluşur: program geçişini sağlayan hazırlık (giriş) ve son (sonsöz) ve isteğin gerektirdiği işlemleri gerçekleştiren gerçek kesinti programı. Yanıt süresi, bir kesme isteğinin alındığı andan, kesintiye uğrayan programın yürütülmesine başlayana kadar geçen zaman aralığı olarak tanımlanır.


tp– kesintiye karşı sistem tepki süresi;
tz– kesintiye uğrayan programın durumunun kaydedilme süresi;
t kişi– asıl kesintiye uğrayan programın zamanı;
teneke– kesintiye uğrayan programın durumunu geri yükleme zamanı

Birden fazla talep kaynağı varsa, gelen taleplere yönelik belirli bir hizmet sırası oluşturulmalıdır. öncelikli ilişkiler veya hizmet disiplini. Tüm olası işlemci kesme türlerinin kümesi kesinti sistemi mikrodenetleyici. Hizmet disiplini, aynı anda alınan çeşitli taleplerden hangisinin ilk önce işleme alınması gerektiğini ve bu istek bir veya başka bir kesme işleyicisini kesintiye uğratın.
Bir kesme işlenirken daha yüksek öncelikli bir kesme isteği alınırsa, kontrol daha yüksek öncelikli kesme işleyicisine aktarılır ve düşük öncelikli kesme işleyicisi askıya alınır. ortaya çıkar yuvalamayı kes. Birbirini askıya alabilecek maksimum program sayısına denir kesintilerin derinliği.

Kesme isteğine aynı kaynaktan (aynı öncelik) yeni bir istek geldiğinde hizmet verilmemişse, o zaman sistem doygunluğunu kesme. Bu durumda kesme isteklerinin bir kısmı kaybolacaktır. normal operasyon mikrodenetleyiciye izin verilmez.

Kesme sisteminin özelliklerişunlardır:

  • toplam kesme isteği sayısı kesinti taleplerinin kaynaklarının sayısı;
  • kesme gösterim türü - kural olarak, bir kesme isteği mantıksal bir sinyal seviyesiyle temsil edilir;
  • kesme önceliği - her kesme isteğinin işlenme sırasını belirler; öncelik ne kadar yüksek olursa, kesintiye uğrayan programın yürütülmesindeki gecikme de o kadar kısa olur;
  • yanıt süresi – kesme talebinin ortaya çıkması ile kesintiye uğrayan programın yürütülmesinin başlaması arasındaki zaman aralığı;
  • kesinti gecikmesi - programın saklanması ve geri yüklenmesi için toplam süreye göre belirlenir;
  • derinlik, genellikle kesinti sistemindeki öncelik seviyelerinin sayısıyla çakışır;
  • sistem doygunluğunu kesme;
  • izin verilen program kesintisi anları (genellikle bir sonraki komutun yürütülmesinin sonu).

Kesinti maskeleme Mikrodenetleyiciye her tür kesmeye yanıt vermesini veya bunu görmezden gelmesini söylemek için kullanılır. Kesme maskesi, bitleri kesme isteğinin kaynaklarına atanan ikili kodu temsil eder. İkili koddaki bir bit, mikro denetleyiciye bu tür kesintileri ele almasını söyler. Aksine, sıfır bit, mikro denetleyicinin belirtilen türdeki kesintileri işlemeye devam etmesine izin vermez.
Kural olarak, kesintileri maskelemenin yanı sıra, sıfır değeri tüm kesme işleyicilerini devre dışı bırakan (donanımı sıfırlama ve yürütülen programın başlangıcına atlama hariç) bir genel kesme etkinleştirme biti de vardır.
Kesme maskesi ikili koduna ek olarak bir ikili kod da vardır kesme bayrakları Bu, mikro denetleyicide belirtilen isteğe sahip birkaç kaynak varsa, kesme işleyicisinin kesmenin kaynağını ayarlamasına olanak tanır.




Tepe