Apa perbedaan antara Interrupt on Change dan Interrupt Eksternal pada PICs

11

Apa perbedaan fungsi antara IOC dan EXT Interrupt pada PIC? Saat ini saya menggunakan PIC12F1822, dan terlepas dari lapisan tambahan memeriksa yang harus Anda lakukan dengan IOC (yaitu pin yang menyebabkan interupsi) keduanya identik.

Apa perbedaan praktis jika ada? Kapan Anda akan menggunakan salah satu atau yang lain?

tsiflana
sumber

Jawaban:

8

Lihatlah dokumen ini yang menyatakan: -

Interrupt-on-change
Fitur ini mirip dengan fasilitas interupsi eksternal , kecuali bahwa interupsi perubahan port akan dipicu oleh perubahan apa pun (bukan hanya satu jenis transisi) pada pin mana pun yang diaktifkan. Ini membuatnya lebih fleksibel (tersedia di lebih banyak pin), tetapi juga lebih sulit untuk ditangani dengan benar.

perilbrain
sumber
5

Ini mungkin dilakukan untuk menyederhanakan arsitektur interupsi chip dengan memiliki lebih sedikit entri dalam tabel vektor interupsi. Interrupt on change dapat diaktifkan ketika register port berubah dan dapat berguna untuk sesuatu seperti matriks keypad di mana Anda tidak ingin menulis Interrupt Service Routine (ISR) untuk setiap pin. Anda dapat menulis hanya satu yang dapat memeriksa nilai seluruh port, yang mungkin sangat Anda minati tergantung pada aplikasinya.

Jon L
sumber
5

Tiga perbedaan terbesar antara perubahan interupsi dan pin interupsi eksternal:

  1. Pin interupsi eksternal memungkinkan perangkat lunak menentukan apakah interupsi harus dipicu oleh sisi naik atau turun; jika misalnya pin rendah dan satu hanya tertarik pada tepi jatuh saja, interupsi tidak akan dipicu sampai pin naik dan turun secara bertahap. Menggunakan interrupt-on-change, kita harus bangun di kedua acara.
  2. Pin interupsi eksternal memiliki bit status latching individual. Bahkan jika pulsa input datang dan pergi sebelum perangkat lunak memiliki kesempatan untuk menanggapinya, perangkat lunak masih dapat mengetahui bahwa itu terjadi dan bereaksi sesuai.
  3. Membaca port I / O yang memiliki interupsi pin-perubahan diaktifkan tepat pada saat perubahan input dapat mengakibatkan interupsi pin-perubahan tidak memicu. Sebaliknya, membaca port I / O yang terhubung dengan pin interupsi eksternal tidak berpengaruh pada interrrupt.

Interupsi eksternal PIC lebih fleksibel dan andal daripada interupsi pin untuk tujuan umum. Saya sarankan menggunakan yang pertama saat praktis.

supercat
sumber
3

Pada dasarnya, interupsi eksternal akan dipicu pada tepi tertentu (naik atau turun, ditentukan pengguna), sementara interrupt-on-change akan dipicu pada setiap tepi (baik naik dan turun).

Bruno Ferreira
sumber
Setidaknya untuk PIC12F1822 OP yang disebutkan, IOC juga dapat dikonfigurasikan (ditentukan pengguna) untuk memicu pada edge yang naik, edge yang jatuh atau keduanya (bagian 13). Jadi bagi saya satu-satunya perbedaan tampaknya, interupsi eksternal hanya dapat dikonfigurasi untuk memicu salah satu dari dua deteksi tepi.
PetPaulsen
2

Interupsi pada perubahan umumnya untuk setengah byte I / O, di mana interupsi eksternal umumnya untuk bit individu. Seperti yang sudah Anda katakan, satu hal yang perlu Anda lakukan dalam IOC ISR adalah mencari tahu bit (atau bit) mana yang berubah.

IOC juga sedikit lebih sulit untuk digunakan, bahkan lebih dari itu. Sangat penting untuk membaca port segera sebelum mengaktifkan interupsi, dan bahkan lebih penting untuk MEMBACA PELABUHAN di dalam ISR! Jika Anda memiliki sinyal yang berubah lambat, dan berpikir Anda dapat mengatur bendera di dalam ISR dan membaca nanti, di luar ISR, pikirkan lagi! Pembacaan port (atau bit pada port, jika saya ingat dengan benar), me-reset kait pada komparator yang memicu interupsi. Jika Anda tidak menghapusnya di dalam ISR, itu akan segera retrigger ketika Anda keluar dari ISR. Jika Anda ingat untuk melakukan ini, itu semua baik, tetapi jika Anda lupa dan berpikir Anda dapat membaca port ketika Anda melakukannya, Anda akan sedikit frustrasi sampai Anda ingat untuk melakukan membaca di ISR.

Scott Seidman
sumber