Atmel AVR Studio-da AVR nəzarətçisində kəsin. Interrupts - AVR öyrənilməsi - Məqalələr kataloqu - Mikrokontrollerlər - bu asandır! Mikrokontrolörün fasilələrini hansı mühitdə proqramlaşdırmaq

Kəsmə sistemləri istənilən idarəetmə sisteminin vacib hissəsidir.

Mikroprosessor sisteminin öz funksiyalarını nə dərəcədə səmərəli yerinə yetirməsi onun işindən çox asılıdır. MK-51 kəsmə sisteminin ümumi quruluşu Şəkildə göstərilmişdir. 14.3.

MK-51 ailəsinin mikro nəzarətçiləri beş kəsmə mənbəyinə dəstək verir:

* INT0 və INT1 girişləri vasitəsilə gələn iki xarici kəsilmə (müvafiq olaraq P3 port xətləri: P3.2 və P3.3);

* T/C0 və T/C1 taymerləri/sayğaclarından iki fasilə;

* serial port kəsilməsi.

Kəsmə sorğuları mikrokontrolörün xüsusi funksiya registrlərində qeyd olunur: IE0, IE1, TF0, TF1 bayraqları INT0, INT1, T/C0 və T/C1-dən kəsilmə sorğuları TCON nəzarət registrində (Cədvəl 14.4) və RI bayraqları yer alır. və TI seriya portundan kəsilmə üçün sorğular - serial portu idarə etmək üçün SCON reyestrində.

Cədvəl 14.4. TCON Qeydiyyat Formatı

0 IT0 INT0 kəsmə növünün təyin edilməsi

1 IE0 Kəsmə sorğusu bayrağı INT0

2 IT1 INT1 kəsmə növünün təyin edilməsi

3 IE1 Kəsinti sorğusu bayrağı INT1

4 TR0 Taymeri/sayğacı 0 aktivləşdirin

5 TF0 Daşma bayrağı (kesinti sorğusu) taymer/sayğac 0

6 TR1 Taymeri/sayğacı 1 aktivləşdirin

7 TF1 Taymeri/sayğac 1-in daşması bayrağı (kesinti tələbi).

TF0 və TF1 bayraqları müvafiq taymer/sayğac daşdıqda (daha doğrusu, T/Cx “hamısı” vəziyyətindən “hamısı sıfırlar” vəziyyətinə keçdikdə) aparat tərəfindən təyin edilir.

IE0 və IE1 bayraqları müvafiq olaraq IT0 və IT1 xarici kəsilişlərindən aparat tərəfindən təyin edilir. Xarici sorğu ya müvafiq girişdə siqnal səviyyəsi aşağı olduqda, ya da bu siqnal yüksək səviyyədən aşağı səviyyəyə keçdikdə (MK-nın xarici takt tezliyinin yarısından çox olmayan tezlik ilə) bayrağın təyin edilməsinə səbəb ola bilər.

Sorğu növü TCON nəzarət reyestrində IT0 və IT1 bitlərini təyin etməklə proqram təminatı ilə konfiqurasiya edilir. ITx = 0 parametri kəsmə sistemini aşağı siqnal səviyyəsini tələb etmək üçün konfiqurasiya edir, ITx = 1 - aşağı siqnal səviyyəsini tələb etmək üçün kəsməni təyin edir.

TI və RI bayraqları müvafiq olaraq ötürülmə başa çatdıqdan və ya qəbul bitdikdən sonra serial interfeys aparatı tərəfindən təyin edilir.

Bütün müəyyən edilmiş kəsmə sorğusu bayraqları quraşdırma və sıfırlama üçün proqramlı olaraq mövcuddur. Proqram təminatında kəsmə tələbi bayrağının təyin edilməsi, aparatda eyni bayrağın qoyulması ilə mikrokontrollerdən eyni cavabla nəticələnir.

TF0 və TF1 bayraqları nəzarət müvafiq kəsmə rejiminə köçürüldükdə aparat tərəfindən sıfırlanır.

IEx bayraqlarının yenidən qurulması, kəsməyə xidmət edərkən, yalnız INTx siqnalının düşməsini hiss etmək üçün kəsilmə konfiqurasiya edildiyi təqdirdə aparatda həyata keçirilir. Əgər kəsilmə sorğu siqnalının səviyyəsini hiss etmək üçün konfiqurasiya edilibsə, onda IEx bayrağının sıfırlanması sorğunu aradan qaldırmaq üçün kəsmə mənbəyində fəaliyyət göstərən kəsmə xidməti proqramı tərəfindən yerinə yetirilməlidir.

TI və RI bayraqları yalnız proqram təminatı ilə sıfırlana bilər.

Hər bir kəsmə növü IE kəsmə aktivləşdirmə registrinin müvafiq bitlərini təyin etməklə və ya silməklə fərdi olaraq aktivləşdirilir və ya söndürülür. Bu registr həmçinin bütün fasilələr üçün ümumi söndürmə bitini ehtiva edir. IE reyestrinin formatı cədvəldə verilmişdir. 14.5.

Cədvəl 14.5. IE registr bitlərinin təyin edilməsi

Vəzifəni qeyd edin

Bit mnemonika

Funksiya

Bütün mənbələrdən kəsintiləri söndürün

İstifadə olunmur

İstifadə olunmur

Kimdən müdaxiləni deaktiv edin serial port

T/C1 taymer/sayğac kəsilməsini söndürün

Kimdən müdaxiləni deaktiv edin xarici mənbə INT1

Timer/Counter Interrupt T/C0-ni söndürün

Xarici INT0 mənbəsindən kəsilməni söndürün

Hər bir kəsmə növünə proqramlı olaraq iki mümkün prioritetdən biri təyin edilə bilər: 0 - ən aşağı və ya 1 - ən yüksək.

Prioritetlər İP kəsmə prioritet reyestrində müvafiq biti təyin etməklə və ya silməklə konfiqurasiya edilir. Bu reyestrin formatı cədvəldə verilmişdir. 14.6.

Fərqli prioritetləri olan mənbələrdən kəsilmə sorğuları eyni vaxtda alındıqda, ilk növbədə daha yüksək prioritet mənbədən sorğu emal edilir.

Eyni prioritetə ​​malik bir neçə kəsmə sorğusunun eyni vaxtda qəbulu halında, onların işlənmə qaydası mikrokontroller aparatı tərəfindən müəyyən edilir və proqram təminatı ilə dəyişdirilə bilməz. Bu sıra sorğunun kəsilməsi sorğusu bayraqlarının ardıcıllığına uyğundur, bu belə görünür:

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

Cədvəl 14.6. IP registrinin bit təyinatları

Qeydiyyat mövqeyi Bit mnemonik funksiyası

7 - İstifadə olunmayıb

6 - İstifadə olunmayıb

5 - İstifadə olunmayıb

4 PS Serial port kəsmə prioriteti

3 PT1 Taymer/Counter Kəsmə Prioriteti T/C1

2 PX1 Xarici mənbədən kəsmə prioriteti INT1

1 PT0 Taymer/Counter Kəsmə Prioriteti T/C0

0 PX0 Xarici mənbədən kəsmə prioriteti INT0

Aparat tərəfindən həyata keçirilən kəsmə işləyicisi çağırışı aşağıdakı hərəkətlərdən ibarətdir:

* proqram sayğacının qiymətinin stekdə saxlanması;

