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.
Komentar
Posting Komentar