Hlavní navigace

Šestnáctibitové mikrořadiče TI řady MSP430 – instrukční sada a periferní moduly

8. 11. 2016
Doba čtení: 19 minut

Sdílet

V popisu šestnáctibitových mikrořadičů MSP430 společnosti Texas Instruments dnes budeme pokračovat. Kromě podrobnějšího popisu instrukční sady se zmíníme i o periferních modulech, jimiž bývají tyto čipy vybaveny.

Obsah

1. Šestnáctibitové mikrořadiče TI řady MSP430 – instrukční sada a periferní moduly

2. Instrukce pro přesuny dat

3. Aritmetické instrukce

4. Logické instrukce

5. Manipulace s jednotlivými bity (maskování)

6. Bitové rotace a aritmetické posuny

7. Podmíněné a nepodmíněné skoky

8. Základní periferní moduly čipů řady MSP430

9. Hardwarová násobička

10. Ovládání vstupně-výstupních pinů

11. UART

12. SPI

13. I2C

14. Obsah další části seriálu

15. Odkazy na Internetu

1. Šestnáctibitové mikrořadiče TI řady MSP430 – instrukční sada a periferní moduly

V předchozí části seriálu o architekturách počítačů jsme se seznámili se základními vlastnostmi šestnáctibitových mikrořadičů MSP430 vyráběných společností Texas Instruments. Dnes si nejprve podrobněji popíšeme instrukční sadu těchto čipů a ve druhé části článku se budeme zabývat základními periferními moduly, kterými jsou tyto čipy většinou vybaveny.

Již minule jsme si řekli, že instrukční sada MSP430 je pojata velmi minimalisticky, protože obsahuje pouze 27 instrukcí. Ovšem díky tomu, že zdrojovým či cílovým operandem instrukcí může být i nějaký speciální registr (typicky stavový a řídicí registr) a taktéž díky čtyřem adresovacím režimům je možné, aby oněch „pouhých“ 27 instrukcí ve skutečnosti mohlo nahradit i velké množství dalších instrukcí, které zdánlivě v instrukční sadě chybí. V následující tabulce jsou vypsány všechny základní instrukce, v navazujících kapitolách se pak seznámíme i s různými aliasy, které jsou standardně podporovány assemblery a lze je tedy použít i v reálných programech.

Skupina Instrukce Celkem
Instrukce pro přesuny dat MOV, SWPB, PUSH 3
Aritmetické instrukce ADD, ADDC, SUB, SUBC, CMP, DADD, SXT 7
Logické instrukce AND, XOR 2
Manipulace s jednotlivými bity BIT, BIC, BIS 3
Bitové rotace a posuny RRC, RRA 2
Podmíněné a nepodmíněné skoky CALL, RETI, JEQ, JNE, JC, JNC, JN, JGE, JL, JMP 10
Celkem:   27

Na úvod si ještě připomeňme možnosti, které programátorům poskytují adresovací režimy:

Adresovací režimy pro zdrojový operand

Bity v instrukci Zápis v assembleru Název režimu Stručný popis
00 Rn Register direct registr Rn obsahuje zdrojový operand
01 offset(Rn) Register indexed zdrojový operand je uložen na adrese Rn+offset
10 @Rn Register indirect registr Rn je použit ve funkci ukazatele
11 @Rn+ Register indirect with post-increment stejné jako předchozí režim, ovšem registr je po provedení operace zvýšen o 1 či 2 podle typu operandů (bajt či slovo)

V případě, že je použit režim offset(Rn), je ihned za instrukčním slovem uložen šestnáctibitový offset. Instrukce tedy mohou mít proměnnou délku.

Adresovací režimy pro cílový operand

Bity v instrukci Zápis v assembleru Název režimu Stručný popis
0 Rn Register direct do registru Rn je zapsán výsledek operace
1 offset(Rn) Register indexed výsledek operace bude uložen na adresu Rn+offset

Opět platí, že pokud je použit režim offset(Rn), je ihned za instrukčním slovem uložen šestnáctibitový offset.

2. Instrukce pro přesuny dat

Skupina instrukcí určených pro přenosy dat je velmi malá, protože v ní nalezneme pouhé tři instrukce. První instrukce slouží pro přenos dat mezi registry či mezi různými adresami paměti (v závislosti na použitých adresovacích režimech). Druhá instrukce slouží k prohození vyššího a nižšího bajtu operandu (opět registru popř. adresy v operační paměti) a instrukce třetí uloží osmibitový či šestnáctibitový operand na zásobník adresovaný registrem R1:

