Interfacing Komputer Interaktif: Transfer Data pada Programmed I/O, Interupsi dan DMA

Fisika Instrumentasi · Pertemuan 9

Bagaimana angka dari sensor sampai ke memori? Coba simulatornya, lalu uji dirimu dengan latihan ujian dan kartu hafalan.

Peta Konsep

Setiap pengukuran berbasis komputer berakhir dengan masalah yang sama: angka dari instrumen harus masuk ke memori pada saat yang tepat, tanpa hilang dan tanpa terbaca dua kali.

Dengan bahasa sederhana

Bayangkan komputer sebagai kantor kecil. CPU adalah satu-satunya pegawai, memori adalah lemari arsip bernomor, dan port I/O adalah kotak surat di pintu depan tempat instrumen menitipkan angkanya. Pertanyaannya: bagaimana surat di kotak itu masuk ke lemari arsip?

Programmed I/O

Bolak-balik mengecek kotak surat. Tidak ada surat yang terlewat, tetapi pegawai tidak sempat mengerjakan hal lain.

Chip: 8255 · Cocok untuk sensor lambat

Interupsi

Bel pintu. Pegawai bekerja di mejanya; saat bel berbunyi ia berhenti sebentar, mengambil surat, lalu kembali bekerja.

Chip: 8259A, 8254 · Laju sedang, waktu tepat

DMA

Kurir yang memegang kunci lemari arsip. Ia menyimpan setiap surat langsung; pegawai hanya diberi tahu saat satu kotak penuh.

Chip: 8237A · Data cepat dan terus-menerus

Rantai akuisisi data

Sensor → Pengondisi sinyal → ADC → Antarmuka I/O → CPU dan memori

Mata rantai terlemah ada di antara antarmuka I/O dan CPU, karena keduanya berjalan dengan detak dan kecepatan berbeda. Setiap metode transfer menjawab dua pertanyaan:

  1. Kapan data siap? (sinkronisasi)
  2. Siapa yang memindahkan data: CPU atau perangkat keras khusus?
Contoh di laboratorium material

Merekam tegangan superkapasitor elektroda karbon saat siklus pengisian–pengosongan, suhu tungku saat anil (annealing), beban pada uji tarik, atau emisi akustik dari sampel yang retak. Yang berbeda hanya seberapa cepat dan seberapa teratur angkanya datang, dan itulah yang menentukan metode transfernya.

Lomba Tiga Metode

Geser laju pencuplikan dan lihat berapa banyak waktu CPU yang habis untuk tiap metode. Inilah alasan instrumen cepat memakai DMA.

Cara membaca simulator

Bilah menunjukkan persentase waktu CPU (atau bus) yang terpakai untuk memindahkan data. Sisanya adalah waktu bebas untuk menggambar grafik, menyimpan berkas, atau berkomunikasi. Di atas 100 %, sistem tidak sanggup dan sampel hilang.

Asumsi: pada polling, CPU terkunci di loop selama konversi ADC; pada interupsi dan DMA, ADC dianggap cukup cepat. DMA memakai satu interupsi per blok (lama sama dengan waktu ISR). Angka-angka ini ilustratif untuk sistem kelas 8086; ukur sendiri di papan latihmu.

Coba empat titik ini

Rumus beban CPU untuk interupsi: beban = fs × tISR. Pada 1 kHz dan 20 µs: 1000 × 20 µs = 2 %.

Programmed I/O dan 8255

CPU mengendalikan setiap langkah transfer dengan instruksi IN dan OUT. Paling sederhana, tetapi CPU tidak bisa mengerjakan hal lain selama menunggu.

Dengan bahasa sederhana

CPU terus bertanya kepada instrumen, “Sudah siap?”, seperti anak kecil di kursi belakang yang bertanya “Sudah sampai?”. Begitu jawabannya “ya”, CPU membaca angkanya. Lambat, tetapi sangat dapat diandalkan.

Transfer tanpa syarat

