- Mengapa Kita Perlu Mengganggu?
- Jenis Gangguan di MSP430
- Mengganggu Kawalan Program di MSP430
- Litar MSP430 untuk Menguji Gangguan GPIO
- Pengaturcaraan MSP430 untuk Gangguan
- Memuat naik Program ke MSP430 dari CCS
- Program Gangguan pada MSP430
Pertimbangkan jam digital sederhana yang diprogramkan untuk hanya menunjukkan waktu, sekarang bayangkan anda mahu menukar zon waktunya. Apa yang anda akan buat? Anda cukup menekan butang yang berubah ke menu yang membolehkan anda mengubah zon waktu. Di sini, sistem tidak dapat meramalkan gangguan luaran anda terhadap proses penentuan waktunya dan tidak dapat meminta anda menunggu kerana sibuk menambah nilai detik pada jam tangan anda. Di sinilah gangguannya sangat berguna.
Gangguan tidak semestinya bersifat luaran; ia juga boleh menjadi dalaman. Selalunya dalam gangguan Embedded juga memudahkan komunikasi antara dua periferal CPU. Pertimbangkan pemasa yang telah ditetapkan semula diset semula dan gangguan dipicu ketika waktu mencapai nilai dalam daftar pemasa. Pengendali interrupt boleh digunakan untuk memulakan periferal lain seperti DMA.
Dalam tutorial ini, kami telah menggunakan gangguan luaran pada MSP430 untuk menukar LED yang berbeza. Apabila gangguan luaran diberikan oleh perubahan keadaan menggunakan butang tekan, kawalan dipindahkan (pra-dikosongkan) ke ISR dan ia memerlukan yang diperlukan. Untuk mengetahui asas-asas seperti penyediaan persekitaran CCS untuk peluncur MSP430G2, ikuti pautan ini untuk memulakan dengan MSP430 menggunakan CCS kerana kami tidak akan mengetahui perinciannya dalam tutorial ini. Lihat juga tutorial berasaskan MSP430 lain menggunakan Energia IDE dan CCS dengan mengikuti pautan.
Mengapa Kita Perlu Mengganggu?
Gangguan diperlukan untuk menyelamatkan overhead pengundian dalam sistem tertanam. Mereka dipanggil ketika tugas-tugas dengan prioritas yang lebih tinggi diperlukan untuk dilaksanakan dengan terlebih dahulu menjalankan tugas yang sedang berjalan. Ia juga dapat digunakan untuk mengaktifkan CPU dari mode daya rendah juga. Apabila terbangunkan oleh peralihan tepi isyarat luaran melalui port GPIO, ISR dijalankan dan CPU kembali kembali ke Mod Daya Rendah.
Jenis Gangguan di MSP430
The sampukan dalam MSP430 datang di bawah jenis- berikut
- Tetapkan Semula Sistem
- Gangguan Tidak Bertopeng
- Mengganggu topeng
- Gangguan Vektor dan Tanpa Vektor
Tetapkan Semula Sistem:
Ia boleh berlaku kerana voltan bekalan (Vcc) dan disebabkan oleh isyarat rendah pada pin RST / NMI dengan mod Reset dipilih dan juga boleh berlaku kerana alasan seperti limpahan pemasa pengawas dan pelanggaran kunci keselamatan.
Gangguan Tidak Bertopeng:
Gangguan ini tidak dapat disamarkan oleh arahan CPU. Setelah General Interrupt diaktifkan, interrupt yang tidak dapat disamarkan tidak dapat dialihkan dari proses. Ini dihasilkan oleh sumber seperti kesalahan Oscillator dan kelebihan yang diberikan secara manual kepada RST / NMI (dalam mod NMI).
Gangguan topeng:
Apabila gangguan berlaku dan jika dapat disamarkan oleh arahan CPU, maka itu adalah gangguan Boleh Masker. Mereka tidak perlu selalu luaran. Mereka juga bergantung pada periferal dan fungsinya. Gangguan port luaran yang digunakan di sini termasuk dalam kategori ini.
Gangguan Vektor dan Gangguan Tanpa Vektor:
Vektor: Dalam kes ini, peranti yang mengganggu memberi kita sumber gangguan dengan menyampaikan alamat vektor gangguan. Di sini alamat ISR diperbaiki dan kawalan dipindahkan ke alamat itu dan ISR menguruskan yang lain.
Tanpa Vektor: Di sini semua gangguan mempunyai ISR yang sama. Apabila gangguan berlaku dari sumber tanpa vektor, kawalan dipindahkan ke alamat biasa, yang mana semua gangguan Tanpa vektor dibahagikan.
Mengganggu Kawalan Program di MSP430
Apabila gangguan berlaku, MCLK dihidupkan dan CPU dipanggil kembali dari keadaan OFF. Oleh kerana kawalan program dipindahkan ke alamat ISR setelah terjadinya gangguan, nilai-nilai di kaunter program dan daftar status dipindahkan ke tumpukan.
Secara berturut-turut, Daftar Status dibersihkan, dengan itu membersihkan GIE dan menghentikan mod kuasa rendah. Selang dengan keutamaan tertinggi dipilih dan dilaksanakan dengan meletakkan alamat vektor interrupt di kaunter program. Sebelum kita sampai ke MSP430 GPIO Interrupt Contoh Code kami, penting untuk memahami cara kerja Port Port yang terlibat di dalamnya.
Daftar Port untuk Kawalan GPIO pada MSP430:
PxDIR: Ini adalah daftar kawalan arah pelabuhan. Ini membolehkan pengaturcara memilih fungsinya secara khusus dengan menulis 0 atau 1. Jika pin dipilih sebagai 1, maka ia berfungsi sebagai output. Pertimbangkan port 1 sebagai port 8-bit, dan jika pin 2 dan 3 ditetapkan sebagai port output, maka register P1DIR harus ditetapkan dengan nilai 0x0C.
PxIN: Ini adalah daftar baca sahaja dan nilai semasa di port dapat dibaca menggunakan daftar ini.
PxOUT: Daftar khas ini boleh digunakan untuk menulis nilai ke port secara langsung. Ini hanya mungkin apabila pullup / pulldown register dilumpuhkan.
PxREN: Ini adalah register 8-bit yang digunakan untuk mengaktifkan atau mematikan register pullup / pulldown. Apabila pin ditetapkan sebagai 1 di kedua register PxREN dan PxOUT, maka pin tertentu ditarik ke atas.
PxDIR |
PxREN |
PxOUT |
Konfigurasi I / O |
0 |
0 |
X |
Input dengan perintang dilumpuhkan |
0 |
1 |
0 |
Input dengan tolakan dalaman diaktifkan |
0 |
1 |
1 |
Input dengan penarikan Dalaman diaktifkan |
1 |
X |
X |
Keluaran - PxREN tidak mempunyai kesan |
PxSEL dan PxSEL2: Oleh kerana semua pin di MSP430 dilipatgandakan, fungsi tertentu harus dipilih sebelum menggunakannya. Apabila kedua-dua register PxSEL dan PxSEL2 ditetapkan sebagai 0 untuk pin tertentu, maka tujuan umum I / O dipilih. Apabila PxSEL ditetapkan sebagai 1, fungsi periferal utama dipilih, dan seterusnya.
PxIE: Ia membolehkan atau mematikan gangguan untuk pin tertentu di port x.
PxIES: Ia memilih kelebihan di mana gangguan dihasilkan. Untuk 0, tepi naik dipilih dan untuk 1, tepi jatuh dipilih.
Litar MSP430 untuk Menguji Gangguan GPIO
Litar MSP430 yang digunakan untuk menguji kod Contoh Interupsi MSP430 kami ditunjukkan di bawah.
Ground board digunakan untuk membumikan LED dan juga butang. Sisi butang tekan yang bertentangan menyerong biasanya terminal terbuka dan bersambung apabila butang tekan ditekan ke bawah. Perintang disambungkan sebelum LED untuk mengelakkan penggunaan arus tinggi oleh LED. Biasanya, perintang rendah dalam julat 100ohm - 220ohm digunakan.
Kami menggunakan 3 kod yang berbeza untuk mendapatkan pemahaman yang lebih baik mengenai gangguan pelabuhan. Dua kod pertama menggunakan litar yang sama seperti dalam Litar Diagram 1. Mari kita selami kod tersebut. Setelah sambungan dibuat, persediaan saya kelihatan seperti ini.
Pengaturcaraan MSP430 untuk Gangguan
Program Interupsi MSP430 yang lengkap boleh didapati di bahagian bawah halaman ini, penjelasan kodanya adalah seperti berikut.
Garis di bawah menghentikan pemasa pengawas beroperasi. Pemasa pengawas biasanya melakukan dua operasi. Satu menghalang pengawal daripada gelung tak terhingga dengan menetapkan semula pengawal dan yang lain ialah ia mencetuskan peristiwa berkala menggunakan pemasa terbina dalam. Apabila mikrokontroler diset semula (atau dihidupkan), ia berada dalam mod pemasa dan cenderung untuk menetapkan semula MCU setelah 32 milidetik. Garis ini menghentikan pengawal daripada melakukan perkara itu.
WDTCTL = WDTPW + WDTHOLD;
Menetapkan register P1DIR ke nilai 0x07 menetapkan arah pin0, pin1, dan pin2 sebagai output. Menetapkan P1OUT ke 0x30 mengkonfigurasikannya input dengan perintang penarik dalaman yang diaktifkan pada pin4 dan pin5. Menetapkan P1REN ke 0x30 membolehkan penarikan dalaman pada pin ini. P1IE membolehkan gangguan, di mana P1IES memilih peralihan tinggi ke rendah sebagai pinggir gangguan pada pin ini.
P1DIR - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
Baris seterusnya membolehkan mod kuasa rendah dan membolehkan GIE dalam daftar status sehingga gangguan dapat diterima.
__bis_SR_register (LPM4bits + GIE)
Kaunter program ditetapkan dengan alamat vektor port 1 menggunakan makro.
PORT1_VECTOR . #pragma vektor = PORT1_VECTOR __teruskan kekosongan Port_1 (tidak sah)
Kod di bawah ini menukar setiap LED yang disambungkan ke pin0, pin1, pin2 satu demi satu.
jika (hitung% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; kira ++; } lain jika (hitung% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; kira ++; } lain { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; kira ++; }
Rajah Litar 2:
Begitu juga, mari kita cuba pin lain untuk memahami konsep dengan lebih baik. Jadi di sini butang tekan disambungkan ke pin 2.0 dan bukannya pin 1.5. litar ubah suai adalah seperti berikut. Sekali lagi rangkaian ini digunakan untuk menguji program gangguan butang MSP430.
Di sini port 2 digunakan untuk input. Jadi vektor interrupt yang berbeza mesti digunakan. P1.4 dan P2.0 mengambil input.
Oleh kerana port 2 hanya digunakan untuk input, P2DIR ditetapkan sebagai 0. Untuk menetapkan pin0 port 2 sebagai input dengan resistor pull-up dalaman diaktifkan, register P2OUT dan P2REN harus diatur dengan nilai 1. Untuk mengaktifkan mengganggu pada pin0 dari port 2 dan juga untuk memilih tepi gangguan, P2IE dan P2IES ditetapkan dengan nilai 1. Untuk menetapkan semula bendera di port 2, P2IFG dibersihkan, sehingga bendera dapat diatur kembali pada berlakunya gangguan.
P2DIR - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
Apabila sumber gangguan dari port 1, maka LED yang disambungkan ke pin1 dari port 1 menyala. Apabila sumber gangguan tergolong dalam port 2, maka LED yang disambungkan ke pin2 dari port 1 menyala.
#pragma vektor = PORT1_VECTOR __ interrupt void Port_1 (void) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; untuk (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma vektor = PORT2_VECTOR __interoid void Port_2 (void) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; untuk (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
Memuat naik Program ke MSP430 dari CCS
Untuk memuatkan projek ke peluncur dan debug, pilih projek, dan klik ikon debug di bar alat. Sebagai alternatif, tekan F11 atau klik RunàDebug untuk masuk ke mod debug.
Setelah mod debug dimasukkan, tekan butang larian warna hijau untuk menjalankan kod yang dimuat secara bebas di MCU. Sekarang, apabila butang tekan ditekan ke bawah, gangguan dipicu oleh perubahan tepi, sehingga mendorong perubahan keadaan LED.
Program Gangguan pada MSP430
Setelah kod berjaya dimuat, kita dapat mengujinya dengan hanya menggunakan butang tekan. Corak LED akan berubah mengikut program kami setiap kali gangguan diberikan menggunakan butang tekan.
Kerja yang lengkap boleh didapati dalam video yang dipautkan di bawah. Semoga anda menikmati tutorial dan mempelajari sesuatu yang berguna. Sekiranya anda mempunyai sebarang pertanyaan, tinggalkan di bahagian komen atau gunakan forum kami untuk pertanyaan teknikal yang lain.