Obsah
1. Šestnáctibitové mikrořadiče TI řady MSP430 – instrukční sada a periferní moduly
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
10. Ovládání vstupně-výstupních pinů
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ří:
- Vynásobení dvou celých čísel bez znaménka (unsigned).
- Vynásobení dvou celých čísel se znaménkem (signed).
- Operace typu MAC (multiply accumulate) s typem unsigned.
- Operace typu MAC (multiply accumulate) s typem signed.
Při násobení lze navíc kombinovat šířku operandů:
- 8×8 bitů
- 8×16 bitů
- 16×8 bitů
- 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:
- 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á).
- Význam paritního bitu: sudá parita, lichá parita, bez paritního bitu.
- Počet stop bitů: jeden či dva (opět platí, že některé jiné UARTy podporují i 1,5 stop bitu).
- 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, MOSI i SSEL, 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í).
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
- 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