Hər kəsmə mənbəyi üçün kəsmə idarəedicisinin giriş nöqtələri aparatda sabitlənmişdir. Onların dəyərləri cədvəldə verilmişdir. 14.7.

Cədvəl 14.7. İşləyiciləri kəsmək üçün giriş nöqtələrinin ünvanları

Kəsmə mənbəyi

İşləyiciləri kəsmək üçün giriş nöqtələrinin ünvanları

Xarici kəsmə( ITO)

Taymer sayğacı (TFO)

Xarici kəsmə (IT1)

Taymer sayğacı (TF1)

Serial port (R1 və ya T1)

Kəsmə idarəçisinin birinci əmri göstərilən ünvanda yerləşməlidir. Bir qayda olaraq, belə bir əmr, işləyicinin həqiqətən yerləşdiyi proqramdakı yerə qeyd-şərtsiz keçmək əmridir.

Kəsinlə işləmə rejiminə keçərkən, IE registrinin vəziyyətindən asılı olmayaraq, avtomatik olaraq, xidmət edilən kəsilmənin prioritet səviyyəsinə bərabər olan prioritet səviyyəsinə malik olan bütün kəsmələr qeyri-aktiv edilir - yəni bərabər prioritet səviyyəli yuvalanmış kəsilmələr deaktiv edilir. . Beləliklə, aşağı prioritetli kəsmə (İP registrinin müvafiq bitində "0" işarəsi olan) yüksək prioritetli kəsmə (İP registrinin müvafiq bitində "1" olması) ilə kəsilə bilər, lakin aşağı prioritet. Yüksək prioritetli fasiləyə xidmət başqa mənbə tərəfindən kəsilə bilməz.

Kəsmə idarəedicisindən geri qayıtma RETI təlimatından istifadə etməklə həyata keçirilir ki, bu da kəsmə idarəedicisinin çağırıldığı anda orada saxlanılan PC proqram sayğacının dəyərini və kəsmə prioritet məntiqini stekdən bərpa edir.


Gəlin fasilələrdən danışaq. Kesinti sözü özü üçün danışır; əlavə hərəkətləri yerinə yetirmək üçün bir proses bir müddət dayandırılır. Kesintilər xarici və daxili ola bilər. Dostumdan eşitdiyim sadə bir misal verim...

Mətbəxdə qabları yumağa hazırlaşdı, həyəcanla qollarını çırmalamağa başladı... amma qablar yağlı çıxdı və o, rəflərdən birində yağlı qabları yumaq üçün yuyucu vasitə tapmaq üçün fasilə vermək məcburiyyətində qaldı. Mətbəx vahidi, bundan sonra yenə işinə davam etdi. Ancaq bir anda telefon zəng çaldı və o, yenidən işinə ara verdi, telefonu götürdü, qayınanası zəng etdi və ziyarətə gəldiyini söylədi, ona görə də qızdan əvvəl ərzaq almaq üçün mağazaya getməli olduğunu söylədi. gəldi. Mağazaya getdim və yalnız bundan sonra qabları yudum.

Bu nümunədə iki növ fasilə göstərilir, birincisi əsas işin yerinə yetirilməsi ilə bağlıdır - yağlı qablar üçün yuyucu vasitənin axtarışı - daxili fasilə, ikincisi - telefon zəngi- xarici fasilə.
Mikrokontrollerdə xarici kəsilmələr digər mənbələrdən gələn siqnallar səbəbindən yaranır, daxili kəsilmələr mikrokontrolörün özündə quraşdırılmış qurğular səbəbindən yaranır. Niyə fasilələr bu qədər cəlbedicidir?
Birincisi, başqa bir funksiyanı yerinə yetirmək üçün əsas prosesi dayandıra və sonra bu prosesi davam etdirə bilərik.
İkincisi və çox güman ki, bir çox hallarda əsası, daxili funksiyalar səbəbindən bütün funksiyaların yerinə yetirilməsi prosesinin sürətləndirilməsi hesab olunur. əlavə cihazlar. Nümunəmizə qayıdaq. Tutaq ki, dostum arvadı artıq evə gələndə qabları yumağa başladı. Yağlı qabları görüb ondan qabyuyan maye tapmasını xahiş edir və o, yuyan zaman o, artıq ona bu mayeni gətirəcək. Amma sonra telefon zəng çaldı, yoldaşım telefonu götürdü, anası ilə danışdı və mağazaya getdi. Birlikdə hər şey çox tez edildi!
Və ilişib qalmaq daha asandır – yəni. əsas proqram yoxdur.
Dostum divanda oturub heç nə etmir, xadimə çirkli qabları görür, bu barədə ona danışır və icazə alıb yumağa başlayır. Telefon zəng çalanda arvadına deyir telefonu götür, arvad telefonla danışır, söhbət baqqal dükanına gedir... Gözəllik! Bu halda mikrokontrollerdə eyni vaxtda bir neçə giriş/çıxış cihazı işləyir (müasir mikrokontrollerlərdə onların sayı kifayət qədər çox ola bilər) və prosessorun ümumi performansı dəfələrlə artır, lakin cihazlardan kəsilmələr bir-birinin ardınca (eyni vaxtda deyil) işlənir. ), prioritetdən asılı olaraq (bizim nümunəmizdə arvad ev işçisindən daha üstündür).

Bir neçə registr fasilələrin idarə olunmasına cavabdehdir
SREG - status reyestri(ştatlar). Giriş/çıxış cihazlarının cədvəlinə baxırıq. SREG registrinin yeddinci bitidir Qlobal kəsilməni aktivləşdirmə bayrağı adlanan I (kəsik) bayrağı.Əgər bayraq buraxılıbsa (yeddinci bit sıfırdır), onda bütün fasilələr qeyri-aktiv edilir. Əgər bayraq qaldırılsa (I-i 1-ə təyin edin), biz kəsmələri işə salırıq.

I bayrağı əmrlərlə qurulur və sıfırlanır:
SEI - fasilələri aktivləşdirin
CLI - fasilələri söndürün
Hansı fasilələrin işləyəcəyi - adlı registrlərdən istifadə etməklə təyin olunur. müdaxilə maskaları.
Fasilə maskaları aşağıdakı kimi təyin olunur:
TIMSK,..,..,.. – taymerlərdən və digər quraşdırılmış cihazlardan fasilələrin idarə edilməsi.
GIMSK (Mega ailəsində GIKR) - bütün xarici fasilələrin idarə edilməsi.
Kesinti maskaları öz növbəsində kəsmə bayraqlarından asılıdır:
müvafiq olaraq TIFR və GIFR(qlobal kəsilmənin aktivləşdirilməsi bayrağı ilə qarışdırılmamalıdır).

