Šestnáctibitové mikrořadiče TI řady MSP430 – dokončení popisu periferních modulů

15. 11. 2016
Doba čtení: 14 minut

Sdílet

Šestnáctibitové mikrořadiče MSP430 firmy Texas Instruments jsme si z pohledu programátora popsali v předchozích dvou článcích. Ještě nám zbývá se zmínit o dalších modulech, kterými jsou tyto čipy vybaveny.

Obsah

1. Šestnáctibitové mikrořadiče TI řady MSP430 – dokončení popisu periferních modulů

2. Zdroje hodinového signálu

3. Watchdog

4. Čítače a časovače

5. PWM – pulsně šířková modulace

6. Napěťový komparátor

7. Digitálně-analogový převodník

8. Analogově-digitální převodník

9. Ovládání LCD

10. Modul pro výpočet CRC

11. Mikrořadiče vybavené pamětí FRAM

12. Odkazy na Internetu

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:

bitcoin_skoleni

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:

  1. Do registru CRCINIRES se zapíše inicializační hodnota, typicky 0×000 nebo 0×ffff. Tím je vlastní výpočet zahájen.
  2. 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.
  3. 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

  1. Ferroelectric RAM
    https://en.wikipedia.org/wi­ki/Ferroelectric_RAM
  2. Cyclic redundancy check
    https://en.wikipedia.org/wi­ki/Cyclic_redundancy_check
  3. Cyklický redundantní součet
    https://cs.wikipedia.org/wi­ki/Cyklick%C3%BD_redundan­tn%C3%AD_sou%C4%8Det
  4. MSP430 Programming Tutorial Pt/1
    http://coder-tronics.com/msp430-programming-tutorial-pt1/
  5. MSP430 Programming Tutorial Pt/2
    http://coder-tronics.com/msp430-programming-tutorial-pt2/
  6. MSP430 Timer PWM Tutorial
    http://coder-tronics.com/msp430-timer-pwm-tutorial/
  7. Timers and Clocks and PWM! Oh My!
    http://www.msp430launchpad­.com/2010/07/timers-and-clocks-and-pwm-oh-my.html
  8. MSP430FR413× Mixed-Signal Microcontrollers (Rev. B)
    http://www.ti.com/product/msp430fr4133/da­tasheet
  9. MSP430 Development Hardware
    http://www.argenox.com/li­brary/msp430/msp430-development-hardware-chapter-1/
  10. MSP430™ ultra-low-power Microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/msp/overview.page?HQS=msp430
  11. An introduction to the TI MSP430 low-power microcontrollers
    http://mspgcc.sourceforge­.net/manual/c68.html
  12. MSP430 LaunchPad Tutorials
    http://processors.wiki.ti­.com/index.php/MSP430_Lau­nchPad_Tutorials
  13. LaunchPad MSP430 Assembly Language Tutorial
    http://robotics.hobbizine­.com/asmlau.html
  14. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  15. TI MSP430 (Wikipedia)
    https://en.wikipedia.org/wi­ki/TI_MSP430
  16. Introduction to Getting Started with MSP430
    http://www.argenox.com/li­brary/msp430/msp430-preface-intro/
  17. H8/300H Series Software Manual
    https://www.renesas.com/en-us/doc/products/mpumcu/001/rej09b0213_h8300h­.pdf
  18. Renesas H8/300H Series Manuals
    https://www.manualslib.com/pro­ducts/Renesas-H8–300h-Series-2312446.html
  19. H8 Family
    https://en.wikipedia.org/wi­ki/H8_Family
  20. H8/300 and H8/300L
    http://nah6.com/~itsme/dow­nload/ibutton/h8_8bit.pdf
  21. H8 Family
    https://www.renesas.com/en-us/products/microcontrollers-microprocessors/h8.html
  22. (GCC) Status of Supported Architectures from Maintainers' Point of View
    https://gcc.gnu.org/backends.html
  23. (GCC) H8/300 Options
    https://gcc.gnu.org/online­docs/gcc/H8_002f300-Options.html#H8_002f300-Options
  24. GCC for SuperH,H8/300,AVR
    http://mes.osdn.jp/h8/gcc.html
  25. H8/3802, 38002S, 38004, 38104 (manuály k čipům)
    https://www.renesas.com/en-us/document/hw-manual?hwLayerShowFlg=tru­e&prdLayerId=184&layerName=H8%252F3802%252C%2B38­002S%252C%2B38004%252C%2B38104&co­ronrService=document-prd-search&hwDocUrl=%2Fen-us%2Fdoc%2Fproducts%2Fmpum­cu%2F001%2Frej09b0024_h83802­.pdf&hashKey=c5e1fa0a18c01e6c789bc7­b5c0184ed9
  26. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  27. Renesas SH Instruction Set Summary
    http://shared-ptr.com/sh_insns.html
  28. SH-4 RISC Processor by HITACHI
    http://www.cs.umd.edu/~me­esh/cmsc411/website/projec­ts/risc/risc.htm
  29. SH-4 RISC Processor
    http://www.cs.umd.edu/~me­esh/cmsc411/website/projec­ts/risc/sh-4.htm
  30. SuperH RISC engine Family Features
    https://www.renesas.com/en-us/products/microcontrollers-microprocessors/superh/superh-features.html
  31. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  32. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  33. 6800 Instruction Set
    http://www.electronics.dit­.ie/staff/tscarff/6800/In­structions/instructions.htm
  34. Assembly language today
    http://beust.com/weblog/2004/06/23/as­sembly-language-today/
  35. Calling subroutines
    http://infocenter.arm.com/hel­p/index.jsp?topic=/com.ar­m.doc.kui0100a/armasm_cih­cfigg.htm
  36. Art of Assembly – Arithmetic Instructions
    http://oopweb.com/Assembly/Do­cuments/ArtOfAssembly/Volu­me/Chapter6/CH06–2.html
  37. X86 Assembly/Arithmetic
    https://en.wikibooks.org/wi­ki/X86_Assembly/Arithmetic
  38. ARM subroutines & program stack
    http://www.toves.org/books/armsub/
  39. Programming from the Ground Up Book – Summary
    http://savannah.nongnu.or­g/projects/pgubook/
  40. The 6502 overflow flag explained mathematically
    http://www.righto.com/2012/12/the-6502-overflow-flag-explained.html
  41. CRC16-CCITT
    http://srecord.sourceforge.net/crc16-ccitt.html

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.