Obsah
1. Šestnáctibitové mikrořadiče TI řady MSP430 – dokončení popisu periferních modulů
5. PWM – pulsně šířková modulace
7. Digitálně-analogový převodník
8. Analogově-digitální převodník
11. Mikrořadiče vybavené pamětí FRAM
1. Šestnáctibitové mikrořadiče TI řady MSP430 – dokončení popisu periferních modulů
V předchozím článku jsme si kromě dokončení popisu instrukční sady šestnáctibitových mikroprocesorů řady MSP430 popsali i některé typické periferní moduly, které na těchto čipech většinou nalezneme. Zmiňovali jsme se především o hardwarové násobičce (ta totiž, možná poněkud překvapivě, není součástí aritmeticko-logické jednotky), o paralelních portech s individuálně konfigurovatelnými a adresovatelnými piny (GPIO) a taktéž o sériových portech a sběrnicích – sem spadají především UART, SPI a I2C. Dnes popis periferních modulů dokončíme. Budeme se zabývat například subsystémem pro generování hodinových signálů, dále watchdogem, čítači a časovači, modulům určeným pro pulsně šířkovou modulaci, D/A a A/D převodníkům, ale nezapomeneme ani na modul pro ovládání LCD a modul pro výpočet CRC (16bitového). Na závěr se zmíníme o velmi zajímavé technologii FRAM, kterou některé mikrořadiče firmy TI používají.
2. Zdroje hodinového signálu
Čipy s mikrořadičovým jádrem MSP430 obsahují modulární a plně konfigurovatelný systém určený pro generování a využití hodinových signálů. Je tomu tak z toho důvodu, že u mnoha aplikací, kde jsou tyto čipy použity (typicky se jedná o mikrořadič napájený baterií) je nutné splnit některé mnohdy protichůdné požadavky:
- Aplikace může dlouhou dobu běžet v režimu nízké spotřeby a tím pádem i požadované frekvence hodinových signálů mohou být nízké, mnohdy jen jednotky kHz (jak uvidíme dále, patří mezi oblíbené frekvence hodnoty 32,000 kHz a 32,768 kHz).
- Naopak se očekává, že v určitých okamžicích musí mikrořadič zpracovat větší množství dat a musí být tedy dostatečně rychlý (vysoká frekvence hodinových signálů). Ostatně kdyby tomu tak nebylo, je použití šestnáctibitových mikrořadičů zbytečný luxus a mohly by se namísto nich použít jednodušší řadiče typu PIC atd.
- U dalších aplikací se vyžaduje přesné časování, a to mnohdy i ve chvíli, kdy je mikrořadič použit v prostředí s velkými teplotními výkyvy (průmyslové aplikace). Zde je většinou nutné použít externích krystalů pro stabilizaci signálu.
- Naopak existují mnohé aplikace mikrořadičů, kde by bylo z různých důvodů (konstrukce, cena, spotřeba) zbytečné používat externí krystaly; jejich absence se samozřejmě projeví v nižší přesnosti generování hodinových signálů.
- U těch nejmenších čipů je v některých případech zbytečné plýtvat dvěma piny na připojení externího krystalu.
- Existují zapojení, v nichž lze využít společný zdroj hodinových signálů nebo si hodinový signál „ukrást“ z jiného čipu.
Z tohoto důvodu používají čipy MSP430 takzvaný Unified Clock System s až pěti zdroji a třemi výstupními hodinovými signály. Mezi vstupy patří:
# | Zkratka | Význam |
---|---|---|
1 | XT1CLK | oscilátor, který může být stabilizován krystalem s frekvencí typicky 4MHz až 32MHz, lze však použít i krystal 32,000 kHz nebo 32,768 kHz (známý například z digitálek) |
2 | XT2CLK | dtto jako XT1CLK, ovšem tento zdroj je nepovinný (doplňkový, a to jen na některých čipech) |
2 | VLOCLK | Very Low power Oscillator, jeho typická frekvence je 10kHz (záleží na čipu), nevyžaduje žádné externí součástky |
3 | REFOCLK | oscilátor s frekvencí 32kHz |
4 | DCOCLK | Digitally Controlled Oscillator, taktéž interní oscilátor |
Z těchto zdrojů se na základě konfigurace vybírají tři hodinové signály. Každý hodinový signál je možné, opět s využitím konfiguračních registrů, dělit konstantami 2, 4, 8, 16 či 32:
# | Zkratka | Celý název | Význam |
---|---|---|---|
1 | MCLK | Main Clock | hlavní hodinový signál používaný vlastním procesorem |
2 | SMCLK | Sub-Main Clock | hodinový signál, který je rozveden do periferních modulů |
3 | ACLK | Auxiliary Clock | lze taktéž použít periferními moduly (a vybírat tak použitou frekvenci) |
3. Watchdog
Tento modul, který je používaný i v mnoha dalších mikrořadičích, slouží k automatickému restartu čipu ve chvíli, kdy software z nějakého důvodu přestane reagovat, dostane se do nekonečné smyčky apod. Princip, na němž je watchdog postaven, je ve skutečnosti velmi jednoduchý – jedná se o samostatně běžící 16bitový či u některých čipů i 32bitový čítač, který je automaticky restartován (vynulován) ve chvíli, kdy software „nakrmí“ hlídacího psa, zde konkrétně zápisem bitu WDTCNTCL do registru WDTCTL. Toto „krmení“ je nutné provádět pravidelně, protože pokud čítač překročí nastavený interval, provede reset mikrořadiče. To je v mnoha případech mnohem lepší, než aby mikrořadič setrval v nějaké nekonečné smyčce či v čekání na přerušení, které nepřijde (požadované chování nejenom u řídicích systémů).
Konfigurační a současně i řídicí registr WDTCTL, kterým se konfiguruje funkce hlídacího psa, je zvláštní tím, že při zápisu je vždy nutné do horního bajtu zapsat „heslo“ s hodnotou 0×05; zápis navíc vždy musí být proveden v šestnáctibitovém režimu (nikoli po bajtech). Pokud je do horního bajtu zapsána jiná hodnota, může to znamenat, že software je v natolik divném stavu, že pravděpodobně náhodně či ve smyčce zapisuje do paměti či do řídicích registrů, což se opět může vyřešit resetem.
Čítač, na němž je watchdog založen, může být zvyšován vybraným hodinovým signálem (VLOCLK, SMCLK, ACLK) a je možné zvolit, jaká hodnota čítače povede k resetu (navíc se nastaví příznak, takže po resetu lze otestovat, proč k němu vlastně došlo). U menších čipů lze zvolit čtyři kritické hodnoty čítače, u novějších čipů je to šestnáct hodnot. Při použití hodinového signálu o frekvenci 32,768 kHz (používaný v digitálkách) a 32bitového watchdogu tak může maximální doba mezi „krmeními“ hlídacího psa dosahovat intervalu od cca 1,95 ms až po cca osmnáct hodin (včetně možnosti volby přesně sekundového intervalu).
4. Čítače a časovače
Nedílnou součástí prakticky všech mikrořadičů jsou čítače a časovače, protože měření časového intervalu popř. načasování nějaké činnosti (přepnutí hodnoty na GPIO pinu, zahájení vysílání, otestování hodnoty vstupního čidla atd.) se vyskytuje v mnoha aplikacích, v nichž se mikrořadiče používají. Mikrořadiče s jádrem MSP430 jsou v oblasti čítačů a časovačů velmi variabilní, protože ty nejjednodušší čipy mají pouze jediný šestnáctibitový čítač, zatímco na druhé straně výkonnostního i cenového spektra nalezneme mikrořadič (kupodivu jen jediný model) se šesti šestnáctibitovými čítači. Nejtypičtější čipy (je jich dnes 192 z celkového počtu 525) obsahují čtyři šestnáctibitové mikrořadiče, což je pro naprostou většinu aplikací dostačující.
Typický časovač implementovaný na čipu MSP430 je konfigurovatelný a může pracovat v několika režimech. V režimu časovače je možné s každou vzestupnou hranou vybraného hodinového signálu zvýšit či naopak snížit hodnotu šestnáctibitového počitadla. Hodinovým signálem může být ACLK či SMCLK, navíc je možné frekvenci signálu nejprve podělit hodnotou 2, 4 či 8. Časovač může hodnotu svého počitadla zvyšovat od nuly do nastavené hodnoty (potom dojde k vynulování počitadla), zvyšovat ji postupně od nuly do 0×ffff, nebo počitadlo zvyšovat až do nastavené hodnoty a potom ji opět snižovat směrem k nule.
Implementována je i funkce zachycení (capture) aktuální hodnoty časovače při vzniku nějaké události, například ve chvíli, kdy se objeví testovaný signál na zvoleném vstupním pinu. Čip v této chvíli automaticky zkopíruje aktuální hodnotu čítače do k tomu určeného záchytného registru (či registrů), takže není nutné implementovat přerušovací rutinu a složitě počítat, kolik času vlastně uplynulo od vzniku události až po provedení instrukce pro přečtení hodnoty časovače.
5. PWM – pulsně šířková modulace
Čítače lze použít i pro některé další užitečné funkce. Poměrně často se setkáme s použitím pulsně šířkové modulace neboli PWM (pulse width modulation). Při implementaci PWM je možné využít časovač nakonfigurovaný do režimu porovnávání (compare), který je v určitém ohledu opačný k režimu zachycení (capture). Pokud počitadlo časovače nastaveného do režimu porovnávání dosáhne specifikované hodnoty (uložené v tom určeném pracovním registr), může se automaticky provést jedna z nastavených operací:
- Nastavení pinu na jedničku (vysoká úroveň).
- Nastavení pinu na nulu (nízká úroveň).
- Přepnutí pinu z 0 na 1 či naopak.
- Nastavení na 1/vynulování (pokud se používají dvě hodnoty pro porovnání)
- Vynulování/nastavení na 1 (pokud se používají dvě hodnoty pro porovnání)
- Přepnutí/vynulování (pokud se používají dvě hodnoty pro porovnání)
- Přepnutí/nastavení na 1 (pokud se používají dvě hodnoty pro porovnání)
6. Napěťový komparátor
Většina čipů MSP430 je vybavena i napěťovým komparátorem s jedním či několika přepínanými vstupy. Komparátor sleduje analogové hodnoty přivedené na piny VIN+ a VIN-. Pokud je napětí mezi VIN+ a VIN- kladné, nastaví se výstup komparátoru CAOUT na logickou hodnotu 1, v opačném případě je nastaven na hodnotu 0. Navíc je možné při detekci změny či naopak při dosažení hodnoty CAOUT=1 resp. CAOUT=0 vyvolat přerušení. Na piny VIN+ a VIN- je možné buď přivádět externí signál nebo je možné na zvolený pin přivést referenční napětí generované samotným mikrořadičem. Za referenční napětí lze zvolit 1/4 Ucc či 1/2 Ucc (napájecího napětí čipu), další napětí je již nutné vytvořit například odporovým děličem (a obětovat pro něj jeden z pinů). Vzhledem k tomu, že ve chvíli, kdy je napětí mezi VIN+ a VIN- blízké nule, může docházet k oscilacím na výstupu komparátoru, lze jedním řídicím bitem povolit použití výstupního RC filtru, který dokáže tyto oscilace omezit (ovšem jejich četnost závisí na mnoha dalších faktorech, například na vyhlazení napájecího napětí, rušení od dalších modulů či součástek apod.).
7. Digitálně-analogový převodník
Některé mikrořadiče MSP430 jsou vybaveny digitálně-analogovým převodníkem (DAC). Ten je většinou buď desetibitový či dvanáctibitový (v obou případech je však možné počet bitů snížit na osm). Číslicová hodnota v rozsahu 0..28-1, 0..210-1 či 0..212-1, která je do DAC zapsána, je nejprve překódována a následně převedena na napěťovou úroveň v rozsahu 0V až do Uref nebo 0V až 3×Uref, kde úroveň referenčního napětí Uref je konfigurovatelná. Buď se může jednat o externí referenční napětí přivedené na k tomu zvolený pin či o interní referenční napětí. Navíc je možné zvolit, jak se má vstupní číslicová hodnota překódovat – je totiž možné využít i takový režim, kdy je vstupní hodnota nejprve posunuta či kdy je chápána jako číslo se znaménkem (konkrétně s dvojkovým doplňkem). Další konfigurační volbou se může DAC nastavit do režimu, kdy je hodnota zapsaná do datového registru automaticky převedena na výstup v závislosti na stavu zvoleného časovače.
8. Analogově-digitální převodník
Při připojování některých typů čidel může být velmi užitečný i analogově-digitální převodník neboli ADC popř. A/D převodník. Jednotlivé čipy MSP430 se od sebe v tomto ohledu velmi odlišují, neboť nabízí A/D převodníky s různým počtem vstupních kanálů i s různým počtem kvantizačních úrovní (tedy i přesností) a rychlostí převodu i s rozdílnou vnitřní implementací (k dispozici jsou například i 24bitové sigma delta převodníky). Mezi typické konfigurace patří osmibitový A/D převodník se čtyřmi přepínanými vstupními kanály, desetibitový A/D převodník s osmi kanály, dvanáctibitový A/D převodník s dvanácti kanály a konečně již zmíněné sigma delta převodníky s rozlišením od šestnácti bitů do 24 bitů. Velký počet vstupních kanálů sice může vypadat lákavě, ovšem naprostá většina čipů MSP430 musí pro každý pin použít několik funkcí, tj. pokud se pin využívá pro A/D převodník, ztrácí další funkcionalitu (GPIO, sběrnice atd.). A/D převodník taktéž obsahuje generátor referenčního napětí, který se používá i pro D/A převodník. Interní referenční napětí může dosahovat 1,5 či 2,5 V.
9. Ovládání LCD
Poměrně velká skupina mikrořadičů MSP430, konkrétně 210 typů z 525 aktuálně dostupných konfigurací, obsahuje i modul pro ovládání LCD. Nejedná se však o dotykové LCD s velkým rozlišením, ale většinou pouze o numerické LCD s různým počtem segmentů (až do hranice 448), přičemž si pod pojmem segment můžeme představit jednu „čárku“ na klasické číslici složené ze sedmi segmentů nebo libovolný obrázek, který je na masce LCD vytvořen (na termostatu se může jednat o ikony slunce, měsíce, sněhové vločky a kdovíčeho dalšího). Takové LCD většinou neumožňují přímou adresaci jednotlivých segmentů (počet vývodů by byl neúměrně vysoký). Namísto toho je nutné segmenty vybírat v matici, navíc je nutné použít střídavé napětí a nikoli napětí stejnosměrné. Všechny tyto činnosti má na starosti modul pro ovládání LCD, který podporuje různé uspořádání čipů (různý počet řádků v matici). Navíc lze měnit i kontrast zobrazení změnou střídy a/nebo napětí přivedeného na segmenty.
Poznámka: LCD s typicky jedním až čtyřmi textovými řádky (příkladem je „krabička“ pro ovládání alarmu), někdy doplněné o možnost vytvořit si vlastní znakovou sadu, jsou většinou vybaveny vlastním řadičem, s nímž může mikrořadič komunikovat po paralelní sběrnici (méně časté) či po sběrnici sériové (v závislosti na konkrétním modelu). Paradoxně může být řadič takového displeje složitější než vlastní MCU.
10. Modul pro výpočet CRC
Některé mikrořadiče s jádrem MSP430 obsahují i speciální modul určený pro výpočet CRC, konkrétně pro výpočet CRC-16. Existence tohoto modulu vlastně nemusí být příliš překvapivá, protože CRC se používá v mnoha přenosových protokolech a jeho hardwarová implementace je jednoduchá (posuvný registr doplněný o kombinační logiku). Pokud je tento modul na čipu nainstalován, mají programátoři většinou k dispozici následující čtyři registry; pouze některé čipy neobsahují registry s otočenými bity. Všechny registry jsou šestnáctibitové, ovšem čtení i zápis může probíhat po bajtech:
Zkratak | Jméno registru | Význam |
---|---|---|
CRCDI | CRC Data In | postupné vkládání vstupního proudu bitů |
CRCDIB | CRC Data In Reverse Byte | dtto, ale pro protokoly, kde je význam LSB a MSB prohozen |
CRCINIRES | CRC Initialization and Result | inicializační a vypočtená hodnota CRC |
CRCINIRESR | CRC Result Reverse | výsledek, ale s opačným seřazením bitů |
Vlastní výpočet CRC probíhá následujícím způsobem:
- Do registru CRCINIRES se zapíše inicializační hodnota, typicky 0×000 nebo 0×ffff. Tím je vlastní výpočet zahájen.
- Data, pro něž se výpočet CRC provádí, se postupně zapisují do registruCRCDI nebo CRCDIB v závislosti na použitém protokolu.
- Po zápisu všech dat je možné z registru CRCINIRES popř. CRCINIRESR jednoduše přečíst výsledek a porovnat ho s předpokládanou hodnotou.
11. Mikrořadiče vybavené pamětí FRAM
Některé čipy MSP430 obsahují paměť FRAM, což je zkratka znamenající „Ferroelectric Random Access Memory“. Jedná se o nevolatilní paměť, tedy o paměť, která zachová svůj obsah i při vypnutí napájení. Oproti klasickým a dnes tak populárním pamětem FLASH (AND či OR) je však zápis do FRAM rychlejší a především je možné provést mnohem větší počet zápisových cyklů (až do teoretické hodnoty 1014). Navíc se při zápisu v porovnání s Flash vyžaduje nepoměrně menší množství energie. Z tohoto důvodu se může vyplatit použít na jednom čipu hned tři typy pamětí: statickou RAM pro běžné operace, Flash pro uložení programového kódu (ten se nemění příliš často, navíc se při programování může použít silnější zdroj a nikoli pouze baterie) a FRAM pro úschovu těch stavových informací, které se mohou často měnit a které je zapotřebí zachovat i při výpadku napájení (či při výměně baterie). Touto velmi zajímavou technologií se budeme zabývat v samostatném článku.
12. Odkazy na Internetu
- Ferroelectric RAM
https://en.wikipedia.org/wiki/Ferroelectric_RAM - Cyclic redundancy check
https://en.wikipedia.org/wiki/Cyclic_redundancy_check - Cyklický redundantní součet
https://cs.wikipedia.org/wiki/Cyklick%C3%BD_redundantn%C3%AD_sou%C4%8Det - MSP430 Programming Tutorial Pt/1
http://coder-tronics.com/msp430-programming-tutorial-pt1/ - MSP430 Programming Tutorial Pt/2
http://coder-tronics.com/msp430-programming-tutorial-pt2/ - MSP430 Timer PWM Tutorial
http://coder-tronics.com/msp430-timer-pwm-tutorial/ - Timers and Clocks and PWM! Oh My!
http://www.msp430launchpad.com/2010/07/timers-and-clocks-and-pwm-oh-my.html - MSP430FR413× Mixed-Signal Microcontrollers (Rev. B)
http://www.ti.com/product/msp430fr4133/datasheet - MSP430 Development Hardware
http://www.argenox.com/library/msp430/msp430-development-hardware-chapter-1/ - MSP430™ ultra-low-power Microcontrollers
http://www.ti.com/lsds/ti/microcontrollers16-bit32-bit/msp/overview.page?HQS=msp430 - An introduction to the TI MSP430 low-power microcontrollers
http://mspgcc.sourceforge.net/manual/c68.html - MSP430 LaunchPad Tutorials
http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_Tutorials - LaunchPad MSP430 Assembly Language Tutorial
http://robotics.hobbizine.com/asmlau.html - TI 16-bit and 32-bit microcontrollers
http://www.ti.com/lsds/ti/microcontrollers16-bit32-bit/overview.page - TI MSP430 (Wikipedia)
https://en.wikipedia.org/wiki/TI_MSP430 - Introduction to Getting Started with MSP430
http://www.argenox.com/library/msp430/msp430-preface-intro/ - H8/300H Series Software Manual
https://www.renesas.com/en-us/doc/products/mpumcu/001/rej09b0213_h8300h.pdf - Renesas H8/300H Series Manuals
https://www.manualslib.com/products/Renesas-H8–300h-Series-2312446.html - H8 Family
https://en.wikipedia.org/wiki/H8_Family - H8/300 and H8/300L
http://nah6.com/~itsme/download/ibutton/h8_8bit.pdf - H8 Family
https://www.renesas.com/en-us/products/microcontrollers-microprocessors/h8.html - (GCC) Status of Supported Architectures from Maintainers' Point of View
https://gcc.gnu.org/backends.html - (GCC) H8/300 Options
https://gcc.gnu.org/onlinedocs/gcc/H8_002f300-Options.html#H8_002f300-Options - GCC for SuperH,H8/300,AVR
http://mes.osdn.jp/h8/gcc.html - H8/3802, 38002S, 38004, 38104 (manuály k čipům)
https://www.renesas.com/en-us/document/hw-manual?hwLayerShowFlg=true&prdLayerId=184&layerName=H8%252F3802%252C%2B38002S%252C%2B38004%252C%2B38104&coronrService=document-prd-search&hwDocUrl=%2Fen-us%2Fdoc%2Fproducts%2Fmpumcu%2F001%2Frej09b0024_h83802.pdf&hashKey=c5e1fa0a18c01e6c789bc7b5c0184ed9 - Addressing mode (Wikipedia)
https://en.wikipedia.org/wiki/Addressing_mode - Renesas SH Instruction Set Summary
http://shared-ptr.com/sh_insns.html - SH-4 RISC Processor by HITACHI
http://www.cs.umd.edu/~meesh/cmsc411/website/projects/risc/risc.htm - SH-4 RISC Processor
http://www.cs.umd.edu/~meesh/cmsc411/website/projects/risc/sh-4.htm - SuperH RISC engine Family Features
https://www.renesas.com/en-us/products/microcontrollers-microprocessors/superh/superh-features.html - Orthogonal instruction set
https://en.wikipedia.org/wiki/Orthogonal_instruction_set - Status Register
https://en.wikipedia.org/wiki/Status_register - 6800 Instruction Set
http://www.electronics.dit.ie/staff/tscarff/6800/Instructions/instructions.htm - Assembly language today
http://beust.com/weblog/2004/06/23/assembly-language-today/ - Calling subroutines
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.kui0100a/armasm_cihcfigg.htm - Art of Assembly – Arithmetic Instructions
http://oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter6/CH06–2.html - X86 Assembly/Arithmetic
https://en.wikibooks.org/wiki/X86_Assembly/Arithmetic - ARM subroutines & program stack
http://www.toves.org/books/armsub/ - Programming from the Ground Up Book – Summary
http://savannah.nongnu.org/projects/pgubook/ - The 6502 overflow flag explained mathematically
http://www.righto.com/2012/12/the-6502-overflow-flag-explained.html - CRC16-CCITT
http://srecord.sourceforge.net/crc16-ccitt.html