Instrukce Operandy Šířka operandů Význam instrukce
MOV src, dest 8/16bit přesun bajtu či slova mezi registry a/nebo operační pamětí
SWPB dest 16bit prohození horního bajtu operandu s bajtem spodním
PUSH src 8/16bit uložení operandu na zásobník

Vhodnou kombinací adresovacích režimů popř. registrů se speciálním způsobem použití lze instrukcí MOV simulovat i další instrukce. Běžné assemblery rozpoznávají následující čtveřici instrukčních aliasů:

Alias Skutečná instrukce Význam instrukce
CLR dest MOV #0, dest vynulování operandu
NOP MOV #0, R3 vynulování nulového registru (tudíž se stav MCU nezmění)
POP dest MOV @SP+, dest obnovení operandu ze zásobníku
RET MOV @SP+, PC obnovení PC ze zásobníku

Poznámka: obsah registru R3 se při zápisu nemění – stále obsahuje nulu.

3. Aritmetické instrukce

Skupina aritmetických instrukcí je již rozsáhlejší, neboť zde nalezneme jak základní aritmetické instrukce pro součet a rozdíl (při výpočtu rozdílu se příznak carry chápe v negativním významu, tj. jako borrow), tak i instrukci pro součet hodnot uložených v BCD kódu. Poslední instrukce slouží pro znaménkové rozšíření bajtu na šestnáctibitové slovo (původní nejvyšší bit bajtu je rozšířen do horní poloviny šestnáctibitového slova):

Instrukce Operandy Šířka operandů Význam instrukce
ADD src, dest 8/16bit výpočet dest+src → dest, nastavení příznaků
ADDC src, dest 8/16bit výpočet dest+src+carry → dest, nastavení příznaků
SUB src, dest 8/16bit výpočet dest-src → dest, nastavení příznaků
SUBC src, dest 8/16bit výpočet dest-src-1+carry → dest, nastavení příznaků
       
CMP src, dest 8/16bit jako ADD, ovšem pouze dojde k nastavení operandů bez uložení výsledku
DADD src, dest 8/16bit součet, ovšem v kódu BCD
       
SXT dest 8bit→16bit znaménkové rozšíření bajtu na slovo

Assemblery dále rozeznávají několik dalších aliasů instrukcí, což jsou vlastně pseudoinstrukce, které se interně překládají do obecnějších instrukcí. U těchto instrukcí si povšimněte, že je použito generátorů konstant, o nichž jsme se zmínili minule:

Alias Skutečná instrukce Význam instrukce
ADC dest ADDC #0, dest přičtení příznaku carry k operandu
SBC dest SUBC #0, dest odečtení příznaku carry k operandu
DADC dest DADD #0, dest přičtení příznaku carry k operandu (decimální mód)
INC ADD #1, dest inkrementace operandu
INCD ADD #2, dest inkrementace operandu (o dvojku)
DEC SUB #1, dest dekrementace operandu
DECD SUB #2, dest dekrementace operandu (o dvojku)
TST CMP #0, dest porovnání operandu s nulou + nastavení příznaků

Poznámka: výpočty v kódu BCD (tj. dvě číslice v případě bajtu a čtyři číslice v případě 16bitového slova) se používají například ve chvíli, kdy má mikrořadič ovládat LCD atd., protože u těchto displejů se mnohdy používá právě BCD a nikoli binární kód.

4. Logické instrukce

Skupina logických instrukcí je (ovšem opět pouze zdánlivě) velmi malá, protože zde nalezneme pouhé dvě základní instrukce vypsané v následující tabulce:

Instrukce Operandy Šířka operandů Význam instrukce
AND src, dest 8/16bit logický součin bit po bitu + nastavení příznaků
XOR src, dest 8/16bit logická nonekvivalence bit po bitu + nastavení příznaků

Poznámka: zdánlivě chybějící instrukce OR má ve skutečnosti odlišné jméno, viz též následující kapitolu.

Jedním z možných aliasů je instrukce pro negaci operandu, ať již osmibitového či šestnáctibitového. Konstanta –1 (tedy 0×ffff) je vytvořena generátorem konstant:

Alias Skutečná instrukce Význam instrukce
INV.B dest XOR #0ff, dest negace operandu
INV dest XOR #0ffff, dest negace operandu

5. Manipulace s jednotlivými bity (maskování)

Skupina dalších tří instrukcí vlastně rozšiřuje možnosti logických instrukcí popsaných v předchozí kapitole. Instrukce BIT je obdobou instrukce AND, ovšem výsledek operace se nikam neuloží; dojde pouze k ovlivnění příznakových bitů. Instrukce BIC může sloužit k maskování (vynulování) vybraných bitů na základě zadané masky. Ta je nejprve znegována, takže jedničkové bity v masce skutečně slouží k určení toho, které bity mají být vynulovány. Opakem je instrukce BIS, která provádí prostý logický součet bit po bitu a tudíž tato instrukce nahrazuje běžné OR:

Instrukce Operandy Šířka operandů Význam instrukce
BIT src, dest 8/16bit logický součin bit po bitu bez uložení výsledku + nastavení příznaků
BIC src, dest 8/16bit logický součin dest := ~src & dest
BIS src, dest 8/16bit logický součet dest := src | dest

Opět se podívejme na (na první pohled možná poněkud skryté) možnosti těchto instrukcí, například při manipulaci s příznakovými bity uloženými v registru R2:

Alias Skutečná instrukce Význam instrukce
CLRC BIC #1, SR vynulování příznaku carry
CLRN BIC #4, SR vynulování příznaku negative
CLRZ BIC #2, SR vynulování příznaku zero
     
SETC BIS #1, SR nastavení příznaku carry
SETN BIS #4, SR nastavení příznaku negative
SETZ BIS #2, SR nastavení příznaku zero
     
DINT BIC #8, SR zákaz přerušení
EINT BIS #8, SR povolení přerušení

Můžeme zde vidět, že kombinace minimalistické instrukční sady, adresovacích režimů, speciálních registrů „vložených“ do sady běžných registrů a generátorů adres může být velmi elegantní.

6. Bitové rotace a aritmetické posuny

Instrukce pro bitové rotace a aritmetické posuny jsou ve skutečnosti pouze dvě. Jedná se o bitovou rotaci bajtu či slova doprava, a to přes příznak carry. To znamená, že rotace vypadá následovně:

+---+---+---+---+---+---+---+---+       +-------+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |--->---| Carry |
+---+---+---+---+---+---+---+---+       +-------+
  ^                                         |
  |                                         v
  +-----------------------------------------+

Aritmetický posun doprava zachovává znaménko a současně je nejnižší bit nasunut do příznaku carry:

    +---+---+---+---+---+---+---+---+       +-------+
+->-| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |--->---| Carry |
|   +---+---+---+---+---+---+---+---+       +-------+
|     |
|     v
+-----+

Obě zmíněné instrukce jsou vypsány v následující tabulce:

Instrukce Operandy Šířka operandů Význam instrukce
RRC 8/16bit bitová rotace doprava přes carry
RRA 8/16bit aritmetický posun doprava

Zajímavá a pro minimalistickou instrukční sadu jader MSP430 vlastně dosti typická je absence instrukcí pro posun a rotaci doleva. Tyto instrukce totiž mohou být snadno emulovány instrukcemi pro součet, takže assemblery sice rozeznávají instrukce RLC a RLA, ovšem tyto instrukce jsou při překladu nahrazeny instrukcemi ADDC a ADD:

Alias Skutečná instrukce Význam instrukce
RLC dest ADDC dest,dest rotace doleva přes příznak carry
RLA dest ADD dest dest aritmetický posun doleva

Poznámka: aliasy jsou platné jak pro osmibitové operandy, tak i pro operandy šestnáctibitové.

7. Podmíněné a nepodmíněné skoky

Zbylých deset instrukcí slouží pro provádění podmíněných a nepodmíněných skoků, popř. pro volání podprogramů (subrutin) a návratu z přerušení. Pro volání subrutin s uložením návratové adresy slouží instrukce CALL, která může použít jak adresu uloženou v registru, tak i v operační paměti (jsou povoleny všechny adresovací režimy). Speciální instrukce bez operandů nazvaná RETI pak slouží k obnovení registrů PC a SR, což v dalším taktu způsobí návrat z přerušovací rutiny (přerušení je většinou vyvoláno hardwarově):

