Chapter 12 : Interrupts

Chapter 12

Interrupts



Pengenalan 
Bab ini membahas perluasan materi I/O dasar dan antarmuka periferal terprogram dengan meninjau interrupt-processed I/O, yaitu prosedur perangkat keras yang menghentikan sementara program yang sedang berjalan. Selain itu, bab ini juga menyajikan contoh serta penjelasan rinci mengenai struktur interrupt pada keluarga mikroprosesor Intel.

12-1 BASIC INTERRUPT PROCESSING

Tujuan dari Interrupt

Interrupt sangat berguna saat berhubungan dengan perangkat I/O berkecepatan rendah. Pada metode polling (contohnya 82C55 dengan keyboard), prosesor harus menunggu lama setiap input, sehingga membuang waktu. Dengan interrupt processing, prosesor bisa menjalankan program lain sambil menunggu input. Begitu tombol ditekan, keyboard mengirim sinyal interrupt sehingga prosesor membaca data, lalu kembali ke tugas sebelumnya. Dengan cara ini, prosesor dapat tetap produktif menjalankan tugas lain sambil menunggu input pengguna.

Figure 12-1 A time line that indicates interrupt usage in a typical system.



Figure 12–1 menunjukkan sebuah garis waktu yang menggambarkan seorang pengetik yang mengetik data pada keyboard, sebuah printer yang mengambil data dari memori, dan sebuah program yang sedang dieksekusi. Program tersebut adalah program utama yang terinterupsi untuk setiap penekanan tombol dan setiap karakter yang akan dicetak pada printer. Perlu dicatat bahwa prosedur layanan interupsi keyboard, yang dipanggil oleh interupsi keyboard, dan prosedur layanan interupsi printer masing-masing hanya membutuhkan sedikit waktu untuk dieksekusi.


Interrupt

Interrupt pada keluarga mikroprosesor Intel memiliki dua pin perangkat keras untuk permintaan interrupt (INTR dan NMI) serta satu pin untuk mengakui interrupt melalui INTR. Selain itu, terdapat interrupt perangkat lunak (INT, INTO, INT 3, dan BOUND), dua flag (IF dan TF), serta instruksi khusus IRET/IRETD untuk kembali setelah interrupt.


Interrupt Vector

Vektor interrupt dan tabel vektor sangat penting untuk memahami interrupt perangkat keras maupun perangkat lunak. Tabel vektor interrupt terletak pada 1024 byte pertama memori di alamat 000000H–0003FFH. Tabel ini berisi 256 vektor interrupt yang masing-masing berukuran empat byte. Setiap vektor interrupt menyimpan alamat (segmen dan offset) dari prosedur layanan interrupt.

Figure 12-2 (a) The interrupt vector table for the microprocessor and (b) the contents of an interrupt vector.




Figure 12–2 menggambarkan tabel vektor interupsi untuk mikroprosesor. Lima vektor interupsi pertama identik pada semua anggota keluarga mikroprosesor Intel, mulai dari 8086 hingga Pentium. Vektor interupsi lainnya ada pada 80286 yang kompatibel ke atas dengan 80386, 80486, dan Pentium–Core2, tetapi tidak kompatibel ke bawah dengan 8086 atau 8088. Intel memesan 32 vektor interupsi pertama untuk digunakan dalam berbagai anggota keluarga mikroprosesornya. 224 vektor terakhir tersedia sebagai vektor interupsi untuk pengguna. Setiap vektor memiliki panjang empat byte dalam mode real dan berisi alamat awal dari prosedur layanan interupsi. Dua byte pertama dari vektor berisi alamat offset, sedangkan dua byte terakhir berisi alamat segmen.

