Sistem Tertanam - Interupsi

Interupsi adalah sinyal ke prosesor yang dipancarkan oleh perangkat keras atau perangkat lunak yang menunjukkan suatu peristiwa yang perlu perhatian segera. Setiap kali terjadi interupsi, pengontrol menyelesaikan eksekusi dari instruksi saat ini dan memulai eksekusi dari sebuahInterrupt Service Routine (ISR) atau Interrupt Handler. ISR memberi tahu prosesor atau pengontrol apa yang harus dilakukan ketika interupsi terjadi. Interupsi dapat berupa interupsi perangkat keras atau interupsi perangkat lunak.

Interupsi Perangkat Keras

Interupsi perangkat keras adalah sinyal peringatan elektronik yang dikirim ke prosesor dari perangkat eksternal, seperti pengontrol disk atau perangkat eksternal. Misalnya, ketika kita menekan tombol pada keyboard atau menggerakkan mouse, mereka memicu interupsi perangkat keras yang menyebabkan prosesor membaca tombol atau posisi mouse.

Interupsi Perangkat Lunak

Interupsi perangkat lunak disebabkan baik oleh kondisi luar biasa atau instruksi khusus dalam set instruksi yang menyebabkan interupsi saat dijalankan oleh prosesor. Misalnya, jika unit logika aritmatika prosesor menjalankan perintah untuk membagi angka dengan nol, menyebabkan pengecualian bagi-dengan-nol, sehingga menyebabkan komputer mengabaikan kalkulasi atau menampilkan pesan kesalahan. Instruksi interupsi perangkat lunak bekerja mirip dengan panggilan subrutin.

Apa itu Polling?

Status pemantauan berkelanjutan dikenal sebagai polling. Mikrokontroler terus memeriksa status perangkat lain; dan saat melakukannya, ia tidak melakukan operasi lain dan menghabiskan semua waktu pemrosesannya untuk pemantauan. Masalah ini dapat diatasi dengan menggunakan interupsi.

Dalam metode interupsi, pengontrol hanya merespon ketika terjadi interupsi. Dengan demikian, pengontrol tidak diharuskan untuk memantau secara teratur status (bendera, sinyal, dll.) Dari perangkat yang terhubung dan terpasang.

Interupsi v / s Polling

Berikut adalah analogi yang membedakan interupsi dari polling -

Mengganggu Jajak pendapat
Sebuah interupsi seperti a shopkeeper. Jika seseorang membutuhkan layanan atau produk, dia mendatanginya dan memberi tahu dia tentang kebutuhannya. Jika terjadi interupsi, ketika flag atau sinyal diterima, mereka memberi tahu pengontrol bahwa mereka perlu diservis. Metode polling seperti a salesperson. Penjual pergi dari pintu ke pintu sambil meminta untuk membeli produk atau layanan. Demikian pula, pengontrol terus memantau flag atau sinyal satu per satu untuk semua perangkat dan menyediakan layanan ke komponen mana pun yang membutuhkan layanannya.

Rutin Layanan Interupsi

Untuk setiap interupsi, harus ada rutin layanan interupsi (ISR), atau interrupt handler. Ketika interupsi terjadi, mikrokontroler menjalankan rutinitas layanan interupsi. Untuk setiap interupsi, ada lokasi tetap dalam memori yang menyimpan alamat rutin layanan interupsi, ISR. Tabel lokasi memori yang disisihkan untuk menampung alamat ISR disebut sebagai Tabel Vektor Interupsi.

Interupsi Tabel Vektor

Ada enam interupsi termasuk RESET di 8051.

Interupsi Lokasi ROM (Hex) Pin
Interupsi Lokasi ROM (HEX)
Serial COM (RI dan TI) 0023
Timer 1 interupsi (TF1) 001B
Eksternal HW interrupt 1 (INT1) 0013 P3.3 (13)
Interupsi HW eksternal 0 (INT0) 0003 P3.2 (12)
Timer 0 (TF0) 000B
Setel ulang 0000 9
  • Saat pin reset diaktifkan, 8051 melompat ke lokasi alamat 0000. Ini adalah reset penyalaan.

  • Dua interupsi disisihkan untuk timer: satu untuk timer 0 dan satu lagi untuk timer 1. Lokasi memori masing-masing 000BH dan 001BH dalam tabel vektor interupsi.

  • Dua interupsi disisihkan untuk interupsi eksternal perangkat keras. Pin no. 12 dan Pin no. 13 di Port 3 adalah untuk interupsi perangkat keras eksternal, masing-masing INT0 dan INT1. Lokasi memori masing-masing adalah 0003H dan 0013H dalam tabel vektor interupsi.

  • Komunikasi serial memiliki satu interupsi yang dimiliki baik untuk menerima dan mengirim. Lokasi memori 0023H termasuk dalam interupsi ini.

Langkah-langkah untuk Melakukan Interupsi

Saat interupsi aktif, mikrokontroler melakukan langkah-langkah berikut -

  • Mikrokontroler menutup instruksi yang sedang dijalankan dan menyimpan alamat instruksi berikutnya (PC) di stack.

  • Ini juga menyimpan status saat ini dari semua interupsi secara internal (yaitu, bukan pada tumpukan).

  • Ini melompat ke lokasi memori dari tabel vektor interupsi yang menyimpan alamat rutin layanan interupsi.

  • Mikrokontroler mendapatkan alamat ISR dari tabel vektor interupsi dan melompat ke sana. Ia mulai menjalankan subrutin layanan interupsi, yaitu RETI (kembali dari interupsi).

  • Setelah menjalankan instruksi RETI, mikrokontroler kembali ke lokasi di mana ia diinterupsi. Pertama, ia mendapatkan alamat penghitung program (PC) dari tumpukan dengan memunculkan byte teratas dari tumpukan ke PC. Kemudian, itu mulai dijalankan dari alamat itu.

Edge Triggering vs. Level Triggering

Modul interupsi terdiri dari dua jenis - level-triggered atau edge-triggered.

Level Dipicu Edge Triggered
Modul interupsi yang dipicu oleh level selalu menghasilkan interupsi setiap kali level sumber interupsi ditetapkan. Modul interupsi yang dipicu tepi menghasilkan interupsi hanya ketika mendeteksi tepi yang menegaskan sumber interupsi. Tepi terdeteksi ketika tingkat sumber interupsi benar-benar berubah. Itu juga dapat dideteksi dengan pengambilan sampel periodik dan mendeteksi tingkat yang ditetapkan ketika sampel sebelumnya tidak dinyatakan.
Jika sumber interupsi masih dinyatakan saat penangan interupsi firmware menangani interupsi, modul interupsi akan membuat ulang interupsi, menyebabkan penangan interupsi dipanggil lagi. Modul interupsi yang dipicu tepi dapat segera dijalankan, tidak peduli bagaimana sumber interupsi berperilaku.
Interupsi yang dipicu level merepotkan untuk firmware. Interupsi yang dipicu tepi menjaga kompleksitas kode firmware tetap rendah, mengurangi jumlah kondisi firmware, dan memberikan lebih banyak fleksibilitas saat interupsi ditangani.

Mengaktifkan dan Menonaktifkan Interupsi

Setelah Reset, semua interupsi dinonaktifkan meskipun diaktifkan. Interupsi harus diaktifkan menggunakan perangkat lunak agar mikrokontroler dapat merespons interupsi tersebut.

Register IE (interrupt enable) bertanggung jawab untuk mengaktifkan dan menonaktifkan interupsi. IE adalah register bitaddressable.

Interrupt Enable Register

EA - ET2 ES ET1 EX1 ET0 EX0
  • EA - Aktifkan / nonaktifkan global.

  • - - Tidak ditentukan.

  • ET2 - Aktifkan Timer 2 interupsi.

  • ES - Aktifkan Interupsi port serial.

  • ET1 - Aktifkan Timer 1 interupsi.

  • EX1 - Aktifkan Eksternal 1 interupsi.

  • ET0 - Aktifkan Timer 0 interupsi.

  • EX0 - Aktifkan Eksternal 0 interupsi.

Untuk mengaktifkan interupsi, kami mengambil langkah-langkah berikut -

  • Bit D7 dari register IE (EA) harus tinggi agar register lainnya dapat diterapkan.

  • Jika EA = 1, interupsi akan diaktifkan dan akan ditanggapi, jika bit yang sesuai di IE tinggi. Jika EA = 0, tidak ada interupsi yang akan merespons, meskipun pin terkait di register IE tinggi.

Prioritas Interupsi pada 8051

Kita dapat mengubah prioritas interupsi dengan menetapkan prioritas yang lebih tinggi ke salah satu interupsi. Ini dilakukan dengan memprogram register yang disebutIP (prioritas interupsi).

Gambar berikut menunjukkan bit-bit register IP. Setelah disetel ulang, register IP berisi semua 0. Untuk memberikan prioritas yang lebih tinggi ke salah satu interupsi, kami membuat bit yang sesuai di register IP menjadi tinggi.

- - - - PT1 PX1 PT0 PX0

- IP.7 Tidak Diterapkan.
- IP.6 Tidak Diterapkan.
- IP.5 Tidak Diterapkan.
- IP.4 Tidak Diterapkan.
PT1 IP.3 Mendefinisikan tingkat prioritas interupsi Timer 1.
PX1 IP.2 Mendefinisikan tingkat prioritas Interupsi Eksternal 1.
PT0 IP.1 Mendefinisikan tingkat prioritas interupsi Timer 0.
PX0 IP.0 Mendefinisikan tingkat prioritas External Interrupt 0.

Interupsi di dalam Interrupt

Apa yang terjadi jika 8051 menjalankan ISR milik interupsi dan yang lain aktif? Dalam kasus seperti itu, interupsi berprioritas tinggi dapat mengganggu interupsi berprioritas rendah. Ini dikenal sebagaiinterrupt inside interrupt. Pada 8051, interupsi berprioritas rendah dapat diinterupsi oleh interupsi berprioritas tinggi, tetapi tidak oleh interupsi berprioritas rendah lainnya.

Memicu Interupsi oleh Perangkat Lunak

Ada kalanya kita perlu menguji ISR ​​dengan cara simulasi. Ini dapat dilakukan dengan instruksi sederhana untuk mengatur tinggi interupsi dan dengan demikian menyebabkan 8051 melompat ke tabel vektor interupsi. Misalnya, atur bit IE sebagai 1 untuk timer 1. Sebuah instruksiSETB TF1 akan mengganggu 8051 dalam apa pun yang dilakukannya dan memaksanya untuk melompat ke tabel vektor interupsi.