C166
C166 je architektura 16bitových mikrokontrolérů, kterou vyvinula firma Siemens. Dnes ve výrobě procesorů vycházejících z architektury C166 pokračuje firma Infineon, která vznikla odštěpením od Siemense a firma STMicroelectronics. Od roku 1990 byla jádra řady C166/ST10 vyvíjena společně s firmou SGS Thomson (nyní STMicroelectronics).
Základní rysy
Řada C166 je originální architekturou pro embedded systémy, zaměřenou na měření, regulaci a řízení. Jádro je inspirováno koncepcí RISC, takže instrukce nespotřebují mnoho taktů, avšak instrukční soubor je poměrně rozsáhlý, dokonce obsahuje instrukce pro přímé bitové manipulace. Výborně integrované vnitřní periferie, velmi pružný systém přerušení a mapování sady obecných registrů dovolují velmi dobrou odezvu na externí události.
Rodina C166 patří k prvním architekturám, které integrovaly v jediném čipu velké množství periferií – od sériových linek, čítačů, časovačů, registrů pro zachycení/generování externích událostí, až po rychlé a přesné 10bitové A/D převodníky.
Procesory vycházející z řady C166
Procesory uvedené v levém a pravém sloupci jsou zástupci dané řady, nemusí se jednat o ekvivalenty (mohou mít odlišný pinout).
jádro | procesory Siemens/Infineon | procesory ST | poznámka |
---|---|---|---|
C166 | 80C166 | ST10F166 | původní jádro od fy Siemens |
C167 | 80C167 | ST10F167 | rozšíření o PWM, „atomic“ instrukce, CAN, zrychlení |
XC166 | XC167CI | ST10F269 | zrychlení násobení, rozšíření o DSP jednotku, 2 x CAN |
Jádra řady C166 jsou zpětně kompatibilní, tzn. že vyšší jádro poskytuje všechny funkce, které má nižší jádro, neboli XC166 > C167 > C166.
Procesory uvedené v tabulce je třeba chápat jako zástupce dané řady, protože Siemens, Infineon a STMicroelectronics vyráběly nebo vyrábějí více typů CPU s daným jádrem. Různé implementace CPU se mohou lišit počtem vývodů, periferiemi, rychlostí a velikostmi integrované paměti RAM a FLASH.
Jádro
Jádro řady C166 je ortogonální, nezaujme kromě instrukcí pro bitové manipulace žádnými zvláštními „výstřelky“, popis od výrobce je jasný a přehledný. Jádro C166 operuje nad šestnácti šestnáctibitovými univerzálními registry GPR, které jsou pojmenovány R0 až R15. Registry R0 až R7 jsou přístupné i po bajtech jako R0L, R0H, R1L, R1H, atd. Jinak jsou všechny GPR rovnocenné.
Instrukční sada je poměrně jednoduchá a přehledná, obsahuje instrukce pro násobení 16 bitů x 16 bitů na 32 bitů a instrukce pro dělení 32 bitů / 16 bitů. Instrukce pro dělení trvá přes 20 taktů a je přerušitelná, aby nezhoršovala odezvy systému na časově kritické události. Instrukce pro násobení trvá u starší řady také několik taktů, u procesorů generace XC166 probíhá stejně rychle jako ostatní instrukce. „Dlouhé“ skoky a volání umožňují využívání celé paměti pro program.
Jádro dovoluje pomocí DPP registrů nebo pomocí „rozšířených sekvencí“ adresovat až 16 MiB paměti, paměť programu a dat je mapovaná stejně. Instrukce pro čtení nebo zápis 16bitového slova nedokážou pracovat se slovy na lichých adresách, při takovém přístupu k paměti je vygenerováno speciální nemaskovatelné přerušení (TRAP). Toto omezení je ve skutečnosti předností architektury C166, protože pomáhá odhalovat slabá místa v softwaru.
Stavové registry jádra
- PSW – registr příznaků
- IP – 16bitový čítač instrukcí
- CP – ukazatel „kontextu“ registrové sady (určuje na které místo IRAM jsou mapovány registry GPR)
- SP – ukazatel zásobníku (určuje kde v IRAM se nachází)
- CSP – 16bitový ukazatel stránky kódu – rozšiřuje prostor pro program (adresa je daná CSP:IP)
- DPP0, DPP1, DPP2, DPP3 – registry pro stránkování dat – mapují paměť, aby bylo možné využít oblasti nad 64 kiB (u jádra C167 a vyšších existuje pro náhodné mapování paměti účinnější mechanismus pomocí instrukčních sekvencí „EXTP“ a „EXTS“)
- MDH, MDL, MDC – registry hardwarové násobičky / děličky
Univerzální registry
Univerzální registry se označují termínem GPR (general purpose registers). Jedná se o registry R0 až R15. Registry R0 až R7 jsou rovněž přístupné po bajtech (R0 jako RL0 a RH0 atp.). Jinak jsou registry zcela rovnocenné. Zvláštností rodiny C166 je, že sada univerzálních registrů je mapována do vnitřní paměti, což dovoluje velmi rychlé přepínání kontextu mezi různými úlohami (při přepínání úloh není nutné ukládat a načítat registry, stačí je namapovat do jiné oblasti IRAM).
Vnitřní paměť IRAM a Speciální funkční registry
Paměť IRAM a oblast SFR jsou napevno mapované ke konci třetí datové stránky (rozsah C000h až FFFFh). Zvláštní systémové postavení paměti IRAM spočívá v tom, že jedině do ní je možné mapovat systémový zásobník a univerzální registry GPR (tj. R0 až R15). Oblast SFR a část IRAM mohou přímo adresovat instrukce bitových manipulací. Oblast SFR je rovněž pro některé instrukce přístupná zkráceným osmibitovým adresováním.
Speciální funkční registry:
- jsou těsně integrované s jádrem (mnoho instrukcí dovoluje adresování SFR-paměť)
- některé jsou systémové (ovlivňují časování přístupu do externí paměti, velikost a mapování zásobníku, segmentaci, řídí systém přerušení atp.)
- integrované periferie jsou těsně napojené na systém přerušení