Kesinti icra ardıcıllığı:
Mikrokontroller işə salındıqda, bütün kəsmə bayraqları 0-a sıfırlanır. Kesintiləri işə salmaq üçün proqram SREG registrinin I bayrağını 1-ə təyin etməlidir. Bundan sonra maska ​​registrlərini yerli fasilələrlə (bizə lazım olan fasilələr) qeyd edin. .
Kəsmə sorğusu (siqnal) gəldikdə, kəsmə bayrağını qaldırır (kesinti söndürülsə belə, daxili kəsilmələri və müxtəlif kəsmələr arasında prioriteti təşkil etmək üçün). Kesintilər aradan qaldırılmırsa, nəzarətçi müvafiq ilə əlaqə saxlayacaq (Kesmə vektorları) - kəsmə vektoru, cari proqramın dayandırılması.
Kəsmə vektoru fasilə baş verdikdə proqramın getdiyi proqram sahəsində sabit xəttdir.
Kəsmə vektorlarının bütün siyahısı çağırılır vektor cədvəlini kəsmək, yerləşir proqram kodunun əvvəlində.
Beləliklə, kəsmə vektoruna daxil olan anda SREG registrinin I bayrağı və kəsməyə səbəb olan bayraq 0-a sıfırlanır, digər kəsmələri söndürür. Əgər kəsilmə icra edilərkən digər kəsmə sorğuları baş verərsə, həmin kəsmələr üçün bayraqlar qaldırılır. Cari kəsilmə başa çatdıqdan sonra SREG reyestrinin I bayrağı qaldırılır və növbətinin icrasına icazə verilir. Əgər bir neçə sorğu daxil olarsa və onların bayraqları qaldırılarsa, onda vektoru cədvəldəki ünvanda daha kiçik, yaddaşın başlanğıcına yaxın olan kəsmə əvvəlcə yerinə yetiriləcək. İkincisi təqib edir və s. Bundan əlavə, proqramçı kəsmə proqramının icrası zamanı başqa bir kəsilmə baş verdikdə, sözdə yuvalanmış kəsmə təşkil edə bilər. Sonra cari kəsilmənin icrası dayandırılır və yenisi icra edilir, bundan sonra dayandırılmış fasilənin icrası bərpa olunur.

Nümunə olaraq ATtiny2313 üçün kəsilmə vektorlarının cədvəli verilmişdir

Atmega16 üçün kəsmə vektor cədvəli aşağıdakı kimidir:

Müqayisə etdikdə, cədvəllər heç də uyğun gəlmir.
ATtiny ailəsində kəsmə vektor xətti 16 bit, Meqa ailəsində isə 32 bit tutur (kesinti vektorlarının ünvanlarına diqqət yetirin; xatırlatmaq istəyirəm ki, proqram sahəsində ünvan xətti 16 bitlə təmsil olunur. -bit söz).

ATtiny2313 üçün proqram kodu belə görünə bilər:
.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 UARTjUART_RX rjmp UART_UDREjPINTXrjmp PCrjUART_UDREjP_mp Timer1_compB rjmp Timer0_compA rj mp Timer0_compB rjmp USI_START rjmp USI_OVERFLOW rjmp EE_READY rjmp WDT_ OVERFLOW

Göründüyü kimi, kəsmə vektoru kəsmə proqramının etiketlərinə nisbi keçid yaradır. Aşağıdakı cədvəl variantları göstərir; 1. Heç bir fasilə olmadıqda; 2, 3. INT_1 girişində xarici kəsmə ilə.
Əgər etiketlər "boşdur"sa (etiket altında proqram yoxdur), onda heç nə baş vermir və proqram ardıcıl olaraq qalan etiketləri "keçir" və təhlükəsiz şəkildə əmrə çatır. RETI- Interrupt qaytarılması - kəsmə işləyicisindən çıxın cədvəlin birinci sütununda göstərildiyi kimi.

Kesinti proqramını icra etmək üçün, məsələn, INT_1 girişində siz INT_1: etiketini siyahıdan çıxarmalısınız. Bu, cədvəlin ikinci sütununda sxematik şəkildə göstərilir.
Lakin, proqramçının hər dəfə bütün kəsmələri və onlar üçün ayrı-ayrı etiketləri yazması əlverişsizdir, xüsusən də cədvəlin kifayət qədər böyük olduğu ən son modellərdə; əgər kəsilmə vektor xəttinə RETI əmrini dərhal yazmaq daha asandır. fasilə istifadə edilmir. Sonra proqram cədvəlin üçüncü sütununda göstərildiyi kimi görünəcək.

AVR kontrollerləri, modeldən asılı olaraq, 1-dən 8-ə qədər girişə malik ola bilər xarici fasilələr.
Xarici kəsilmə idarəetmə sistemini nəzərdən keçirək. Bu məqsədlə, modeldən asılı olaraq aşağıdakı giriş/çıxış registrlərinin kombinasiyaları təqdim olunur (müvafiq Data Sheet-ə baxın):
- GIMSK, EIFR, PCMSK, MCUCR;
- GIKR, GIFR, MCUCR;
- EIMSK, EICR, EIFR;
GIMSK, GIKR, EIMSK - kəsmə maskaları,
EIFR, PCMSK, GIFR, EIFR – kəsmə bayraqları
İcazə və ya qadağa üçün xarici fasilələr nəzarət registrləri nəzərdə tutulub: GIMSK-(General Interrupt Mask Register)(Tiny), GICR- (General Interrupt Control Register)(Mega), MCUCR – (MCU Control Register)




EIFR- Xarici Kesinti Bayraq Qeydiyyatı: 1 - aktiv, 0 - qeyri-aktiv. Hər bir bit (bayraq) müvafiq pin kəsmə mənbəyi kimi çıxış etməyə imkan verir.

GIMSK registrinə nəzarət bitləri:
Bit 7 - INT1: Xarici Kesinti Sorğusu 1 Aktivləşdirin – INT1 kəsilməsini aktivləşdirin bit: 1 – aktiv, 0 – qeyri-aktiv. INT1 pin çıxış kimi konfiqurasiya olunsa belə, kəsmə yaradılacaq. INT1 biti EIFR bayraq registrində kəsilməyə təyin edilmişdir. INT1 pin saat generatoru ilə sinxronlaşdırılır.

Bit 6 - INT0: Xarici Kesinti Sorğusu 0 Aktivləşdirin - kəsilmənin aktivləşdirilməsi biti INT0: 1 – aktiv, 0 – qeyri-aktiv. INT0 pin çıxış kimi konfiqurasiya olunsa belə, kəsmə yaradılacaq. INT0 biti EIFR bayraq registrində kəsilməyə təyin edilmişdir. INT10 pin saat generatoru ilə sinxronlaşdırılır.

Bit 5 - PCIE: Pin Change Interrupt Enable – PCINT0…7 pinlərində kəsmə aktivləşdirmə biti: 1 – aktiv, 0 – qeyri-aktiv. PCINT0...7 pinlərinin hər hansı birində edilən hər hansı dəyişiklik fasilə yaradacaq. PCINT0...7 sancaqları fərdi olaraq, PCMSK bayraq registrindəki bitlərlə kəsilmək üçün konfiqurasiya edilir.

PCMSK- Pin Dəyişiklik Maskası Qeydiyyatçısı - bayraq reyestri PCMSK: 1 - icazə verilir, 0 - əlil. Hər bir bit (bayraq) müvafiq pin kəsmə mənbəyi kimi çıxış etməyə imkan verir. PCINT0...7 pinləri saat generatoru ilə sinxronlaşdırılmır, yəni. pinlərdən hər hansı birində dəyişiklik baş verdikdə kəsmə baş verir.

Mega8

və müvafiq bayraq reyestri


Bit 7

Bit 6 - INT0: Xarici Kesinti Sorğusu 0 Aktivləşdirin - kəsilmənin aktivləşdirilməsi biti INT0: 1 – aktiv, 0 – qeyri-aktiv. INT0 pin çıxış kimi konfiqurasiya olunsa belə, kəsmə yaradılacaq. INT0 biti GIFR bayraqları registrində kəsilməyə təyin edilib



