8259A PENGENDALI INTERUPSI YANG DAPAT DIPROGRAM
Pengontrol interupsi terprogram (PIC) 8259A menambahkan delapan interupsi berprioritas vektor yang dikodekan ke mikroprosesor. Pengontrol ini dapat diperluas, tanpa perangkat keras tambahan, untuk menerima hingga 64 permintaan interupsi. Perluasan ini membutuhkan master 8259A dan delapan slave 8259A. Sepasang pengontrol ini masih terpasang dan diprogram seperti yang dijelaskan di sini pada chipset terbaru dari Intel dan produsen lainnya.
Deskripsi Umum 8259A
Gambar 12-15 menunjukkan pin-out dari 8259A. 8259A mudah dihubungkan ke mikroprosesor karena semua pinnya merupakan koneksi langsung kecuali pin CS, yang harus didekodekan, dan

the WR pin, which must have an I/O bank write pulse. Following is a description of each pin on the 8259A:
D0-D7 Koneksi data dua arah biasanya dihubungkan ke bus data pada mikroprosesor.
IR0-IR7 Input permintaan interupsi digunakan untuk meminta interupsi dan untuk terhubung ke seorang slave dalam sistem dengan beberapa 8259A.
WR Input tulis terhubung ke sinyal strobo tulis (IOWC) pada mikroprosesor.
RD Input baca terhubung ke sinyal IORC.
INT Output interupsi terhubung ke pin INTR pada mikroprosesor dari master dan terhubung ke pin IR master pada slave.
INTA Pengakuan interupsi adalah input yang terhubung ke sinyal INTA pada
sistem. Dalam sistem dengan master dan slave, hanya sinyal INTA master yang terhubung..
Ao Input alamat A0 memilih kata-kata perintah yang berbeda dalam 8259A.
CS Pemilihan chip memungkinkan 8259A untuk pemrograman dan kontrol.
SP/EN Buffer program/enable slave adalah pin fungsi ganda. Ketika 8259A dalam
Mode buffer, ini adalah keluaran yang mengontrol transceiver bus data dalam sistem berbasis mikroprosesor besar. Ketika 8259A tidak dalam mode buffer, pin ini memprogram perangkat sebagai master (1) atau slave (0).
CASO-CAS2 Saluran kaskade digunakan sebagai keluaran dari master ke slave untuk mengkaskadekan beberapa 8259A dalam satu sistem.
Menghubungkan 8259A Tunggal
Gambar 12-16 menunjukkan satu 8259A yang terhubung ke mikroprosesor. Di sini, pin SP/EN ditarik tinggi untuk menunjukkan bahwa pin tersebut adalah master. 8259A didekodekan pada port I/O 0400H dan 0401H oleh PLD (tidak ada program yang ditampilkan). Seperti periferal lain yang dibahas di Bab 11, 8259A memerlukan empat status tunggu agar dapat berfungsi dengan baik dengan 80386SX 16 MHz dan lebih banyak lagi untuk beberapa versi keluarga mikroprosesor Intel lainnya.
Cascading Multiple 8259As
Gambar 12-17 menunjukkan dua 8259A yang terhubung ke mikroprosesor dengan cara yang sering ditemukan pada komputer tipe ATX, yang memiliki dua 8259A sebagai interupsi. Komputer tipe XT atau PC menggunakan satu pengontrol 8259A pada vektor interupsi 08H-0FH. Komputer tipe ATX menggunakan vektor interupsi OAH sebagai input kaskade dari 8259A kedua yang terletak pada vektor 70H hingga 77H. Lampiran A berisi tabel yang mencantumkan fungsi semua vektor interupsi yang digunakan.
Rangkaian ini menggunakan vektor 08H-0FH dan port I/O 0300H dan 0302H untuk U1, master; serta vektor 70H-77H dan port I/O 0304H dan 0306H untuk U2, slave. Perhatikan bahwa kami juga menyertakan buffer bus data untuk mengilustrasikan penggunaan pin SP/EN pada 8259A. Buffer ini hanya digunakan pada sistem yang sangat besar dengan banyak perangkat yang terhubung ke koneksi bus datanya. Dalam praktiknya, kita jarang menemukan buffer seperti ini.
Pemrograman 8259A
8259A diprogram dengan kata-kata perintah inisialisasi dan operasi. Kata-kata perintah inisialisasi (ICW) diprogram sebelum 8259A dapat berfungsi dalam sistem dan menentukan operasi dasar 8259A. Kata-kata perintah operasi (OCW) diprogram selama operasi normal. OCW mengendalikan operasi 8259A.

