Interupsi
atau bisa disebut Interrupt adalah
kejadian yang menyebabkan mikrokontroler berhenti sejenak untuk melayani
interupsi tersebut atau memiliki
pengertian suatu permintaan khusus kepada mikroprosessor untuk melakukan
sesuatu. Bila terjadi interupsi, mikroprosesor akan menghentikan dahulu apa
yang sedang dikerjakannya dan mengerjakan permintaan khusus tersebut. Program yang dijalankan pada saat melayani interupsi
disebut Interrupt Service Routine. Setelah selesai melayani interupsi maka
program yang tadi terhenti dilanjutkan kembali.
Mikrokontroler AT89C51
menyediakan 5 sumber interupsi, yaitu:
-
2 interupsi eksternal,
-
2 interupsi timer, dan
-
satu interupsi port serial.
Register yang mengontrol
interupsi yaitu :
-
IE (Interrupt enable) dan
-
IP (Interrupt priority).
Jenis-jenis interrupt:
a. Software,
interrupt jenis ini juga disebut System call. Misalnya, suatu program ingin
mencetak
hasil dengan printer
hasil dengan printer
b. Hardware,
terjadi karena adanya aksi pada perangkat keras, seperti penekanan tombol
keyboard atau menggerakkan mouse.
keyboard atau menggerakkan mouse.
Interrupt ini terbagi lagi menjadi dua,yaitu:
-
Maskable Interrupt(terjadi karena aksi luar)
dan
-
Non Maskable Interrupt(terjadi karena memori
atau kesalahan parity pada program)
Penyebab terjadinya Interrupt:
a. Program,
terjadi akibat eksekusi suatu instruksi
b. Timmer,
disebabkan oleh timmer prosessor
c. I/O,
disebabkan oleh I/O controller baik sebagai tanda bahwa operasi telah selesai
maupun
memberi tanda eror.
memberi tanda eror.
d. Kegagalan
hardware, disebabkan oleh kesalahan hardware seperti power failure dan memori
parity eror.
Ada dua aksi yang diberikan saat terjadi interrupt:
a. Syncronous
I/O. I/O dijalankan, I/O selesai digunakan, kontrol menginformasikan kembali ke
user
proses. Untuk menunggu selesai digunakannya I/O, digunakan perintah wait.
proses. Untuk menunggu selesai digunakannya I/O, digunakan perintah wait.
b. Asyncronous
I/O. Kembali ke user program tanpa harus menunggu I/O.
Interrupt Service Routine.
Interrupt adalah suatu kejadian atau peristiwa yang
menyebabkan mikrokontroler berhenti sejenak untuk melayani interrupt tersebut.
Analoginya adalah sebagai
berikut, seseorang sedang mengetik laporan, mendadak telephone berdering dan
menginterrupsi orang tersebut sehingga menghentikan pekerjaan mengetik dan
mengangkat telephone. Setelah pembicaraan telephone yang dalam hal ini adalah
merupakan analogi dari Interrupt Service Routine selesai maka orang tersebut
kembali meneruskan pekerjaanya mengetik.
Demikian pula pada sistem
mikrokontroler yang sedang menjalankan programnya, saat terjadi interrupt,
program akan berhenti sesaat, melayani interrupt tersebut dengan menjalankan
program yang berada pada alamat yang ditunjuk oleh vektor dari interrupt yang
terjadi hingga selesai dan kembali meneruskan program yang terhenti oleh
interrupt tadi. Seperti yang terlihat Gambar di bawah, sebuah program yang
seharusnya berjalan terus lurus, tiba-tiba terjadi interrupt dan harus melayani
interrupt tersebut terlebih dahulu hingga selesai sebelum ia kembali meneruskan
pekerjaannya.
>>
Enable Interrupt & Disable Interrupt
Enable Interrupt
Kelima sumber interupsi
yang dimiliki AT89C51 dapat di-enable atau di-disable
melalui register IE
(Interrupt Enable) yang terletak di alamat A8H.
Disable Interrupt
-
Solusi paling
sederhana adalah memiliki setiap proses menonaktifkan semua interrupts hanya
setelah memasuki nya CS dan mengaktifkan kembali mereka sebelum
meninggalkannya.
-
Dengan interupsi
dinonaktifkan, tidak mengganggu jam dapat terjadi (CPU hanya beralih dari
proses ke proses sebagai hasil dari jam atau interupsi lainnya)
-
Dengan interupsi
dimatikan CPU tidak akan dialihkan ke proses lain! Jadi, sekali proses telah menonaktifkan
interupsi, dapat memeriksa dan memperbarui memori bersama tanpa takut bahwa
proses lainnya akan campur tangan.
-
Pendekatan ini
umumnya tidak menarik karena tidak bijaksana untuk memberikan proses pengguna
kekuatan untuk mematikan interupsi.
Misalkan salah satu dari mereka melakukannya dan tidak pernah
mengubahnya lagi. Itu bisa menjadi akhir dari sistem.
-
Di sisi lain, sering
nyaman untuk kernel itu sendiri untuk menonaktifkan interupsi untuk beberapa
instruksi ketika sedang memperbarui variabel atau daftar.
Jika driver Anda menangani interupsi
perangkat, maka harus menyediakan EvtInterruptEnable dan EvtInterruptDisable
fungsi callback yang mengaktifkan dan menonaktifkan interupsi. Biasanya, fungsi-fungsi callback dijalankan
pada perangkat DIRQL dan harus melakukan apapun yang diperlukan untuk
mengaktifkan dan menonaktifkan mekanisme interrupt sebuah perangkat. Untuk pasif tingkat interupsi, fungsi-fungsi
callback dijalankan pada IRQL = PASSIVE_LEVEL sambil memegang kunci pasif
tingkat interupsi.
Jika driver Anda harus melakukan operasi
tambahan yang terkait dengan mengaktifkan atau menonaktifkan menyela, dan jika
operasi tambahan tidak dapat dilakukan pada IRQL = DIRQL, pengemudi juga dapat memberikan
EvtDeviceD0EntryPostInterruptsEnabled dan EvtDeviceD0ExitPreInterruptsDisabled
fungsi callback. Kedua fungsi callback
dijalankan pada IRQL = PASSIVE_LEVEL tanpa kunci interupsi diadakan, dan dapat
memanggil metode objek kerangka yang tidak tersedia di IRQL = DIRQL.
Kerangka panggilan driver EvtInterruptEnable dan
EvtDeviceD0EntryPostInterruptsEnabled fungsi callback setiap kali perangkat
masuk kerja nya (D0) menyatakan, setelah kerangka telah memanggil driver EvtDeviceD0Entry fungsi callback.
Kerangka panggilan driver EvtDeviceD0ExitPreInterruptsDisabled dan
EvtInterruptDisable fungsi callback setiap kali perangkat meninggalkan
negaranya bekerja, sebelum kerangka panggilan driver EvtDeviceD0Exit fungsi callback. Untuk informasi lebih lanjut tentang kapan
kerangka memanggil fungsi callback driver , melihat PnP dan Skenario Power
Management .
Anda tidak harus mengasumsikan bahwa
perangkat akan menggunakan sumber daya interupsi yang sama setiap kali kerangka
panggilan driver Anda EvtInterruptEnable fungsi callback. Kadang-kadang manajer PnP mendistribusikan
kembali sumber daya sistem , dan dapat menetapkan sumber interupsi baru ke
perangkat.
Driver dapat menghubungi
WdfInterruptGetInfo untuk menentukan sumber interupsi sebuah perangkat. Driver dapat menghubungi
WdfInterruptGetDevice untuk menentukan perangkat yang mengganggu obyek
milik. (A beberapa driver sebut
WdfInterruptWdmGetInterrupt .)
Untuk mengaktifkan dan menonaktifkan
interrupts langsung, driver dapat
memanggil objek mengganggu yang WdfInterruptEnable dan WdfInterruptDisable
metode, yang memanggil driver EvtInterruptEnable
dan EvtInterruptDisable fungsi event callback.
Namun, sebagian besar drivers hanya harus memungkinkan kerangka untuk
memanggil fungsi callback EvtInterruptEnable dan EvtInterruptDisable pada waktu
yang tepat.
>>
Paralel Interrupt
Menangani banyak perangkat:
Pada suatu request diterima melalui jalur interrupt request, informasi
tambahan diperlukan untuk mendefinisikan perangkat tertentu yang membengkitkan jalur tersebut.
Informasi yang diperlukan untuk menentukan apakah suatu perangkat meminta
interrupt tersedia dalam status registernya. Pada saat suatu perangkat
memunculkan suatu interrupt request, maka salah satu skema paling mudah untuk diimplementasikan
kerugian utamanya adalah waktu yang dihabiskan mengetahui bit IRQ semua
perangkat yang mungkin tidak meminta pelayanan apapun. Pendekatan alternatife
adalah dengan menggunakan vector interrupt.
>>
Vektor Interrupt
Vektor
Interupsi Vector interupsi merupakan 4 byte data
yang disimpan pada 1024 byte pertama memori (000000h-0003FFFh) jika
mikroprosesor dijalankan dalam real mode. Setiap vector interupsi ini berisi
alamat procedure layanan interupsi, yaitu suatu procedure khusus yang dipanggil
oleh vector interupsi. Dua byte pertama dari vector tersebut berisi alamat IP
dan 2 byte terakhir berisi alamat CS dari procedure layanan interupsi tersebut.
ADa
256 vektor interupsi yang dimiliki mikroprosesor intel. Intel menyediakan 32
vektor interupsi untuk 8086-80486 dan kebutuhan-kebutuhan pengembangan di masa
mendatang, sedangkan sisanya disediakan untuk dimanipulasi untuk digunakan
untuk keperluan pengguna.
Tidak ada komentar:
Posting Komentar