GIFR – Ümumi Kesinti Bayraq Qeydiyyatı: 1 – aktiv, 0 – qeyri-aktiv. Hər bir bit (bayraq) müvafiq pin kəsmə mənbəyi kimi çıxış etməyə imkan verir.

GICR registrinə nəzarət bitləri:
Bit 7– : Xarici Kesinti Sorğusu 1 Aktivləşdirin – INT1 bitini kəsin: 1 – icazə verilir, 0 – qadağandır. INT1 pin çıxış kimi konfiqurasiya olunsa belə, kəsmə yaradılacaq. INT1 biti GIFR bayraqları registrində kəsilməyə təyin edilib

Bit 6 - INT0: Xarici Kesinti Sorğusu 0 Aktivləşdir - kəsməni aktivləşdirən bit INT0: 1 – icazə verilir, 0 – qadağandır. INT0 pin çıxış kimi konfiqurasiya olunsa belə, kəsmə yaradılacaq. INT0 biti GIFR bayraqları registrində kəsilməyə təyin edilib

Bit 5 - INT2: Xarici Kesinti Sorğusu 2 Aktivləşdirin - INT2 bitini kəsin: 1 – icazə verilir, 0 – qadağandır. INT2 pin çıxış kimi konfiqurasiya olunsa belə, kəsmə yaradılacaq. INT2 biti GIFR bayraqları reyestrində kəsilməyə təyin edilib

Bütün kontrollerlərdə INT0 və INT1 girişlərinin funksiyaları MCUCR registrinin aşağı dərəcəli bitləri ilə idarə olunur.

MCUCR – MCU Nəzarət Qeydiyyatı
Nəzarət bitləri:
Bits 1, 0 – ISC01, ISC00 (Interrupt Sense Control 0 Bit 1 and Bit 0) – bu bitlərin vəziyyəti INT0 kəsilməsini yaradan INT0 pinindəki hadisəni müəyyən edir:
ISC01=0, ISC00=0 – məntiqi sıfır səviyyə;
ISC01=0, ISC00=1 – məntiqi vəziyyətin istənilən dəyişməsi;
ISC01=1, ISC00=0 – düşən kənarda;
ISC01=1, ISC00=1 – yüksələn kənarda.

Bitlər 3, 2 – ISC11, ISC10 (Kəsik Hissəyə Nəzarət 1 Bit 1 və Bit 0) – bu bitlərin vəziyyəti INT1 kəsilməsini yaradan INT1 pinindəki siqnal səviyyəsini müəyyən edir:
ISC11=0, ISC10=0 – məntiqi sıfır səviyyə;
ISC11=0, ISC10=1 – məntiqi vəziyyətin istənilən dəyişməsi;
ISC11=1, ISC10=0 – düşən kənarda;
ISC11=1, ISC10=1 – yüksələn kənarda.

Deyəsən, xarici fasilələr haqqında minimum danışdıq.
Aydındır ki, fasilələrin işləməsi üçün müvafiq qaydada qeydiyyatdan keçmək lazımdır.
Siqnalın yüksələn kənarında kiçik üçün başlayan INT1-də kəsilmənin başlanğıcını əlavə edək:

Ldi r16.0x80; r16-da 0b10000000 ldi rəqəmini yazın r17.0x0C ; r17-də MCUCR,r17-dən 0b00001100 rəqəmini yazın; kəsilmə yüksələn kənarda yaradılacaq ISC11=1, ISC10=1 GIMSK,r16 ; maskanı INT0 sei təyin edin
Yeri gəlmişkən, tiny2313-də fasilə yarada bilərsiniz istənilən PCINT0…7 pinlərində, 48-ci seriyaya qədər Mega-da bu xüsusiyyətlər mövcud deyil...
Proqramın sıradan çıxmasına səbəb ola biləcək fasilələrin baş verə biləcəyi əməliyyatlar var. Belə hallarda əməliyyata başlamazdan əvvəl CLI, SEI-dən sonra isə yazırıq. Belə əməliyyatlar adlanır - atom.
Arzu olunur ki, kəsmə proqramları yığcam olsun və maksimum sürətlə icra olunsun, çünki istənilən fasilənin məqsədi hadisəni tutmaqdır. Əgər uyğun olaraq müxtəlif səbəblər proqram yavaş işləyir, hadisəni yazmaq və bir az sonra emal etmək kifayətdir.

Təqdim olunan materialı lazımsız məlumatlarla qarışdırmamaq üçün oxuculara məlumat cədvəllərindən istifadə etməyi tövsiyə edirəm və hər şey aydın deyilsə, forumlarda daha tez-tez suallar verin.
Sonra, daxili taymerlərə əsaslanan daxili fasilələri ətraflı nəzərdən keçirəcəyik. oxucular. Səsvermədə iştirak etmək üçün qeydiyyatdan keçin və istifadəçi adı və şifrənizlə sayta daxil olun.

ATmega8 mikrokontrollerinin üstünlüklərindən biri onun müxtəlif fasilələrin geniş diapazonudur.

kəsmək baş verdikdə əsas proqramın icrasının dayandırıldığı və müəyyən tipli fasiləni idarə edən funksiyanın çağırıldığı hadisədir.

Kesintilər daxili və xarici bölünür. Daxili fasilələrin mənbələrinə quraşdırılmış mikrokontroller modulları (taymerlər, USART ötürücüləri və s.) daxildir. Xarici kəsilmələr xarici siqnallar mikrokontroller pinlərinə gəldikdə baş verir (məsələn, RESET və INT pinlərindəki siqnallar). Kəsilin baş verməsinə səbəb olan siqnalların xarakteri nəzarət registrində təyin edilir MCUCR, xüsusən də bitlərdə - INT 0 girişi üçün ISC00 (bit 0) və ISC01 (bit 1); INT1 girişi üçün ISC10 (bit2) və ISC11 (bit3).

ATmega8 mikro nəzarətçisində hər kəsin özünəməxsusluğu var kəsmə vektoru(müəyyən edilmiş fasilə rejiminə keçid əmrinin saxlandığı proqram yaddaş sahəsinin əvvəlindəki ünvan). Mega8-də bütün fasilələr eyni prioritetə ​​malikdir. Bir neçə kəsmə eyni vaxtda baş verərsə, ilk olaraq aşağı vektor nömrəsi olan kəsmə işlənəcəkdir.

Atmega8-də kəsmə vektorları

Ünvan Kəsmə mənbəyi Təsvir
0x0000 RESET Sıfırlama siqnalı
0x0001 INT0 INT0 girişində xarici kəsmə sorğusu
0x0002 INT1 INT1 girişində xarici kəsmə sorğusu
0x0003 T/C1 Taymeri tutma T/C1
0x0004 T/C1 Match T/C1 Timer Müqayisə Qeydiyyatdan A
0x0005 T/C1 T/C1 taymerinin müqayisə registrinin B ilə uyğunlaşdırın
0x0006 T/C1 T/C1 sayğacının daşması
0x0007 T/C0 T/C0 sayğacının daşması
0x0008 SPI SPI məlumat ötürülməsi tamamlandı
0x0009 UART UART ötürücü məlumatların qəbulunu tamamladı.
0x000A UART UART məlumat reyestri boşdur
0x000B UART UART ötürücü ilə məlumatların ötürülməsi tamamlandı
0x000C ANA_COMP Analoq komparatordan kəsmə