Kata Perintah Inisialisasi. Ada empat kata perintah inisialisasi (ICW) untuk 8259A dipilih ketika pin Ag berlogika 1. Ketika 8259A pertama kali dinyalakan, ICW₁, ICW₁2, dan ICW₁4 harus dikirimkan. Jika 8259A diprogram dalam mode kaskade oleh ICW₁, maka kita juga harus memprogram ICW₁3. Jadi, jika satu 8259A digunakan dalam suatu sistem, ICW₁, ICW₁2, dan ICW₁4 harus diprogram. Jika mode kaskade digunakan dalam suatu sistem, maka keempat ICW harus diprogram.
Lihat Gambar 12-18 untuk format keempat ICW. Berikut adalah deskripsi masing-masing ICW:
ICW1 Memprogram operasi dasar 8259A. Untuk memprogram ICW ini untuk operasi 8086-Pentium 4, tempatkan logika 1 pada bit IC4. Bit AD1, A7, Αγ, dan As tidak terkait dengan operasi mikroprosesor dan hanya berlaku untuk 8259A ketika digunakan dengan mikroprosesor 8085 8-bit (tidak dibahas dalam buku teks ini). ICW ini memilih operasi tunggal atau kaskade dengan memprogram bit SNGL. Jika operasi kaskade dipilih, kita juga harus memprogram ICW3. Bit LTIM menentukan apakah input permintaan interupsi bersifat pemicu tepi positif atau pemicu level.
ICW2 Memilih nomor vektor yang digunakan dengan input permintaan interupsi. Misalnya, jika kita memutuskan untuk memprogram 8259A agar berfungsi pada lokasi vektor 08H-0FH, kita menempatkan 08H ke dalam kata perintah ini. Demikian pula, jika kita memutuskan untuk memprogram 8259A untuk vektor 70H-77H, kita menempatkan 70H di ICW ini.
ICW3 Hanya digunakan ketika ICW menunjukkan bahwa sistem dioperasikan dalam mode kaskade. ICW ini menunjukkan di mana slave terhubung ke master. Misalnya, pada Gambar 12-18, kita menghubungkan slave ke IR2. Untuk memprogram ICW3


