- Bakit Kailangan Namin Makagambala?
- Mga uri ng Makagambala sa MSP430
- Makagambala sa Kontrol sa Program sa MSP430
- MSP430 Circuit to Test GPIO Makagambala
- Programming MSP430 para sa Mga Nakagagambala
- Pag-upload ng Programa sa MSP430 mula sa CCS
- Makagambala sa Programa sa MSP430
Isaalang-alang ang isang simpleng digital na relo na na-program upang ipakita lamang sa iyo ang oras, ngayon isipin na nais mong baguhin ang time zone nito. Ano ang gagawin mo? Pinipindot mo lang ang isang pindutan na nagbabago sa menu na nagbibigay-daan sa iyo upang baguhin ang time zone. Dito, hindi mahuhulaan ng system ang iyong panlabas na makagambala sa mga proseso ng pagpapanatili nito ng oras at hindi ka maaaring hilingin sa iyo na maghintay dahil abala ito sa pagdaragdag ng halaga ng segundo sa iyong relo. Dito magaling ang mga pagkagambala.
Ang mga pagkagambala ay hindi laging panlabas; maaari itong panloob din. Karamihan sa mga oras sa isang naka-embed na nakakagambala ay pinapabilis din ang komunikasyon sa pagitan ng dalawang mga paligid ng CPU. Isaalang-alang ang isang paunang itinakdang timer ay na-reset at ang isang nakakagambala ay na-trigger kapag naabot ng oras ang halaga sa timer register. Ang interrupt handler ay maaaring magamit upang simulan ang iba pang mga peripheral tulad ng DMA.
Sa tutorial na ito, ginamit namin ang panlabas na nakakagambala sa MSP430 upang i-toggle ang iba't ibang mga LED. Kapag ang isang panlabas na pagkagambala ay ibinigay ng pagbabago ng estado gamit ang isang push-button, ang kontrol ay inililipat (paunang-walang laman) sa ISR at ginagawa nito ang kailangan. Upang malaman ang mga pangunahing kaalaman tulad ng pag-set up ng kapaligiran ng CCS para sa launchpad ng MSP430G2, sundin ang link na ito na nagsisimula sa MSP430 gamit ang CCS dahil hindi namin masisiyahan ang mga iyon sa tutorial na ito. Suriin din ang iba pang mga tutorial na batay sa MSP430 gamit ang Energia IDE at CCS sa pamamagitan ng pagsunod sa link.
Bakit Kailangan Namin Makagambala?
Kailangan ang mga pagkagambala upang mai-save ang overhead ng botohan sa isang naka-embed na system. Tinawag sila kapag ang mga gawain na may mas mataas na priyoridad ay kinakailangan upang maipatupad sa pamamagitan ng paunang pag-alis ng kasalukuyang gawain sa pagpapatakbo. Maaari din itong magamit upang gisingin ang CPU mula sa Mababang mga mode ng kuryente din. Kapag ginising ito ng paglipat ng gilid ng isang panlabas na signal sa pamamagitan ng isang port ng GPIO, ang ISR ay naisakatuparan at muling ibabalik ang CPU sa Mababang Power Mode.
Mga uri ng Makagambala sa MSP430
Ang mga nakakagambala sa MSP430 ay nasa ilalim ng mga sumusunod na uri-
- I-reset ang System
- Non-Maskable Makagambala
- Maskable Makagambala
- Mga Vectored at Non-Vectored Interrupts
I-reset ang System:
Maaari itong mangyari dahil sa supply voltage (Vcc) at dahil sa isang mababang signal sa pin ng RST / NMI na may napili na mode na Reset at maaari ding mangyari dahil sa mga kadahilanan tulad ng pag- overflow ng watchdog timer at paglabag sa key ng seguridad.
Hindi makagambala na Makagambala:
Ang mga pagkakagambala na ito ay hindi maaaring ma-mask ng mga tagubilin sa CPU. Kapag ang General Interrupt ay pinagana, ang hindi makakasagabal na nakakagambala ay hindi maaaring mailipat mula sa pagproseso. Ito ay nabuo ng mga mapagkukunan tulad ng mga pagkakamali ng Oscillator at isang gilid na manu-manong ibinigay sa RST / NMI (sa mode na NMI).
Maskable Makagambala:
Kapag naganap ang isang nakakagambala at kung maaari itong ma-mask sa pamamagitan ng isang tagubilin sa CPU, pagkatapos ito ay Maskable Interrupt. Hindi sila dapat laging panlabas. Nakasalalay din sila sa mga peripheral at kanilang mga pag-andar. Ang mga panlabas na pagkagambala ng port na ginamit dito ay nasa ilalim ng kategoryang ito.
Mga Vectored Interrupts at Non-Vectored Interrupts:
Vectored: Sa kasong ito, ang mga aparato na nakakagambala ay nagbibigay sa amin ng mapagkukunan ng makagambala sa pamamagitan ng pagpasa sa gumambala na vector address. Narito ang address ng ISR ay naayos at ang kontrol ay inililipat sa address na iyon at ang ISR ay nangangalaga sa natitira.
Non-Vectored: Dito lahat ng mga nakakagambala ay may karaniwang ISR. Kapag naganap ang isang nakakagambala mula sa isang di-naka-vector na mapagkukunan, ang kontrol ay inililipat sa karaniwang address, kung saan ang lahat ng mga Non-vectored interrupts ay nagbabahagi.
Makagambala sa Kontrol sa Program sa MSP430
Kapag nangyari ang pagkagambala, ang MCLK ay ON at ang CPU ay tinatawag na pabalik mula sa estado na OFF. Tulad ng kontrol ng programa ay inilipat sa address ng ISR pagkatapos ng paglitaw ng nakakagambala, ang mga halaga sa counter ng programa at ang rehistro ng katayuan ay inilipat sa stack.
Magkakasunod, ang Pagrehistro ng Katayuan ay nabura, sa gayong pag-clear ng GIE at pagwawakas ng mababang mode ng kuryente. Ang makagambala sa pinakamataas na priyoridad ay napili at naisakatuparan sa pamamagitan ng paglalagay ng makagambala na vector address sa counter ng programa. Bago kami makarating sa aming MSP430 GPIO Interrupt Halimbawa Code, mahalagang maunawaan ang pagtatrabaho ng mga rehistro sa Port na kasangkot dito.
Mga Rehistro sa Port para sa GPIO Control sa MSP430:
PxDIR: Ito ay isang rehistro ng kontrol sa direksyon ng port. Pinapayagan nito ang programmer na partikular na piliin ang pagpapaandar nito sa pamamagitan ng pagsulat ng 0 o 1. Kung ang isang pin ay napili bilang 1, pagkatapos ay kumikilos ito bilang isang output. Isaalang-alang ang port 1 na isang 8-bit port, at kung ang mga pin 2 at 3 ay itatalaga bilang mga output port, kung gayon ang rehistro ng P1DIR ay dapat itakda na may halagang 0x0C.
PxIN: Ito ay isang nabasa lamang na magparehistro at ang kasalukuyang mga halaga sa port ay maaaring basahin gamit ang rehistro na ito.
PxOUT: Ang partikular na rehistro na ito ay maaaring magamit upang sumulat ng mga halaga sa mga port nang direkta. Posible lamang ito kapag hindi pinagana ang pagrehistro ng pullup / pulldown.
PxREN: Ito ay isang 8-bit na rehistro na ginamit upang paganahin o huwag paganahin ang pullup / pulldown register. Kapag ang isang pin ay itinakda bilang 1 sa parehong rehistro ng PxREN at PxOUT, pagkatapos ay ang partikular na pin ay nakuha.
PxDIR |
PxREN |
PxOUT |
I / O Config |
0 |
0 |
X |
Input na may mga resistors na hindi pinagana |
0 |
1 |
0 |
Ang pag-input na pinagana ang panloob na pulso |
0 |
1 |
1 |
Input na may pinagana ang Panloob na pullup |
1 |
X |
X |
Output - Walang epekto ang PxREN |
PxSEL at PxSEL2: Tulad ng lahat ng mga pin sa MSP430 ay multiplexed, ang partikular na pagpapaandar ay kailangang mapili bago gamitin ito. Kapag ang parehong mga rehistro ng PxSEL at PxSEL2 ay itinakda bilang 0 para sa isang partikular na pin, pagkatapos ay napili ang pangkalahatang layunin na I / O. Kapag ang PxSEL ay itinakda bilang 1, ang pangunahing peripheral function ay napili, at iba pa.
PxIE: Nagbibigay-daan ito o hindi pinapagana ang mga nakakagambala para sa isang partikular na pin sa isang port x.
PxIES: Pinipili nito ang gilid kung saan nabuo ang isang nakakagambala. Para sa 0, ang isang tumataas na gilid ay napili at para sa 1, napili ang isang bumabagsak na gilid.
MSP430 Circuit to Test GPIO Makagambala
Ang circuit ng MSP430 na ginamit upang subukan ang aming MSP430 Interrupt Halimbawa ng code ay ipinapakita sa ibaba.
Ang ground ng board ay ginagamit upang ground ang parehong LED at ang pindutan. Ang dayagonal na kabaligtaran ng mga gilid ng pindutan ng itulak ay karaniwang bukas na mga terminal at makakonekta kapag ang pindutan ng push ay pinindot pababa. Ang isang risistor ay konektado bago ang LED upang maiwasan ang mataas na kasalukuyang pagkonsumo ng LED. Karaniwan, ang mga mababang resistors sa saklaw ng 100ohm - 220ohm ay ginagamit.
Gumagamit kami ng 3 magkakaibang mga code upang makakuha ng isang mas mahusay na pag-unawa sa mga Port Interrupts. Ang unang dalawang mga code ay gumagamit ng parehong circuit tulad ng sa Circuit Diagram 1. Sumisid tayo sa code. Matapos magawa ang mga koneksyon, ganito ang aking set-up.
Programming MSP430 para sa Mga Nakagagambala
Ang kumpletong MSP430 Interrupt Program ay matatagpuan sa ilalim ng pahinang ito, ang paliwanag ng code ay ang mga sumusunod.
Pinipigilan ng linya sa ibaba ang timer ng watchdog mula sa operasyon. Karaniwang nagsasagawa ng dalawang operasyon ang watchdog timer. Ang isa ay pinipigilan ang controller mula sa walang katapusang mga loop sa pamamagitan ng pag-reset ng controller at ang iba pa ay nagpapalitaw ng mga pana-panahong kaganapan gamit ang inbuilt timer. Kapag ang isang microcontroller ay na-reset (o pinalakas), ito ay nasa mode ng timer at may kaugaliang i-reset ang MCU pagkatapos ng 32milliseconds. Pinipigilan ng linyang ito ang controller mula sa paggawa nito.
WDTCTL = WDTPW + WDTHOLD;
Ang pagtatakda ng rehistro ng P1DIR sa halagang 0x07 ay nagtatakda ng direksyon ng pin0, pin1, at pin2 bilang output. Ang pagtatakda ng P1OUT sa 0x30 ay nag-configure nito ng isang input na may pinagana na panloob na resistors ng pullup sa pin4 at pin5. Ang pagtatakda ng P1REN sa 0x30 ay nagbibigay-daan sa panloob na paghila sa mga pin na ito. Nagbibigay- daan ang P1IE na makagambala, kung saan pipiliin ng P1IES ang mataas sa mababang paglipat habang ang nakakagambala na gilid sa mga pin na ito.
P1DIR - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
Ang susunod na linya ay nagbibigay-daan sa mababang mode ng kuryente at binibigyang-daan ang GIE sa rehistro ng katayuan upang matanggap ang mga nakakagambala.
__bis_SR_register (LPM4bits + GIE)
Ang counter ng programa ay nakatakda sa address ng port 1 vector gamit ang macro.
PORT1_VECTOR . #pragma vector = PORT1_VECTOR __ makagambala sa walang bisa Port_1 (walang bisa)
Ang code sa ibaba ay nagpapalipat-lipat sa bawat isa sa mga LED na konektado sa pin0, pin1, pin2 isa-isa.
kung (bilangin ang% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; bilangin ++; } iba pa kung (bilangin ang% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; bilangin ++; } iba pa { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; bilangin ++; }
Circuit Diagram 2:
Katulad nito, subukan natin ang isang iba't ibang mga pin upang maunawaan ang konsepto nang mas mahusay. Kaya narito ang pindutan ng push ay konektado sa pin 2.0 sa halip na pin 1.5. ang binagong circuit ay ang mga sumusunod. Muli ang circuit na ito ay ginagamit upang subukan ang program na makagambala ng pindutan ng MSP430.
Dito ginagamit ang port 2 para sa pag-input. Kaya't dapat gumamit ng iba`t ibang mga nakakagambalang vector. P1.4 at P2.0 kunin ang mga input.
Tulad ng ginagamit lamang sa port 2 para sa pag-input, ang P2DIR ay itinakda bilang 0. Upang maitakda ang pin0 ng port 2 bilang input na pinagana ang panloob na mga resistor na pull-up, ang mga rehistro na P2OUT at P2REN ay dapat na maitakda na may halagang 1. Upang paganahin ang makagambala sa pin0 ng port 2 at upang piliin din ang gilid ng makagambala, ang P2IE at P2IES ay nakatakda na may halagang 1. Upang i-reset ang watawat sa port 2, ang P2IFG ay malinis, upang ang watawat ay maitatakda muli sa paglitaw ng makagambala.
P2DIR - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
Kapag ang makagambala na mapagkukunan ay mula sa port 1, pagkatapos ang LED na konektado sa pin1 ng port 1 ay kumikinang. Kapag ang makagambala na mapagkukunan ay kabilang sa port 2, pagkatapos ang LED na konektado sa pin2 ng port 1 ay kumikinang.
#pragma vector = PORT1_VECTOR __ makagambala sa walang bisa Port_1 (walang bisa) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; para sa (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma vector = PORT2_VECTOR __ makagambala sa walang bisa Port_2 (walang bisa) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; para sa (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
Pag-upload ng Programa sa MSP430 mula sa CCS
Upang mai-load ang proyekto sa launchpad at i-debug ito, piliin ang proyekto, at i-click ang icon ng pag-debug sa toolbar. Bilang kahalili, pindutin ang F11 o i-click ang RunàDebug upang pumasok sa mode ng debug.
Kapag naipasok na ang mode ng debug, pindutin ang berdeng kulay na pindutan ng tumakbo upang malayang patakbuhin ang na-load na code sa MCU. Ngayon, kapag ang pindutan ng push ay pinindot pababa, ang makagambala ay na-trigger ng pagbabago sa gilid, kaya't hinihimok ang pagbabago sa estado ng LED.
Makagambala sa Programa sa MSP430
Matapos ang code ay matagumpay na na-upload, maaari nating subukan ito sa pamamagitan lamang ng paggamit ng pindutan ng push. Magbabago ang pattern ng LED alinsunod sa aming programa tuwing ang isang nakakagambala ay ibinibigay gamit ang push button.
Ang kumpletong pagtatrabaho ay matatagpuan sa video na naka-link sa ibaba. Inaasahan kong nasiyahan ka sa tutorial at natutunan ang isang bagay na kapaki-pakinabang. Kung mayroon kang anumang mga katanungan, iwanan ang mga ito sa seksyon ng komento o gamitin ang aming mga forum para sa iba pang mga teknikal na katanungan.