Isi
- Apa Itu Interupsi di Mikrokontroler?
- Interupsi Vektor
- Acara Tertaut Keras
- Interrupt Enable Bit
- Interrupt Flag Bit
- Prioritas Interupsi
- Bagaimana Interupsi Bekerja di MicroControllers?
- Prosedur Umum dan Kode untuk Memanggil Interupsi
- 1) Setel Bit Aktifkan interupsi
- 2) Tetapkan Bit Prioritas Interupsi
- 3) Pilih vektor interupsi masing-masing
- 4) Kode operasi yang diinginkan
- 5) Hapus bendera Interupsi saat keluar dari fungsi
- Jenis Interupsi
Penulis menyelesaikan proyek rekayasa tahun terakhirnya dengan pengontrol mikro dsPic, mendapatkan wawasan luas tentang perangkat ini.
Interupsi membentuk tulang punggung metodologi pengkodean dalam pengontrol mikro dan pemahaman penuh mereka sangat penting bagi pemrogram yang ingin membuat kode tingkat ahli. Tutorial ini memberikan semua informasi penting yang dibutuhkan oleh pemrogram Pic untuk mulai menggunakan interupsi dalam kode dan aplikasi pengontrol mikro mereka.
Kode mikrokontroler seri dsPic30f bersama dengan pengembangan IDE MplabX dari Microchip digunakan untuk mendemonstrasikan tutorial ini di sini, tetapi metodologi yang sama berlaku pada semua mikrokontroler Pic serta mikrokontroler dari produsen lain.
Pengguna disarankan untuk melihat lembar data yang relevan untuk register yang tepat dan nama bit.
Apa Itu Interupsi di Mikrokontroler?
Interupsi secara umum dapat didefinisikan sebagai fungsi yang dipicu saat terjadinya peristiwa yang telah ditentukan sebelumnya dan terhubung dengan keras dalam pengontrol mikro dan bukan melalui pemanggilan fungsi normal.
Fungsi ini biasanya disebut Rutin Layanan Interupsi.
Semua interupsi memiliki keunikannya masing-masing:
- Vektor interupsi.
- Peristiwa tautan keras yang telah ditentukan sebelumnya.
- Bit pengaktifan interupsi di register pengaktifan Interupsi.
- Bit interrupt flag dalam register flag interrupt.
- Interupsi prioritas.
Interupsi Vektor
Semua interupsi ditentukan oleh spesifik vektor interupsi yang unik hanya untuk interupsi itu.
Acara Tertaut Keras
Vektor interupsi kemudian dikaitkan dengan keras dengan terjadinya a acara yang telah ditentukan sebelumnya di mikrokontroler untuk:
- Menerima data di buffer data UART.
- Menerima data di bus CAN.
- Bandingkan kecocokan nilai register PWM.
- Penyelesaian konversi ADC.
- Banyak lagi tergantung pada jenis, keluarga dan model mikrokontroler.
Tabel yang diberikan di akhir artikel ini mencantumkan beberapa contoh peristiwa pemicu interupsi yang ditautkan secara keras ini.
Interrupt Enable Bit
Bit ini digunakan untuk mengaktifkan interupsi. Interupsi diaktifkan jika bit ini disetel ke satu dan dinonaktifkan jika bot ini disetel ke nol.
Interrupt Flag Bit
Kapan pun sebuah peristiwa yang terkait dengan interupsi terjadi, bendera interupsi diperiksa. Jika interupsi adalah 0, maka interupsi terpicu. Jika bendera interupsi tidak disetel ke nol, interupsi tidak akan terpicu.
Prioritas Interupsi
Jika lebih dari satu interupsi akan dikodekan, harus diputuskan bahwa interupsi mana yang akan ditayangkan terlebih dahulu jika peristiwa pemicu terjadi untuk keduanya. Bit prioritas interupsi dalam Daftar Kontrol Prioritas Interupsi menentukan prioritas untuk interupsi masing-masing. Interupsi dengan prioritas tertinggi, yaitu enam dilayani lebih dulu.
Bagaimana Interupsi Bekerja di MicroControllers?
Interupsi dipicu ketika salah satu peristiwa yang terkait erat dengannya, misalnya yang dijelaskan di atas, terjadi. Mereka bekerja dalam urutan berikut:
- Peristiwa yang terkait dengan interupsi terjadi.
- Pengontrol menjadi sadar akan terjadinya peristiwa itu dan memeriksa bendera interupsi.
- Jika peristiwa pemicu untuk lebih dari satu interupsi diterima maka prioritas interupsi diperiksa.
- Jika bendera interupsi jelas, itu adalah set otomatis dan pencacah program pindah ke vektor interupsi masing-masing dengan prioritas tertinggi dalam kode.
- Kode dalam fungsi interupsi masing-masing mulai dijalankan dari bawah vektor interupsi.
- Setelah eksekusi rutin layanan interupsi selesai, tanda interupsi dihapus setelah keluar dari rutin.
- Program mikrokontroler melanjutkan dari tempat yang sama dari tempat ia melompat untuk memasuki rutinitas layanan interupsi.
- Interupsi dijalankan lagi jika acara kembali terjadi.
Prosedur Umum dan Kode untuk Memanggil Interupsi
Interupsi dapat dimulai dengan mengikuti langkah-langkah berikut:
1) Setel Bit Aktifkan interupsi
Bit pengaktifan interupsi untuk masing-masing interupsi harus diaktifkan dari register pengaktifan Interupsi terlebih dahulu sehingga interupsi diaktifkan dan terjadinya peristiwa terkait-keras masing-masing diaktifkan untuk memicu interupsi.
2) Tetapkan Bit Prioritas Interupsi
Jika beberapa interupsi akan digunakan dalam sebuah kode, mereka dapat diberi prioritas berdasarkan kepentingannya dalam aplikasi menggunakan bit Prioritas Interupsi dalam Daftar Kontrol Prioritas Interupsi.
batal Interrupt_Init (batal) {IEC2bits.PWMIE = 1; IPC2bits.PWMIP = 1; } // Fungsi ini mengaktifkan bit pengaktifan Interupsi PWM dalam register Kontrol Pengaktifan Interupsi 2. // Fungsi ini dapat dipanggil di badan utama sebelum while (1) melakukan perulangan melalui pemanggilan fungsi normal. // Lebih baik menggunakan fungsi inisialisasi interupsi jika beberapa interupsi diaktifkan. // Namun tidak perlu menggunakan fungsi ini karena perintahnya juga bisa langsung ditulis di fungsi utama. // Prioritas interupsi disetel ke 1 (terendah).
3) Pilih vektor interupsi masing-masing
Pilih vektor interupsi masing-masing dan letakkan di header fungsi interupsi atau mengganggu rutinitas layanan. Kode di bawah ini menunjukkan cara membuat rutinitas layanan interupsi dari vektor interupsi.
Daftar vektor interupsi juga diberikan dalam artikel ini untuk referensi.
void __attribute __ ((interrupt, auto_psv)) _PWMInterrupt (void) {// kode Anda di sini IFS2bits.PWMIF = 0; } // Tag "_PWMInterrupt" adalah vektor interupsi khusus dalam fungsi ini. // Mengganti ini dengan vektor interupsi lain juga akan mengubah jenis interupsi.
4) Kode operasi yang diinginkan
Operasi yang diinginkan dapat dikodekan dalam fungsi interupsi.
5) Hapus bendera Interupsi saat keluar dari fungsi
Saat keluar dari interupsi, bendera interupsi masing-masing harus dihapus sehingga interupsi dapat dipicu lagi.
Jenis Interupsi
Mereka mungkin sebanyak 50+ jenis interupsi dalam pengontrol mikro mulai dari interupsi I2C, interupsi SPI, interupsi quadrature encoder dan interupsi pengatur waktu tergantung pada jenis, keluarga dan model.
Beberapa interupsi yang ditemukan di mikrokontroler pic diberikan dalam tabel di bawah ini untuk meningkatkan pemahaman.
Nama Interupsi | Interupsi Vektor | Trigger Stimulus |
---|---|---|
Interupsi PWM | _PWMInterrupt | PWM membandingkan kecocokan antara register basis waktu dan register penghitungan. |
ADC Interupsi | _ADCInterrupt | Konversi ADC selesai |
UART Terima Interupsi | _U2RXInterrupt | Menerima data di UART menerima register |
UART Transmitting Interrupt | _U2TXInterrupt | Memuat data dalam register pemancar UART |
Fault Interrupt | _FLTAInterrupt | Perubahan level logika pada pin FLT |
Interupsi Eksternal | _INT3Interrupt | Perubahan level logika pada pin Int0 / 1 |
Interupsi Tegangan Rendah | _LVDInterrupt | Mendeteksi tegangan rendah |
Artikel ini akurat dan benar sepanjang pengetahuan penulisnya. Konten hanya untuk tujuan informasi atau hiburan dan tidak menggantikan nasihat pribadi atau nasihat profesional dalam masalah bisnis, keuangan, hukum, atau teknis.