Daftar berikut menjelaskan fungsi dari setiap interrupt khusus pada mikroprosesor:

  • TYPE 0 – Divide error
    Terjadi setiap kali hasil dari operasi pembagian mengalami overflow atau ketika ada upaya melakukan pembagian dengan nol.
  • TYPE 1 – Single-step atau trap
    Terjadi setelah eksekusi setiap instruksi apabila bit flag TF (Trap Flag) diatur (set). Setelah interrupt ini diterima, bit TF akan dihapus (clear) sehingga prosedur layanan interrupt dieksekusi dengan kecepatan penuh. (Detail lebih lanjut tentang interrupt ini dijelaskan kemudian pada bagian bab ini.)
  • TYPE 2 – Non-maskable interrupt (NMI)
    Terjadi ketika logika 1 diberikan pada pin input NMI mikroprosesor. Interrupt ini bersifat non-maskable, artinya tidak bisa dinonaktifkan.
  • TYPE 3 – Breakpoint (INT 3)
    Merupakan instruksi khusus satu byte (INT 3) yang menggunakan vektor ini untuk mengakses prosedur layanan interrupt. Instruksi INT 3 sering digunakan untuk menyimpan breakpoint dalam sebuah program saat debugging.
  • TYPE 4 – Overflow
    Merupakan vektor khusus yang digunakan bersama instruksi INTO. Instruksi INTO akan menginterupsi program jika terjadi kondisi overflow, sebagaimana tercermin pada overflow flag (OF).
  • TYPE 5 – BOUND
    Instruksi BOUND membandingkan isi sebuah register dengan batas yang disimpan di memori.
    • Jika isi register ≥ kata pertama di memori dan ≤ kata kedua, maka tidak terjadi interrupt karena nilai register berada dalam batas.
    • Jika isi register di luar batas, maka interrupt tipe 5 akan terjadi.
  • TYPE 6 – Invalid opcode
    Terjadi ketika prosesor menemukan opcode yang tidak didefinisikan dalam program.
  • TYPE 7 – Coprocessor not available
    Terjadi bila koprosesor tidak ditemukan di dalam sistem, sesuai dengan bit kendali koprosesor pada Machine Status Word (MSW/CR0). Jika instruksi ESC atau WAIT dijalankan tetapi koprosesor tidak ada, maka akan terjadi exception/interrupt tipe 7.
  • TYPE 8 – Double fault
    Aktif ketika terjadi dua interrupt terpisah pada saat instruksi yang sama sedang dieksekusi.
  • TYPE 9 – Coprocessor segment overrun
    Terjadi jika operand memori pada instruksi ESC (opcode koprosesor) melampaui alamat offset FFFFH pada real mode.
  • TYPE 10 – Invalid task state segment (TSS)
    Terjadi dalam protected mode jika TSS tidak valid karena field limit segmen bukan 002BH atau lebih besar. Umumnya disebabkan karena TSS belum diinisialisasi.
  • TYPE 11 – Segment not present
    Terjadi ketika bit P = 0 (present bit) dalam sebuah deskriptor menunjukkan bahwa segmen tidak ada atau tidak valid dalam protected mode.
  • TYPE 12 – Stack segment overrun
    Terjadi jika segmen stack tidak ada (P = 0) dalam protected mode, atau bila batas stack segment terlampaui.
  • TYPE 13 – General protection fault
    Terjadi pada sebagian besar pelanggaran proteksi dalam sistem protected mode 80286 hingga Core2. (Dalam Windows, error ini muncul sebagai General Protection Fault).
    Contoh pelanggaran:
    a. Batas tabel deskriptor terlampaui
    b. Aturan hak istimewa (privilege) dilanggar
    c. Jenis segmen deskriptor tidak valid dimuat
    d. Penulisan ke segmen kode yang dilindungi
    e. Membaca dari segmen kode yang hanya boleh dieksekusi
    f. Penulisan ke segmen data yang hanya boleh dibaca
    g. Batas segmen terlampaui
    h. CPL = IOPL ketika mengeksekusi instruksi CTS, HLT, LGDT, LIDT, LLDT, LMSW, atau LTR
    i. CPL > IOPL ketika mengeksekusi instruksi CLI, IN, INS, LOCK, OUT, OUTS, dan STI
  • TYPE 14 – Page fault
    Terjadi pada setiap kesalahan akses memori atau kode akibat page fault dalam mikroprosesor 80386, 80486, dan Pentium–Core2.
  • TYPE 16 – Coprocessor error
    Terjadi ketika ada error pada koprosesor (ERROR = 0) akibat instruksi ESCape atau WAIT pada mikroprosesor 80386, 80486, dan Pentium–Core2.
  • TYPE 17 – Alignment check
    Menunjukkan bahwa data word atau doubleword diakses pada alamat memori ganjil (atau alamat yang salah dalam kasus doubleword). Interrupt ini aktif pada mikroprosesor 80486 dan Pentium–Core2.
  • TYPE 18 – Machine check
    Mengaktifkan interrupt manajemen memori sistem pada mikroprosesor Pentium–Core2.

