• Introduction : définitions, sites Internet et biblio., historique, bref rappel sur les technologies et familles logiques, mémoires, …
• Codage de l’information (rappels)
• Architecture interne des microcontrôleurs et fonctionnement
• Différents types et grandes familles de microcontrôleurs
• Applications des microcontrôleurs, futur (TCP-IP, CAN, …)
• Architecture classique d’une carte à microP ou microcontrôleur
• Langages et outils de programmation des microP (introduction)
• Interfaçage des périphériques et décodage, plan mémoire (mapping)
• Périphériques : liaisons série synchrone et asynchrone, ports parallèles, timers, protocoles (introduction), …
• Principe et gestion des interruptions
• Instructions assembleur et modes d’adressage
• Langages évolués
• Critères de choix des microcontrôleurs • Les tendances actuelles :
– DSP, circuits logiques programmables FPGA, mixtes DSP-FPGA, ASIC, analogique programmable, mixtes analog/num programmables, IP microcontrôleur sur FPGA
– Exemples : PSoc (Cypress), PicoBlaze (Xilinx), …
Définitions
• Microprocesseur :
« Le microprocesseur est organisé pour extraire desinstructions de sa mémoire de programmes au cours de cycles d’acquisition et exécuter ces instructions lors de cycles d’exécution »
« C'est le circuit qui se charge de manipuler les données (i.e. calculer) mais c'est aussi le << chef d'orchestre >> de la machine. Il pilote et distribue les tâches. Il est caractérisé par la cadence maximale à laquelle il est capable de travailler, par la taille et le nombre de données qu'il peut manipuler. »
« Le microprocesseur est un circuit intégré logique commandé par un programme. Il est capable :
– d’organiser destransferts d ’informations
– de réaliser desopérations arithmétiques et logiques
• Microcontrôleur :
Sur la même puce que le microprocesseur, divers périphériques et mémoires ont été intégrés. Peut être « généraliste » ou « spécialisé » .
Microprocesseur = orienté « système », modes « utilisateur » et « superviseur »
Microcontrôleur = orienté « contrôle - commande », périphériques spécialisés
• Les sites des principaux fabricants de composants :
Intel, Motorola, Texas Instruments, Microchip, National Semiconductor, Zilog, NEC, ….
• Autres sites intéressants :
- Cours d’électronique, logique, … - Un cours d’initiation aux microcontrôleurs (Université de Lille) :
- Un cours sur les microprocesseurs (SUPELEC Rennes) :
- Un cours sur l’électronique (BTS Nançy) :
- Présentations orales de manifestations organisées par le CRESITT
• « Les microcontrôleurs 4 et 8 bits » C. Tavernier, DUNOD
– Microcontrôleurs, mise en œuvre matérielle, développement et tests
– Microcont. INTEL 8051, Motorola 68HC05 et 68HC11, NEC, SGS Thomson ST6, Texas Instruments TMS370, Microchip PIC et autres ouvrages de C. Tavernier chez DUNOD
• « Le microprocesseur et son environnement », Robert Du Bois, DUNOD Tech – Général. Bonne présentation des réseaux et des périphériques
• « Computer organization and architecture », William Stallings, Prentice Hall, une des références en langue anglaise
• Indispensable :« Le langage C » de B.W. Kernighan et D.M. Ritchie, MASSON
– La référence sur le langage C, avec des exemples
• « Les microprocesseurs 16 bits à la loupe » R. Dubois, D. Girod, EYROLLES
– Très détaillé sur 8086, 6800, Z8000 avec leurs périphériques, coprocesseurs, …
• « Microprocesseurs 16 bits », M. Aumiaux, MASSON
– 8086 et 68000. Très détaillé sur l’interfaçage, les interruptions
• « Le microprocesseur 68000 et sa programmation », P. Jaulent, EYROLLES
• Consulter les «Techniques de l’ingénieur» (B.U. / accessible via internet) :
structures des ordinateurs, microprocesseurs, microélectronique
• Les documentations des fabricants et lesnotes d’applications
• Lisez ( au moins une fois ! ) lesrevues spécialiséesElectronique, Elect.
Internat. Hebdo.,Elektor, etc
• Premiers « calculateurs »
– Machine mécanique de Blaise Pascal (1642)
– Premier langage de communication « universel » : Morse 1837
– Calculateurs mécaniques
– Puis calculateurs électromécaniques (relais)
– Puis calculateurs électroniques : tubes à vide
• ENIAC (1946) : 18000 tubes, 60000 instructions/seconde, 30 tonnes, 75 m2 et 170 kW !
– 1940 : le circuit imprimé
– 1946 : architecture de Von Neumann
– 1947 : invention du transistor (Shockley, Brattain, Bardeen)
– 1950 : mémoires à tores de ferrite
– 1951 : premier ordinateur (UNIVAC)
– 1955 : le langage FORTRAN
– 1958 : premier circuit intégré (Jack Kilby,Texas Instruments)
– 1959 : la technologie « planar » de FAIRCHILD (photolithographie)
– 1960 : le langage COBOL
– 1964 : l’IBM 360 (1er ordinateur à circuits intégrés), code ASCII
– Années 1969-70 : premières RAM et DRAM
– 1969 : le langage PASCAL
– 1970 : IBM 370 (la « mini » informatique)
– 1970 : le langage C
– 1972 : premier microprocesseur 4 bits (Intel 4004) : 2800 transistors et 60000 instructions/seconde
– 1973 : le « Micral » (France, R2E)
– 1974 : microprocesseur 8 bits 6800 de Motorola
– 1974 : la carte à puce (Roland Moreno)
– 1975 : le 8080 d’Intel, le 6800 de Motorola
– 1975 : L’APPLE 2
– 1978 : le réseau TRANSPAC
– 1979 : le 68000 de Motorola (environ 70000 transistors)
– 1979 : le langage ADA
– 1981 : l’IBM PC
– 1983 : 1ère puce VLSI
– 1986 : microP 16 bits, la station SUN
– 1993 : le Pentium
tendance : augmentation de la taille des puces et diminution de la
largeur des interconnexions sur la puce
• Loi de Moore (1965),
Gordon Moore co-fondateur d’Intel :
– Hypothèse 1 : nombre des transistors sur une puce doublé tous les 18 mois
– Hypothèse 1 : nombre des transistors sur une puce doublé tous les 24 mois
Pour le moment, cette loi s’est toujours vérifiée
1971:
Le 4004 d’Intel fut le premier microprocesseur du monde (4 bits) : 2800 transistors et 60000 instructions/seconde
Petit historique des microprocesseurs :
• Les premiers (4 bits) :
PACE de NATIONAL SEMICONDUCTOR (N.S.)
4004 d’ INTEL
• La première génération de microprocesseurs : TMS9900TEXAS INSTRUMENTS (T.I.)
CP16000 GENERAL INSTRUMENTS (G.I.) 9440 FAIRCHILD
Mn602 DATA GENERAL
8080 INTEL
6800 MOTOROLA Z80 ZILOG
• La deuxième génération : années 1980
MC68000 MOTOROLA
8086 INTEL
Z8000 ZILOG
NS16000 NATIONAL SEMICONDUCTOR
• Présentation, historique :
• né en 1979, technologie VLSI HMOS , environ 68000 transistors
(existe en version CMOS MC68HC000)
• environ 1,6 MIPS (100 MIPS pour 68060 à 66 MHz) • versions 8 à 16 MHz, gammes de températures diverses
• microprocesseur 16 bits ‘ pseudo 32 bits ‘ :
• bus de données 16 bits, bus adresse 24 bits
• conçu pour opérer sur des mots de 32 bits : 16 registres généraux de 32 bits
• architecture classique
• modes utilisateur ou superviseur, instructions de haut niveau
• gestion des interruptions matérielles et logicielles ( traps ) trés élaborée
• configuration multi-processeur
• secondes sources : THOMSON , ROCKWELL , HITACHI , PHILIPS
• alimentation : 5V / 1,4W à 10 Mhz et 20°C
• Bus de données et adresses séparés, compteur ordinal de 24 bits :
==>16 millions d’octets adressables sans multiplexage ( 8 mégamots de
16 bits)
56 instructions seulement mais 14 modes d’adressage
==> plus de 1000 combinaisons possibles
• Adressage supportant 5 types de données : bits, digits BCD (4bits), octets, mots de 16 et 32 bits (longs)
• Adressage des périphériques comme de la mémoire ( memory mapped )
• Boitier standard : 64 broches DIL ou 68 broches PLCC
• Tout type d’applications : calcul, gestion, ordinateurs individuels
(ATARI ST, AMIGA, Mac ), applications industrielles temps réel
(système temps réel OS9, bus VME )
• Coupleurs spéciaux : MC68451 unité de gestion de la mémoire (MMU), MC68120 processeur d’entrée / sortie, MC68122 processeur de communication, MC68450 circuit d’accès direct à la mémoire (DMAC) MC68454 contrôleur de disque, MC68681 double contrôleur série, asynchrone MC68881 coprocesseur arithmétique flottant format IEEE, MC68230 interface parallèle / timer (PI/T)
1997: Processeur Pentium® II
Le processeur Pentium® II (7.5 millions de transistors), intègre la technologie MMX™ d'Intel spécialement conçue pour améliorer le traitement de la vidéo, du son, et des données graphiques. Il est placé avec une mémoire cache rapide dans une cartouche S.E.C. (Single Edge Contact) connectée à la carte mère par un connecteur à une seule face et non à brochage multiple.
Conception logique moderne : utilisation de circuits logiques programmables
4 architectures de base, 2 grands types
(CPLD : décodage, contrôle, FPGA : traitement)
Les familles logiques (rappels)
• L'ordinateur ne comprend que deux valeurs : 0 et 1 (codage « binaire ») correspondant aux niveaux logiques de sa technologie interne et n'accepte que certains caractères.
Technologie la plus basique : interrupteur ouvert ou fermé.
• Etats logiques « haut » et « bas » : en logique positive (0, 5 volts) TTL
• « 0 » logique (« FAUX » en logique booléenne) = niveau bas (0 volt)
• « 1 » logique (« VRAI » en logique booléenne)= niveau haut (5 volts)
• Selon le type de technologie logique utilisée on aura différentes plages de tension d’entrée (valeurs admissibles) correspondant à des niveaux logiques 1 ou 0
• Selon le type de technologie logique utilisée on aura différents niveaux d’immunité aux bruits (niveau maximal de bruit pouvant se superposer aux niveaux logiques sans déclancher intempestivement)
• Selon le type de technologie logique utilisée on aura différentes sortances (nombre d’entrées logiques pouvant être connectées sur une sortie).
• Selon le type de technologie logique utilisée on aura différentes plages de tension d’alimentation (les niveaux d’entrée et sortie dépendront bien sur de cette tension d’alimentation).
Les familles logiques (rappels)
• Selon le type de technologie logique utilisée on aura différentesfréquences de fonctionnement (« vitesse ») maximales et différentes consommations électriques (typiques)
• Selon le type de technologie logique utilisée on aura différentesimpédances d’entrée (capacité d’entrée de quelques pF et capacité de sortie) et courant de sortie maxi
• Attention à la compatibilité entre les différentes familles logiques / différentes tensions d’alimentation, …
• Vous pourrez également commuter des signaux analogiques (portes analogiques type 4066, multiplexeurs analogiques par exemple)
• Conception de cartes (interface mémoire / décodage) :
– Lire les data sheet ! : valeur Max et Min, valeur typique
– Utiliser les valeurs typiques (ou le pire cas) pour les conception des cartes (par exemple temps d’accès typique des circuits mémoires ou périphériques)
– Vérifier que le tout fonctionne dans les cas les plus défavorables (min et max)
Technologie TTL ( Transistor - Transistor - Logic ) à transistors bipolaires
TTL standard 74XX
TTL low power ( faible consommation ) 74LXX
TTL schottky 74SXX
TTL fast 74FXX
TTL low power schottky 74LSXX
TTL advanced schottky 74ASXX
TTL advanced low power schottky 74ALSXX
Technologie CMOS ( Complémentary - Métal - Oxide - Semiconducteur ) à transistors Mos :
CMOS rapides 74HCXX ou 74HCTXX
CMOS classiques 74CXX ou 4000UB
4000B bufférisées (sorties amplifiées)
Tensions d'alimentation
74, 74L, 74S, 74F, 74LS : 5V ( 5% )
74ALS, 74AS, 74HCT : 5V ( 10% )
74HC : 2V à 6V
74C et série 4000 (B et UB) : 3V à 15V
Tendance pour les microprocesseurs = 2,5 V ou moins
Avantages des circuits CMOS
• faible puissance dissipée ( < 10 mW par opérateur )
• large plage de tension de fonctionnement
• gamme de température de fonctionnement ( de - 40 à 85°C )
• sortance élevée
• pour la série B : sorties bufférisés, vitesse de fonctionnement plus élevée que la série UB ( CMOS classique ), excellente immunité aux bruits
Fréquence maximale
• La vitesse de fonctionnement de la série CMOS est plus faible que celle de la série TTL 74LS.
• La fréquence maximale croît avec la tension, ce qui augmente d'une manière importante la dissipation de puissance dynamique.
• En CMOS la consommation en fonction de la fréquence de fonctionnement
Sortance :Correspond à la charge maximale que peut commander un opérateur.
Temps de propagation :Ce temps représente le temps que met le signal à franchir l'opérateur logique (retard). Ce temps ainsi que la fréquence maximale de l'horloge permet de juger de la rapidité des circuits, beaucoup plus faible en CMOS 4000 qu'en TTL.
Pour connecter des familles différentes (TTL et CMOS par exemple), deux conditions sont nécessaires :
– à l'état haut : la tension VOH ( voltage output hight ), doit être supérieure ou égale à la tension d'entrée VIH ( voltage input hight ), du circuit commandé. – à l'état bas : la tension VOL ( voltage output low ), doit être inférieure ou égale à la tension d'entrée VIL ( voltage input low ), du circuit commandé.
• Mémoires vives (RAM) « volatile » : Random Access Memory
– RAM statiques SRAM :
• Bascules D = mémoire élémentaire
• Signaux de lecture (RD), écriture (WR), sélection du boîtier CS, adresse (A0 à An) et données (D0 à Dx)
• Attention aux temps d’accès pour le décodage (adress access time maximum)
– RAM dynamiques DRAM : capacité plus grande que les RAM statiques mais mise œuvre plus complexe
• Stockage des informations sous forme capacitive (capa drain-source d’un transistor MOS) : nécessite un rafraichissement périodique (cycles RAS/CAS)
– cf mémoire sur cartes à puces, RAM vidéo, RAM sauvegardée, …
• Mémoires mortes (ROM) « permanente » : Read Only Memory
• ROM : programmées à la fabrication (par masque, pour grandes séries) • PROM : programmable
– Une fois : One Time Programmable OTP (faible coût, petites séries ou prototypes)
– Plusieurs fois : programmable et effaçable
» UVPROM : effaçable par exposition aux UV, programmation hors carte
» EEPROM : Effacement (octet par octet) et pro. In situ (sur la carte) électriquement
» FLASH : Effacement (totalité) et pro. In situ (sur la carte) électriquement
• Utilisation d’un « programmateur de PROM » (par ex. DataIO) avec algorithme de programmation intelligent
• L’unité de codage est leBIT(binary digit) : 0 ou 1
• Codage : Binaire
– Binaire naturel : 0 ou 1
• Ex: 27d devient 0001 1011 en binaire (25d = 16d + 8d + 1d = 24+ 23+ 21+20) – Le « BCD » Binary Coded Decimal : 0 à 9 codés sur 4 bits
• Ex: 27d devient 0010 0111 en BCD
– Code octal (base 8)
• Ex: 27d devient 33o (25d = 3x81+ 3x80)
– Hexadécimal (base 16) : 0 à 15 (en décimal) codés de « 0 » à « F » (en hexa)
• Ex: 27d devient 1bH (27d = 1x16 + 11)
• Le traitement de l’information utilise leMOT
– mot de 4 bits « quartet »
– mot de 8 bits « octet » ( byte ) : de 0 à 255, codage des caractères en code ASCII, par ex. : RC (retour chariot) : 0Dhexa, Line Feed (saut de ligne) 0Ahexa, nombres de 0 à 9 codes 30h à 39h, ….
– mot de 16 bits : codage de nombres entiers non signés de 0 à 65535, par ex.
Codage des nombres non signés : binaire (base 2) octal (base 8)
• Codage des nombres entiers signés
– Le plus simple : 1 bit de signe + valeur absolue – Complément à 2 :
• Changement de signe en C2 : complémenter tous les bits et ajouter 1
– Binaire décalé (sortie des convertisseurs analogiques-numériques, par ex.)
• Passage du C2 en binaire décalé : complémenter le bit de poids fort (par exemple OU exclusif en 8 bits : XOR 80H)
• Codage des nombres flottants (signés)
– 32 bits (4 octets) : 1 Bit de signe + 7 bits mantisse + 24 bits exposant
– Format 32 bits IEEE (float) ou format long 64 bits
Exemple de la structure interne du
microprocesseur
« 68000 » de
Motorola
– Unité centrale (UC, CPU) cadencée par une horloge
• Unité Arithm. et Logique, unité de commande, registres – 3 bus distincts pour véhiculer les informations :
• le BUS DONNEES (data bus) : la taille du bus données permet de distinguer les microprocesseurs 8 bits, 16 bits ,
– Transfert des données de la mémoire programme (ROM) vers l ’UC
– Transfert des données de ou vers la mémoire vive (RAM)
– Transfert des données de ou vers les ports d ’entrée-sortie
• le BUS ADRESSES (adress bus) : la taille de ce bus détermine l ’espace mémoire accessible directement
– adresse de l ’instruction à lire en mémoire programme
– adresse de la données à lire ou écrire en mémoire donnée
– adresse du périphérique à lire (entrée) ou à écrire (sortie, commande)
• le BUS CONTROLE (control bus):
– sélectionne et oriente l ’accès aux mémoires ou périphériques (RD, WR, ALE, …)
– interruptions, signaux DMA, reset, ..
• Certains bus et certaines lignes du bus contrôle utilisent des buffers trois-états (tri-state) : lecture (in), écriture (out), haute impédance (Z)
– bus données : trois états (« tri-state »), bi-directionnel
– bus adresse : mono-directionnel
• L'état haute impédance est un état électrique, et ne peut en aucun cas être considéré comme un état logique. Dans un état haute impédance noté Z ( niveau haute impédance ), les sorties peuvent être considérées comme électriquement déconnectées, ( circuit ouvert ) du reste de la structure. La mise en état « haute impédance » se fait à l’aide d’une entrée spécifique du circuit (validation). Les circuits 3 états sont surtout utilisés dans la gestion des BUS.
• Pour limiter le nombre de broches du composant électronique, certains constructeurs utilisent des bus adresses et données multiplexés. Les mêmes « fils » véhiculent des signaux AD ou DATA, et un démultiplexage (74HC573 par exemple) doit être réalisé sur la carte en utilisant des signaux de contrôle (Adress Latch Enable ALE).
• On représente le plan mémoire(memory MAP) de la carte microprocesseur ou microcontrôleur, par exemple :
FFFF hexaZone mémoire
accessible par le
8000 hexa
64 microcontrôleur
Koctets7FFF hexade 0000H à FFFFH
soit 64 Koctets
0000 hexa
• Chaque microprocesseur possède des registres internes :
– l ’accumulateurACC, ou ACCU : il joue un rôle fondamental dans les opérations arithmétiques et les transferts de données,
notamment pour les microP ou microC 8 bits
– les registres temporaires et registres de travail : en nombre très différent selon le type de microP
– des registres d ’état ( status register SR) : bits pour interruptions, dépassement (overflow), retenue (carry, C), parité (P), signe (S), ..;
– le pointeur de programme ou compteur ordinal (Program Counter, PC) : pointe l ’adresse de la prochaine instruction à
exécuter (à rechercher en mémoire)
– le pointeur de pile (Stack Pointer, SP) : permet de gérer la pile (stack) :
• en général la pile est une zone mémoire vive qui permet de stocker des informations (retour de sous-programmes, sauvegardes de registres, interruptions).
• la pile est gérée en mode LIFO (Last In First Out)
Registre d’état
(status register SR) Exemple du
68000
– Le compteur programme (PC : program counter) contient à chaque instant l’adresse mémoire à laquelle se trouve l’instruction à exécuter
– Unité centrale (UC, CPU) cadencée par une horloge : lire / décoder / éxécuter une instruction, et préparer l’instruction suivante
• Unité de commande : charge (lire) une instruction : cycle « fetch » et la décode : cycle « décode ». Elle séquence les instructions.
• Unité Arithm. et Logique (ALU) : exécute l’instruction,
§ Le CPU incrémente le PC pour pointer sur l’instruction suivante à exécuter et le cycle recommence.
§ Registres : mémoires internes à accès très rapide permettant de stocker les informations ou les résultats temporaires.
• accumulateur ACC, registres d’état SR, compteur de programme PC, compteur de pile SP , registres d’index, …
– l ’Unité Arithmétique et Logique (ALU) : effectue les opérations arithmétiques et logiques de base.
Elles est composée essentiellement de :
• Additionneur n bits, soustracteur
• portes et fonctions logiques (décalages, rotations)
Cycles d’exécution d’une instruction :
Cycles :
• Lecture (FETCH)
• Décodage (DECODE)
• Exécution (EXECUTE)
• Préparation de l’instruction suivante
Décodage d’une instruction
Micro processeur type
Architecture interne : exemple du 80C52
Circuit superviseur d’alimentation
(et reset)
Les grandes familles de microcontrôleurs
• Microcontrôleurs « bas de gamme » :
– Exemple : PIC de MicroChip, 68HC05 de Motorola
• Très faible coût (PIC 12CE67X quelques francs)
• Oscillateur, convertisseur A/N, Timer, Intégrés
• 8 broches
• Microcontrôleurs « milieu de gamme » :
– Exemple MC68HC11K4 de Motorola, 8051 d ’Intel
• Microcontrôleurs « haut de gamme » :
– Exemple : MPC555 de Motorola
• Prix : plusieurs 100 F
• Boîtier BGA 272 broches
• Flash EPROM interne, A/D 32 voies, contrôleur bus CAN,
• Les microcontrôleurs orientés « système »
Structure interne :
• type « Von Neumann » = Structure de base des microprocesseurs (modèle de Von Neumann de 1945) : 68HC11 par ex.
• type « Harvard » :
- Mémoires programme et données séparées, plus rapide : PIC de Microchip par ex.
• type « pipeline » : type DSP (digital signal processor) Jeu d’instructions :
• Architecture CISC : complex instruction set computer
• Architecture RISC : reduced instruction set computer,cf PIC
• jeu d’instructions réduit et câblé (donc rapide)
• une instruction par cycle
• Instructions spécialisées : instruction MAC des DSP par exemple
• Structure de base des microprocesseurs
• la mémoire contient les instructions (programme) et les données • un seul bus interne
• Mémoires programme et données séparées, plus rapide
• processeurs de traitement du signal (digital signal processor DSP) et microprocesseurs rapides • plusieurs bus internes
Instruction MAC (multiplication – accumulation) des DSP
- Réalisation rapide de sommes pondérées (filtres numériques, FFT, …)
Structure interne de type « pipeline » : le TMS320C30
• Architecture Harvard, arithmétique virgule fixe
• Instruction MAC (multiplication / accumulation)
CISC : complex instruction set computer
RISC : reduced instruction set computer
MICROCONTROLEURSRISC
CONCEPTION :
• Régularité du traitement des instructions (1 instr./cycle)
• Modèle à registres (opérations sur registres)
• Peu de modes d’adressage – formats d’instruction • Utilisation intensive du pipeline
Bonne efficacité pour la programmation en langage de haut niveau (C / C++ )
Haute vitesse de traitement : 200 – 400 Mips
• On peut tenter d'évaluer les performances d'un microprocesseur en comptant le nombre d'instructions qu'il est capable d'exécuter en une seconde. Les instructions bien qu'élémentaires peuvent s'exécuter en des temps assez différents suivant leur niveau de complexité, entre 1 et 10 cycles d'horloge pour les machines de type PC. Les unités pour ce type d'évaluation sont leMIPS (millions d'instructions par seconde) pour les calculs entiers et leMFLOPS (millions d'opérations flottantes par seconde) pour les calculs avec virgule.
• On utilise des programmes de tests « Benchmarks »
• Evaluation de la puissance « crête » (hors accès mémoire, périphériques, affichage des résultats)
• Puissance liée :
– Au temps de cycle (vitesse d’horloge)
– À l’architecture interne du microP (pipeline ?)
Langages et outils
de programmation des microprocesseurs
• Le microcontrôleur est un composant électronique, donc il faut connaître :
- la notice technique du constructeur ( « data-sheet » ) et les notes d’applications principales
- technologie (alimentation, compatibilité) et architecture interne
- famille logique / interface
- caractéristiques électriques
- jeu d’instructions / adressage / format interne - vitesse / temps de cycle - différentes versions :
- gammes de température : commerciale, étendue, militaire
- vitesse / consommation / performances
- type de boîtiers DIL, PLCC, CMS (Attention à la CAO !) - versions EEPROM, UVPROM, FLASH, OTP,
- prix / disponibilité (quantité) / délais
Langages et outils de programmation des microprocesseurs
- « secondes sources » , prix, disponibilité, obsolescence - les circuits périphériques facilement utilisables :
- de la même famille : séries 6800, 68000
- d’autres constructeurs : INTEL, N.S., T.I.
• C’est un composant programmable, donc il faut connaître :
- les outils de programmation à sa disposition :
- assembleur : lié au jeu d’instructions du composant
- compilateurs : langage C, C++, PASCAL, FORTRAN, BASIC compilé ,
- interpréteurs : BASIC interprété
- simulateurs
- la documentation et notes d ’applications du constructeur
Langages et outils de programmation des microprocesseurs
• - les outils de développement à sa disposition :
- debuggers
- simulateurs
- kit, carte d’évaluation ( EVMxxx )
- émulateurs
• Pour le développement matériel ( hardware ) il faut utiliser :
- l’oscilloscope
- l’émulateur temps réel
- l’analyseur logique
- le programmateur d’EPROM, de FLASH, …
Emulateur temps réel
Applications des microcontrôleurs
BUS
• Simple • CISC • RISC | Programme • EPROM Flash Données • RAM • EEPROM | Génériques Spécifiques • Réseaux • Analogiques • Pilotage (PWM) |
Un élément important : le type de boîtier
Exemple du microcontrôleur Dallas compatible 80C52
Exemple d’afficheur LCD (avec interface série)
• Périphériques ou mémoires « compatibles microprocesseur » : accès aux registres internes, mémoires, ports, directement via les bus adresses/données :
– Nécessitent un décodage classique
– Gestion par « pulling », par interruption ou par DMA
• Périphériques ou mémoires sur bus série :
– Interface série synchrone SPI : liaison 3 fils
• MISO (Master In Slave Out) : esclave vers maître
• MOSI (Master Out Slave In) : maître vers esclave
• SCK (Serial Clock) : horloge du maître vers les esclaves
– Bus I2C (Inter Integrated Circuit, Philips) : bus bifilaire
• SDA (Serial Data) : IN ou OUT
• SCL (Serial Clock)
• Et la masse
– Ethernet …
– Voir les protocoles associés
Exemple de périphérique avec interfaçage de type I2C
(thermomètre)
Type « port parallèle » du PC
• registres internes accessibles en lecture ou écriture
• « interfaçable microP »
: bus D0 – D7, R/W, Enable, Chip Select
• sorties interruption
IRQ
• Pour accéder (sélectionner en lecture ou en écriture à une adresse physique donnée) à un périphérique (interface série, //, convertisseurs A/D ou D/A, …) ou à un boîtier mémoire (ROM, RAM), il faut réaliser un décodage :
– soit avec des circuits logiques classiques (portes)
– soit avec des circuits logiques spécifiques (décodeurs)
– soit avec des circuits logiques programmables (PAL, CPLD, …) = solution la pus moderne et la plus souple
• Le décodage doit prendre en compte le « timing » du microprocesseur :
– Timing des signaux d’écriture externe (WR), lecture externe (RD), signaux de contrôle (adress latch enable ALE) : doc. constructeur
– Temps d’accès des boîtiers périphériques ou mémoire externe : doc. constructeur
– Prise en compte des retards dus aux portes, décodeurs
– Utiliser des cycles d’attente (« wait state ») si nécessaire
• Penser à l’état du décodage à la mise sous tension et lors de la coupure d’alimentation
• Attention aux conflits de bus (plusieurs circuits sélectionnés en même temps) !
• Il y a 2 grands types d’adressage pour les périphériques :
– Memory mapped I/O : pas de différence entre un périphérique (ou un de ses registres internes) et une adresse mémoire externe
=> attention au plan mémoire (mapping), recouvrements possibles
– I/O mapped I/O: possible seulement avec certains microprocesseurs disposant d’instructions spécifiques pour l’accès
(lecture / écriture) aux entrées-sorties (I/O) : 8085 Intel, 8088, 20286, …. Un signal de contrôle spécifique (IO/M) permet de décoder la mémoire ou les périphériques, donc pas de
recouvrement possible : 2 plans mémoires distincts (mémoire et I/O)
• Attention aux conflits de bus !
Décodage des boîtiers mémoire externes :
exemple d’utilisation d’un décodeur
Décoder = sélectionner un périphérique (composant) et un seul = écrire ( ou lire ) dans ce périphérique
Solution plus moderne pour le décodage de
périphériques :
Utilisation de circuits logiques
programmables (PAL, PLD)
Décodage utilisant un circuit « décodeur »
Décodage des boîtiers mémoire externes : exemple d’utilisation d’un circuit programmable
Solution plus moderne pour le décodage de périphériques :
Utilisation de circuits logiques programmables (PAL, PLD)
Liaisons séries : modes d’échanges
• Simplex / half duplex / full duplex
Système 1 Système 2
Émetteur Récepteur
Simplex
Émetteur Récepteu |
Système 1
r
Half Duplex
Système 1 Système 2
Émetteur Récep
ET
Récepteur teurÉmetteur
Full-Duplex
• type « RS232 » (COM1 du PC par exemple), horloges Rx et Tx # égales
• start bit / stop bit : permettent de détecter l’arrivée d’un caractère
• bit de parité éventuel (somme des bits à 1 : si nombre paire parité paire, ..). Permet la détection des erreurs de transmission.
• plus lent que liaison synchrone, plus simple
• les caractères peuvent arriver de façon aléatoire, à des intervalles quelconques
• horloge de transmission (Tx) = horloge de réception (Rx)
• transmission de l’horloge (par fil séparé)
• ou synchro. du récepteur par le signal (utilisation de PLL)
• données émises par blocs (trames) et suivant un protocole de transmission (les caractères se suivent sans séparation)
• caractères de synchronisation en début et fin de blocs
• Détection d’erreur par bloc avec CRC (cyclic redundancy check)
• utilisation d’une pile d’émission FIFO
• Exemple : bus SPI
• Transmissions parallèles : bus des ordinateurs ISA, PCMCIA, VME, …
• Transmissions de type « réseau » :
– Point à Point
– Multipoint
– Topologies de réseau en étoile, en anneau, …
Liaison série
Liaison série
Caractéristiques principales des normes de liaison série
• RS232C
• RS423
• RS422 (différentiel)
• Nécessite de coder l’information pour adapter le signal émis au support de transmission (fil, fibre, radio, IR, …) : tenir compte de la bande passante du canal (câble), du bruit (radiofréquences), des impédances (téléphonie), …
• Coder le signal binaire (0,1) : – en 2 niveaux (-V,+V) :
• codage NRZ (0,1) => (-V,+V)
• Codage Manchester : on introduit des transitions au milieu de chaque bit pour synchroniser l’horloge de réception. Codage de 01011000 :
– en 3 niveaux (-V,0 volt,+V) :
• Codage bipolaire simple : « 0 » => 0 volt et « 1 » vaut alternativement –V ou +V
• Etats logiques « haut » et « bas » : en logique positive (0, 5 volts)
• « 0 » logique = niveau bas (0 volt généralement)
• « 1 » logique = niveau haut (5 volts généralement)
• Les pseudo-instructions sont des instructions que l'assembleur doit exécuter. Pour cela, il utilise ses registres internes.
• Dans le programme (le « code »), on distingue trois types de données :
• les données immédiates (400h, )
• les constantes : définir l'identificateur et le type de la variable
• les zones de mémoire réservées (pour des variables, des tableaux de variables par exemple)
• Une donnée peut être :
Identificateur
Mnémonique de l'instruction
Opérande
Commentaire
NOTIONS DE BASE :
• Le « langage» est un code qui permet de converser avec la machine (le microprocesseur ou le microcontrôleur ici ).
On peut distinguer trois niveaux d’utilisation :
langage machine, langage assembleur, langage évolué
– niveau 0 : langage machine , une instruction est codée en binaire et stockée sur un ou plusieurs octets (dans la mémoire programme).
• Il est lié au fonctionnement réel ( interne ) de la machine .
• Il dépend donc du type de machine ( ou microprocesseur ) . Ex 1 : 1 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0
– niveau 1 : langage assembleur, les instructions utilisent des mnémoniques plus faciles à mémoriser et interpréter par l’opérateur humain.
• Il dépend encore de la machine, mais certaines ressemblances existent (ADD, LD, …)
• L’assembleur va traduire ce langage de niveau 1 en code machine Ex 2 : ADD # 66,D0 équivaut à l’exemple 1
- niveau 2 : langage évolué, ou langage de haut niveau.
Par exemple PASCAL, FORTRAN, C, C++, COBOL,JAVA,
• Il est quasiment standardisé (C de Kernighan et Richie, norme ANSI),
• Une ligne de programmation en C, par exemple, va être traduite par le compilateur en une suite d’instructions assembleur, donc comprises par l’outil assembleur.
• Il existe de très bonnes bibliothèques (librairies) en assembleur ou langage évolué : calcul, traitement du signal, compression d’images, …
• Un programme réalisant les mêmes fonctions, les mêmes calculs (avec les mêmes résultats) peut être écrit en langage machine, en langage assembleur ou en langage évolué. Les différences seront essentiellement :
– Taille du programme
– Rapidité du programme
– Portabilité
– Maintenabilité
– Temps de développement
– Documentation
Lecompilateurest donc spécifique à la machine et lié au langage évolué, mais plusieurs compilateurs peuvent générer un code compatible .
C’est l’éditeur de liens( linker )qui va, entre autre, permettre de fabriquer un seul Polytech Orléans - SG - 2004 119
programme exécutable à partir de codes générés par ces compilateurs différents.
Phases de traduction d’un programme
• L ’instruction assembleur comprend :
– un code opératoire (type d ’instruction) : (op)
– un ou des opérandes(source ou destination, donnée ou adresse)
• Les instructions assembleurs comportant en général 2 opérandes, l'instruction est en fait de type :
(opérande destination) | (op) | (opérande | source) | -> | (opérande |
destination) ou pour les instructions d'échange de données :
(opérande source) -> (opérande destination)
• La façon de spécifier la source et la destination des données s ’appelle lemode d ’adressage. Un microprocesseur puissant possédera des modes d’adressages complexes (échanges de données rapides, boucles, indexation).
Exemple du PIC (Microchip)
Processeur RISC
• Une adresse peut être spécifiée de multiples façons, et ce pour l'ensemble des instructions : mode d’adressage
• Instructions assembleur : on peut distinguer (exemple du 68000 Motorola) :
• les instructions de base (LD, MOV)
• les instructions arithmétiques (DEC, ADC, ADD, SBB, SUB, MUL, IMUL, DIV, IDIV, NEG, INC)
• les instructions logiques (AND, OR, XOR, NOT, TEST)
• les instructions de décalage et de rotation (SHL, SHR, SAR, SAL)
• les instructions de pile (PUSH, POP, PUSHF, POPF)
• les instructions de manipulation de chaînes de caractères (CLD, STD, MOVSB, MOVSW, REP ,
• Lesinstructions de sautconditionnel et inconditionnel (JMP, INT)
• Lesinstructions de test:
– Les tests d’identificateur (JZ, JE, JNZ, JNE, JC, JNC, JS, JNS, JO, JNO)
– Les tests arithmétiques (CMP)
– Les tests de nombres non signés (JA, JAE, JC, JNA, JNAE, JNBE, JNC, JNZ, JZ)
– Les tests de nombres signés (JE, JG, JGE, JL, JLE, JNE, JNL, JNLE, JNG, JNGE, JNZ, JZ)
• Lesinstructions de boucle(LOOP, LOOPE, LOOPNE)
• Les procédures (PROC, CALL, RET) et leurs paramètres
• Les instructions de gestion des adresses (LEA, LES, LDS)
• Modes d ’adressage classiques :
– adressage direct
• l ’adresse réelle est indiquée dans l’instruction : 2 octets (16 bits) permettent d ’accéder directement à 64 Koctets de mémoire (216 = 65536)
• direct relatif : un seul octet ajouté au PC permet d ’accéder à une page de la mémoire (28 = 256 octets). Code plus court, instruction plus rapide
– adressage indirect : fonctionnement type « pointeur »
– adressage indexé : la valeur du registre d ’index est ajoutée à l ’adresse calculée (déplacement)
• addlw ajoute une constante à W. Résultat dans W
• addwf ajoute W à F. Résultat dans W (si d=0) ou dans F
• (si d=1)
• andlw effectue un ET entre une constante et W. Résultat dans W
• andwf effectue un ET entre W et F. Résultat dans W (si d=0) ou dans F (si d=1)
• bcf fait passer un bit de F à 0
• bsf fait passer un bit de F à 1
• btfsc teste certains bits de F. Incrémente PC s'il sont à 0
• btfss teste certains bits de F. Incrémente PC s'il sont à 1
• call place dans PC l'adresse d'un sous programme
• clrf place zéro dans F
• clrw place zéro dans W et fait passer Z à 1
• clrwdt initialise le timer du chien de garde
• comf complémente F à 1
• decf décrémente F
• decfsz décrémente F. Si 0, Incrémente PC
• goto charge une adresse dans PC
• incf Incrémente F
• incfsz Incrémente F. Si 0, Incrémente PC
• iorlw effectue un OU inclusif entre une constante et F
• iorwf effectue un OU inclusif entre W et F
• movf si d=0, charge F dans W , sinon réécrit F dans F
• movlw charge une cste 8 bit dans W
• movwf stocke W vers F
• nop ne fait rien en gaspillant une période d'horloge
• retfie retourne d'une interruption
• retlw retourne d'un sous programme et place une constante dans W
• return retourne d'un sous programme
• rlf effectue une rotation de bits à gauche à travers Carry
• rrf effectue une rotation de bits à droite à travers Carry
• sleep fait passer le PIC en mode veille
• sublw soustrait W d'une constante
• subwf soustrait W de F
• swapf permute les deux quartets de F
• xorlw effectue un OU exclusif entre une constante et W.
• Résultat dans W
• xorwf effectue un OU exclusif entre W et F.
Résultat dans W (si d=0) ou dans F (si d=1)
• Langage C :
– Inventé par Dennis Ritchie sur système UNIX (écrit en C), en 1972
– Normalisé en 1983 (le « C ANSI ») par l’American National Standards Institute
– Très concis
– Conçu pour être efficace (code généré très court) et portable facilement sur différentes machines, à condition de respecter les règles ANSI – Le langage de référence pour tous les petits ou moyens processeurs
• C++ :
– Extension du C
– Classes, objets, constructeur/destructeur, allocateur/ desallocateur, … – Moyens ou gros microcontrôleurs
• JAVA…
#include <sdtio.h>// Directive de compilation indiquant d’inclure la bibliothèque E/S standard
#include <reg_uc.h>// Directive de compilation indiquant d’inclure la biblio. spécifique au µC
#define clear=0x00// Directive de compilation indiquant des équivalences char val1=0xA5; // Déclaration d’une variable “caractère” avec valeur initiale int val2; // Déclaration d’une variable “nombre entier” void tempo(char temps)
{corps du sous programme tempo
}void main(void) // Programme principal
{
DDRBA=0xFF // initialisation et configuration
while (1) // Boucle principaleProgramme
principal
{(main)
}
}
void nmi(void)interrupt 0 // Sous programme d’interruption
{
}
Déclarations de types du langage C : char, int, float
Déclarations de types spécifiques aux microcontrôleurs :
Types structurés à maîtriser : chaînes de caractères, tableaux et pointeurs
Il existe dans tous les compilateurs “C” des bibliothèques de fonctions prédéfinies. La plus utilisée est <stdio.h> qui est propre au organes d’entrées / sorties standards. Dans le cas des ordinateurs ces organes sont le clavier et l’écran et ces bibliothèques sont fournies. Dans le cas d’un microcontrôleur ces organes sont généralement les interfaces séries ou parallèles du composant.
Dans cette bibliothèque on trouve les fonctions suivantes :
Printf() : écriture formatée de données. scanf() : lecture formatée de données.
Putchar() : écriture d'un caractère. getchar() : lecture d'un caractère.
Ces fonctions doivent être écrites spécifiquement pour la cible matérielle
(dépend du mapping de la carte, du décodage, des périphériques, …)
Notion de système temps réel
Exemple d’0S9
(cartes Gespac
68000) - Notions de multitâches, de processus, de séquenceur
• Action/événement sur un périphérique (exemple : appui sur une touche clavier ou caractère reçu par l’UART)
– Soit le microP scrute (lit en boucle) en permanence les périphériques (lent) : «pooling »
– Soit accès direct du périphérique à la mémoire ou aux ressources du système (par ex. le caractère série reçu par l’UART est placé en mémoire) sans intervention du microP : « DMA » (accès direct mémoire)
– Soit le périphérique alerte le microP (interruption), celui-ci pouvant décider de prendre en charge la demande immédiatement (inerrupt. prioritaire), de la reporter (interrup. non prioritaire) ou de la rejetter (interrupt. non validée)
• Pour autoriser ou interdire les interrup.(sauf NMI), fixer les priorité : gestion du masque d’interruption (en général positionnement de bits dans le registre d’état)
• NMI (ou Reset) = interruptions non masquables
• Le périphérique alerte le microP (interruption), celui-ci pouvant décider de prendre en charge la demande immédiatement (inerruption prioritaire), de la reporter (interruption non prioritaire) ou de la rejetter (interrupt. non validée) – Si l’interruption est traitée, le microP :
• termine l’instruction en cours,
• sauvegarde le contenu du PC dans la pile (adresse de retour) et éventuellement les registres en cours d’utilisation (sauvegarde du contexte)
• selon la ou les lignes d’interruption activées, le microP identifie le périphérique appelant (clavier ? UART ? NMI ?) et saute à une adresse spécifique (interruption vectorisée)
• le microP exécute le sous-programme d’interruption spécifique à l’interruption activée (par ex. lire le contenu de l’UART et le placer dans la mémoire RAM)
• le microP « dépile » (contenu de la pile dans le PC = adresse de retour au programme principal) et restaure éventuellement les registres (contexte) et continue donc son programme initial
• Vss et Vdd : broches d’alimentation
( 3 à 5,5 V )
• OSC1, OSC2 : signaux d’horloge. Peuvent recevoir un circuit (R,C) ou un résonateur. CLKIN peut être connectée à une horloge externe. ( 0 à 4 , 10 ou 20 MHz )
• CLR : Reset (Master Clear).
• RA0..RA4 : 5 E/S du port A
• RB0..RB7 : 8 E/S du port B
PIC12CXXX/PIC12FXXX Family: 8-pin 12-bit/14-bit • T0CKI : Entrée d’horloge externe du program word timer TMR0.
PIC16C5X Family: 12-bit program word • INT : Entrée d’interruption externe
PIC16CXXX/PIC16FXXX Family: 14-bit program word
PIC17CXXX Family: 16-bit program word
PIC18CXXX/PIC18FXXX Family: enhanced 16-bit program word
OFFRE TRES VASTE :
8 bits :
• Architectures « anciennes » enrichies
• MOTOROLA (HC05 : 180 décl. – HC11 : 60 décl.)
• Reprises INTEL (8051 : 100 décl. chez Philips) • Architectures modernes RISC (MicroCHIP – ATMEL, …) 16 bits / 32 bits :
• Déclinaisons sur base de processeurs génériques
• PowerPC – MIPS – SPARC – X86 – ARM
• Architectures spécifiques évolutives : SH…, ColdFire
• Puissance de calcul (vitesse d’horloge maxi / mémoire adressable, mémoire interne, arithmétique interne)
• Consommation
• Technologie
• Gamme de température
• Instructions et modes d ’adressage
• Prix et disponibilité du microprocesseur
• Périphériques compatibles disponibles
• Prix du système de développement
• Logiciels et compilateurs disponibles
• Périphériques disponibles
• Support du fabricant ou distributeur (formation, hot line, ingénieurs d’applications)
• SOLUTIONS ACTUELLES :
– LES PROCESSEURS (microprocesseur et microcontrôleur)
– LES COMPOSANTS PROGRAMMABLES (FPGA)
– LES COMPOSANTS GENERIQUES DEDICACES
– le mixage Processeur (calcul) + composants programmables (décodage / interface)
– Les ASICs
• Les microprocesseurs :
– Les microprocesseurs traditionnels
– Les microcontrôleurs
– Les microprocesseurs spécialisés : DSP
• Vers des solutions mixtes :
– Les composants programmables (avec cœur de microP ou microC)
– Les composants génériques dédicacés
– Vers l'intégration spécifique
• Architectures de plus en plus sophistiquées ou mixtes
• Une application un type de microcontrôleur ?
• Outils de développement et langages de haut niveau (l’assembleur est réservé au pilotage d’interface rapide, échantillonnage)
• Moins de différences entre microprocesseur, microcontrôleur et DSP
• Intégration des périphériques dans la puce microprocesseur
• Faible consommationLe routage et la CAO
• Faible tension d’alimentation(attention à la CEM) sont
• Haute fréquence d’oscillationcritiques
• « Concurrence » avec les circuits logiques programmables (FPGA) pour certaines applications (beaucoup d’E/S, vitesse de traitement élevée)
• Intégration de gestionnaires de bus et réseaux spécifiques :
• bus CAN (automobile)
• Ethernet / Internet (pile TCP-IP interne)
• microprocesseurs RISC
• parallélisme
• cœurs de microprocesseurs ou microcontrôleurs « intégrables » dans des composants programmables ou ASICs (cf cœurs de DSP DSP_Group : Oak)
• « Système sur composant » System on chip pSOC (Cypress par exemple)
• associations mixtes microcontrôleur-DSp, numérique-analogique, …
• PSoc de Cypress, Anadigm, …
• émulateurs « in circuit » (chaîne JTAG par exemple)
• tendance vers l’unification de la programmation micro-FPGA : langage C ?
TD microcontrôleur 80C32
Le microcontrôleur 68HC11de Motorola
Le microcontrôleur 68HC11de Motorola
Registres internes
• Modes d ’adressage classiques :
– adressage direct
• l ’adresse réelle est indiquée dans l’instruction : 2 octets (16 bits) permettent d ’accéder directement à 64 Koctets de mémoire (216 = 65536)
• direct relatif : un seul octet ajouté au PC permet d ’accéder à une page de la mémoire (28 = 256 octets). Code plus court, instruction plus rapide
– adressage indirect : fonctionnement type « pointeur »
– adressage indexé : la valeur du registre d ’index est ajoutée à l ’adresse calculée (déplacement)
Composant mixte avec Microcontrôleur 8 bit + mémoire + composants analogiques + composants à capacités commutées …
§ One 8-Bit Counter § One 16-Bit Timer § One Full-Duplex UART w/ Baud Rate Generator § One SPI Slave (Full Duplex) § One 4-Input 8-Bit DeltaSigma A/D § One 6-Bit D/A § One 8-Bit D/A § Two Low-Pass Filters | § One 16-Bit Counter § One 8-Bit PWM § One Half-Duplex UART § One SPI Master § One 12-Bit Incremental A/ D § One Low-Pass Filter § One 8-Bit D/A § Two Instrumentation Amplifiers |