INTERUPSI

12 11 2009

Interupsi adalah suatu kejadian yang akan menghentikan sementara jalan program saat itu. Dengan interupsi, suatu alur program dapat dihentikan sementara untuk menjalankan suatu subrutin, dan kemudian melanjutkan aliran program secara normal seperti tidak pernah ada interupsi. Subrutin ini yang disebut dengan interrupt handler, dan hanya dijalankan jika terjadi suatu kejadian khusus (event). Kejadian ini bisa berupa timer yang mengalami overflow, penerimaan karakter melalui port serial, mengirimkan karakter melalui port serial, atau salah satu dari dua kejadian eksternal. Mikrokontroler 89C51 bisa dikonfigurasi untuk menangani interupsi yang disebabkan oleh salah satu dari kejadian.

Dengan interupsi ini, dapat dengan mudah dimonitor kejadian-kejadian yang diinginkan. Tanpa interupsi maka proses monitor ini dilakukan manual dengan pengecekan berulang. Proses pengecekan manual ini akan membuat program menjadi panjang dan lebih rumit.

Kejadian-kejadian yang Membangkitkan Interupsi

Dalam keluarga 8051, ada beberapa kejadian yang dapat membangkitkan interupsi, yaitu:

  1. Timer 0 overflow
  2. Timer 1 overflow
  3. Penerimaan / Pengiriman data secara serial
  4. Kejadian eksternal 0
  5. Kejadian eksternal 1

Dengan demikian, perlu dibedakan interupsi yang terjadi karena kejadian-kejadian yang berbeda. Hal ini bisa diwujudkan dengan adanya alamat pasti bagi sebuah rutin interupsi untuk masing-masing interupsi.

Daftar Alamat Rutin Interupsi

Interupsi Flag Alamat Rutin
Eksternal 0 IE0 0003h
Timer 0 TF0 000Bh
Eksternal 1 IE1 0013h
Timer 1 TF1 001Bh
Serial R1/T1 0023h

Dengan referensi tabel di atas, dapat dilihat bahwa jika TIMER0 mengalami overflow (bit TF0 logika 1), maka program utama akan ditunda sementara dan kontrol program akan melompat ke alamat 0003h.

Menyeting Interupsi

Pada saat awal dihidupkan (power on), semua interupsi dimatikan. Jadi, meskipun bit TF0 diset (interupsi timer 0 diaktifkan), mikrokontroler 89C51 tidak akan menjalankan rutin interupsi. Sebuah program harus dibuat dan dijalankan untuk mengaktifkan dan menspesifikasikan interupsi mana yang diinginkan. Hal ini dapat dilakukan dengan mengkonfigurasi SFR IE (Interrupt Enable) yang berada di alamat A8h. Konfigurasi bit-bit SFR IE yang mengatur enable dari konfigurasi interupsi tercantum pada tabel di bawah ini.

Konfigurasi Bit-bit SFR IE

Bit Nama Alamat Fungsi
7 EA AFh Global enable/disable interupsi
6 AEh Tidak didefinisikan
5 ADh Tidak didefinisikan
4 ES ACh Enable interupsi serial
3 ET1 ABh Enable interupsi timer 1
2 EX1 AAh Enable interupsi eksternal 1
1 ET0 A9h Enable interupsi timer 0
0 EX0 A8 Enable interupsi eksternal 0

Sebelum semua interupsi dijalankan, bit 7 dari SFR IE harus diset terlebih dahulu. Global enable/disable interupsi ini menyebabkan semua interupsi enable atau disable. Jika bit 7 IE ini dinolkan, tidak akan ada satu interupsi pun yang terjadi. Prosedur yang benar adalah dengan mengeset jenis interupsi yang diinginkan dan kemudian mengeset bit 7 IE, barulah interupsi akan berjalan dengan baik.

Prioritas Interupsi

Mikrokontroler 89C51 menawarkan dua macam prioritas interupsi, yaitu prioritas tinggi dan prioritas rendah. Dengan demikian, dapat ditentukan suatu interupsi memiliki prioritas pengerjaan lebih dahulu daripada interupsi-interupsi yang lain yang bekerja saat itu. Sebagai contoh, interupsi timer 1 diaktifkan untuk secara otomatis memanggil sebuah rutin saat timer 1 mengalami kondisi overflow. Di samping itu, interupsi serial juga diaktifkan untuk memanggil suatu rutin saat ada sebuah karakter diterima dalam port serial. Dalam kasus ini diinginkan bahwa penerimaan karakter dari port serial lebih penting daripada interupsi timer. Jadi seandainya interupsi timer 1 sedang bekerja dan terjadi penerimaan karakter, maka rutin interupsi timer 1 tersebut akan diinterupsi oleh interupsi port serial dan akan ditunda sementara untuk mengerjakan rutin interupsi port serial ini. Setelah pengerjaan rutin interupsi serial selesai, maka kontrol program akan kembali ke rutin interupsi timer 1. Yang dikerjakan di sini adalah mengeset prioritas interupsi serial lebih tinggi daripada prioritas interupsi timer. Prioritas interupsi ini dikontrol oleh SFR IP dengan alamat B8h yang memiliki konfigurasi bit-bit sebagaimana tercantum dalam tabel di bawah ini.

Konfigurasi Bit-bit SFR IP

Bit Nama Alamat Fungsi
7 Tidak terdefinisi
6 Tidak terdefinisi
5 Tidak terdefinisi
4 PS BCh Prioritas interupsi serial
3 PT1 BBh Prioritas interupsi timer 1
2 PX1 BAh Prioritas interupsi eksternal 1
1 PT0 B9h Prioritas interupsi timer 0
0 PX0 B8h Prioritas interupsi eksternal 0