Fasilə idarə edilməsi

ATmega8-də fasilələrin idarə edilməsi üçün 4 registr cavabdehdir:

GIMSK(aka GICR) - INT0, INT1 girişlərindəki siqnallar əsasında kəsilmələri qadağan edin/aktiv edin

GIFR- bütün xarici fasilələrin idarə edilməsi

TİMSK, TIFR- taymerlərdən/sayğaclardan kəsilmələrin idarə edilməsi

Qeydiyyatdan keçin GIMSK (GICR)

INTFx=1: INTx girişində kəsilmə baş verdi. Kesintilərin idarə edilməsi rejiminə daxil olduqda, INTFx avtomatik olaraq jurnal vəziyyətinə sıfırlanır. 0

Qeydiyyatdan keçin TİMSK

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

TOIE1=1: T/C1 daşqın kəsilməsi aktivləşdirildi

OCIE1A=1: A müqayisə registrinin T/C1 sayğacının məzmununa uyğun gəldiyi zaman kəsin

OCIE1B=1: B müqayisə registrinin T/C1 sayğacının məzmununa uyğun gəldiyi zaman kəsin

TICIE=1: tutma şərti yerinə yetirildikdə kəsmə aktivləşdirilir

TOIE0=1: T/C0 daşma kəsilməsi aktivləşdirildi

Qeydiyyatdan keçin TIFR

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

TOV1=1: T/C1 daşması baş verdi

OCF1A=1: müqayisə reyestri A icazə verilən sayğac T/C1 məzmunu ilə üst-üstə düşdü

OCF1B=1: müqayisə reyestri B icazə verilən sayğac T/C1 məzmununa uyğundur

ICF=1: tutma şərtləri yerinə yetirildi

TOV0=1: T/C0 daşması baş verdi

Kəsmə ilə işləmə alt proqramına daxil olduqda, kəsməyə uyğun gələn TIFR registrinin bayrağı avtomatik olaraq jurnal vəziyyətinə qaytarılır. 0

Kesintilər yalnız SREG status reyestrində ümumi kəsilmələr işə salındıqda işləyir (bit 7 = 1). Kesinti baş verdikdə, bu bit avtomatik olaraq 0-a sıfırlanır və sonrakı kəsilmələri söndürür.

Bu misalda, INT0 sancağı açılan daxiletmə rejimində işə salınıb. Düyməni istifadə edərək pin yerə qısaldıldıqda, onun üzərində məntiq 0 qurulur (siqnalın kənarı təchizatı gərginliyindən 0-a düşür) və portun sıfır pininə qoşulmuş lampanı yandıraraq kəsmə idarəedicisi işə salınır. B

boş lampa ON()
{
PORTB.0=1;
DDRB.0=1;
}

kəsmək void ext_int0_isr(void)
{
lampON();
}

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