CPU membaca atau menulis port kapan pun program sampai di instruksi itu. Hanya cocok untuk perangkat yang selalu siap: saklar, tampilan LED.

Transfer bersyarat (polling)

CPU membaca bit status dalam loop, misalnya EOC (end of conversion), dan baru memindahkan data saat bit itu menyatakan siap. Bentuk yang biasa dipakai untuk ADC.

Jalankan program polling langkah demi langkah

8255 di alamat 80H–83H. Data ADC → Port A, EOC → PC0, SOC ← PC4. Program mengambil tiga sampel (CX = 3). Tekan Langkah dan perhatikan berapa kali CPU berputar di POLL.

AL—
EOC (PC0)0
CX (sampel tersisa)3
Putaran menunggu0
Tersimpan di memori—

Kata kendali 8255

Bit D7 menentukan arti seluruh byte: D7 = 1 berarti kata pengaturan mode, D7 = 0 berarti perintah bit set/reset (BSR) untuk satu bit Port C. Coba bentuk 91H untuk contoh polling di atas (Port A masuk, C atas keluar, B keluar, C bawah masuk).

Perakit kata kendali 8255 (D7 = 1)

Kata kendali

Perakit kata BSR (D7 = 0)

Pembaca kata kendali

Ketik satu byte heksadesimal; halaman ini menjelaskan artinya, entah kata mode atau kata BSR.

Tiga mode I/O

ModeGambaranIsi
0 dasarPintu biasaTanpa jabat tangan; port mana pun bisa masuk atau keluar (16 kombinasi); keluaran di-latch, masukan tidak.
1 strobePintu dengan bel dan lampu “paket diterima”Port A/B dengan jabat tangan dari Port C. Masuk: STB#, IBF. Keluar: OBF#, ACK#. INTR dapat menginterupsi CPU jika INTE = 1.
2 dua arahPintu putarHanya Port A, dua arah, dengan lima jalur jabat tangan PC3–PC7.

Interupsi dan 8259A

Perangkat memberi tahu CPU saat ia siap. CPU menjalankan program utamanya dan baru berhenti ketika ada permintaan interupsi.

Dengan bahasa sederhana

8259A adalah resepsionis dengan delapan saluran telepon. Ia mengurutkan penelepon (IR0 paling penting), bisa membisukan saluran tertentu (mask), memberi tahu CPU siapa yang menelepon lewat nomor vektor, dan perlu diberi tahu saat panggilan selesai (EOI). Lupa EOI, dan resepsionis mengira kamu masih menelepon: saluran itu dan semua saluran yang lebih rendah tidak pernah disambungkan lagi.

Simulator 8259A (mode bersarang penuh)

Ketuk sel baris IRR untuk mengajukan permintaan, sel baris IMR untuk membisukan saluran. Lalu jadilah CPU: kirim INTA untuk melayani, dan EOI saat rutin layanan selesai.

Satu interupsi, enam langkah (mode 8086)

  1. Saluran IR naik dan menyetel bit IRR-nya.
  2. Resolver memeriksa mask dan prioritas, lalu menaikkan INT.
  3. CPU menyelesaikan instruksinya dan mengirim INTA# pertama (bus belum diisi).
  4. INTA# kedua: bit ISR disetel, bit IRR dihapus, nomor vektor dikirim lewat bus data.
  5. CPU menyimpan flag dan alamat kembali, lalu melompat lewat tabel vektor di alamat tipe × 4.
  6. Rutin layanan diakhiri EOI (menghapus bit ISR), lalu IRET.

Mode 8085: tiga pulsa INTA# yang menghasilkan opcode CALL, byte rendah, dan byte tinggi alamat rutin.

Kata perintah 8259A

