# Mikrokontroléry **Mikroprocesor** x **mikrokontrolér** - mikroprocesor (MPU) = procesor vyrobený na jednom čipu - používá vnější paměti a další pomocné obvody - mikrokontrolér (MCU) = procesorové jádro + paměti + periferie + pomocné obvody na společném čipu - periferní obvody obvykle specializované pro různé řídící aplikace **Charakteristiky MCU** - MCU se vyrábí ve velkém rozpětí výkonosti (podle předpokládané aplikace) + délka slova CPU: **4**, **8**, **16** a **32 bitů** + frekvence CLK: cca **1 MHz** až **1 GHz** + kapacita ROM (Flash): cca **512 B** až **512 kB** + kapacita RAM: cca **32 B** až **128 kB** + pouzdro: **SOIC8 - BGA256** **Vývody pouzder MCU** - většina vývodů má podle konfigurace některou z více funkcí - základní konfigurace je obcykle binární obousměrný IO pin - piny obvykle sdruženy do 8bitových nebo 16bitových portů - další možné funkce - adresní/datová sběrnice - vývody séeiových portů, časovačů a čítačů - ... **Adresní prostory MCU** - fyzická paměť nemusí pokrývat celý a.p. - zbývající rozsah pokryt vnější pamětí - někdy mapovány i SFR (Special Function Registers) a někdy EEPROM + Hardwardská architektura - kódová a datová paměť mají oddělené adresní prostory - délka slova může být pro obě paměti různá - v principu možný přístup do obou pamětí současně - pro každý adresní prostor lze použít jen některé operace - kódový: výběr instrukce, čtení dat - datový: čtení dat, zápis dat - Lineární (Von Neumannova) architektura - všechny typy pamětí a SFR v jednom adresním prostoru - lze zapisovat i do kódové paměti - lze provádět program uložený v datové paměti - u výkonných MCU lze někdy volit různé mapování pamětí do adresního prostoru **Konfigurace s vnější a vnitřní pamětí** - některé MCU umožňují připojení vnější datové nebo kódové paměti - pro vyvedení portu adresní a datové sběrnice běžně část binárních IO portů - přístup do vnitřní paměti obvykle rychlejší (v 1 taktech CLK) než do vnější (ve 3 taktech CLK) **Programování vnitřních pamětí MCU** - paralelní programování - používá externí programátor - vyžaduje velký počet vývodů MCU - rychlé programování (vhodné pro sériovou výrobu) - obtížné programování přímo v zařízení (ISP - In System Programming) - rozhraní JTAG (Joint Test Action Group) - sériové rozhraní pro diagnostiku - pro programování i ladění programů - boot loader - CPU čte kód programu přes standardní rozhraní a zapisuje do Flash - předpoklady - CPU může zapisovat do kódového i adresního prostoru - Boot program lze vykonávat i při zápisu do Flash - výkonné MCU: možnost volby rozhraní pro boot po resetu - program se ukládá do RAM místo Flash - boot je nutný vždy při startu - boot lze provést z různých rozhraní (SPI, Flash, přes Ethernet, ...) **Ladící prostředky** - monitor - uložen v kódové paměti MCU - spolupracuje s ladicím programem na počítači - program se zavádí do Flash i s monitorem - nevýhody: monitor potřebuje nějaké prostředky MCU - JTAG - některé MCU mají rozšířený soubor instrukcí JTAG pro ladění - výpočet běží v laděné aplikaci v reálném čase - aplikační program může bez omezení využívat prostředky MCU **Nízkopříkonové režimy Idle a Power** - zapínají se programově - Idle (IDL) - CPU má odpojený hodinový signál - pracují jen periferní řadiče - Power Down (PD) - vypne se generátor hodinového signálu, nepracuje CPU ani periferní obvody ### Mikrokontroléry na bázi ARM - architektura vyvíjena od roku 1990 (Advanced Risc Machine) - postupně několik verzí procesorových jader - ARMv4, ARMv4T (THUMB ISA) - ARMv5, ARMv5E (Enhanced - rozšířeno o DSP) - ARMv6, ARMv6M (Cortex-M0) - ARMv7M, ARMv7R, ARMv7A (Cortex-M, R, A) - mikrokontroléry n bázi ARM vyrábí několik (cca 40) výrobců (TI, ST, NXP, Toshiba, ...) - též jako syntetizovatelná jídra pro SoC **Charakteristika ARM** - 32bitová architektura RISC - 16 ks. 32bitových registrů - až 3 různé soubory instrukci - v různých verzích různá standardní rozšíření základní architektury - další periferie MCU podle různých výrobců **Řady procesorů** - klasická řada: 3 rodiny + **ARM7** - procesorové jádro ARMv4, ARMv4T + **ARM9** - procesorové jádro ARMv4T, ARMv5, ARMv5E + **ARM11** - procesorové jádro ARMv6 - další číslice a písmena specifikují vybavení procesoru - např. ARM7TDMI, ARM946E-S + řada Cortex: 3 rodiny + **Cortex-M** - procesorové jádro ARMv6M resp. ARMv7M + 4 typy procesorů + Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4, Cortex-M7 - nejmenší řada, nástupce 8 a 16bitových MCU - Cortex-M1 pro implementaci v FPGA - CLK max. 100 MHz + **Cortex-R** - procesorové jádro ARMv7R - 3 typy procesorů - Cortex-R4, Cortex-R5, Cortex-R7, Cortex-R8 - vysoký výkon pro vestavěné systémy reálného času - optimalizované pro běh RTOS - CLK max. 1 GHz + **Cortex-A** - procesorové jádro ARMv7A + 4 typy procesorů + Cortex-A5, Cortex-A8, Cortex-A9, Cortex-A15, Cortex-A17 - vysoký výkon pro mobilní aplikace, multimédia (smartphone, digitální TV, ...) - vícejádrové typy - optimalizované pro běh OS (Linux, Symbian, Windows CE) - CLK max. 2 GHz **Instrukční sady ARM** - **ARM 32-bit** - původní sada - 32bitové instrukce (kódované na 32 bitech) - nevýhodné v menších systémech - **Thumb** - 16bitové instrukce - méně výkonné než ARM 32-bit - ARM 32-bit a Thumb je nutné přepínat (lze i za chodu) - **Thumb-2** - nadmnožina Thumb - kombinace 16bitových a 32bitových instrukcí - nemusí se přepínat - od ARMv7