Le micro-processeur est la pièce maîtresse du micro-contrôleur. Il se compose:
Le micro-processeur interagit avec:
Le CPU, les mémoires et les périphériques les I/O périphériques sont reliés par trois bus distincts:
Un processeur seul ne suffit pas à construire un système embarqué. Les composants supplémentaires tels que par exemple la mémoire RAM, ROM sont indispensables pour obtenir un objet fonctionnel. Afin de simplifier la conception d'un système embarqué, les fabricants de composants proposent des briques matérielles complètes embarquant tous les composants vitaux nécessaires au fonctionnement minimal. On parle alors de micro-contrôleur ou MCU. Concrètement l'ensemble des composants (CPU, RAM, ROM, …) se trouvent sur une même et unique puce qui a été miniaturisée de manière optimale par le fabricant.
Pour réaliser un système embarqué, les avantages à utiliser un MCU par rapport à de multiples composants séparés sont multiples :
Afin de proposer un maximum de souplesse pour les concepteurs de systèmes embarqués, les fabricants de MCU proposent de très nombreuses références pour pouvoir couvrir l'ensemble des besoins (architecture CPU, taille mémoire interne, …).
En plus du CPU et de la mémoire interne, le MCU embarque généralement un ensemble de fonctions périphériques utiles pour la programmation embarquée, comme par exemple des timers, interruptions, watchdog, convertisseurs analogiques/numériques.
Les timers sont directement liés aux cycles ou ticks de l'horloge du MCU avec laquelle ils sont synchronisés. Selon les familles de MCU, il existe des timers codés sur 8 bits (256 valeurs) ou 16 bits (65535 valeurs). Un MCU standard dépasse largement 1000000 de ticks par seconde (CPU > 1MHz). Afin d'utiliser des timers sur une plus longue période, le MCU propose des prescalers qui utilise un sous-multiple de la fréquence d'horloge du MCU.
Les interruptions gérées par un MCU sont liées à des événements internes ou externes. Les cas d'usage des interruptions sont multiples et indispensables pour programmer facilement un système embarqué. Par exemple, on peut citer la gestion de l'état on/off d'un bouton poussoir, l'arrivée d'un message sur une puce radio.
Dans le cas d'une interruption interne, on peut par exemple programmer un timer interne du MCU qui une fois arrivé à expiration va générer une interruption.
Dans le cas d'une interruption externe, on associe un registre d'interruption externe à une broche externe du MCU sur laquelle est branché un périphérique externe (capteur, Real Time Clock ou RTC). Ce périphérique génère un signal qui va déclencher l'interruption ensuite remontée au MCU.
Au niveau du code embarqué, l'interruption est liée à une fonction de traitement à exécuter. Lorsqu'une interruption est détectée par le MCU, le code principal en cours d'exécution est mis en pause pour immédiatement jouer la fonction liée à l'interruption. Une fois la fonction d'interruption terminée, le code principal reprend son exécution là où il s'était mis en pause.
Le watchdog a pour but de garantir un état cohérent du système embarqué. En particulier, le watchdog évite que le système reste bloqué dans une boucle du programme ou dans l'attente d'un périphérique un peu lent à répondre. Concrètement il s'agit d'un compte à rebours que le MCU doit régulièrement recharger. Dans le cas contraire, si le watchdog arrive à expiration, une interruption et/ou un redémarrage (reset) du MCU est enclenché. Le MCU repart alors depuis le début du programme dans un état cohérent.
Un MCU embarque généralement un convertisseur analogique/numérique CAN ou ADC1) en anglais. A partir d'un signal analogique en entrée, par exemple un potentiomètre ou une photo-résistance, le CAN va le transformer en une valeur numérique dont sa précision est typiquement comprise entre 8 bits (256) et 12 bits (4096).
Un MCU peut assigner des broches externes à des ports d'entrées/sorties numériques. Il convient alors de préciser le mode de fonctionnement du port digital (en entrée ou en sortie) ainsi que l'usage ou non d'une résistance interne de tirage forçant la broche à l'état haut (pull-up). Par exemple, une LED est branchée sur un port digital fonctionnant en sortie pour allumer ou éteindre le composant.