KataDitulis denganMengatur
ICW1A0 = 0, D4 = 1Mulai inisialisasi · IC4 (ICW4 menyusul) · SNGL (tunggal) · LTIM (tepi atau level)
ICW2A0 = 1Basis vektor T7–T3; tiga bit bawah diisi nomor IR
ICW3A0 = 1Hanya untuk kaskade: master = saluran yang punya slave; slave = ID 3 bit
ICW4A0 = 1µPM = 1 untuk 8086 · AEOI · BUF dan M/S · SFNM
OCW1A0 = 1Register mask: 1 = dibisukan
OCW2A0 = 0, D4 D3 = 00EOI (non-spesifik atau spesifik), rotasi, set prioritas
OCW3A0 = 0, D4 D3 = 01Baca IRR/ISR · perintah poll · special mask mode

Timer 8254: Cuplikan dengan Selang Sama

Data yang baik diambil pada selang waktu yang sama. Loop tunda di perangkat lunak tidak bisa menjamin itu; pewaktu perangkat keras bisa.

Dengan bahasa sederhana

8254 adalah metronom. Ia menghitung detak jam kristal yang cepat dan memberi satu pulsa setiap N detak. Pilih N, maka kamu memilih laju pencuplikan. Pulsa itu memulai konversi ADC, dan sinyal “selesai” dari ADC membunyikan bel interupsi.

Kalkulator hitungan 8254

N = fCLK ÷ fs
N dalam heks
Tulis LSB lalu MSB
Laju sebenarnya

Enam mode 8253/8254 (ringkas)

ModeNamaPerilaku OUT
0Interupsi saat hitungan habisRendah setelah diisi, naik dan tetap tinggi saat hitungan habis
1One-shot yang dapat dipicu ulangTurun setelah tepi naik GATE, naik lagi saat hitungan habis
2Pembangkit laju (bagi N)Rendah satu detak tiap N detak, lalu memuat ulang. Hitungan 1 tidak sah.
3Gelombang persegiTinggi N/2, rendah N/2 (N ganjil: (N+1)/2 tinggi, (N−1)/2 rendah)
4Strobe dipicu perangkat lunakRendah satu detak setelah hitungan habis
5Strobe dipicu perangkat kerasDipicu tepi naik GATE; rendah satu detak setelah hitungan habis
Contoh: logger fotodioda tepat 1 kHz

8254 pencacah 0, detak 2 MHz, Mode 2 → N = 2000 = 07D0H (kata kendali 34H). EOC ADC → IR1 dari 8259A dengan ICW2 = 40H, jadi tipe 41H dan alamat rutin tersimpan di 41H × 4 = 104H. Kata yang ditulis: ICW1 = 13H, ICW2 = 40H, ICW4 = 01H, OCW1 = FDH (hanya IR1 aktif), dan OCW2 = 20H (EOI) di akhir rutin.

DMA dan 8237A

Pengendali khusus meminjam bus alamat, data, dan kendali dari CPU, lalu memindahkan data langsung antara perangkat I/O dan memori.

Dengan bahasa sederhana

CPU cukup berkata sekali: “Simpan 4096 bacaan berikutnya ke laci 2000H dan seterusnya.” Kurir (8237A) lalu membawa setiap bacaan langsung ke memori. Karena koridornya (bus) hanya satu, kurir harus meminjamnya: HOLD = “boleh saya pinjam?”, HLDA = “silakan”.

Urutan satu permintaan DMA

  1. Perangkat menaikkan DREQ pada salurannya.
  2. Jika saluran tidak di-mask, 8237A menaikkan HRQ ke masukan HOLD CPU.
  3. CPU menyelesaikan siklus busnya, melepaskan bus, dan menaikkan HLDA.
  4. 8237A mengaktifkan DACK dan mengemudikan alamat serta IOR# dan MEMW#.
  5. Satu byte berpindah langsung dari perangkat ke memori; alamat +1, hitungan −1.
  6. Hitungan melewati 0000H ke FFFFH (TC): 8237A memberi pulsa EOP#, menurunkan HRQ, dan CPU mengambil kembali bus.

Perakit kata mode 8237A

Kata mode

Hitungan kata (ingat N − 1)

Tulis ke register hitungan