Instrukce Operandy Šířka operandů Význam instrukce
CALL dest 16bit uložení PC + skok na adresu specifikovanou v operandu
RETI × × obnovení registrů PC + SR, návrat z přerušení

O podmíněných a nepodmíněných skocích jsme se již zmínili minule, takže si jen stručně připomeňme, že se u těchto instrukcí specifikuje testovaná podmínka (resp. přesněji řečeno sedm podmínek + jeden nepodmíněný skok, tak i desetibitový offset vůči registru PC. Offset je před použitím vynásoben dvěma, protože instrukce mohou začínat vždy pouze na sudé adrese. Rozsah offsetu je tedy PC-1022 až PC+1024:

# Instrukce Operandy Alias Význam instrukce
000 JEQ 10bit offset JZ skok při podmínce zero_flag==1
001 JNE 10bit offset JNZ skok při podmínce zero_flag==0
010 JC 10bit offset JHS skok při podmínce carry_flag==1
011 JNC 10bit offset JLO skok při podmínce carry_flag==0
100 JN 10bit offset × skok při podmínce negative_flag==1 (obrácená podmínka neexistuje)
101 JGE 10bit offset × skok při podmínce negative_flag ⊕ overflow_flag==0
110 JL 10bit offset × skok při podmínce negative_flag ⊕ overflow_flag==1
111 JMP 10bit offset × nepodmíněný skok

Poslední instrukční alias je vlastně skutečným absolutním skokem na zadanou adresu (kdežto JMP je v kontextu tohoto mikrořadiče skok relativní):

Alias Skutečná instrukce Význam instrukce
BR dest MOV dest, PC skok na absolutní adresu

8. Základní periferní moduly čipů řady MSP430

Čipy řady MSP430 jsou v současnosti používány v těch zařízeních, u nichž je kritickým faktorem spotřeba popř. velikost čipu. I z tohoto důvodu v této řadě nalezneme velké množství čipů (cca 450) s různou konfigurací, takže si konstruktéři zařízení mohou vybrat ten mikrořadič, který nejlépe odpovídá jejich potřebám, tj. obsahuje jen ty moduly, které jsou skutečně zapotřebí. Jeden z nejméně výkonných mikrořadičů MSP430 má při taktovací frekvenci 16 MHz (dříve 4MHz) 128 bajtů RAM, 2kB programovatelné ROM, 10 GPIO pinů, jeden časovač, jednu sběrnici I2C a SPI a watchdog. Na druhé straně výkonnostního spektra nalezneme čipy s frekvencí 25 MHz, 32 kB RAM a 90 GPIO piny (typická mez je však 48 GPIO organizovaných do šesti portů). Z těchto důvodů plyne, že dále uvedený popis periferních modulů není platný pro všechny existující mikrořadiče řady MSP430, nicméně většinu modulů (typicky sériové sběrnice, časovače a watchdog) nalezneme u většiny čipů.

9. Hardwarová násobička

Při popisu instrukční sady jste si mohli povšimnout, že sada aritmetických instrukcí vlastně ve skutečnosti obsahuje pouze instrukce pro součet a rozdíl, nikoli již například instrukce sloužící pro vynásobení operandů. To je pravda, protože násobička je na jádrech MSP430 jedním z přídavných hardwarových modulů a ovládá se přes SFR (speciální funkční registry) a nikoli přímo programovým kódem. Toto řešení sice může vypadat minimálně zvláštně, ve skutečnosti však MSP430 nejsou jediná procesorová jádra, která s tímto řešením přišla; ostatně násobička se ovládá speciálním způsobem i u původních RISCových mikroprocesorů MIPS apod.

Násobička se skutečně chová jako samostatný modul, což znamená, že procesor může nezávisle na činnosti násobičky provádět jiné instrukce, číst výsledky násobení atd. K násobičce jsou přiřazeny čtyři šestnáctibitové registry pro vstup operandů a čtyři další registry (výsledek operace, rozšíření znaménka atd.)

Mezi podporované operace patří:

  1. Vynásobení dvou celých čísel bez znaménka (unsigned).
  2. Vynásobení dvou celých čísel se znaménkem (signed).
  3. Operace typu MAC (multiply accumulate) s typem unsigned.
  4. Operace typu MAC (multiply accumulate) s typem signed.

Při násobení lze navíc kombinovat šířku operandů:

  1. 8×8 bitů
  2. 8×16 bitů
  3. 16×8 bitů
  4. 16×16 bitů (výsledek násobení či MAC je 32bitový)

10. Ovládání vstupně-výstupních pinů

Podobně, jako prakticky všechny ostatní mikrořadiče, obsahují i čipy s jádry MSP430 podporu pro programové ovládání vstupně-výstupních pinů (GPIO). Vstupně-výstupní piny jsou organizovány takovým způsobem, že každá osmice tvoří jeden I/O port, přičemž čipy MSP430 mohou podle své konfigurace obsahovat jeden až šest portů označovaných jmény P1 až P6 (některé porty navíc nemusí být úplné, tj. nemusí pro ně existovat všech osm pinů). Porty mají společné vlastnosti, některé vlastnosti jsou však unikátní pro první a druhý port:

  • Každý I/O pin portu je konfigurovatelný nezávisle na ostatních pinech.
  • Každý pin může být přepnutý do výstupního režimu či do režimu vstupního.
  • Navíc je možné u některých pinů vybrat jejich funkci, protože u mnoha mikrořadičů je funkce pinu sdílena více moduly (GPIO+IIC, GPIO+DAC+PWM atd.)
  • U portů P1 a P2 je možné zvolit, za jakých okolností dojde k přerušení. Například je možné reagovat na úroveň signálu, hranu signálu atd. Přerušení pro port P1 je odlišné od přerušení pro port P2.

11. UART

Na čipech MSP430 můžeme najít i jedno či dvě rozhraní USART (Universal Synchronous/Asynchronous Receive/Transmit), které může pracovat buď v synchronním režimu či v režimu asynchronním UART (Universal Asynchronous Receive/Transmit). Při asynchronním přenosu dat se používá známý protokol bez použití samostatného hodinového signálu, v němž přenos začíná start bitem, pokračuje datovými bity, následuje volitelný paritní bit a celý přenos končí stop bitem či stop bity. Přitom je možné pomocí konfiguračních voleb zapisovaných do SFR nastavit následující parametry přenosu:

  1. Počet datových bitů: 7 nebo 8 (některé jiné UARTy podporují i 5 bitů, tento režim se však příliš často nepoužívá).
  2. Význam paritního bitu: sudá parita, lichá parita, bez paritního bitu.
  3. Počet stop bitů: jeden či dva (opět platí, že některé jiné UARTy podporují i 1,5 stop bitu).
  4. Rychlost přenosu (baud rate), včetně typických rychlostí 1200, 2400, 4800, 9600, 38400 i 115200 baudů (ve skutečnosti není rychlost vypočtena zcela přesně, záleží na konkrétní volbě frekvence hodinového signálu, z něhož se dělením získává rychlost přenosu).

Poznámka: na rozdíl od známého sériového portu RS-232C se na fyzické úrovni používají logické úrovně signálu odvozené od napájecího napětí. Naproti tomu se u RS-232C setkáme s napětími až ±15V (typicky ±3 až ±12).

Obrázek 1: V asynchronním režimu je nutné každý přijímaný bit několikrát samplovat, aby mohlo dojít k synchronizaci hodin. Ve spodní části obrázku je ukázáno, co se stane, když se hodiny vysílače a přijímače rozsynchronizují (v režimu UART se hodinový signál nepřenáší).

12. SPI

Sběrnice SPI (Serial Peripheral Interface) představuje jednu z forem sériových externích sběrnic sloužících pro vzájemné propojení dvou či více komunikujících uzlů, přičemž jeden uzel obvykle vystupuje v roli takzvaného řadiče sběrnice (master), ostatní uzly pracují v režimu slave. Uzel, který pracuje jako master, obsahuje generátor hodinového signálu, který je rozveden do všech ostatních uzlů, čímž je umožněn zcela synchronní (navíc ještě obousměrný) přenos dat. Hodinový signál je rozváděn vodičem označovaným symbolem SCK. Kromě vodiče s hodinovým signálem jsou uzly propojeny dvojicí vodičů označovaných většinou symboly MISO (Master In, Slave Out) a MOSI (Master Out, Slave In), pomocí nichž se obousměrně (full duplex) přenáší data. Posledním signálem, který se u této sběrnice používá, je signál SSEL (Slave Select), jenž slouží – jak již jeho název napovídá – k výběru některého uzlu pracujícího v režimu slave. Všechny čtyři signály – SCK, MISO, MOSISSEL, pro svoji funkci vyžadují pouze jednosměrné porty, což přispívá k jednoduché a především levné implementaci této sběrnice; proto ji najdeme u většiny mikrořadičů.

Obrázek 2: Převaděč mezi universální sériovou sběrnicí (USB) a sběrnicí SPI. Pomocí tohoto či podobného přípravku je možné i z běžného osobního počítače ovládat mnoho existujících typů zařízení určených pro sběrnici SPI.

U čipů MSP430 se používá nepatrně odlišné označení signálů – SIMO, SOMI, UCLK a STE, ovšem jejich význam je shodný se signály zmíněnými v předchozím odstavci. Mikrořadiče MSP430 mohou být nakonfigurovány buď do režimu master (SIMO je výstupním signálem, SOMI signálem vstupním, UCLK je výstupním signálem) nebo do režimu slave (SIMO je vstupním signálem, SOMI je přepnut na výstup, UCLK vstup od masteru a signálem STE se vybírá konkrétní slave). Konfigurace SPI se na MSP430 v mnoha ohledech podobají ostatním mikrořadičům – lze zvolit počet datových bitů (sedm či osm), režim master či slave, polaritu hodinového signálu a samozřejmě i frekvenci hodinového signálu (v režimu master). Jak vysílací, tak i přijímací část mají své vlastní buffery, takže je možné SPI celkem bez problémů použít i ve chvíli, kdy je CPU uspán.

Obrázek 3: Textový LCD ovládaný přes sběrnici SPI. Textové LCD tohoto typu obsahují RAM paměť, ve které je uchováván zobrazený text a některou z forem pamětí ROM (EPROM, EEROM, Flash) pro uložení znakové sady, tj. bitových map jednotlivých zobrazitelných znaků. Komunikační rozhraní bývá různé – může se jednat o některou z forem paralelního portu, sériového portu (UART) nebo právě sběrnici SPI.

13. I2C

Další sběrnicí, kterou čipy MSP430 (a samozřejmě i další mikrořadiče) podporují, je sběrnice označovaná poněkud neobvykle symbolem I2C, což je zkratka z celého názvu Inter-Integrated Circuit. V určitých ohledech se jedná o sběrnici podobnou SPI (existence hodinového signálu, jediný uzel typu master), ovšem některé vlastnosti těchto sběrnic jsou odlišné. Zatímco u sběrnice SPI byl umožněn obousměrný přenos dat díky použití dvojice vodičů MISO a MOSI, je sběrnice I2C vybavena „pouze“ jedním datovým vodičem SDA, z čehož vyplývá, že se data přenáší poloduplexně. Také to znamená poněkud složitější interní strukturu všech připojených zařízení, protože příslušné piny musí být možné přepínat ze vstupního režimu na režim výstupní.

Obrázek 4: Zapojení uzlů na sběrnici I2C.

Dalším rozdílem je, že zde není použit výběr zařízení typu slave pomocí zvláštních signálů, protože každému uzlu je přiřazena jednoznačná adresa – kromě elektrických charakteristik je totiž přesně stanoven i komunikační protokol, což je další rozdíl oproti výše popsané sběrnici SPI. Obecně je možné říci, že I2C je sice poněkud složitější, ale zato flexibilnější sběrnice, která se velmi často používá i pro komunikaci na delší vzdálenosti (řádově metry, viz například DDC u monitorů), než tomu je u sběrnice SPI.

Obrázek 5: Komunikace probíhající na sběrnici I2C, při níž je pomocí sedmi bitů vybráno jedno ze zařízení, které pracuje v režimu slave. Po sedmi bitech adresy je navíc přenesen jeden bit, kterým je určeno, zda bude zařízení typu „master“ data posílat či naopak přijímat. Každá osmice bitů (bajt, znak) je potvrzována, přenesení osmi bitů je tedy provedeno za devět hodinových cyklů (devátý cyklus slouží k přenesení potvrzovacího bitu – ACK).

Čipy MSP430 podporují jak použití sedmibitové adresy zařízení, tak i desetibitové adresy (obě možnosti se stále používají). Rychlost přenosu je možné zvolit, podporována je jak standardní rychlost 100 kb/sec, tak i vyšší rychlosti až do 400 kb/sec. Podobně jako u SPI, i u sběrnice I2C jsou použity buffery připojené na přijímací a vysílací posuvné registry. Celý přenos je možné v případě potřeby řídit pouze z přerušovací rutiny (všechny události mohou vygenerovat přerušení).

UX DAy - tip 2

Obrázek 6: Průběh komunikace při adresování uzlů pomocí desetibitové adresy (příjem dat zařízením typu slave).

14. Obsah další části seriálu

V navazující části tohoto seriálu dokončíme popis čipů MSP430. Nejprve si popíšeme další periferní moduly, mezi něž patří A/D a D/A převodníky i PWM a posléze se seznámíme s několika konkrétními čipy, od minimalisticky pojatých integrovaných obvodů s pouhými několika piny až po relativně výkonné mikrořadiče. Zmíníme se i o velmi zajímavé technologii FRAM.

15. Odkazy na Internetu

  1. MSP430 Development Hardware
    http://www.argenox.com/li­brary/msp430/msp430-development-hardware-chapter-1/
  2. MSP430™ ultra-low-power Microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/msp/overview.page?HQS=msp430
  3. An introduction to the TI MSP430 low-power microcontrollers
    http://mspgcc.sourceforge­.net/manual/c68.html
  4. MSP430 LaunchPad Tutorials
    http://processors.wiki.ti­.com/index.php/MSP430_Lau­nchPad_Tutorials
  5. LaunchPad MSP430 Assembly Language Tutorial
    http://robotics.hobbizine­.com/asmlau.html
  6. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  7. TI MSP430 (Wikipedia)
    https://en.wikipedia.org/wi­ki/TI_MSP430
  8. Introduction to Getting Started with MSP430
    http://www.argenox.com/li­brary/msp430/msp430-preface-intro/
  9. H8/300H Series Software Manual
    https://www.renesas.com/en-us/doc/products/mpumcu/001/rej09b0213_h8300h­.pdf
  10. Renesas H8/300H Series Manuals
    https://www.manualslib.com/pro­ducts/Renesas-H8–300h-Series-2312446.html
  11. H8 Family
    https://en.wikipedia.org/wi­ki/H8_Family
  12. H8/300 and H8/300L
    http://nah6.com/~itsme/dow­nload/ibutton/h8_8bit.pdf
  13. H8 Family
    https://www.renesas.com/en-us/products/microcontrollers-microprocessors/h8.html
  14. (GCC) Status of Supported Architectures from Maintainers' Point of View
    https://gcc.gnu.org/backends.html
  15. (GCC) H8/300 Options
    https://gcc.gnu.org/online­docs/gcc/H8_002f300-Options.html#H8_002f300-Options
  16. GCC for SuperH,H8/300,AVR
    http://mes.osdn.jp/h8/gcc.html
  17. 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
  18. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  19. Renesas SH Instruction Set Summary
    http://shared-ptr.com/sh_insns.html
  20. SH-4 RISC Processor by HITACHI
    http://www.cs.umd.edu/~me­esh/cmsc411/website/projec­ts/risc/risc.htm
  21. SH-4 RISC Processor
    http://www.cs.umd.edu/~me­esh/cmsc411/website/projec­ts/risc/sh-4.htm
  22. SuperH RISC engine Family Features
    https://www.renesas.com/en-us/products/microcontrollers-microprocessors/superh/superh-features.html
  23. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  24. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  25. 6800 Instruction Set
    http://www.electronics.dit­.ie/staff/tscarff/6800/In­structions/instructions.htm
  26. Assembly language today
    http://beust.com/weblog/2004/06/23/as­sembly-language-today/
  27. Calling subroutines
    http://infocenter.arm.com/hel­p/index.jsp?topic=/com.ar­m.doc.kui0100a/armasm_cih­cfigg.htm
  28. Art of Assembly – Arithmetic Instructions
    http://oopweb.com/Assembly/Do­cuments/ArtOfAssembly/Volu­me/Chapter6/CH06–2.html
  29. X86 Assembly/Arithmetic
    https://en.wikibooks.org/wi­ki/X86_Assembly/Arithmetic
  30. ARM subroutines & program stack
    http://www.toves.org/books/armsub/
  31. Programming from the Ground Up Book – Summary
    http://savannah.nongnu.or­g/projects/pgubook/
  32. The 6502 overflow flag explained mathematically
    http://www.righto.com/2012/12/the-6502-overflow-flag-explained.html

Byl pro vás článek přínosný?

Autor článku

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