SREG|= (1 müddət(1) (

Yuxarıdakı misal həmçinin Code Vision AVR-də kəsmə vektorlarının necə qurulduğunu göstərir (interrupt void ext_int0_isr(void)). Digər hallar üçün kəsilmə vektorları eyni şəkildə təyin edilir:

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
TWI 18
SPM_READY 19

Hissə AVR mikro nəzarətçiləriçoxlu sayda periferik qurğuları (ADC, Timer/Counters, EXTI, Analog Comparator, EEPROM, USART, SPI, I2C və s.) ehtiva edir ki, onların hər biri verilənlər/siqnallar və digər məlumatlar üzərində müəyyən hərəkətləri yerinə yetirə bilir. Bu qurğular AVR mikrokontrollerləri əsasında bütün növ cihazların hazırlanması zamanı tətbiqin səmərəliliyini artırmaq və xərcləri azaltmaq üçün mikrokontrollerə inteqrasiya olunub.

Prosessor periferik qurğularla Məlumat Yaddaşında yerləşən I/O Registrləri vasitəsilə əlaqə qurur/nəzarət edir və onlardan adi dəyişənlər kimi istifadə etməyə imkan verir. Hər bir cihazın öz giriş/çıxış registrləri var.

Bütün giriş/çıxış registrlərini üç qrupa bölmək olar: məlumat registrləri, nəzarət registrləri və vəziyyət registrləri.

Nəzarət registrlərindən istifadə edərək cihaz bu və ya digər rejimdə, müəyyən tezlik, dəqiqlik və s. ilə işləmək üçün konfiqurasiya edilir və Məlumat Registrlərindən istifadə edərək işin nəticəsi oxunur. bu cihazın(analoqdan rəqəmə çevirmə, alınan məlumat, taymer/sayğac dəyəri və s.). Görünür ki, burada mürəkkəb bir şey yoxdur (əslində, burada həqiqətən mürəkkəb bir şey yoxdur :)), cihazı yandırdı, istədiyiniz iş rejimini göstərdi və sonra yalnız kuponları kəsmək, hazır məlumatları oxumaq qalır. və onlardan hesablamalarda istifadə edin. Bütün sual bu məlumatı "nə vaxt" oxumaqdır (cihaz öz işini başa çatdırıb və ya hələ də məlumatları emal edir), çünki bütün periferik qurğular mikrokontroller nüvəsi ilə paralel və hətta müxtəlif tezliklərdə işləyir.Kommunikasiyanın həyata keçirilməsi sualı yaranır. və prosessor və arasında sinxronizasiya periferik cihaz.

Yəqin ki, artıq təxmin etdiyiniz kimi, cihaz və prosessor arasında əlaqə və sinxronizasiyanı həyata keçirmək üçün müəyyən cihazın cari iş vəziyyətini saxlayan “Status Qeydiyyatı”ndan istifadə olunur. reyestr vəziyyəti” (bayraq), cari dəyəri bu cihazın cari vəziyyəti və ya onun fərdi funksiyası haqqında “danışır” (iş tamamlanmış/tamamlanmamış, məlumatların işlənməsi zamanı xəta, registr boş və s.).

Prosessor və periferik cihaz arasındakı əlaqə mexanizmi bu cihazın müəyyən funksiyasından məsul olan bayraq sorğusu ilə həyata keçirilir. Müəyyən bir bayrağın (cihazın vəziyyəti) dəyərindən asılı olaraq, proqramın icrası (şaxələnmə) axını dəyişə bilərsiniz. Məsələn:

Müəyyən bir bayrağın qoyulub-qoyulmadığı yoxlanılır (bəzi hadisə baş verib):

əgər (RegX & (1<< Flag) ) // RegX registrində bayraq qoyulubsa
{
// nəsə et
}

Bəzi hərəkətlərin (hadisələrin) tamamlanmasını gözləyirik:

while(!(RegX & (1<

Bayraqların sorğulanması həm proqram ölçüsü, həm də proqram sürəti baxımından kifayət qədər resurs tələb edən bir işdir. AVR mikrokontrollerlərində bayraqların ümumi sayı kifayət qədər böyük olduğundan (üstünlük), bayraqların səslənməsi ilə prosessor və cihaz arasında əlaqənin həyata keçirilməsi yazdığınız proqramın səmərəliliyinin (kod sürətinin / kod ölçüsünün) azalmasına səbəb olur, Bundan əlavə, proqram çox çaşqın olur ki, bu da kodun təfərrüatlı ayıklanması ilə belə aşkarlanması çətin olan səhvlərin yaranmasına kömək edir.

AVR mikrokontrollerləri üçün proqramların səmərəliliyini artırmaq, həmçinin bu proqramların yaradılması və sazlanması prosesini asanlaşdırmaq üçün tərtibatçılar bütün periferik cihazları “kəsmə mənbələri” ilə təchiz etmişlər ( Mənbələri kəsin), bəzi cihazlarda çoxsaylı kəsmə mənbəyi ola bilər.

Kəsmə mənbələrindən istifadə edərək həyata keçirilir sinxronizasiya mexanizmi, prosessor və periferik cihaz arasında, yəni prosessor periferik cihazda məlumatları, sorğu bayraqlarını və digər hərəkətləri yalnız cihaz buna hazır olduqda qəbul etməyə başlayacaq (məlumatların emalının başa çatması, məlumatların işlənməsi zamanı xəta barədə məlumat verəcəkdir. məlumatların işlənməsi, reyestr boşdur və s.) və s.), “kəsik sorğusu” yaratmaqla ( Sorğunu kəsin), bəzi bayrağın dəyərindən asılı olaraq (cihaz/funksiya/hadisə vəziyyəti).

Ədəbiyyatda çox vaxt “kəsmə sorğusundan” (IRQ) tutmuş “kəsmə xidməti proseduruna” (ISR) qədər bütün hadisələr zənciri kəsmə kimi qısaldılır ( kəsmək).

fasilə nədir?


Kesinti, prosessora hadisənin baş verməsi barədə məlumat verən siqnaldır. Bu halda, cari əmrlər ardıcıllığının icrası dayandırılır və idarəetmə bu hadisəyə uyğun gələn kəsintilərin idarə edilməsi proseduruna keçirilir, bundan sonra kodun icrası məhz onun kəsildiyi yerdən davam edir (idarənin qaytarılması). (Viki)

Rutini kəsin(Xidmət Rejimini kəsmək) müəyyən bir hadisə baş verdikdə yerinə yetirilməli olan funksiya/alt proqramdan başqa bir şey deyil. Biz “prosedur” sözünün bütün digər funksiyalardan fərqini vurğulamaq üçün istifadə edəcəyik.

Prosedurdan sadə funksiyalar arasındakı əsas fərq ondan ibarətdir ki, adi “funksiyadan qayıt” (quraşdırma əmri RET) əvəzinə “kəsikdən qayıt” (RETI montajçı əmri) istifadə etməlisiniz - " Kəsmədən geri qayıdın".

AVR kəsmə xüsusiyyətləri:

  • AVR mikro nəzarətçilərinin bir hissəsi olan hər bir periferik cihaz ən azı bir kəsmə mənbəyinə malikdir. Bütün bu fasilələr arasında, məqsədi bütün digərlərindən fərqli olan sıfırlama kəsilməsi də daxil edilməlidir.
  • Hər bir kəsilmənin kəsilmə xidmət rejiminə işarə edən ciddi şəkildə təyin edilmiş vektoru (link) var. Bütün kəsmə vektorları proqram yaddaşının ən əvvəlində yerləşir və birlikdə “kəsmə vektorları cədvəlini” təşkil edir.
  • Hər bir kəsilmə xüsusi “Kesməni Aktivləşdirən bit”lə əlaqələndirilir.Beləliklə, xüsusi kəsilmədən istifadə etmək üçün onun “Kesməni Aktivləşdirən bit” jurnalına yazmalısınız. vahid. Bundan əlavə, müəyyən kəsmələri aktiv edib etməməyinizdən asılı olmayaraq, SREG status reyestrində “Qlobal kəsməni aktivləşdirən bit”ə məntiqi bir yazı yazılana qədər mikrokontroller bu kəsmələri emal etməyə başlamayacaq. qeyri-müəyyən vaxt), ümumi kəsməni aktivləşdirmə bitinə məntiqi sıfır yazılmalıdır.

Sıfırlama kəsilməsi, digərlərindən fərqli olaraq, deaktiv edilə bilməz. Belə kəsilmələrə maskalanamayan kəsilmələr də deyilir.

  • Hər bir kəsilmənin ciddi şəkildə müəyyən edilmiş prioriteti var. Kəsilin prioriteti onun “kəsmə vektor cədvəli”ndə yerləşməsindən asılıdır.Cədvəldə vektor nömrəsi nə qədər aşağı olarsa, kəsilmənin prioriteti bir o qədər yüksəkdir.Yəni ən yüksək prioritet reset kəsmədir ki, o, birinci yerdə yerləşir. cədvəldə və müvafiq olaraq yaddaş proqramlarında.“Kəsmə vektor cədvəlində” Sıfırlama kəsilməsindən sonra INT0 xarici kəsilməsi Sıfırlamadan daha aşağı, lakin bütün digər kəsmələrdən daha yüksək prioritetə ​​malikdir və s.

Reset vektoru istisna olmaqla, kəsmə vektor cədvəli GICR registrində IVSEL bitini təyin etməklə Flash yaddaşın Boot bölməsinin əvvəlinə köçürülə bilər. Sıfırlama vektoru həmçinin qoruyucu biti - BOOTRST-i proqramlaşdırmaqla Flash yaddaşın Yükləmə bölməsinin əvvəlinə köçürülə bilər.



Şəkil 1 ATmega16 kəsmə vektor cədvəli

Rutin prototipi kəsin


Funksiyanı kəsmə ilə işləmə rejimi kimi elan etmək üçün siz müəyyən prototipləşdirmə qaydalarına əməl etməlisiniz ki, kompilyator/bağlayıcı sizə lazım olan kəsməni düzgün şəkildə müəyyən edə və onun işləmə rejimi ilə əlaqələndirə bilsin.

Birincisi, fasilə xidməti rejimi heç bir şeyi arqument kimi qəbul edə bilməz (etibarsızdır), həmçinin heç nə qaytara bilməz (boş). Bu, AVR-də bütün fasilələrin asinxron olması ilə əlaqədardır, ona görə də proqramın icrasının harada kəsiləcəyi, dəyərin kimdən alınacağı və kimə qaytarılacağı, həmçinin giriş vaxtını minimuma endirmək və fasilədən çıxın.

etibarsız isr (boş)

İkincisi, funksiya prototipindən əvvəl onun fasilələrlə işləmə proseduru olduğunu göstərməlisiniz. Bildiyiniz kimi, C dilində yalnız əsas funksiyada istifadə olunan kod yerinə yetirilir. Əsas funksiyada kəsilmə ilə işləmə proseduru heç bir yerdə istifadə edilmədiyindən, kompilyator onu lazımsız kimi “atmaması” üçün prosedur prototipindən əvvəl bu funksiyanın kəsilmə ilə işləmə proseduru olduğunu göstərmək lazımdır.

AVR Studio mühitində kəsilmələrin idarə edilməsi prosedurunun prototipi

#daxildir

ISR (XXX_vect)
{

}

AVR Studio-da (AVR GCC), hər kəsmə rejimi ISR ​​makro tərifi ilə başlayır, ardınca mötərizədə aşağıdakı konstruksiya verilir:

XXX_vect

burada “XXX” kəsmə vektorunun adıdır.Spesifik AVR mikrokontrolleri üçün bütün vektor adları mikrokontrolörün məlumat vərəqinin “kesinti vektor cədvəli”ndə və ya onun başlıq faylında tapıla bilər. Məsələn, ATmega16 mikrokontrolleri üçün “kesinti vektor cədvəli” Şəkil 1-də göstərilmişdir, burada Mənbə sütununda kəsmə vektorlarının bütün adları verilmişdir.Adları bu mikrokontrolörün (C) başlıq faylında da tapmaq olar. :\Program Files\Atmel\AVR Tools\AVR Toolchain\avr\include\avr\iom16.h), Şəkil 2-ə baxın. Bizə lazım olan şey cədvəldə bizə lazım olan vektorun adını tapmaq və şəkilçini əlavə etməkdir. ona "_vect".


Şəkil 2 AVR Studio üçün ATmega16 başlıq faylı

Məsələn, USART (USART, Rx Complete) vasitəsilə baytı qəbul etmək üçün kəsilmənin idarə edilməsi prosedurunu yazaq:

ISR (USART_RXC_vect)
{
// Interrupt işləyici orqanı
}

Yeri gəlmişkən: AVR Studio-da hər hansı interruptdan istifadə etməzdən əvvəl layihəyə io.h və interrupt.h başlıq fayllarını daxil etməlisiniz:

#daxildir
#daxildir

Siz AVR Studio-da (AVR GCC) kəsmə işləyiciləri haqqında daha çox avr-libc-in kəsmə idarəçiliyinə giriş bölməsində oxuya bilərsiniz.

ImageCraft mühitində kəsilmələrin idarə edilməsi prosedurunun prototipi

#praqma kəsmə_işləyicisi : iv_XXX
boş< handler_name>(boş)
{
// Interrupt işləyici orqanı
}

ImageCraft mühitində prototipin kəsilmə rejimi belə görünür:

boş< handler_name>(boş)

Harada , bu kəsmə işləyicisini vermək istədiyiniz addır. Fasilələrin idarə edilməsi prosedurlarının elan edilməsi üçün tələblərdən biri funksiya prototipindən əvvəl onun kəsilmə işləyicisi olması göstərilməlidir. Bu, praqma direktivindən istifadə etməklə edilir müdaxilə_işləyicisi :

#praqma kəsmə_işləyicisi : iv_XXX

Harada bu, kəsmə işləyicisi kimi istifadə olunacaq funksiyanın adıdır və “iv_XXX” konstruksiyası “iv_” prefiksi ilə kəsilmə vektorunun (XXX) adıdır. AVR Studio-da olduğu kimi, bütün vektor adları xüsusi AVR mikrokontrolleri üçün verilmiş mikrokontrolörün məlumat vərəqinin “kəsmə vektor cədvəli”ndə və ya onun başlıq faylında tapıla bilər (bax. Şəkil 3).


Şəkil 3 ImageCraft IDE üçün ATmega16 başlıq faylı

Məsələn, ImageCraft mühitində USART (USART, Rx Complete) vasitəsilə baytı qəbul etmək üçün kəsilmənin idarə edilməsi proseduru belə görünəcək:

#pragma interrupt_handler usart_rxc_isr: iv_USART_RXC
void usart_rxc_isr(void)
{
// Interrupt işləyici orqanı
}

ImageCraft IDE-də kəsintilərin idarə edilməsi prosedurları haqqında ətraflı məlumatı inkişaf mühitinin Help->AVR-nin Proqramlaşdırılması->Interrupt Handlers menyusunda tapa bilərsiniz.

Bəzən bir neçə kəsmə işləyicisi eyni şeyi etməli olarsa, proqram yaddaşını saxlamaq üçün bir neçə kəsmə vektorunu eyni kəsmə rejiminə yönəldə bilərsiniz.

AVR Studio-da bu belə görünür:

ISR (INT0_vect)
{
// Nəsə et
}
ISR(INT1_vect, ISR_ALIASOF(INT0_vect) );

Əvvəlcə müəyyən bir vektor üçün kəsilmənin işlənməsi proseduru gəlir, bu halda INT0. Bütün digər prosedurlar konstruksiyadan istifadə edən istənilən kəsmə idarəçisinə istinad edə bilər:

ISR (YYY_vect, ISR_ALIASOF(XXX_vect) );

burada YYY XXX vektoru üçün əvvəllər elan edilmiş kəsmə işləyicisinə istinad edən kəsmə vektorunun adıdır.

ImageCraft-da bu belə görünür:

#praqma kəsmə_işləyicisi : iv_XXX : iv_YYY
boş< handler_name>(boş)
{
// Interrupt işləyici orqanı
}

#praqma kəsmə_işləyicisi : iv_XXX
#praqma kəsmə_işləyicisi : iv_YYY
boş< handler_name>(boş)
{
// Interrupt işləyici orqanı
}

burada XXX və YYY vektorları eyni kəsmə işləyicisinə istinad edir .

AVR mikrokontrollerlərində fasilə necə işləyir?

1. Fərz edək ki, " müdaxilə tələbi”(IRQ).

Yeri gəlmişkən: kəsintilərin işlənməsi üçün bir neçə sorğu eyni vaxtda baş verərsə, ilk növbədə ən yüksək prioritetli kəsmə emal ediləcək, bütün digər sorğular yüksək prioritetli kəsilmə başa çatdıqdan sonra emal ediləcək.

2. İmtahan.

Əgər bu kəsmə üçün aktivləşdirici bit təyin edilibsə (Kəsməni aktivləşdirmə biti) və prosessor status reyestrinin (SREG) I-biti (ümumi kəsməni aktivləşdirmə biti) qurulubsa, prosessor kəsmə xidməti rejimini hazırlamağa başlayır. kəsilməni aktivləşdirmə biti (SREG reyestrinin I-biti) sıfırlanır, beləliklə, bütün digər kəsmələr qeyri-aktiv edilir. Bu, başqa heç bir hadisənin cari kəsilmənin işlənməsini dayandıra bilməməsi üçün baş verir.

Yeri gəlmişkən: əgər kəsilmənin idarə edilməsi prosedurunda siz I-biti log vəziyyətinə təyin etmisinizsə. vahidlər, onda hər hansı aktivləşdirilmiş kəsmə öz növbəsində cari kəsmənin işlənməsini dayandıra bilər. Belə kəsmələrə iç-içə kəsilmələr deyilir.

3. Hazırlıq.

Prosessor cari montaj təlimatının icrasını tamamlayır və sonra növbəti təlimatın ünvanını stekdə yerləşdirir (PC->STACK). Daha sonra prosessor hansı kəsmə mənbəyinin “kəsmə sorğusu” (IRQ) təqdim etdiyini yoxlayır, bundan sonra vektor cədvəlindən bu mənbənin (link) vektorundan istifadə edərək (hər kəsmə mənbəyinə möhkəm təyin olunur) fasilə emal proseduru (JMP təlimatı).Belədir, prosessor ən azı 4 takt dövrü sərf edir (sorğunun göründüyü andan və cari təlimatın icra müddətindən asılı olaraq).Bu, IRQ ilə müqayisədə çox yaxşı cavab müddətidir. digər istehsalçıların mikro nəzarətçiləri.

Yeri gəlmişkən: mikrokontroller yuxu rejimində olarkən IRQ baş verərsə, IRQ-ya cavab müddəti daha dörd saat dövrü, üstəgəl SUT1 və SUT0 qoruyucu bitlərində saxlanan vaxt (Başlanğıc vaxtı) artır.

Interrupt - prosessordan dərhal cavab tələb edən hadisə. Cavab budur ki, prosessor cari proqramın işlənməsini dayandırır ( kəsilmiş proqram) və başqa bir proqramı icra etməyə davam edir ( proqramın dayandırılması), bu tədbir üçün xüsusi olaraq hazırlanmışdır. Bu proqram başa çatdıqdan sonra prosessor dayandırılmış proqramı icra etməyə qayıdır.

Fasilə tələb edən hər bir hadisə ilə müşayiət olunur kəsmə siqnalı, bu barədə kompüteri xəbərdar etdi və zəng etdi müdaxilə tələbi.

Proqram statusu zamanın müvafiq nöqtəsində (məsələn, sonuncu əmr yerinə yetirildikdən sonra) bütün saxlama elementlərinin vəziyyətlərinin toplusunu təmsil edir. Kesinti baş verdikdə, mikrokontroller proqram sayğacının məzmununu stekdə saxlayır və ona uyğun kəsilmə vektorunun ünvanını yükləyir. Kəsmə xidməti proqramının sonuncu əmri əsas proqrama qayıdan və əvvəllər saxlanmış proqram sayğacını bərpa edən əmr olmalıdır. Kəsmə idarəedicisi icra edilərkən bəzi məlumatlar dəyişə bilər. Buna görə də, kəsmə işləyicisinə keçərkən dəyişdirilən elementləri saxlamaq lazımdır. Belə elementlərin dəsti belədir proqram dövlət vektoru. Bu halda, yaddaş hüceyrələrinin vəziyyəti haqqında digər məlumatlar əhəmiyyətli deyil və ya proqramlı şəkildə bərpa edilə bilər.

Vektor ilkin vəziyyət proqramın ilkin işə salınması üçün bütün lazımi məlumatları ehtiva edir. Bir çox hallarda ilkin vəziyyət vektoru yalnız bir elementi - işə salınan proqramın başlanğıc ünvanını ehtiva edir.

Kəsmə vektoru kəsilən proqramın (işləyicinin) ilkin vəziyyətinin vektorudur və onun başlanğıc ünvanı daxil olmaqla, işləyiciyə keçmək üçün bütün lazımi məlumatları ehtiva edir. Hər bir kəsmə növünün özünəməxsus kəsmə vektoru var və bu, müvafiq işləyicinin icrasına başlayır. Tipik olaraq, kəsmə vektorları qısa ünvanları olan xüsusi olaraq ayrılmış sabit yaddaş yerlərində saxlanılır. vektor cədvəlini kəsmək. Müvafiq kəsmə proqramına keçmək üçün prosessorda kəsmə vektoru və bu vektorun ünvanı olmalıdır. Bu ünvanda, bir qayda olaraq, kəsilmənin idarə edilməsi alt proqramına qeyd-şərtsiz keçid əmri var.

Bir qayda olaraq, saxlama və geri qaytarma nəzarəti kəsmə idarəçisinə verilir. Bu zaman işləyici üç hissədən - proqramın dəyişdirilməsini təmin edən hazırlıq (proloq) və yekun (epiloq) və sorğunun tələb etdiyi əməliyyatları yerinə yetirən faktiki kəsici proqramdan ibarətdir. Cavab müddəti kəsmə sorğusunun alındığı andan kəsilən proqramın icrasına başlayana qədər olan vaxt intervalı kimi müəyyən edilir.


tp– sistemin fasiləyə cavab müddəti;
t z– kəsilmiş proqramın vəziyyətini saxlamaq üçün vaxt;
t ppr– proqramın faktiki kəsilməsinin vaxtı;
t in– kəsilmiş proqramın vəziyyətini bərpa etmək vaxtı

Bir neçə sorğu mənbəyi varsa, daxil olan sorğulara xidmət göstərilməsinin müəyyən bir sırası qurulmalıdır. prioritet əlaqələr və ya xidmət intizamı. Bütün mümkün prosessor kəsmə növlərinin toplusu belədir kəsmə sistemi mikro nəzarətçi. Xidmət intizamı eyni vaxtda daxil olan bir neçə sorğudan hansının əvvəlcə emal edilməli olduğunu və olub olmadığını müəyyən edir bu xahiş bu və ya digər müdaxilə işləyicisini kəsmək.
Kəsmə emal edilərkən daha yüksək prioritetli kəsmə sorğusu alınarsa, nəzarət daha yüksək prioritetli kəsmə işləyicisinə verilir və daha aşağı prioritetli kəsmə işləyicisi dayandırılır. Oyanır yuva qurmağı dayandırmaq. Bir-birini dayandıra bilən proqramların maksimum sayı deyilir fasilələrin dərinliyi.

Eyni mənbədən (eyni prioritet) yeni sorğu gələnə qədər kəsmə sorğusuna xidmət göstərilmirsə, o zaman sistemin doymasını kəsmək. Bu halda, kəsmə sorğularının bir hissəsi itiriləcək, bunun üçün normal əməliyyat mikro nəzarətçiyə icazə verilmir.

Kəsmə sisteminin xüsusiyyətləri bunlardır:

  • kəsilmə sorğularının ümumi sayı kəsilmə sorğularının mənbələrinin sayı;
  • kəsilmənin təmsil növü - bir qayda olaraq, kəsmə sorğusu məntiqi siqnal səviyyəsi ilə təmsil olunur;
  • kəsilmə prioriteti – hər kəsmə sorğusunun işlənmə ardıcıllığını müəyyən edir; prioritet nə qədər yüksək olarsa, onun üçün kəsilmə proqramının icrasında gecikmə də bir o qədər qısa olar;
  • cavab müddəti – kəsmə sorğusunun görünməsi ilə kəsilən proqramın icrasına başlanması arasındakı vaxt intervalı;
  • fasilə gecikməsi – proqramın saxlanması və bərpası üçün ümumi vaxtla müəyyən edilir;
  • dərinlik, adətən kəsmə sistemindəki prioritet səviyyələrin sayı ilə üst-üstə düşür;
  • sistemin doymasını kəsmək;
  • proqramın kəsilməsinin icazə verilən anları (adətən növbəti əmrin icrasının sonu).

Maskalamanın kəsilməsi mikrokontrollerə hər növ fasiləyə cavab verməyi və ya ona məhəl qoymamağı söyləmək üçün istifadə olunur. Kəsmə maskası, bitləri kəsmə sorğusunun mənbələrinə təyin edilmiş ikili kodu təmsil edir. İkili koddakı bir bit mikrokontrollerə bu növ kəsilməni idarə etməyi əmr edir. Sıfır bit, əksinə, mikrokontrolörün müəyyən edilmiş növ fasilələrin işlənməsinə davam etməsinə imkan vermir.
Bir qayda olaraq, kəsilmələrin maskalanması ilə yanaşı, sıfır dəyəri bütün kəsmə işləyicilərini (avadanlığın sıfırlanması və icraçı proqramın başlanğıcına keçid istisna olmaqla) qeyri-aktiv edən qlobal kəsmə aktivləşdirmə biti də mövcuddur.
Kesinti maskası binar kodundan əlavə, ikili kod da var bayraqları kəsin, bu, mikrokontrollerdə göstərilən sorğu ilə bir neçə mənbə varsa, kəsmə idarəçisinə kəsmə mənbəyini təyin etməyə imkan verir.




Üst