Sebuah interrupt vector menyimpan alamat lengkap dari Interrupt Service Routine (ISR), yaitu lokasi program yang akan dijalankan prosesor ketika interrupt terjadi.

  • Offset (low) [Byte 0]
    Bagian rendah dari alamat offset (Instruction Pointer / IP).
  • Offset (high) [Byte 1]
    Bagian tinggi dari alamat offset.
    → Jadi offset = IP (16-bit) yang menunjukkan alamat relatif instruksi pertama ISR di dalam segmen kode.
  • Segment (low) [Byte 2]
    Bagian rendah dari alamat segmen (Code Segment / CS).
  • Segment (high) [Byte 3]
    Bagian tinggi dari alamat segmen.
    → Jadi segment = CS (16-bit) yang menunjukkan segmen tempat ISR berada.


Interrupt Instructions: BOUND, INTO, INT, INT 3, and IRET

  • BOUND

    • Digunakan untuk memeriksa apakah suatu indeks berada dalam rentang (bounds) yang ditentukan.

    • Jika nilai indeks berada di luar batas, prosesor akan menghasilkan interrupt tipe 5 (BOUND range exceeded).

    • Biasanya dipakai dalam operasi array atau validasi data.

  • INTO (Interrupt on Overflow)

    • Menghasilkan interrupt jika flag overflow (OF) dalam register flag bernilai 1.

    • Biasanya digunakan setelah operasi aritmatika untuk mendeteksi apakah terjadi overflow.

    • Jika OF = 0, instruksi ini diabaikan (tidak terjadi interrupt).

  • INT 

    • Instruksi untuk memanggil interrupt software dengan nomor interrupt tertentu (n = 0–255).

    • Prosesor akan mencari alamat ISR (Interrupt Service Routine) dari interrupt vector table, lalu menjalankan ISR tersebut.

    • Contoh: INT 21H sering digunakan pada DOS untuk layanan sistem.

  • INT 3

    • Instruksi khusus untuk debugging.

    • Secara otomatis memicu interrupt tipe 3 (breakpoint interrupt).

    • Digunakan oleh debugger untuk menghentikan eksekusi program di titik tertentu.

  • IRET (atau IRETD pada 80386 ke atas)

    • Digunakan untuk kembali dari interrupt.

    • Instruksi ini akan memulihkan nilai IP (Instruction Pointer), CS (Code Segment), dan flag register dari stack, sehingga program dapat melanjutkan eksekusi tepat setelah titik yang terinterupsi.

FIGURE 12–3 The protected mode interrupt descriptor.


Sebuah gambar berisi teks, cuplikan layar, Font, garis

Konten yang dihasilkan AI mungkin salah.


Figure 12-3 menunjukkan interrupt descriptor dalam mode protected pada arsitektur mikroprosesor Intel. Descriptor ini digunakan untuk menentukan alamat prosedur layanan interupsi (Interrupt Service Routine/ISR) ketika sebuah interupsi terjadi. Bagian paling bawah berisi offset rendah (A15–A0), yang menyimpan 16 bit alamat awal ISR. Di atasnya terdapat segment selector, yang menunjukkan segmen kode tempat ISR berada. Bagian berikutnya berisi bit-bit kendali, yaitu P (Present bit) yang menandakan apakah descriptor valid, DPL (Descriptor Privilege Level) yang menentukan tingkat hak akses interupsi, serta sebuah field tipe yang berisi kode tetap (01110) dan nilai heksadesimal (00H) untuk mengidentifikasi jenis gate (interrupt gate/trap gate). Pada bagian paling atas terdapat offset tinggi (A31–A16), yang melengkapi alamat ISR hingga 32 bit penuh. Dengan struktur ini, sistem dalam mode protected dapat mengakses rutin interupsi secara aman, terstruktur, dan sesuai dengan level hak akses yang ditentukan.


FIGURE 12–4 The flag register. (Courtesy of Intel Corporation.)


Sebuah gambar berisi teks, Font, garis, cuplikan layar

Konten yang dihasilkan AI mungkin salah.


Figure 12-4 menunjukkan flag register pada mikroprosesor Intel, yang digunakan untuk menyimpan informasi status hasil operasi aritmatika maupun kontrol prosesor. Beberapa bit penting ditampilkan, antara lain C (Carry flag) di bit 0 yang menandakan adanya carry atau borrow pada operasi biner, P (Parity flag) di bit 2 yang menunjukkan paritas hasil, A (Auxiliary carry) di bit 4 untuk operasi BCD, Z (Zero flag) di bit 6 yang menandakan hasil bernilai nol, S (Sign flag) di bit 7 yang menunjukkan tanda hasil (positif/negatif), T (Trap flag) di bit 8 untuk mode debug satu langkah, I (Interrupt enable flag) di bit 9 yang mengontrol apakah interupsi maskable diizinkan, D (Direction flag) di bit 10 untuk operasi string (menentukan auto-increment atau auto-decrement), dan O (Overflow flag) di bit 11 yang menandakan overflow pada operasi signed. Register ini sangat penting karena memengaruhi alur eksekusi instruksi berikutnya, misalnya dalam instruksi percabangan bersyarat atau pengendalian interupsi.


Example 12-1

Example 12–1 menunjukkan sebuah prosedur layanan interupsi yang mengaktifkan proses tracing dengan cara mengatur bit trap flag pada stack dari dalam prosedur.



Example 12-2

Example 12–2 menunjukkan sebuah prosedur layanan interupsi yang menonaktifkan proses tracing dengan cara menghapus (clearing) bit trap flag pada stack dari dalam prosedur.




Example 12-3


Example 12–3 menelusuri jalannya sebuah program tepat setelah instruksi INT 40H. Prosedur layanan interupsi yang ditunjukkan pada Example 12–3 merespons interupsi tipe nomor 1 atau interupsi trap. Setiap kali trap terjadi—yaitu setelah setiap instruksi dieksekusi setelah INT 40H—prosedur TRACE menyimpan isi semua register mikroprosesor 32-bit ke dalam sebuah array bernama REGS. Hal ini menghasilkan jejak register dari semua instruksi yang berada di antara INT 40H (TRON) dan INT 41H (TROFF), jika isi register yang disimpan di dalam array tersebut disimpan.


Example 12-4


Example 12–4 menunjukkan bagaimana sebuah vektor baru ditambahkan ke tabel vektor interupsi dengan menggunakan assembler dan pemanggilan fungsi DOS. Di sini, vektor untuk INT 40H, yang menunjuk pada prosedur interupsi NEW40, dipasang di memori pada lokasi vektor mode real 100H–103H. Langkah pertama yang dilakukan oleh prosedur ini adalah menyimpan isi vektor interupsi lama sebagai cadangan jika nantinya kita perlu mencopot (uninstall) vektor tersebut. Langkah ini dapat dilewati apabila tidak ada kebutuhan untuk mencopot interupsi tersebut.


FIGURE 12–5 The interrupt pins on all versions of the Intel microprocessor.


Figure 12-5 menunjukkan pin interupsi pada semua versi mikroprosesor Intel. Terdapat dua pin masukan interupsi, yaitu NMI (Non-Maskable Interrupt) dan INTR (Interrupt Request), serta satu pin keluaran interupsi, yaitu INTA (Interrupt Acknowledge). Pin NMI digunakan untuk interupsi dengan prioritas tinggi yang tidak dapat dinonaktifkan oleh perangkat lunak, biasanya untuk kondisi darurat. Pin INTR digunakan sebagai permintaan interupsi maskable yang dapat diaktifkan atau dinonaktifkan oleh program melalui interrupt flag (IF). Sementara itu, pin INTA merupakan sinyal keluaran dari mikroprosesor sebagai respons terhadap permintaan interupsi melalui INTR, yang menandakan bahwa prosesor siap menerima informasi vektor interupsi dari perangkat eksternal. Struktur ini memungkinkan mikroprosesor menangani berbagai sumber interupsi dengan mekanisme yang teratur.

FIGURE 12–6 A power failure detection circuit.


Figure 12-6 menunjukkan rangkaian power failure detection circuit yang berfungsi untuk mendeteksi kegagalan daya listrik. Sumber AC 120 V disearahkan melalui optocoupler yang diproteksi oleh resistor 47 kΩ dan kapasitor 0,01 µF untuk membatasi arus. Ketika daya AC ada, LED dalam optocoupler menyala sehingga transistor di dalamnya aktif dan menghasilkan sinyal logika rendah. Sinyal ini kemudian diperkuat dan dibalik oleh gerbang Schmitt Trigger inverter 74ALS14 (U1A) sehingga keluaran berupa pulsa logika yang stabil. Pulsa ini diteruskan ke monostable multivibrator 74LS122 (U2) yang menggunakan resistor dan kapasitor eksternal (R dan C) untuk menentukan lebar pulsa. Jika sumber AC gagal, optocoupler berhenti menghantarkan sehingga output berubah dan memicu monostable menghasilkan sinyal ke keluaran NMI (Non-Maskable Interrupt), yang selanjutnya memberi tahu prosesor atau sistem digital bahwa telah terjadi kegagalan daya. Dengan demikian, rangkaian ini memberikan peringatan dini agar sistem dapat melakukan tindakan penyelamatan data atau shutdown dengan aman.


FIGURE 12–7 A battery-backed-up memory system using a NiCad, lithium, or gel cell.

Figure 12-7 menunjukkan rangkaian battery-backed-up memory system yang digunakan untuk menjaga data dalam memori tetap tersimpan meskipun catu daya utama padam, dengan memanfaatkan baterai cadangan seperti NiCad, lithium, atau gel cell. Tegangan input +9 V diregulasi oleh IC regulator LM7805 menjadi +5 V untuk memberi catu daya utama ke memori. Kapasitor elektrolit digunakan untuk menyaring tegangan agar tetap stabil, sedangkan dioda memberikan jalur isolasi sehingga ketika tegangan utama hilang, suplai daya otomatis digantikan oleh baterai cadangan tanpa mengganggu kerja sistem. Resistor 4,7 kΩ dan 10 kΩ membentuk jalur kontrol yang menghubungkan pin WR (Write Enable) agar status penulisan ke memori tetap terkendali saat terjadi perpindahan sumber daya. Dengan demikian, rangkaian ini memungkinkan memori tetap aktif dan data tidak hilang ketika listrik utama mati.


FIGURE 12–8 The timing of the INTR input and output. *This portion of the data bus is ignored and usually contains the vector number.


Sebuah gambar berisi teks, cuplikan layar, diagram, garis

Konten yang dihasilkan AI mungkin salah.

 

Figure 12-8 memperlihatkan diagram timing antara sinyal INTR (Interrupt Request) dan INTA (Interrupt Acknowledge) pada sistem mikroprosesor. Ketika perangkat eksternal meminta interupsi, sinyal INTR dinaikkan. Mikroprosesor kemudian merespons dengan mengeluarkan sinyal INTA (acknowledge) dalam dua siklus berturut-turut. Selama siklus acknowledge pertama, bus data D7–D0 biasanya diabaikan (ditandai dengan simbol *), sedangkan pada siklus acknowledge kedua, perangkat interrupt controller meletakkan nomor vektor interupsi pada bus data, yang akan digunakan oleh prosesor untuk memanggil service routine yang sesuai. Sinyal LOCK digunakan untuk mengunci bus selama proses acknowledge agar tidak terjadi konflik akses. Dengan demikian, diagram ini menunjukkan urutan waktu bagaimana prosesor mengenali, mengakui, dan menangani permintaan interupsi melalui mekanisme vektor interupsi.


FIGURE 12–9 A simple method for generating interrupt vector type number FFH in response to INTR.


Figure 12-9 menunjukkan rangkaian sederhana untuk menghasilkan interrupt vector type number FFH sebagai respons terhadap sinyal INTR pada mikroprosesor. Rangkaian menggunakan resistor array 27K yang dihubungkan ke VCC untuk menarik semua jalur data (D0–D7) ke logika tinggi (1). Saat sinyal INTA (Interrupt Acknowledge) aktif, data bus rendah (low data bus) diisi dengan nilai FFH (11111111 dalam biner), yang merupakan vektor interupsi. Dengan metode ini, setiap kali terjadi interupsi, prosesor secara otomatis menerima vektor tetap FFH dari data bus, sehingga langsung dapat memanggil rutin layanan interupsi yang sesuai tanpa memerlukan pengendali interupsi tambahan.


FIGURE 12–10 A circuit that applies any interrupt vector type number in response to . Here the circuit is applying type number 80H.


Figure 12-10 menunjukkan rangkaian yang digunakan untuk memberikan interrupt vector type number tertentu ke prosesor sebagai respons terhadap sinyal INTA (Interrupt Acknowledge). Rangkaian ini menggunakan IC 74ALS244 (octal buffer/line driver) yang menghubungkan data dari DIP switch 8-bit ke low data bus (D0–D7). Dengan mengatur posisi DIP switch, pengguna dapat menentukan nilai vektor interupsi yang diinginkan, dan dalam contoh gambar ditunjukkan bahwa nilai yang diberikan adalah 80H (1000 0000b). Pull-up resistor 10K pada DIP switch menjaga level logika tetap stabil saat saklar terbuka. Ketika sinyal INTA aktif, buffer 74ALS244 memungkinkan data dari DIP switch dipindahkan ke bus, sehingga prosesor menerima vektor interupsi yang sesuai. Rangkaian ini lebih fleksibel dibanding metode tetap (seperti FFH), karena dapat menghasilkan berbagai vektor interupsi sesuai kebutuhan.


Komentar

Postingan populer dari blog ini