Fighting....!!!!!

Fighting....!!!!!

Sabtu, 16 Juni 2012

INTERRUPT

                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
b. Hardware, terjadi karena adanya aksi pada perangkat keras, seperti penekanan tombol
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.
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.
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