Pemakaian prioritas interupsi di atas memiliki beberapa peraturan yang tercantum di bawah ini:

  1. Tidak ada interupsi yang meninterupsi interupsi prioritas tinggi.
  2. Interupsi prioritas tinggi boleh menginterupsi interupsi prioritas rendah.
  3. Interupsi prioritas rendah boleh terjadi jika tidak ada interupsi lain yang sedang dijalankan.
  4. Jika dua interupsi terjadi pada waktu bersamaan, interupsi yang memiliki prioritas lebih tinggi akan dikerjakan terlebih dahulu. Jika keduanya memiliki prioritas sama, maka interupsi yang berada pada urutan polling akan dikerjakan terlebih dahulu.

Mikrokontroler 89C51 secara otomatis akan menguji apakah sebuah interupsi bisa terjadi setelah setiap instruksi dikerjakan. Pengecekan ini mengikuti suatu alur yang disebut dengan Polling Sequence dengan urutan:

  1. Interupsi Eksternal 0
  2. Interupsi Timer 0
  3. Interupsi Eksternal 1
  4. Interupsi Timer 1
  5. Interupsi serial

Ini berarti jika sebuah interupsi serial terjadi pada waktu bersamaan dengan interupsi eksternal 0, maka interupsi eksternal 0 akan dikerjakan terlebih dahulu dan interupsi serial baru akan dikerjakan setelah pengerjaan rutin interupsi eksternal 0 selesai dilakukan.

“ Interupsi terjadi bila suatu perangkat M/K ingin memberitahu prosesor bahwa ia siap menerima perintah, output sudah dihasilkan, atau terjadi error ”.

Penanganan Interupsi

Ada beberapa tahapan dalam penanganan interupsi:

  1. Controller mengirimkan sinyal interupsi melalui interrupt-request-line
  2. Sinyal dideteksi oleh prosesor
  3. Prosesor akan terlebih dahulu menyimpan informasi tentang keadaan state-nya (informasi tentang proses yang sedang dikerjakan)
  4. Prosesor mengidentifikasi penyebab interupsi dan mengakses tabel vektor interupsi untuk menentukan interrupt handler
  5. Transfer kontrol ke interrupt handler
  6. Setelah interupsi berhasil diatasi, prosesor akan kembali ke keadaan seperti sebelum terjadinya interupsi dan melanjutkan pekerjaan yang tadi sempat tertunda.

Interrupt Request Line

Pada kebanyakan CPU, ada dua interrupt request line. Pertama, interupsi nonmaskable, interupsi ini biasanya berasal dari perangkat keras dan harus segera dilaksanakan, seperti terjadinya error pada memori.

Kedua, interupsi maskable, jenis interupsi ini bisa dilayani oleh prosesor atau bisa tidak dilayani. Kalaupun dilayani, harus dilihat keadaan prosesor saat itu. Ada kemungkinan prosesor langsung menangani bila saat itu, prosesor preemptive, bila nonpreemptive, maka harus menunggu proses yang sedang dikerjakan selesai.

Vektor Interupsi dan Vector Chaining

Bila ada sebuah sinyal interupsi pada interrupt request line, bagaimana sebuah interrupt handler mengetahui sumber dari interupsi itu? Apakah harus menelusuri semua sumber interupsi satu-persatu? Tidak perlu, karena setiap interrupt handler mempunyai alamat memori masing-masing. Alamat ini adalah offset pada sebuah tabel yang disebut dengan vektor interupsi.

Tabel 10.1. Tabel Vector-Even pada Intel Pentium

Vector number Description
0 Divide error
1 Debug Exception
2 Null Interrupt
3 Breakpoint
4 INTO-detected overflow
5 Bound range exception
6 Invalid opcode
7 Device not available
8 Double fault
9 Compressor segment overrun (reserved)
10 Invalid task state segment
11 Segment not present
12 Stack fault
13 General protection
14 Page fault
15 (Intel reserved, do not use)
16 Floating point error
17 Alignment check
18 Machine check
19-31 (Intel reserved, do not use)
32-255 Maskable interrupt

Sesuai dengan perkembangan zaman, komputer mempunyai lebih banyak perangkat (dan lebih banyak interrupt handlers) daripada elemen alamat di vektor. Hal ini bisa diatasi dengan teknik vector chaining. Setiap elemen di vektor interupsi menunjuk ke kepala dari sebuah daftar interrupt handlers, sehingga bila ada interupsi, handler yang terdapat pada daftar yang ditunjuk akan dipanggil satu persatu sampai didapatkan handler yang bisa menangani interupsi yang bersangkutan.

Penyebab Interupsi

Mekanisme interupsi tidak hanya digunakan untuk menangani operasi yang berhubungan dengan perangkat M/K. Sistem operasi menggunakan mekanisme interupsi untuk beberapa hal, di antaranya:

  1. Menangani exception

Exception adalah suatu kondisi dimana terjadi sesuatu, atau dari sebuah operasi didapatkan hasil tertentu yang dianggap khusus sehingga harus mendapat perhatian lebih, contohnya, pembagian dengan nol, pengaksesan alamat memori yang restricted atau tidak valid, dll.

  1. Mengatur virtual memory paging.
  2. Menangani perangkat lunak interupsi.
  3. Menangani alur kontrol kernel.

Jika interupsi yang terjadi merupakan permintaan untuk transfer data yang besar, maka penggunaan interupsi menjadi tidak efisien, untuk mengatasinya digunakanlah DMA.

Sumber :

http://mikrokontroler.tripod.com/8051/int51.htm

http://free.vlsm.org/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi-4.X-2/ch10s04.html


Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: