Obsah
1. Čipy PIC24 a dsPIC: na rozhraní mezi mikrořadiči a DSP
8. Šestnáctibitové mikrořadiče PIC24 a dsPIC
13. Instrukční soubor mikrořadičů PIC24 a dsPIC
1. Čipy PIC24 a dsPIC: na rozhraní mezi mikrořadiči a DSP
S mikrořadiči řady PIC vyráběnými společností Microchip Technology jsme se již v tomto seriálu několikrát setkali, což samozřejmě není náhoda, protože tato firma v současnosti nabízí několik set (!) různých typů těchto čipů, které se od sebe odlišují jak počtem využitelných vstupně/výstupních pinů (GPIO), tak i kapacitou interní paměti dat (RAM) a taktéž interní paměti programu (ROM), počtem a typem modulů, které jsou na mikrořadiči implementovány (sběrnice, porty atd.), rozsahem povoleného napájecího napětí, rozsahem frekvencí hodinového signálu, kterým se čip řídí, přítomností hardwarové „DSP“ násobičky atd. Pod označením PIC se dnes skrývá celá řada čipů; od jednoduchých osmibitových mikrořadičů PIC10 a PIC12 („programovatelné součástky“), přes populární řady PIC16 a PIC18 až po šestnáctibitové čipy PIC24 a dsPIC, kterými se budeme podrobněji zabývat ve druhé části dnešního článku a v navazující části seriálu.
Obrázek 1: Pro vývoj aplikací určených pro osmibitové mikrořadiče PIC je možné použít i mnoho open source nástrojů. Na tomto screenshotu jsou zobrazena některá okna nástroje nazvaného gpsim (simulátoru mikrořadičů), který lze provozovat jak na Linuxu, tak i na systémech MS Windows. Tento nástroj v současné verzi simuluje mikrořadiče řady PIC10, PIC12, PIC16 i PIC18, tedy celou dnes dostupnou sérii osmibitových mikrořadičů.
2. Historie mikrořadičů PIC
Mikrořadiče PIC mají za sebou velmi dlouhý a v několika ohledech i zajímavý vývoj. Ten vlastně začal již v polovině sedmdesátých let minulého století, kdy vznikl mikrořadič nazvaný Signetics 8×300. Jednalo se o jeden z prvních mikrořadičů založených na Harvardské architektuře (tj. s oddělenou pamětí pro data a pamětí pro program), který ještě byl vytvořený na bázi bipolárních tranzistorů, podobně jako například logické obvody řady TTL. Tento mikrořadič ovšem postrádal některé důležité vlastnosti používané v praxi; například neměl zásobník, indexové registry a dokonce ani možnost zpracovávat přerušení (což souviselo, i když jen okrajově, s neexistencí zásobníku). Taktéž adresování paměti programu bylo poněkud složité – provádělo se přes osmibitový registr nazvaný IVB, navíc aritmeticko-logická jednotka dokázala provádět pouze instrukce MOV, ADD, AND, XOR a bitové posuny. Z výše uvedených důvodů se mikrořadič Signetics 8×300 v praxi příliš nerozšířil.
Obrázek 2: Vývojový kit BASIC Stamp ve verzi vybavené rozhraním universální sériové sběrnice (USB). Jedná se o jednodeskový mikropočítač vybavený mikrořadičem PIC a pamětí ROM s interpretrem programovacího jazyka BASIC. Po tomto kitu se začal prodávat kit nazvaný Spin Stamp vybavený pro změnu interpretrem programovacího jazyka SPIN (výrobcem je ve všech případech společnost Parallax).
V sedmdesátých letech minulého století ovšem vznikl i šestnáctibitový mikroprocesor s označením CP1600 firmy General Instruments (s touto firmou jsme se již ostatně v tomto seriálu setkali, protože stojí i za vznikem slavného zvukového čipu AY-3–8910, lidově „áýčka“). Aby se vylepšila výkonnost tohoto nepříliš úspěšného mikroprocesoru při provádění různých vstupně/výstupních operací, byl vytvořen pomocný čip nesoucí označení PIC1640, kde první tři písmena „PIC“ znamenala „Programmable Interface Controller“ a číslo 16 začalo označovat řadu čipů s podobnou (většinou zcela totožnou) instrukční sadou.
Obrázek 3: Vývojový kit Amicus s mikrořadičem PIC. Tento vývojový kit byl inspirován kitem Arduino určeným pro mikrořadiče Atmel AVR, i když ani zdaleka není tak populární.
Úkolem tohoto čipu byla skutečně komunikace s periferními zařízeními, kterou tak nemusel obstarávat mikroprocesor CP1600. Původní PIC1640 a na něj navazující čip PIC1650 obsahovaly interní paměť ROM programovanou pomocí poslední masky přímo při výrobě čipu (což je podobné prakticky všem čtyřbitovým mikrořadičům, jimž jsme se věnovali v předchozích pěti částech tohoto seriálu). Ovšem většího rozšíření se mikrořadiče PIC dočkaly až po oddělení divize mikroelektroniky z firmy General Instruments do nově vzniklé firmy s názvem Microchip Technology (tato firma existuje dodnes).
Obrázek 4: Hlavní okno simulátoru mikrořadičů PIC – aplikace gpsim.
Právě v této nové firmě došlo k zásadní proměně mikrořadiče – náhradě neměnné ROM za paměť EPROM (mazatelné ultrafialovým zářením přes okénko na čipu) a posléze i náhradě EPROM za EEPROM (elektronicky mazatelnou paměť) a Flash (vylepšenou EEPROM s větším množstvím zápisů a rychlejším blokovým algoritmem přepisu dat). Mimochodem – první mikrořadič PIC s pamětí typu EEPROM nesoucí jméno PIC 16C84 se díky svému významu pro další vývoj celého odvětví dostal i mezi 25 čipů, které (podle autora tohoto žebříčku) nejvíce změnily svět: „25 Microchips That Shoot The World“ (varianta PIC 16F84 již obsahovala Flash). PIC 16C84 je zde zmíněn například vedle známého časovače 555, osmibitového mikroprocesoru MOS 6502, 8/16bitového mikroprocesoru Intel 8088 (právě ten stál u vzniku platformy IBM PC, nikoli jeho výkonnější bráška Intel 8086) či 16/32bitového mikroprocesoru Motorola 68000 (majitelům osobních mikropočítačů značek Atari ST, Amiga či Macintosh 68k zajisté netřeba zdlouhavě představovat).
Obrázek 5: Editor paměti programu v simulátoru gpsim.
V současnosti se čipy PIC vyrábí právě ve firmě Microchip, ovšem někteří další výrobci nabízí čipy, které jsou z hlediska instrukční sady s PICy částečně či úplně kompatibilní. Mezi tyto výrobce klonů patří Parallax, Hycom, Holtek či ELAN.
3. Rodiny mikrořadičů PIC
Mikrořadiče označované jménem PIC jsou rozděleny do takzvaných rodin. Čipy z jednotlivých rodin se od sebe odlišují především počtem vstupně/výstupních portů (a tím pádem i pinů), počtem universálních registrů (neboli kapacitou paměti údajů), kapacitou paměti programu (EPROM, Flash) a v neposlední řadě také instrukční sadou – nejjednodušší mikrořadiče, konkrétně se jedná o mikrořadiče spadající do rodiny PIC10, mají ve své instrukční sadě pouze 33 instrukcí, pouzdra těchto čipů mají v extrémním případě jen šest vývodů (což je například méně než počet vývodů známého obvodu 555), kapacita paměti programu dosahuje 256 nebo 512 bajtů a počet universálních registrů je roven 16 nebo 24 (takže kapacita interní RAM je 16 či 24 bajtů). Naproti tomu některé mikrořadiče z rodiny PIC18 jsou umístěny v pouzdře s 28 až 40 piny, jejich instrukční sada má 75 instrukcí, paměť pro uložení programu může mít kapacitu 8 kB a počet universálních registrů dosahuje typicky 256 bajtů.
Obrázek 6: Source browser – součást nástroje gpsim zmíněného v úvodní kapitole.
Samostatnou skupinu tvoří mikrořadiče PIC24 a dsPIC, které jsou šestnáctibitové a jimiž se budeme podrobněji zabývat níže. Další samostatnou skupinou jsou mikrořadiče PIC32MX, PIC32MZ a PIC32MM založené na 32bitovém RISCovém jádru MIPS, tedy na druhé straně výkonnostního spektra v porovnání s řadami PIC1×.
Základní rozdělení osmibitových mikrořadičů PIC je znázorněno na následujícím obrázku. Povšimněte si, že jedním z hlavních ukazatelů je nejenom počet pinů (který omezuje i počet modulů, například přítomnost sériového portu, A/D převodníku či PWM) ale i bitová šířka instrukcí, protože u čipů s větším počtem universálních registrů (RAM) i větší kapacitou paměti programu (ROM) je nutné v instrukčním slově rezervovat větší množství bitů pro uložení indexu universálního registru nebo adresy, na které se má provést skok:
Obrázek 7: Základní rozdělení osmibitových mikrořadičů PIC. Skupiny se od sebe odlišují podle toho, jak široká jsou instrukční slova (z toho jsou odvozeny další vlastnosti, například velikost adresovatelné paměti atd.). Zdroj: firma Microchip Technology.
Pro lepší porovnání možností mikrořadičů z jednotlivých rodin jsou v následující tabulce vypsány parametry některých vybraných mikrořadičů PIC:
Mikrořadič |
Frekvence (MHz/MIPS) |
Pinů |
RAM (bajtů) |
ROM (slov/kB) |
Instrukční sada (bitů) |
Počet instrukcí |
---|---|---|---|---|---|---|
PIC10F200 | 4 | 6–8 | 16 | 256 | 12 | 33 |
PIC10F206 | 4 | 6–8 | 16 | 512 | 12 | 33 |
PIC12F683 | 8 | 14 | 128 | 2048 | 14 | 35 |
PIC16F87 | až 20 | 18 | 368 | 4096 | 14 | 35 |
PIC18F1220 | až 40 | 18–28 | 256 | 2048 | 16 | 78 |
PIC18F1320 | až 40 | 18–28 | 256 | 4096 | 16 | 78 |
PIC24F04KA200 | 16 | 14 | 512 | 4096 | 24 | 94 |
PIC24FJ128GA010 | 16 | 100 | 8192 | 128kB | 24 | 94 |
PIC24FJ128GA110 | 16 | 100 | 16384 | 256kB | 24 | 94 |
dsPIC30F1010 | 30 | 28 | 256 | 6kB | 24 | 110 |
dsPIC30F6015 | 30 | 64 | 8192 | 144kB | 24 | 110 |
dsPIC33FJ256GP510A | 40 | 100 | 16384 | 256kB | 24 | 110 |
Poznámka: instrukční sady pro řady PIC18, PIC24 a dsPIC jsou navrženy takovým způsobem, aby se zefektivnil překlad z céčka, i když se nejedná o klasické RISCy. Zde se již příliš nepočítá s použitím assembleru, samozřejmě kromě specifických subrutin. Naproti tomu u řad PIC10, PIC12 a částečně i PIC16 se většinou programy zapisovaly v assembleru – ostatně jednalo se většinou o programy dlouhé několik desítek maximálně stovek instrukcí.
4. Řada PIC10
Mikrořadiče řady PIC10 (a PIC12) patří mezi nejmenší čipy PIC vůbec, a to jak z hlediska počtu pinů, tak i dostupné kapacity datové paměti RAM či programové paměti ROM. Instrukce mají konstantní šířku dvanáct bitů, což omezuje zejména možnosti adresování (jak operandů v rámci RAM, tak i cíle skoku v EPROM či Flash). Příkladem může být čip PIC10F200 nabízený v pouzdru s pouhými šesti či osmi piny – ostatně i z tohoto důvodu se těmto mikrořadičům přezdívá „programovatelné součástky“. Maximální hodinová frekvence tohoto čipu je 4 MHz (díky internímu oscilátoru není nutné připojovat externí hodinový signál), kapacita programové paměti 256 instrukcí (po dvanácti bitech) a kapacita datové paměti pouze šestnáct bajtů. Kromě vlastního CPU je na čipu umístěn i konfigurovatelný osmibitový čítač a v případě nepatrně upraveného obvodu PIC10F204 zde najdeme i jeden komparátor. Výhodou je i automatický reset (ušetření dalšího pinu).
Obrázek 8: Mikrořadič PIC10F2×x umístěný v pouzdru SOT-23. Celkové rozměry tohoto čipu jsou minimální: šířka 2,2mm, délka 2,7mm a výška 0,9mm.
(zdroj: PIC10F200/202/204/206 Data Sheet)
I tyto minimalistické mikrořadiče podporují programování pomocí protokolu In-Circuit Serial Programming (ICSP) vyvinutého samotnou firmou Microchip Technology. Tento protokol, jak již ostatně jeho název napovídá, umožňuje zápis dat do paměti programu pomocí třívodičového sériového kanálu – jedním vodičem se přenáší data a řídicí příkazy, druhý vodič slouží pro přenos hodinového signálu a třetí vodič je společná (datová) zem pro vysílač (například osobní počítač) i přijímač (kterým je mikrořadič). ICSP je patrná i na schématu zapojení pinů mikrořadiče PIC10F200, které je zobrazeno na následujícím obrázku:
Obrázek 9: Zapojení pinů mikrořadičů PIC10F200 a PIC10F202 při použití pouzdra typu SOT-23. Jak je z obrázku patrné, mají některé piny přiřazeno více funkcí, které lze samozřejmě uživatelsky konfigurovat.
(zdroj: PIC10F200/202/204/206 Data Sheet)
5. Řada PIC12
Další rodinou mikrořadičů PIC jsou čipy řady PIC12, které jsou již v mnoha ohledech lépe vybavené než mikrořadiče PIC10, a to při zachování příznivé ceny a v mnoha případech i zachování malého pouzdra, v němž jsou tyto mikrořadiče umístěny (víme již, že s rostoucím počtem pinů roste i cena, spotřeba a poruchovost celého zařízení, a to sice ne výrazně, ale při sériové výrobě se již může jednat o položku ovlivňující například koncovou cenu zařízení).
Obrázek 10: Starší mikrořadiče PIC s paměťmi typu EPROM mazatelnými ultrafialovým zářením (právě z tohoto důvodu jsou na čipech okénka propouštějící UV záření na buňky paměti EPROM).
Zástupcem rodiny PIC12 je mikrořadič PIC12F675, který prakticky ve všech ohledech překonává čipy PIC10F2×x popsané výše. Tento mikrořadič obsahuje interní paměť programu schopnou uložit až 1024 instrukcí. Paměť dat je rozšířena na 64 bajtů, k nimž je navíc přidáno 128 bajtů paměti EEPROM, jejíž buňky by měly umožnit až jeden milion přepisů (to například znamená, že pokud se výsledek nějakého měření zapíše do stejné buňky EEPROM jednou za čtvrt hodiny, překračuje životnost této paměti 28 let, tj. mnohonásobně plánovanou životnost celého zařízení). Tato paměť je samozřejmě nevolatilní, tudíž „přežije“ i výpadky napájení.
I další technické parametry tohoto mikrořadiče jsou oproti řadě PIC10 vylepšeny – například počet vstupně/výstupních pinů se zvýšil na šest (celkem čip používá 8 pinů), časovač byl rozšířen na šestnáct bitů a navíc byl přidán i čtyřkanálový analogově-digitální převodník, což mj. znamená, že čtyři vstupní piny mohou být využity pro čtení analogových údajů, což je na osmipinový čip poměrně zajímavá hodnota (převodník je jen jeden, ovšem je vybaven multiplexorem). Taktéž výpočetní rychlost se zvýšila, a to pětkrát – ovšem za předpokladu, že je použit externí oscilátor.
6. Řada PIC16
Řada PIC16, kam zařazujeme mj. i stále populární čipy PIC16F87 a PIC16F88, je sice uvedena až třetí v pořadí, ovšem ve skutečnosti právě tato řada stála za úspěchem celé série PIC. Čipy řady PIC16 používají instrukční sadu s instrukčními slovy širokými čtrnáct bitů (to mj. znamená, že se změnila i organizace paměti programu, resp. šířka ukládaných slov). Rozšíření každé instrukce o dva bity v porovnání s PIC12 se na návrhu instrukční sady projevilo třemi způsoby: aritmetické a logické instrukce mohou přímo adresovat až 128 bajtů operační paměti a registrů speciálních funkcí, skokové instrukce mohou obsahovat jedenáctibitovou cílovou adresu (0 až 2047) a současně se mohl zvýšit i celkový počet instrukcí. Přibyly například instrukce pro přičtení či odečtení osmibitové konstanty od obsahu akumulátoru W.
Obrázek 11: Mezi jedny z nejpoužívanějších mikrořadičů PIC patří řada PIC16F87, která konstruktérům nabízí příznivý poměr mezi cenou a velikostí čipu na jedné straně a jeho možnostmi na straně druhé. Písmeno „F“ v označení čipu naznačuje, že je tento mikrořadič vybaven Flash pamětí, podobně jako jeho slavný předchůdce PIC16F84.
Obecně je možné říci, že mikrořadiče řady PIC16 bývají po všech stránkách výkonnější v porovnání jak s PIC10, tak i s PIC12. Kapacita programové paměti se již počítá v jednotkách či desítkách kilobajtů (ovšem kapacity jsou stále na první pohled „divné“ kvůli 14bitovým slovům), typická kapacita operační paměti RAM je 128, 256, 512 či 1024 bajtů, hodinová frekvence bývá v rozsahu 16 MHz až 40 MHz a samozřejmě se zvýšil počet GPIO, čítačů, časovačů, komparátorů a objevují se i analogové I/O či PWM, nemluvě o podpoře sériových sběrnic atd.
Obrázek 12: Zapojení vývodů mikrořadiče PIC16F88.
7. Řada PIC18
Řada PIC18 vznikla z toho důvodu, že se společnost Microchip snažila své mikrořadiče, resp. přesněji řečeno především jejich instrukční sadu, upravit takovým způsobem, aby se i pro tyto čipy mohly psát programy v céčku či v některém dalším vyšším programovacím jazyku. To souviselo s posunem v celé oblasti mikrořadičů a firma Microchip nebyla jediná (opět si připomeňme například čipy S08 či H8). Především došlo ke zvětšení zásobníku na 31 prvků, což alespoň teoreticky umožňovalo implementaci klasických zásobníkových rámců (stack frame). Dále byly zavedeny klasické programové skoky, které doplnily pro PICy typickou instrukci SKIP (přeskok další instrukce v případě splnění podmínky). Zavedena byla i podpora pro adresování s index registrem. Teoretická maximální adresovatelná kapacita paměti RAM se zvětšila na 212 adres, protože k osmibitovému offsetu v instrukci se připojoval čtyřbitový registr s nastavenou bankou (takže vlastně práce C překladače zase tak jednoduchá nebyla :-).
8. Šestnáctibitové mikrořadiče PIC24 a dsPIC
Ve druhé části článku se budeme zabývat šestnáctibitovými mikrořadiči PIC24 a taktéž čipy dsPIC, které jsou založeny na PIC24, ovšem kromě toho mají přidanou podporu pro DSP operace (jinými slovy mají rychlou násobičku a obvody pro adresování používané v DSP aplikacích). Šestnáctibitové mikrořadiče PIC24 a dsPIC jsou rozděleny do šesti skupin vypsaných v následující tabulce:
Šestnáctibitové mikrořadiče |
---|
PIC24F |
PIC24H |
PIC24E |
Šestnáctibitové digitální signálové procesory |
dsPIC30F |
dsPIC33F |
dsPIC33E |
Některé vlastnosti jsou všem šestnáctibitovým PICům společné. Týká se to jak instrukční sady, která se v mnoha ohledech odlišuje od instrukčních sad osmibitových mikrořadičů, tak i větší kapacity pamětí EPROM/Flash a RAM. Vzhledem k tomu, že programový čítač má šířku 23 bitů, je možné vytvářet mnohem větší programy. Programová paměť navíc používá slova široká celých 24 bitů, nikoli 12, 14 či 16 bitů. Kapacita datové paměti je sice omezena na 32k slov (tedy 64 kilobajtů), ovšem mnohé mikrořadiče podporují EDS (Extended Data Space), takže se i toto omezení může obejít. Mezi další novinky patří rychlá násobička 17×17 bitů se čtyřicetibitovými akumulátory, které najdeme u řady dsPIC (viz další text). Některé čipy mají i další podpůrné obvody, například obvod pro rychlé programové smyčky (DO-LOOP) atd.
Poznámka: některé vlastnosti řady PIC24 byly použity již v řadě PIC17, kterou jsme si nepopisovali z toho důvodu, že se jednalo o komerčně neúspěšné čipy, která již firma Microchip nevyrábí. Ovšem právě u PIC17 se objevila HW násobička (osmibitová) apod.
9. Sada pracovních registrů
Připomeňme si, že všechny osmibitové mikrořadiče PIC měly de facto pouze jediný pracovní registr nazvaný W (work register). Ostatní registry, a to včetně programového čítače, stavového registru, registru INDF používaného pro nepřímé adresování atd. byly mapovány přímo do paměti RAM. Tomuto uspořádání odpovídala i instrukční sada, protože všechny instrukce se dvěma operandy (ADDWF, SUBWF, ANDWF, IORWF, XORWF) akceptovaly jako jeden operand vždy registr W a druhým operandem byl libovolný registr f mapovaný do RAM (počet těchto registrů a tím i kapacita RAM je omezen zvolenou instrukční sadou). Podobně je tomu i u instrukcí pracujících s osmibitovou konstantou, v nichž je cílovým operandem vždy pracovní registr W. Toto uspořádání však není pro delší programy příliš vhodné, neboť existence jediného „akumulátoru“ může být limitující a nepříjemná zejména při překladu céčkových programů.
Naproti tomu u šestnáctibitových mikrořadičů došlo k výrazné změně, protože je zde k dispozici celkem šestnáct pracovních registrů, přičemž každý z těchto registrů má pochopitelně šířku šestnáct bitů. Všechny dostupné registry jsou vypsány v následující tabulce:
Registr | Alternativní funkce/jméno |
---|---|
W0 | WREG |
W1 | |
W2 | |
W3 | |
W4 | |
W5 | |
W6 | |
W7 | |
W8 | |
W9 | |
W10 | |
W11 | |
W12 | |
W13 | |
W14 | Frame pointer |
W15 | Stack pointer |
Čítač instrukcí PC je od sady pracovních registrů oddělen, protože má šířku 23 bitů, zatímco pracovní registry mají šířku šestnáct bitů.
Poznámka: registr W0 s aliasem WREG je implicitně používán v těch adresovacích režimech, v nichž je druhým operandem buňka v RAM. V takové situaci totiž již v instrukčním slovu není dostatek volných bitů pro určení indexu pracovního registru.
10. Akumulátory u řady dsPIC
U čipů dsPIC30F, dsPIC33F a dsPIC33E se kromě pracovních registrů setkáme i s akumulátory pojmenovanými ACCA a ACCB, které se používají u mnoha operací pro zpracování signálu. Tyto akumulátory jsou dva a každý z nich má šířku 40 bitů, což je v oblasti DSP poměrně obvyklá hodnota (stačí si připomenout články o slavném digitálním signálovém procesoru TMS320C10). Z pohledu programátora je každý akumulátor složen ze tří registrů mapovaných do RAM:
Akumulátor | Horních 8 bitů | Prostředních 16 bitů | Spodních 16 bitů |
---|---|---|---|
ACCA | ACCAU | ACCAH | ACCAL |
ACCB | ACCBU | ACCBH | ACCBL |
U čipů dsPIC33E je možné uložit výsledek operace MUL přímo do akumulátoru, takže se násobení může provádět paralelně s další instrukcí.
11. Stavový registr SRH+SRL
Stavový registr obsahuje stavové informace používané aritmeticko-logickou jednotkou a u čipů dsPIC i stavové informace DSP modulu. Z tohoto důvodu je obsazení jednotlivých bitů stavového registru závislé na konkrétním čipu, ovšem některé příznakové a řídicí bity jsou pro všechny procesory PIC24 i dsPIC shodné. Stavový registr, který se v assembleru označuje jménem SR, je šestnáctibitový a je rozdělen na dva osmibitové registry pojmenované jednoduše SRH a SRL. V následující tabulce je upřesněn význam jednotlivých bitů, přičemž především spodní čtyři bity jsou pro všechny čipy shodné:
Bit | Označení | Význam |
---|---|---|
0 | C | příznak přenosu či výpůjčky |
1 | Z | příznak nulového výsledku |
2 | OV | příznak přetečení |
3 | N | příznak záporného výsledku |
4 | RA | nastaveno ve chvíli provádění programové smyčky REPEAT |
5 | IPL0 | tyto tři bity určují prioritu přerušení |
6 | IPL1 | tyto tři bity určují prioritu přerušení |
7 | IPL2 | tyto tři bity určují prioritu přerušení |
8 | DC | příznak přetečení ze čtvrtého bitu |
9 | DA | nastavený při provádění programové smyčky DO (jen dsPIC) |
10 | SAB | SA or SB (jen dsPIC) |
11 | OAB | OA or SB (jen dsPIC) |
12 | SB | příznak saturace pro akumulátor B (jen dsPIC) |
13 | SA | příznak saturace pro akumulátor A (jen dsPIC) |
14 | OB | přetečení pro akumulátor B (jen dsPIC) |
15 | OA | přetečení pro akumulátor A (jen dsPIC) |
Posledních šest bitů je použito jen u čipů dsPIC vybavených akumulátory.
12. Řídicí registr CORCON
Tento registr je taktéž šestnáctibitový a obsazení jednotlivých bitů závisí na konkrétním čipu. Například u čipů PIC24F a PIC24H jsou obsazeny jen dva bity IPL3 (doplněk k již výše uvedeným bitům, což je dosti nesystematické) a taktéž bit PSV, který řídí adresování – CPU se může nastavit do režimu, v němž se část programové paměti mapuje do paměti datové, takže je umožněno jednoduché čtení konstant atd. U čipů PIC24E tento bit neexistuje a namísto něho je použit bit nazvaný SFA pro řízení chování zásobníkového rámce. A konečně u čipů dsPIC je v řídicím registru CORCON rezervováno několik bitů pro řízení DSP modulu – režimy saturace, provádění programových smyček DO atd.
13. Instrukční soubor mikrořadičů PIC24 a dsPIC
Jak jsme si již naznačili v osmé kapitole, je instrukční soubor mikrořadičů PIC24/dsPIC v několika ohledech odlišný od osmibitových mikrořadičů řady PIC10/12/16/18. Tvůrci PIC24 se rozhodli, že instrukční slova budou mít šířku 24 bitů, což umožnilo jak použití většího množství pracovních registrů, tak i přidání nových adresních režimů, zcela nových instrukcí apod.
Podporovány jsou tyto instrukce:
Přesuny dat |
---|
Aritmetické operace |
Logické operace |
Bitové posuny a rotace |
Bitové operace |
Podmíněné skoky a podmíněný přeskok následující instrukce |
Řízení běhu programu |
Manipulace se zásobníkem |
Další řídicí instrukce |
U čipů dsPIC i instrukce specifické pro DSP modul |
Podrobnější popis instrukcí, především instrukcí pro DSP modul, bude uveden v následujícím článku.
14. Odkazy na Internetu
- Stránky společnosti Microchip
http://www.microchip.com/ - Mikrořadiče řady PIC10
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1009 - Mikrořadiče řady PIC12
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1001 - Mikrořadiče řady PIC16
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1002 - Mikrořadiče řady PIC18
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1004 - Šestnáctibitové mikrořadiče PIC
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=20 - Microchip's 32-bit MCUs
http://www.microchip.com/design-centers/32-bit - Development Tools (oficiálně dostupné nástroje pro PIC)
http://www.microchip.com/development-tools/ - Vývojové nástroje pro osmibitové mikrořadiče PIC
https://www.root.cz/clanky/vyvojove-nastroje-pro-osmibitove-mikroradice-pic/ - Mikroprocesory s architekturou MIPS
https://www.root.cz/clanky/procesory-s-architekturou-risc-v-pracovnich-stanicich-a-serverech/ - gpsim Home Page
http://gpsim.sourceforge.net/gpsim.html - Gpsim (Wikipedia)
https://en.wikipedia.org/wiki/Gpsim - Digital Signal Processors (stránky TI)
http://www.ti.com/lsds/ti/processors/dsp/overview.page - C674× Low Power DSP (stránky TI)
http://www.ti.com/lsds/ti/processors/dsp/c6000_dsp/c674×/overview.page - TMS320C30 (stránky TI)
http://www.ti.com/product/tms320c30 - TMS320C6722B
http://www.ti.com/product/tms320c6722b/description - Introduction to DSP
http://www.ti.com/lit/wp/spry281/spry281.pdf - The Evolution of TMS (Family of DSPs)
http://www.slideshare.net/moto_modx/theevo1 - ST10 16-bit MCUs
http://www.st.com/en/microcontrollers/st10–16-bit-mcus.html?querycriteria=productId=LN1111 - XC800 family
https://en.wikipedia.org/wiki/XC800_family - C166 (stránky společnosti Infineon)
https://www.infineon.com/cms/en/product/microcontroller/16-bit-c166-microcontroller/channel.html?channel=ff80808112ab681d0112ab6b2eaf0759#ispnTab3 - C166 Family
https://en.wikipedia.org/wiki/C166_family - Zero-power Microcontrollers for Low-power and High-temperature Applications
http://en.wikichip.org/w/images/1/17/Atmel_MARC4_brochure.pdf - MARC4 Micro-Controller (Wikipedia)
https://en.wikipedia.org/wiki/MARC4_Micro-Controller - MARC4 – Atmel
https://en.wikichip.org/wiki/atmel/marc4 - MARC 4bit Microcontrollers Programmer's Guide
https://en.wikichip.org/w/images/4/44/MARC4_4-bit_Microcontrollers_Programmer%27s_Guide.pdf - MARC4 User's Guide qFORTH Compiler
https://en.wikichip.org/w/images/2/25/MARC4_User%27s_Guide_qFORTH_Compiler.pdf - Programovací jazyk Forth a zásobníkové procesory
http://www.root.cz/clanky/programovaci-jazyk-forth-a-zasobnikove-procesory/ - Seriál Programovací jazyk Forth
http://www.root.cz/serialy/programovaci-jazyk-forth/ - Programovací jazyk Factor
http://www.root.cz/clanky/programovaci-jazyk-factor/ - PMOS
https://en.wikipedia.org/wiki/PMOS_logic - NMOS
https://en.wikipedia.org/wiki/NMOS_logic - CMOS
https://en.wikipedia.org/wiki/CMOS - Computer History Museum: TMS 1000 4-Bit microcontroller
http://www.computerhistory.org/collections/catalog/102711697 - Texas Instruments TMS1000 microcontroller family
http://www.cpu-world.com/CPUs/TMS1000/ - Invention History of Microcontroller
http://www.circuitstoday.com/microcontroller-invention-history - TMS1000 Series – TI
https://en.wikichip.org/wiki/ti/tms1000 - TMX1795 – TI
https://en.wikichip.org/wiki/ti/tmx1795 - Milton Bradley Microvision (U.S.) (1979, LCD, 9 Volt (1 or 2), Model# 4952)
http://www.handheldmuseum.com/MB/uVUS.htm - 8051 Microcontroller
http://www.circuitstoday.com/8051-microcontroller - 4-bit (computer architectures)
https://en.wikipedia.org/wiki/4-bit - TMS 1000 Data Manual
http://blog.kevtris.org/blogfiles/TMS_1000_Data_Manual.pdf - Considerations for 4-bit processing
http://www.embeddedinsights.com/channels/2010/12/10/considerations-for-4-bit-processing/ - Are you, or would you consider, using a 4-bit microcontroller?
http://www.embeddedinsights.com/channels/2010/11/24/are-you-or-would-you-consider-using-a-4-bit-microcontroller/ - MARC4 Micro-Controller
https://en.wikipedia.org/wiki/MARC4_Micro-Controller - The Texas Instruments TMX 1795: the (almost) first, forgotten microprocessor
http://www.righto.com/2015/05/the-texas-instruments-tmx-1795-first.html - O2 Homepage
http://www.the-nextlevel.com/odyssey2/ - Magnavox Odyssey2 (1978), Philips Videopac G7000 / C52 (1979)
http://www.mess.org/sysinfo:odyssey2 - The Video Game Critic's Odyssey 2 Reviews
http://videogamecritic.net/odd.htm - Computer Closet Collection: Magnavox Odyssey2
http://www.computercloset.org/MagnavoxOdyssey2.htm - PHILIPS Videopac C52
http://old-computers.com/museum/computer.asp?c=1060 - O2 Tech. Manual V.1.1 (PDF dokument)
http://www.atarihq.com/danb/files/o2doc.pdf - Magnavox Odyssey2
http://www.game-machines.com/consoles/odyssey2.php - Magnavox Odyssey2 (Wikipedia EN)
http://en.wikipedia.org/wiki/Odyssey2 - Magnavox Odyssey2 Games (Wikipedia EN)
http://en.wikipedia.org/wiki/List_of_Videopac_games - TI 16-bit and 32-bit microcontrollers
http://www.ti.com/lsds/ti/microcontrollers16-bit32-bit/overview.page - TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423