Untuk koneksi ini, baik pada master maupun slave, kita menempatkan 04H di ICW 3. Misalkan kita memiliki dua slave yang terhubung ke master menggunakan IR dan IR₁. Master diprogram dengan ICW3 03H; satu slave diprogram dengan ICW3 01H dan yang lainnya dengan ICW3 02H.
ICW 4 Diprogram untuk digunakan dengan mikroprosesor 8086-Pentium 4, tetapi tidak diprogram dalam sistem yang berfungsi dengan mikroprosesor 8085. Bit paling kanan harus berupa logika 1 untuk memilih operasi dengan mikroprosesor 8086-Pentium 4, dan bit yang tersisa diprogram sebagai berikut:
SFNM-Memilih mode operasi bersarang penuh khusus untuk 8259A jika logika 1 ditempatkan pada bit ini. Hal ini memungkinkan permintaan interupsi berprioritas tertinggi dari slave dikenali oleh master saat sedang memproses interupsi lain dari slave. Biasanya, hanya satu permintaan interupsi yang diproses pada satu waktu dan yang lainnya diabaikan hingga proses selesai.
BUF dan M/S-Buffered dan master slave digunakan bersama untuk memilih operasi buffered atau operasi nonbuffered untuk 8259A sebagai master atau slave.
AEOI - Memilih akhir interupsi otomatis atau normal (dibahas lebih lanjut di bagian kata perintah operasi). Perintah EOI dari OCW2 hanya digunakan jika mode AEOI tidak dipilih oleh ICW4. Jika AEOI dipilih, interupsi secara otomatis mereset bit permintaan interupsi dan tidak mengubah prioritas. Ini adalah mode operasi yang disukai untuk 8259A dan mengurangi lamanya prosedur layanan interupsi.
Kata Perintah Operasi. Kata perintah operasi (OCW) digunakan untuk mengarahkan operasi 0 dari 8259A setelah diprogram dengan ICW. OCW dipilih ketika pin Ap berada pada level logika 0, kecuali OCW₁, yang dipilih ketika A berlogika 1. Gambar 12-19 mencantumkan pola bit biner untuk ketiga kata perintah operasi 8259A. Berikut adalah daftar yang menjelaskan fungsi masing-masing OCW:
OCW1 Digunakan untuk mengatur dan membaca register masker interupsi. Ketika bit masker diatur, input interupsi yang sesuai akan dimatikan (ditutup). Register masker dibaca ketika OCW₁ dibaca. Karena status bit masker tidak diketahui ketika 8259A pertama kali diinisialisasi, OCW harus diprogram setelah memprogram ICW setelah inisialisasi.
OKW2 Diprogram hanya ketika mode AEOI tidak dipilih untuk 8259A. Dalam hal ini, OCW ini memilih cara 8259A merespons interupsi. Mode-mode tersebut tercantum sebagai berikut:
Perintah Non-Spesifik End-of-Interrupt-A yang dikirim oleh prosedur layanan interupsi untuk menandakan berakhirnya interupsi. 8259A secara otomatis menentukan level interupsi mana yang aktif dan mereset bit yang tepat pada register status interupsi. Mereset bit status memungkinkan interupsi untuk beroperasi kembali atau interupsi dengan prioritas lebih rendah untuk beroperasi.
Akhir Interupsi Spesifik - Perintah yang memungkinkan permintaan interupsi tertentu untuk diatur ulang. Posisi pastinya ditentukan dengan bit L2-L0 dari OCW 2.
Rotate-on-Nonspecific EOI - Perintah yang fungsinya persis sama dengan perintah Nonspecific End-of-Interrupt, kecuali perintah ini memutar prioritas interupsi setelah bit register status interupsi direset. Level yang direset oleh perintah ini menjadi interupsi dengan prioritas terendah. Misalnya, jika IR4 baru saja dilayani oleh perintah ini, maka IR4 menjadi input interupsi dengan prioritas terendah, dan IR4 menjadi prioritas tertinggi.
Rotate-on-Automatic EOI - Perintah yang memilih EOI otomatis dengan prioritas rotasi. Perintah ini hanya boleh dikirim ke 8259A sekali jika mode ini diinginkan. Jika mode ini harus dinonaktifkan, gunakan perintah clear.
Putar-pada-Fungsi EOI Tertentu seperti EOI tertentu, kecuali yang memilih prioritas rotasi.
Tetapkan prioritas-Memungkinkan pemrogram untuk menetapkan masukan interupsi prioritas terendah menggunakan bit L2-Lo.

OCW3 Memilih register yang akan dibaca, operasi register masker khusus, dan perintah polling. Jika polling dipilih, bit P harus diatur dan kemudian dikeluarkan ke 8259A. Operasi baca berikutnya akan membaca kata polling. Tiga bit paling kanan dari kata polling menunjukkan permintaan interupsi aktif dengan prioritas tertinggi. Bit paling kiri menunjukkan adanya interupsi dan harus diperiksa untuk menentukan apakah tiga bit paling kanan berisi informasi yang valid.
Register Status. Tiga register status dapat dibaca di 8259A: register permintaan interupsi (IRR), register dalam layanan (ISR), dan register masker interupsi (IMR). (Lihat Gambar 12-20 untuk semua

tiga register status; semuanya memiliki konfigurasi bit yang sama.) IRR adalah register 8-bit yang menunjukkan input permintaan interupsi mana yang aktif. ISR adalah register 8-bit yang berisi level interupsi yang sedang dilayani. IMR adalah register 8-bit yang menyimpan bit-bit masker interupsi dan menunjukkan interupsi mana yang ditutup.
Baik IRR maupun ISR dibaca oleh pemrograman OCW3, dan IMR dibaca melalui OCW. Untuk membaca IMR, A₁ = 1; untuk membaca IRR atau ISR, A = 0. Posisi bit Do dan D₁ pada OCW3 menentukan register mana (IRR atau ISR) yang akan dibaca ketika A = 0.
Contoh Pemrograman 8259A
Gambar 12-21 mengilustrasikan pengontrol interupsi terprogram 8259A yang terhubung ke pengontrol komunikasi terprogram 16550. Pada rangkaian ini, pin INTR dari 16550 terhubung ke input permintaan interupsi pengontrol interupsi terprogram (IR). IR terjadi setiap kali (1) pemancar siap mengirim karakter lain, (2) penerima telah menerima karakter, (3) kesalahan terdeteksi saat menerima data, dan (4) terjadi interupsi modem. Perhatikan bahwa 16550