Batas laju DMA

Batas atas (tanpa wait state)

Laju ≈ fCLK ÷ detak per transfer. S1 hanya muncul sekali tiap 256 transfer saat byte alamat atas berubah.

Jenis dan mode transfer

JenisArahStrobe
WriteI/O → memori (akuisisi data)IOR# + MEMW#
ReadMemori → I/O (misalnya ke DAC)MEMR# + IOW#
VerifyUji saja: alamat dibuat, tanpa dataTidak ada
Memori ke memoriSaluran 0 baca ke register sementara, saluran 1 tulisMEMR#, lalu MEMW#

“Read” dan “write” dinamai dari sisi memori. Mode: single (satu byte per permintaan), block (seluruh blok sampai TC), demand (selama DREQ aktif), cascade (menyambung 8237A lain).

Pilih Metode yang Tepat

Ajukan dua pertanyaan: berapa bacaan per detik? dan apakah datangnya acak, atau harus berjarak sama sementara komputer mengerjakan hal lain?

Skor kasus

0 / 0

Latihan Ujian

Dua cara berlatih. Mode latihan memberi umpan balik langsung untuk semua soal. Simulasi ujian mengambil soal acak dengan batas waktu, lalu memberi nilai dan pembahasan di akhir. Skor terbaikmu tersimpan di peramban ini.

Pilih salah satu tombol di atas untuk mulai. Soal dan urutan pilihan diacak setiap kali.

Kartu Hafalan

Ketuk kartu untuk membaliknya. Tandai kartu yang sudah kamu hafal; tandanya tersimpan di peramban ini.

Ringkasan dan Lembar Rumus

Programmed I/OInterupsiDMA
Tahu “siap”CPU polling bit statusPerangkat menaikkan IRPerangkat menaikkan DREQ
Memindahkan byteCPU (IN, OUT)CPU, di dalam ISR8237A, I/O ↔ memori
CPU bebas saat menungguTidakYaYa (bus dipinjamkan)
Perangkat keras82558259A, sering + 82548237A + latch alamat
BebanSeluruh loop tungguPer byte: simpan, ISR, EOI, IRETPer blok: penyiapan, serah terima bus
Laju khasLambat, sesekaliHingga sekitar 10 kHzPuluhan kHz hingga MB/s
Sinyal kunciSTB#, IBF, OBF#, ACK#INT, INTA#, IR0–IR7DREQ, DACK, HRQ, HLDA, EOP#

Rumus yang perlu diingat

  • Laju 8254: fs = fCLK ÷ N
  • Beban CPU interupsi = fs × tISR
  • Tipe vektor = basis ICW2 + nomor IR; alamat = tipe × 4
  • Hitungan 8237A = jumlah transfer − 1
  • Laju DMA maks ≈ fCLK ÷ detak per transfer

Kata yang sering muncul

  • 8255 Mode 0, A masuk, C atas keluar, B keluar, C bawah masuk: 91H
  • BSR set/reset PC4: 09H / 08H
  • 8254 pencacah 0, LSB+MSB, Mode 2, biner: 34H
  • EOI non-spesifik (OCW2): 20H
  • 8237A saluran 1, single, naik, auto-init, write: 55H

Kesalahan klasik

  • Lupa EOI di akhir ISR.
  • Lupa menghapus flip-flop first/last sebelum menulis alamat 8237A.
  • Menulis N, bukan N − 1, ke register hitungan DMA.
  • Memakai hitungan 1 pada 8254 Mode 2.
  • Lupa STI, sehingga CPU tidak pernah menerima interupsi.
Disusun berdasarkan sumber dari R. Singh dan S. Jain, Microprocessors and Interfacing Devices (Bagian 6.6, 7.9, Bab 8 dan 9), dilengkapi lembar data Intel 8255A, 8259A, 8254, dan 8237A. Port, alamat, dan contoh laboratorium bersifat ilustratif.

Posting Komentar

Lebih baru Lebih lama