Académique Documents
Professionnel Documents
Culture Documents
Chapitre II :
Architecture Générale d’un Microcontrôleur
Plan
-------------------------------------------------------------------------------------
1. Introduction
2. Architecture de µc
3. Microprocesseur (CPU)
4. Les registres
5. Entré/sortie
6. Mémoires
7. Oscillateur
8. Convertisseurs
9. Temporisateur : Timer /compteur
10.Chiens de garde (watchdog)
11.Interruption
--------------------------------------------------------------------------------------
1. Introduction :
Un microcontrôleur (en notation abrégée µc, ou uc ou encore MCU en anglais) est un circuit
intégré qui rassemble les éléments essentiels d'un ordinateur : processeur, mémoires (mémoire
morte pour le programme, mémoire vive pour les données), unités périphériques et interfaces
d'entrées-sorties.
15 Prof. KHOULJI S.
Microcontrôleur
✓ Commercial : électroménager, domotique...
✓ Automobile : ABS, tableau de bord, contrôle des sièges, des vitres...
✓ Militaire et spatial : sonde, lanceurs de fusées, missile, robots...
✓ Loisirs : expo-sciences Réunion
✓ Systèmes embarqués, comme les contrôleurs des moteurs automobiles, les
télécommandes, les appareils de bureau, l'électroménager, les jouets, la téléphonie
mobile, etc.
a) Un peu d’Histoire :
De l'ordinateur au microcontrôleur :
Le diagramme ci-dessous montre les grandes étapes de l'évolution. Chaque étape a été marquée
par un processeur différent.
L'avènement des transistors (1958), des circuits intégrés (1968) et des circuits intégrés à haute
densité (1978) a permis de construire des ordinateurs de plus en plus petits et de plus en plus
puissants. Chacune des intégrations laisse leurs traces dans les différents noms que l'on rencontre
aujourd'hui : mini-ordinateur, microprocesseur, micro-ordinateur, microcontrôleur... On les doit
principalement à la société Intel fondé en 1968.
16 Prof. KHOULJI S.
Microcontrôleur
b) Le marché des microcontrôleurs
• Motorola (68HC11).
• Microchip (séries des PIC).
• Mitsubishi (M30620).
• NEC (78C10).
• Philips (80C552).
• Intel (8051).
Historiquement la société pionnière est INTEL qui est considéré comme le père du
microcontrôleur avec le 8048 dans les années 1970.
17 Prof. KHOULJI S.
Microcontrôleur
• souvent un oscillateur pour le cadencement. Il peut être réalisé avec un quartz, un circuit
RC ou encore une PLL ;
• des périphériques, capables d'effectuer des tâches spécifiques. On peut mentionner entre
autres :
• les convertisseurs analogiques-numériques (CAN) (donnent un nombre binaire à partir
d'une tension électrique),
• les convertisseurs numériques-analogiques (CNA) (effectuent l'opération inverse),
• les générateurs de signaux à modulation de largeur d'impulsion (MLI, ou en anglais,
PWM pour Pulse Width Modulation),
• les timers/compteurs (compteurs d'impulsions d'horloge interne ou d'événements
externes),
• les chiens de garde (watchdog),
• les comparateurs (comparent deux tensions électriques),
• les contrôleurs de bus de communication
2
(UART, I C, SSP, CAN, FlexRay, USB, Ethernet, etc.).
3. Microprocesseur :
18 Prof. KHOULJI S.
Microcontrôleur
3.1. Architecture interne du microprocesseur
Le processeur (microprocesseur) est le composant hardware le plus connu d'un système
micro-programmé. C'est l'unité intelligente de traitement des informations.
Le microprocesseur a pour mission de rechercher les instructions (lire le programme) qui
sont en mémoire, de les décoder et de les exécuter.
1. Une unité de commande (UC) chargée de traduire puis d’exécuter les commandes ; Son
rôle est d’aller chercher une information en mémoire centrale, d’analyser cette instruction
(décodage), d’exécuter cette instruction, de localiser l’instruction suivante.
• Un décodeur d’instruction
• Un séquenceur et des circuits de commande
Les blocs de l’unité de commande contiennent:
✓ Le compteur de programme (PC : Programme
Counter) appelé aussi Compteur Ordinal (CO) est
constitué par un registre dont le contenu est initialisé
avec l'adresse de la première instruction du programme.
Il contient toujours l’adresse de la prochaine instruction
à exécuter.
✓ Le registre d'instruction et le décodeur
d'instruction:
✓ Chacune des instructions à exécuter est transférée
depuis la mémoire dans le registre instruction puis est
décodée par le décodeur d’instruction.
2. l’unité de traitement
Elle regroupe les circuits qui assurent les traitements nécessaires à l'exécution des
instructions
Les blocs de l’unité de traitement contiennent :
✓ Les accumulateurs sont des registres de travail qui servent à stocker une opérande au
début d'une opération arithmétique et le résultat à la fin de l'opération.
19 Prof. KHOULJI S.
Microcontrôleur
✓ L’Unité Arithmétique et Logique (UAL) est un circuit complexe qui assure les
fonctions logiques (ET, OU, Comparaison, Décalage, etc…) ou arithmétique (Addition,
soustraction…).
✓ Le registre d'état est généralement composé de 8 bits à considérer individuellement.
Chacun de ces bits est un indicateur dont l'état dépend du résultat de la dernière opération
effectuée par l’UAL. On les appelle indicateur d’état ou flag ou drapeaux. Dans un
programme le résultat du test de leur état conditionne souvent le déroulement de la suite
du programme. On peut citer par exemple les indicateurs de :
Retenue (carry : C)
Débordement (overflow : OV ou V)
Zéro (Z)
...
Architecture
20 Prof. KHOULJI S.
Microcontrôleur
Il existe deux types d’architecture des microprocesseurs :
• Architecture de Von Neumann
• Architecture de Harvard
Pour que le μp puisse “comprendre” l’instruction, les instructions doivent être envoyées
(fournies) sous forme binaire, c.à.d. langage machine.
21 Prof. KHOULJI S.
Microcontrôleur
La taille d'une instruction peut varier, elle est généralement de quelques octets (1 à 8), elle
dépend également de l'architecture du processeur.
Exemple d’instruction :
Instruction Addition :
Accumulateur = Accumulateur + Opérande
Correspond à l’instruction ADD A,#2
22 Prof. KHOULJI S.
Microcontrôleur
L’architecture RISC (Reduced Instruction Set Computer): Architecture à jeu
d'instructions réduit
Les modes d'adressages sont un aspect de l'architecture des processeurs et de leurs jeux
d'instructions. Les modes d'adressages définis dans une architecture régissent la façon dont les
instructions en langage machine identifient leurs opérandes. Un mode d'adressage spécifie la
façon dont est calculée l'adresse mémoire effective d'un opérande à partir de valeurs contenues
dans des registres et de constantes contenues dans l'instruction ou ailleurs dans la machine.
En programmation informatique, les personnes préoccupées par les modes d'adressage sont
principalement celles qui programment en assembleur et les auteurs de compilateurs.
Les instructions utilisent toutes une manière particulière d’accéder aux informations qu’elles
manipulent. Ces méthodes sont appelées « modes d’adressage ».
Ce sont les diverses manières de définir la localisation d’un opérande. C’est à dire la manière
dont la donnée est spécifié dans une instruction.
Les trois modes d’adressage les plus courants sont :
Adressage littéral ou immédiat
Adressage direct
Adressage indirect
Adressage littéral ou immédiat : la donnée est contenue dans l’instruction
23 Prof. KHOULJI S.
Microcontrôleur
Adressage direct : la donnée est contenue dans un registre
24 Prof. KHOULJI S.
Microcontrôleur
Le Pipeline :
Définition d’un pipeline
• La technique du pipeline est une technique de mise en oeuvre qui permet à plusieurs
instructions de se chevaucher pendant l'exécution.
• Une instruction est découpée dans un pipeline en petits morceaux appelés étage de
pipeline.
• La technique du pipeline améliore le débit des instructions plutôt que le temps
d'exécution de chaque instruction.
• La technique du pipeline exploite le parallélisme entre instructions d’un flot séquentiel
d’instructions. Elle présente l’avantage de pouvoir, contrairement à d'autres techniques
d'accélération, être rendue invisible du programmeur.
25 Prof. KHOULJI S.
Microcontrôleur
Les retards
• Le pipeline atteint son plein rendement une fois qu’il est “rempli”
• Un retard peut se produire
✓ S’il existe un conflit de ressources (retard ponctuel)
accès à la mémoire
utilisation des bus
✓ En cas de rupture de séquence (vidange du pipeline)
branchement non prévu
appel de sous-programme
interruption
Exemple de rupture
26 Prof. KHOULJI S.
Microcontrôleur
Types de pipelining
Exemple de profondeur
27 Prof. KHOULJI S.
Microcontrôleur
La présence d'un pipeline (et donc le partage de l'exécution d'une instruction en plusieurs
étages) introduit des aléas :
✓ Aléas de structure : L'implémentation empêche une certaine combinaison
d'opérations (lorsque des ressources matériels sont accédées par plusieurs étages).
✓ Aléas de données : Le résultat d'une opération dépend de celui d'une opération
précédente qui n'est pas encore terminée.
✓ Aléas de contrôle : L'exécution d'un saut conditionnel ne permet pas de savoir
quelle instruction il faut charger dans le pipeline puisque deux choix sont possibles.
Aléas de structure : Les aléas de structure peuvent être éliminés en agissant sur l'architecture du
processeur lors de sa conception.
Aléas de données : Une instruction ne peut récupérer le résultat de la précédente car celui-ci
n'est pas encore disponible.
Exemple :
ADD R1, R2, R3 // R1 = R2 + R3
STORE R1, 1000 // C(1000) = R1
Cette séquence ne stocke pas à l'emplacement mémoire 1000 la valeur de R1 contenant la
somme R2 + R3, mais la valeur de R1 contenue avant l'instruction ADD.
Aléas de contrôle : La présence d'un pipeline introduit des complications lors de l'exécution d'un
saut ou d’un saut conditionnel. L'étage de décodage de l'instruction n'est pas en mesure de
calculer l'adresse de l'instruction suivante avant de connaître le résultat de l’instruction
précédente.
28 Prof. KHOULJI S.
Microcontrôleur
Une solution possible est de faire en sorte que le processeur devine si le branchement sera
pris ou pas pris (branch prediction) et commencer à exécuter les instructions
correspondant à cette décision.
• Si le choix se révèle correct, la pénalité de branchement est éliminée.
• Si le choix se révèle incorrect, il faudra vider le pipeline et charger l'instruction
correcte.
Pour faire de la prédiction de branchement il y a deux possibilités :
• Solution statique : La direction du branchement est fixe, définie en matériel au
moment de la conception du processeur.
• Solution dynamique : La direction du branchement est définie au moment de
l'exécution du programme, sur la base d'une analyse du code.
Solution statique :
Les sauts en arrière (boucles) sont plus souvent pris que pas pris. En effet, une boucle est
souvent réaliser avec plus que 2 itérations.
=>On peut donc faire une prédiction selon la direction:
• si le saut est en arrière, il est pris,
• s'il est en avant, il n'est pas pris.
Cette stratégie donne des très bons résultats (70- 80%) avec une augmentation relativement
restreinte de la logique de contrôle: elle est utilisée dans plusieurs processeurs (p.ex., icroSparc,
HP-PA).
Solution dynamique
✓ Pour réaliser une prédiction dynamique le processeur mémorise le comportement du
programme lors de l'exécution des sauts. À chaque exécution d'un branchement dans un
programme, le processeur mémorise si le saut était pris ou pas pris dans un tampon de
prédiction de branchement. Sur la base du comportement passé du programme pour un
branchement donné, le processeur prédit son comportement pour l'exécution suivante du
même saut.
✓ Par rapport à la prédiction statique, la prédiction dynamique est plus performante, mais
nécessite une quantité très importante de logique de contrôle.
29 Prof. KHOULJI S.
Microcontrôleur
Bus d’adresse
La mémoire est composée de nombreuses cases mémoires. Chaque case est repérée par une
adresse. Lorsque le microprocesseur veut, par exemple, lire une case, il doit indiquer à quelle
adresse elle se trouve. Il met cette adresse sur le bus des adresses. La case mémoire reconnaît
alors son adresse et met sur le bus de données son contenu.
Exemple : Bus d’adresse 16 bits - données sur 8 bits.
Bus de commande
Le bus des commandes est constitué d'un ensemble de fils de "commandes", permettant la
synchronisation et bien sûr la commande des boîtiers mémoires et entrées/sorties par le
microprocesseur. Dans le cas précédent, la cellule mémoire doit savoir à quel instant elle doit
mettre son contenu sur le bus de données. Pour cela, le microprocesseur possède une broche
appelée Read ( ) qu'il met à 0 (0v) lorsque la cellule doit agir. De même, lors d'une écriture du
microprocesseur vers la cellule, il met sa broche Write ( ) à 0 (0V). Les signaux RD et WR sont
des signaux de synchronisation, de contrôle et de commande. Ils sont reliés aux autres
composants par un bus: le bus des commandes. Celui-ci comporte d'autres signaux de
commandes.
4. Les registres
Ce terme va être beaucoup utilisé dans ce cours. On désigne par registre un mot (de 8 bits
généralement) qui sert aux calculs ou plus souvent à configurer un paramètre dans le
microcontrôleur. Quand on parle de registre, on met à chaque fois son aspect. En effet, chaque
bit d'un registre configure quelque chose.
30 Prof. KHOULJI S.
Microcontrôleur
Prenons un exemple : soit le registre de 8 bits nommé ELEVE_SI, qu’on représente comme
cela :
Chaque bit du registre peut être mis à 1 ou à 0. Dans notre exemple, il s'agit des caractéristiques
d'un individu J. J'ai montré le LSB et le MSB avec la numérotation des bits. Lorsque l'on
configure un registre, cela signifie que l'on doit assigner chaque bit du registre à une valeur (0
ou 1), sachant que les bits ont tous à un état par défaut. Ici, nous savons que la personne possède
un certain talent à Starcraft, donc nous mettons le bit 0 à 1 par exemple. Le reste est laissé pour
l'instant à 0. L'octet à écrire dans le registre sera donc (01)hex, soit : ELEVE_SI=(01)hex.
Hop c'est fait. Tenez, cela me fait penser à une autre notion : le masquage. Lorsque vous
programmerez un micro, il arrivera que vous ne vouliez pas changer tous les bits d'un coup. Un
p'tit exemple : voici le registre ELEVE_SI tel que
On souhaite mettre le bit nommé "intelligent" à 1 (si l'on considère qu'il existe des élèves
intelligents en S-SI J), sans toucher aux autres valeurs. Ce qu’on va utiliser, ce sont les "bêtes"
opérateurs logiques (si vous êtes perdu, revoir votre cours). Le plus facile serait de charger une
nouvelle valeur, ce qui donnerait ici ELEVE_SI=(05)hex, mais cela est possible que si l'on
connaît la valeur de tous les bits. Admettons que nous ne connaissons pas les autres valeurs :
nous allons alors créer un masque logique afin de ne pas les modifier (les autres bits peuvent
servir ailleurs). Pour mettre un bit à 1, il faut réaliser un OU (voir les tableaux des opérateurs
logiques de votre cours) entre le bit "intelligent" et le chiffre 1. Ainsi, nous avons 0 OU 1 = 1.
Hop, c'est fait. Maintenant, nous allons préparer le masque des autres bits : pour laisser un bit tel
qu'il est, il faut réaliser un OU entre ce bit et 0. Le masque complet pour ce registre est donc :
(04)hex. Enfin, on applique ce masque au registre :
ELEVE_SI = ELEVE_SI OU (04)hex
Hop voilà, le registre ELEVE_SI devient donc :
Il est bien sûr possible de réaliser l'autre masque, pour mettre un bit à 0 : on utilise ici l'opérateur
ET entre le bit et 0. Pour ne pas modifier les autres bits, on masque aussi mais avec des 1 (voir le
tableau de l'opérateur ET).
Nous aurions eu alors :
ELEVE_SI = ELEVE_SI ET (FB)hex
31 Prof. KHOULJI S.
Microcontrôleur
communication avec l'extérieur (un PC par exemple, pour télécharger un programme) ou pour
dialoguer avec d'autres microcontrôleurs, composants esclaves ou autres modules. Quant aux
ports parallèles, ils constituent la majorité des broches que l'on peut voir sur un microcontrôleur.
Cependant, on programme les ports directement par leur nom pour simplifier la programmation
(il faut configurer les noms). Par exemple, mettons que l’on a le composant fictif suivant qui
possède un port parallèle nommé ELEVE_SI
Comme vous pouvez le voir, les ports sont composés de 8 broches, ce qui forme un octet.
Chaque broche a son propre poids ; on nomme généralement chaque broche en prenant le nom
du port et le poids d'une broche. Par exemple, on appellera la première broche (bit 0) du port
ELEVE_SI (0), puis (1) pour le deuxième bit, (2) pour le troisième et ainsi de suite...
Une dernière chose : il existe trois statuts différents pour les ports.
* Port en entrée : il est capable de recevoir des informations en provenance de l'extérieur.
* Port en sortie : il émet des informations du microcontrôleur vers l'extérieur.
* Port bidirectionnel : il est capable, pour toutes ses broches ou certaines d'entre elles, de
recevoir ou d'émettre des données.
Il s'agit là d'un statut physique, c'est à dire que c'est la fabrication électronique des ports qui
décide dans quel mode il sera capable de fonctionner. Certains microcontrôleurs possèdent des
Port dont certaines broches sont en entrée et d'autres en sortie. Enfin, il est possible sur certains
modèles de définir logicielle ment dans quel mode le Port va fonctionner.
6. Les mémoires
La mémoire est utilisée pour le stockage d’instructions,
de donnée et de la pile (portion mémoire réservée
pour sauvegarder le contexte d’exécution d’une
procédure.
Si on donnait une adresse à chaque bit de mémoire, la
quantité d’adresses serait très élevée. La mémoire est
constituée de cellules de mémorisation binaires,
groupé en mot de 8, 16, 32 ou 64 bits.
La mémoire est adressée par mot de 8 bits (octet).
Une position mémoire est spécifiée par l’adresse d’un
octet.
32 Prof. KHOULJI S.
Microcontrôleur
La majorité de microcontrôleurs utilisent deux zones de mémoires
✓ une pour le programme.
✓ et une pour les variables.
Cette séparation comporte de nombreux avantages, dus aux différences d’utilisation de ces
mémoires.
La mémoire contenant le programme n’est modifiée que lors de la programmation du composant,
elle est bien plus souvent lue.
Elle doit également être sauvegardée lors de coupures d’alimentation
La technologie utilisée est couramment la mémoire Flash
La mémoire contenant les données est autant lue qu’écrire
Elle n’a pas besoin d’être préservé lors des coupures d’alimentation car celles-ci provoquent de
toute façon un redémarrage du composant.
7. Oscillateur :
33 Prof. KHOULJI S.
Microcontrôleur
Un oscillateur électronique est un montage électronique, dont la fonction est de produire
un signal périodique, de forme sinusoïdale, carrée, voire en dents de scie, ou quelconque.
L'oscillateur peut avoir une fréquence fixe ou variable. Il existe deux types d'oscillateurs : les
oscillateurs harmoniques qui produisent un signal sinusoïdal et les oscillateurs de relaxation ne
produisant pas un signal sinusoïdal.
8. Convertisseur analogique-numérique
9. Temporisateur : Timer/compteur
Le temporisateur est utilisé pour contrôler le ‘temps’ et pour contrôler la rapidité du
microcontrôleur.
Un timer est un périphérique matériel permettant de mesurer des durées (généralement inclus
dans les microcontrôleurs). Son rôle est de permettre la synchronisation des opérations que le
microcontrôleur est chargé d'effectuer.
Les timers sont des registres incrémentés à chaque réalisation d’un événement, la valeur de ces
registres pouvant être pré-positionnée à une valeur initiale.
34 Prof. KHOULJI S.
Microcontrôleur
En informatique industrielle, le chien de garde est souvent réalisé par un dispositif électronique,
en général une bascule monostable. Il repose sur le principe que chaque étape du traitement doit
s'exécuter en un temps maximal. À chaque étape, le système arme une temporisation avant son
exécution. Si la bascule retourne à son état stable avant que la tâche ne soit achevée, le chien de
garde se déclenche. Il met en œuvre un système de secours qui peut soit déclencher une alarme,
soit faire redémarrer l'automate, soit mettre en marche un système redondant... Les chiens de
garde sont souvent intégrés aux microcontrôleurs et aux cartes mères dédiées au temps réel.
Quand il est réalisé par logiciel, il s'agit en général d'un compteur qui est régulièrement remis
à zéro. Si le compteur dépasse une valeur donnée (timeout) alors on procède à un
reset (redémarrage) du système. Le chien de garde consiste souvent en un registre qui est mis à
jour via une interruption régulière. Il peut également consister en une routine d'interruption qui
doit effectuer certaines tâches de maintenance avant de redonner la main au programme
principal. Si une routine entre dans une boucle infinie, le compteur du chien de garde ne sera
plus remis à zéro et un reset est ordonné. Le chien de garde permet aussi d'effectuer un
redémarrage si aucune instruction n'est prévue à cet effet. Il suffit alors d'écrire une valeur
dépassant la capacité du compteur directement dans le registre : le chien de garde lancera
le reset.
D'une façon plus générale, il peut également s'agir d'un logiciel destiné à l'observation de
certaines conditions. Par exemple, en matière de sécurité, à s'assurer régulièrement qu'aucune
action malveillante n'est effectuée (dans la mémoire vive en particulier) ou que certaines
conditions de fonctionnement sont bien remplies. Il s'agit généralement de processus ou de
service exécuté en tache de fond et donc, invisible à l'utilisateur.
11. Les interruptions
➢ L'interruption est un mécanisme fondamental de tout processeur. Il permet de prendre en
compte des événements au processeur et de leur associer un traitement spécifique.
➢ L’exécution d’une instruction n’est jamais interrompu en cours; c’est à la fin de
l’instruction en cours lors de l’arrivée de l’événement que le sous programme
d’interruption est exécuté.
➢ Une interruption est un arrêt temporaire de l'exécution normale d'un programme
informatique par le microprocesseur afin d'exécuter un autre programme (appelé routine
d'interruption).
➢ Les interruptions matérielles sont utilisées lorsqu'il est nécessaire de pouvoir réagir en
temps réel à un événement asynchrone, ou bien, de manière plus générale, afin
d'économiser le temps d'exécution lié à une boucle de consultation (polling loop).»
➢ Une interruption peut avoir différentes sources : périphérique d’entrée/sortie, timer,
watchdog (cf. explications plus loin), ...
35 Prof. KHOULJI S.
Microcontrôleur
➢ Les interruptions sont utilisées pour avertir le micro-contrôleur quand une condition est
remplie. En utilisant les interruptions, on évite que le micro-contrôleur reste en attente
inutilement (pooling-loop), elles permettent de gérer les événements asynchrones.
➢ Les interruptions sont, en général, contrôlées par 3 bits :
● Un bit de flag : indique qu’une interruption a été déclenchée et indique la source.
● Un bit de validation : permet à l’utilisateur d’activer ou non une interruption.
● Un bit de priorité : permet de sélectionner la priorité (haute/basse) de l’interruption.
Gestion des priorités : Il existe des interruptions de priorité hautes et basses. À chaque type de
priorité correspond un vecteur d’interruption et donc potentiellement une gestion différente des
Interruptions suivant leur priorité.
36 Prof. KHOULJI S.