didekodekan pada port I/O 40H dan 47H, dan 8259A didekodekan pada port I/O 8-bit 48H dan 49H. Kedua perangkat dihubungkan ke bus data mikroprosesor 8088.
Perangkat Lunak Inisialisasi. Bagian pertama dari perangkat lunak untuk sistem ini harus memprogram keduanya 16550 dan 8259A, lalu aktifkan pin INTR pada 8088 agar interupsi dapat diterapkan. Contoh 12-8 mencantumkan perangkat lunak yang diperlukan untuk memprogram kedua perangkat dan mengaktifkan INTR. Perangkat lunak ini menggunakan dua FIFO memori yang menyimpan data untuk pemancar dan penerima. Setiap FIFO memori memiliki panjang 16K byte dan dialamatkan oleh sepasang pointer (input dan output).

Bagian pertama dari prosedur (INIT) memprogram UART 16550 untuk beroperasi dengan tujuh bit data, paritas ganjil, satu bit stop, dan clock baud rate 9600. Register kontrol FIFO juga mengaktifkan pemancar dan penerima.
Bagian kedua dari prosedur ini memprogram 8259A, dengan tiga ICW dan satu OCW-nya. 8259A diatur agar berfungsi pada vektor interupsi 80H-87H dan beroperasi dengan EOI otomatis. OCW mengaktifkan interupsi untuk UART 16550. Pin INTR dari mikroprosesor juga diaktifkan menggunakan instruksi STI.
Bagian terakhir perangkat lunak mengaktifkan interupsi penerima dan interupsi kesalahan pada UART 16550 melalui register kontrol interupsi. Interupsi pemancar tidak diaktifkan hingga data tersedia untuk transmisi. Lihat Gambar 12-22 untuk isi register kontrol interupsi UART 16550. Perhatikan bahwa register kontrol dapat mengaktifkan atau menonaktifkan interupsi penerima, pemancar, status saluran (kesalahan), dan modem.
Menangani Permintaan Interupsi UART 16550. Karena 16550 hanya menghasilkan satu interupsi Untuk meminta berbagai interupsi, penangan interupsi harus melakukan polling ke 16550 untuk menentukan jenis interupsi yang terjadi. Hal ini dilakukan dengan memeriksa register identifikasi interupsi (lihat Gambar 12-23). Perhatikan bahwa register identifikasi interupsi (hanya-baca) menggunakan port I/O yang sama dengan register kontrol FIFO (hanya-tulis).
Register identifikasi interupsi menunjukkan apakah interupsi tertunda, jenis interupsi, dan apakah memori FIFO pengirim dan penerima diaktifkan. Lihat Tabel 12-2 untuk isi bit kontrol interupsi.
Prosedur layanan interupsi harus memeriksa isi register identifikasi interupsi untuk menentukan peristiwa yang menyebabkan interupsi dan meneruskan kontrol ke prosedur yang sesuai untuk peristiwa tersebut. Contoh 12-9 menunjukkan bagian pertama dari penangan interupsi yang meneruskan kontrol ke RECV untuk interupsi data penerima, TRANS untuk interupsi data pemancar, dan ERR untuk interupsi kesalahan status saluran. Perhatikan bahwa status modem tidak diuji dalam contoh ini.




Menerima data dari 16550 memerlukan dua prosedur. Prosedur pertama membaca register data 16550 setiap kali pin INTR meminta interupsi dan menyimpannya ke dalam memori FIFO. Prosedur kedua membaca data dari memori FIFO dari program utama.
Contoh 12-10 mencantumkan prosedur yang digunakan untuk membaca data dari FIFO memori dari program utama. Prosedur ini mengasumsikan bahwa pointer (IIN dan IOUT) telah diinisialisasi dalam dialog inisialisasi untuk sistem (tidak ditampilkan). Prosedur READ menghasilkan AL yang berisi karakter yang dibaca dari FIFO memori. Jika FIFO memori kosong, prosedur akan kembali dengan bit carry flag yang diatur ke logika 1. Jika AL berisi karakter yang valid, bit carry flag akan dihapus setelah kembali dari READ.
Perhatikan bagaimana FIFO digunakan kembali dengan mengubah alamat dari atas FIFO ke bawah setiap kali melebihi awal FIFO ditambah 16K. Perhatikan bahwa interupsi diaktifkan di akhir prosedur ini, jika interupsi dinonaktifkan oleh kondisi FIFO memori penuh melalui prosedur interupsi RECV.

