# 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