# Fiche méthode : Architecture des microcontrôleurs
## I. Introduction aux microcontrôleurs
### A. Définition
- Un microcontrôleur (MCU) est un circuit intégré programmable conçu pour exécuter des tâches spécifiques.
- Il intègre sur une seule puce : CPU, mémoire, et périphériques d'entrée/sortie.
### B. Comparaison MPU vs MCU
1. Microprocesseurs (MPU) :
- Usage général
- Très rapides (GHz)
- Nombreux composants externes
- Consommation d'énergie moyenne à élevée
- Ex: Intel Core i7
2. Microcontrôleurs (MCU) :
- Applications spécialisées
- Relativement lents (MHz)
- Peu de composants externes
- Faible consommation d'énergie
- Ex: Arduino Uno (ATmega328)
### C. Exemple : Arduino Uno
- MCU principal : ATmega328 (8 bits)
- Fréquence : 16 MHz
- Mémoire :
- SRAM : 2 kB
- EEPROM : 1 kB
- Flash : 32 kB
- Programmation via ICSP ou USB
## II. Histoire et évolution des microprocesseurs
### A. Pionniers
1. Charles Babbage (1791-1871) :
- Concept de calculateur mécanique programmable
- Difference Engine et Analytical Engine
2. Alan Turing (1912-1954) :
- Théorie de la Machine Universelle
- Test de Turing
- Machine de Turing
3. John von Neumann (1903-1957) :
- Architecture von Neumann
- Concept de programme stocké
### B. Générations de microprocesseurs
1. 1ère génération (1939-1953) : Tubes à vide
2. 2ème génération (1953-1959) : Transistors
3. 3ème génération (1959-1971) : Circuits intégrés
4. 4ème génération (1971-présent) : Microprocesseurs
### C. Évolution des microprocesseurs
- 1971 : Intel 4004 (4 bits, 60 000 instructions/s)
- 1972 : Intel 8008 (8 bits)
- 1974 : Intel 8080 (8 bits)
- 1978 : Intel 8086 (16 bits)
- 1982 : Intel 80286 (16 bits)
- 1986 : Intel 80386 (32 bits)
- 1993 : Intel Pentium (32 bits)
- 2005 : Intel Core (64 bits, multi-cœurs)
### D. Loi de Moore
- Énoncée par Gordon Moore en 1965
- Prévoit le doublement de la densité des transistors tous les deux ans
- A guidé l'industrie des semi-conducteurs pendant des décennies
## III. Architectures des microprocesseurs
### A. Architecture von Neumann
- Mémoire unique pour les instructions et les données
- Bus de données et d'adresses partagé
- Avantages : simplicité, flexibilité
- Inconvénients : goulot d'étranglement du bus
### B. Architecture Harvard
- Mémoires séparées pour les instructions et les données
- Bus de données et d'instructions séparés
- Avantages : meilleure performance, exécution parallèle
- Utilisée dans de nombreux MCU (ex: PIC, AVR)
### C. Composants principaux
1. Unité Centrale de Traitement (CPU)
2. Unité Arithmétique et Logique (ALU)
3. Registres
4. Compteur de Programme (PC)
5. Registre d'Instruction (IR)
6. Mémoire (RAM, ROM)
7. Bus système et périphériques
## IV. Jeux d'instructions et types de processeurs
### A. CISC (Complex Instruction Set Computer)
- Instructions complexes et variées
- Taille d'instruction variable
- Nombreux modes d'adressage
- Ex: x86
### B. RISC (Reduced Instruction Set Computer)
- Instructions simples et uniformes
- Taille d'instruction fixe
- Moins de modes d'adressage
- Ex: ARM, MIPS
### C. Pipeline
- Étapes : Fetch, Decode, Execute, Write-back
- Permet l'exécution parallèle des instructions
- Améliore les performances du processeur
### D. Cycles par Instruction (CPI)
- Mesure de performance du processeur
- CPI = Nombre de cycles / Nombre d'instructions
- Varie selon le type d'instruction et l'architecture
## V. Programmation des microcontrôleurs
### A. Niveaux de langages
1. Langage machine : code binaire exécutable
2. Assembleur : mnémoniques correspondant au langage machine
3. Langages de haut niveau : C, C++, Python, etc.
### B. Assembleur
- Avantages : contrôle précis, optimisation
- Inconvénients : complexe, spécifique à l'architecture
- Syntaxe : mnémoniques, opérandes, directives
### C. Langages de haut niveau
- Avantages : portabilité, facilité de développement
- Inconvénients : moins optimisé, abstraction du matériel
- Compilation nécessaire
### D. Inline Assembler
- Intégration de code assembleur dans un programme en langage de haut niveau
- Utilisé pour l'optimisation ou l'accès à des fonctionnalités spécifiques du processeur
## VI. Gestion du flux de programme
### A. Sous-programmes
- Sections de code réutilisables
- Utilisation de la pile (stack) pour les appels et retours
- Instructions CALL et RETURN
### B. Branchements conditionnels
- Permet de modifier le flux d'exécution basé sur des conditions
- Instructions de test et de saut (ex: btfsc, btfss, goto)
## VII. Gestion des événements
### A. Polling
- Vérification périodique de l'état des périphériques
- Simple à implémenter mais peut être inefficace
### B. Interruptions
- Réponse asynchrone aux événements
- Types : maskable, non-maskable
- Gestion : vecteurs d'interruption, priorités, ISR (Interrupt Service Routine)
## VIII. Outils de développement
### A. IDE (Integrated Development Environment)
- Ex: MPLAB pour PIC, Arduino IDE
### B. Compilateur et Assembleur
- Traduction du code source en langage machine
### C. Simulateur et Debugger
- Test et débogage des programmes
### D. Programmateur
- Transfert du programme compilé dans la mémoire du MCU