Contoh 12-11 mencantumkan prosedur layanan interupsi RECV yang dipanggil setiap kali 16550 menerima karakter untuk mikroprosesor. Dalam contoh ini, interupsi menggunakan tipe vektor nomor 80H, yang harus mengalamatkan penangan interupsi pada Contoh 12-9. Setiap kali interupsi ini terjadi, prosedur REVC diakses oleh penangan interupsi yang membaca karakter dari 16550. Prosedur RECV menyimpan karakter tersebut ke dalam memori FIFO. Jika memori FIFO penuh, interupsi penerima dinonaktifkan oleh register kontrol interupsi di dalam 16550. Hal ini mungkin mengakibatkan hilangnya data, tetapi setidaknya tidak akan menyebabkan interupsi melampaui data valid yang sudah tersimpan di memori FIFO. Setiap kondisi kesalahan yang terdeteksi oleh 8251A menyimpan tanda ? (3FH) di memori FIFO. Perhatikan bahwa kesalahan dideteksi oleh bagian ERR dari penangan interupsi (tidak ditampilkan).

Mengirimkan Data ke 16550. Data dikirimkan ke 16550 dengan cara yang hampir sama seperti saat diterima, kecuali bahwa prosedur layanan interupsi menghapus data transmisi dari FIFO memori 16K-byte kedua.
Contoh 12-12 mencantumkan prosedur yang mengisi FIFO keluaran. Prosedur ini serupa dengan prosedur yang tercantum pada Contoh 12-10, hanya saja prosedur ini menentukan apakah FIFO penuh, bukan kosong.

Contoh 12-13 mencantumkan subrutin layanan interupsi untuk pemancar UART 16550. Prosedur ini merupakan kelanjutan dari penangan interupsi yang disajikan pada Contoh 12-9 dan serupa dengan prosedur RECV pada Contoh 12-11, kecuali prosedur ini menentukan apakah FIFO kosong atau penuh. Perlu dicatat bahwa kami tidak menyertakan prosedur layanan interupsi untuk interupsi putus atau kesalahan apa pun.

16550 juga berisi scratch register, sebuah register serbaguna yang dapat digunakan sesuai kebutuhan programmer. 16550 juga berisi modem control register dan modem status register. Register-register ini memungkinkan modem untuk melakukan interupsi dan mengontrol operasi 16550 dengan modem. Lihat Gambar 12-24 untuk isi modem status register dan modem control register.
Register kontrol modem menggunakan posisi bit 0-3 untuk mengontrol berbagai pin pada 16550. Posisi bit 4 memungkinkan pengujian loop-back internal. Register status modem memungkinkan pengujian status pin modem; register ini juga memungkinkan pin modem diperiksa untuk perubahan atau, dalam kasus RI, trailing edge.
Gambar 12-25 mengilustrasikan UART 16550 yang terhubung ke antarmuka RS-232C yang sering digunakan untuk mengendalikan modem. Antarmuka ini mencakup rangkaian driver saluran dan penerima yang digunakan untuk mengonversi level TTL pada 16550 ke level RS-232C yang terdapat pada antarmuka. Perhatikan bahwa level RS-232C biasanya +12 V untuk logika 0 dan -12 V untuk level logika 1.
Untuk mengirimkan atau menerima data melalui modem, pin DTR diaktifkan (logika 0) dan UART kemudian menunggu pin DSR menjadi logika 0 dari modem, yang menunjukkan bahwa modem siap. Setelah jabat tangan ini selesai, UART mengirimkan modem logika 0 pada pin RTS. Ketika modem siap, modem mengembalikan sinyal CTS (logika 0) ke UART. Komunikasi sekarang dapat dimulai. Sinyal DCD dari modem merupakan indikasi bahwa modem telah mendeteksi pembawa. Sinyal ini juga harus diuji sebelum komunikasi dapat dimulai.
Tidak ada komentar:
Posting Komentar