MIC7340 Introduction aux microcontrôleurs Mounir Boukadoum Traduit et adapté de l’anglais Comment additionne-t’on 147 et 332 ? 1. On écrit les deux nombres l’un au dessus de l’autre 2. On les additionne colonne par colonne avec les retenues 3. On note le résultat final Traduit et adapté de l’anglais On peut reproduire les fonctions précédentes avec des registres et compteurs logiques Entrée des données Mémorisation Étapes d’exécution (programme) Accumulateur de résultats Sortie des données • Pour être réalisés avec des circuits logiques, programme et données doivent être encodés dans un format reconnu par les circuits => 1 et 0 ! Traduit et adapté de l’anglais Encodage des Instructions et données • Données numériques : direct – Ex. 10dec = 1010bin • Données non numériques : format numérique représentatif – Ex. ‘A’ 65dec = 01000001bin • Instructions du programme : format numérique représentatif – Ex. table d`instructions pour l`additionneur précédent Traduit et adapté de l’anglais Encodage des Instructions et données • Un programme exécution consistera en une séquence de nombres binaires : Étape 1 : lire 1er nombre et mettre dans la case mémoire 17 Étape 2 : lire 2nd nombre et mettre dans la case mémoire 18 Étape 3 : Mettre 0 dans l’accumulateur et ajouter le contenu de 17 à . . . Code d’opération • 147+332=479 => 017018117218619519 Traduit et adapté de l’anglais Argument Un automate logique simple pour additionner deux nombres • Vu de l’extérieur, le programme exécuté est : 017018117218619519 • Un machine capable d’exécuter le programme automatiquement est dite ordinateur à programme emmagasiné (stored program computer) • Distinction des instructions et des arguments : Il faut un interprète qui détermine le sens d’un chiffre selon sa position. Cela demande : – Un séquenceur de programme (Program counter) – Un registre de sauvegarde des instructions et des données – Un circuit de contrôle Traduit et adapté de l’anglais Ordinateur à programme emmagasiné • Peut itérer les instructions • Peut séparer les codes d’instructions des données • Sans entrées, sorties ou mémoire, c’est un microprocesseur (CPU) 1 2 Données 1 2 Commutateur : 1 : Lire entrée et mettre en mémoire 2 : Lire code d`instruction en mémoire Traduit et adapté de l’anglais Adresse en mémoire Jeux d’instructions • CISC (complex instruction set) – Grand nombre d’instructions – Opérations de haut niveau en microcode (simplifient l’usage de langages de programmation de haut niveau) – Ex.: Presque tous les processeurs pour ordinateurs de bureau (Pentium, Athlon, etc.) • RISC (reduced instruction set) – Nombre réduit d’instructions – Opérations simples uniquement – Exécution directe par le matériel (pas de microcode) – Facile d’ajouter de nouvelles capacités – Ex. : ARM, PowerPC, MIPS Traduit et adapté de l’anglais CISC (Intel 486) RISC (MIPS R4000) #instructions 235 94 Addr. modes 11 1 1-12 4 8 32 Inst. Size (bytes) GP registers Architectures d’accès à la mémoire Machine de Von Neuman A Programme et données D Entrées/ Unité sorties Arithmétique et logique A=Adresse D=données Architecture de Harvard A Programme Traduit et adapté de l’anglais D Entrées/ Unité sorties Arithmétique et logique A D Données (x2) Caractéristiques de mise en oeuvre • Le CP a besoin d’une horloge • L’accumulateur peut être multiple et fait partie d’une unité arithmétique et logique • Des registres auxiliaires existent avec des fonctions diverses • Un CPU enrichi de mémoires externes et d’interfaces au monde extérieur forme un microordinateur Traduit et adapté de l’anglais Micro-ordinateur Port d'entrée CLAVIER Port de sortie ÉCRAN Port de sortie IMPRIMANTE Port d'E/S DISQUE Port d'E/S MODEM Ports d'E/S Périphérique externes Mémoire morte ROM, EPROM, EEPROM CPU (Unité centrale de traitement) Mémoire vive RAM Mémoire interne Micro-processeur UC (Unité centrale) Écran Ligne téléphonique M O D E M Imprimante UC + Disques Clavier Modem externe Traduit et adapté de l’anglais Quelques ordinateurs Desktop (Intel Pentium D 3GHz, Nvidia 7900) VAIO Z46TD (Intel Core 2 Duo P9700 2.8GHz) Game Boy Advanced (ARM7 16.78MHz) Traduit et adapté de l’anglais iPod classic (ARM7 80MHz) Nokia 6070 (ARM7 51MHz) Et ceux-ci aussi ! • • Les systèmes embarqués comptent pour 94% des ventes Étendent les applications bien au delà des applications bureautiques ou de gestion Traduit et adapté de l’anglais Microcontrôleur • Micro-ordinateur à ressources réduites • « CPU » pour systèmes embarqués Mémoire CPU • Composantes fondamentales d’un micro-ordinateur intégrées sur une puce Mémoire Port Périphérique Port Périphérique Port Périphérique Port Périphérique Port Périphérique Port Périphérique CPU (Microprocesseur) Microcontrôleur Traduit et adapté de l’anglais Microcontrôleur en mode expansible • Forme intermédiaire entre un microprocesseur et un microcontrôleur Mémoire Port Périphérique Port Périphérique Mémoire Port Périphérique Port Périphérique CPU Traduit et adapté de l’anglais Composants et interconnections Bus d'adresses Bus de données Mémoire Alimentation Bus de contrôle CPU Horloge Mémoire Interrupt Port Périphérique • Trois bus fondamentaux Interrupt Port Périphérique Traduit et adapté de l’anglais Microcontrôleur en mode autonome • Les bus sont internes Traduit et adapté de l’anglais Microcontrôleur en mode d’adressage étendu • Certains/tous les bus sont accessibles de l’extérieur Traduit et adapté de l’anglais TI Embedded Processors Microcontrollers (MCUs) ARM®-Based Processors 16-bit ultralow power MCUs 32-bit real-time MCUs 32-bit ARM Cortex™-M3 MCUs ARM Cortex-A8 MPUs MSP430™ C2000™ Delfino™ Piccolo™ Stellaris® Sitara™ ARM® Cortex™-M3 ARM® Cortex™-A8 & ARM9 Digital Signal Processors (DSPs) DSP DSP+ARM C6000™ DaVinci™ 40MHz to 300 MHz Up to 100 MHz 300MHz to >1GHz Flash 1 KB to 256 KB Flash, RAM 16 KB to 512 KB Analog I/O, ADC LCD, USB, RF PWM, ADC, CAN, SPI, I2C Measurement, Sensing, General Purpose Motor Control, Digital Power, Lighting, Ren. Enrgy Flash 8 KB to 256 KB USB, ENET MAC+PHY CAN, ADC, PWM, SPI $0.25 to $9.00 $1.50 to $20.00 Ultra Low power DSP C6000™ C5000™ video processors OMAP™ Up to 25 MHz Multi-core DSP 24.000 MMACS Up to 300 MHz +Accelerator Cache, RAM, ROM 300MHz to >1Ghz +Accelerator Cache RAM, ROM Cache RAM, ROM Up to 320KB RAM Up to 128KB ROM USB, CAN, PCIe, EMAC USB, ENET, PCIe, SATA, SPI SRIO, EMAC DMA, PCIe USB, ADC McBSP, SPI, I2C Connectivity, Security, Motion Control, HMI, Industrial Automation Industrial computing, POS & portable data terminals Floating/Fixed Point Video, Audio, Voice, Security, Conferencing Telecom test & meas, media gateways, base stations Audio, Voice Medical, Biometrics $1.00 to $8.00 $5.00 to $20.00 $5.00 to $200.00 $40 to $200.00 $3.00 to $10.00 Software & Dev. Tools Traduit et adapté de l’anglais 3 5xx Gen Summary … La famille MSP430 : Architecture générale • Bus interne de données interne de16 bits et externe de 8 bits • Jusqu’à 20 bits d’espace d’adressage • Site web de TI Traduit et adapté de l’anglais La famille TMS430 : CPU de la famille 5xx • Architecture RISC (Reduced Instructions Set Computing) – Nombre d’instructions réduit – Architecture Von Neumann : • Emmagasinage commun des instructions et des données. • Seize registres à 16-bits-20-bits – 4 des registres (R0-R3) ont des fonctions dédiées (PC, SP, SR, et générateur de constantes) ; – 12 sont à usage général (R4 -R15) • Unité arithmétique et logique (ALU): – Addition, soustraction, comparaison et opérations logiques (AND, OR, XOR) ; – Sémaphores pour débordement, zéro, négatif, and bit de retenue • Architecture optimisée pour les compilateurs c Traduit et adapté de l’anglais MSP430F5438A Block Diagram Traduit et adapté de l’anglais 22 MSP-EXP430F5438 … Kits de démarrage (eZ430-RF2500) 1/2 • Outil de développement pour le microcontrôleur MSP430F2274 et le transmetteur sans fil 2.4 Ghz CC2500; • Circuit imprimé cible Z430-RF2500T détachable : peut être utilisé seul, intégré dans un système, ou avec l`interface de débogage USB; • Peut communiquer avec un PC par le bais du UART intégré dans le MSP430. • Alimentation autonome ou via le port USB • 50 $ Traduit et adapté de l’anglais 23 Kit de démarrage eZ430-RF2500 : MSP430F2274 et périphériques 2/2 • Performance de 16-MIPS; • Convertisseur A-N à approximations successives avec 10 bits de résolution et fréquence d`échantillonnage jusqu’à 200 ke/s • Compteur/temporisateur de 16 bits • 2 amplificateur opérationnels intégrés • Compteur/temporisateur de 16 bits • Chien de garde (« Watchdog timer ») • Module sériel universel supportant UART/LIN, (2) SPI, I2C, or IrDA • Taux de transfert de données programmable jusqu’à 500 kb/s • 5 modes d’opération à faible courant (0.7 μA en mode standby) • Transmetteur RF 2.4-GHz externe (CC2500) Traduit et adapté de l’anglais 24 Organisation de l’espace mémoire • Mémoire de travail (primaire) : Suite de locations ayant une adresse et un contenu – Le contenu peut être à lecture seule (ROM) ou lecture/ écriture (RAM) – Les mémoires à lecture seule sont préprogrammées • On peut aussi avoir des mémoires secondaires (pour l`emmagasinage de masse ou à long terme) : disque dur, DVD, flash, etc. – Le mémoires secondaires peuvent aussi être è lecture seule ou lecture/écriture Traduit et adapté de l’anglais Accès à la mémoire • Trois étapes : 1. Génération de l’adresse sur le bus de données; 2. Spécification du mode d’accès (ligne commune r/w ou lignes rd et wr) 3. Lecture/écriture vers ou à partir du bus de données Traduit et adapté de l’anglais Cycle de fonctionnement d’un CPU Traduit et adapté de l’anglais Notation en complément de X (a) Odomètre hypothétique montrant la notation en complément de 10; (b) Cercle de nombres de 8 bits montrant la notation en complément de 2. Traduit et adapté de l’anglais Addition et Soustraction de nombres entiers à 8-Bit unipolaires Traduit et adapté de l’anglais Addition et Soustraction de nombres entiers à 8-Bit bipolaires Traduit et adapté de l’anglais Notation en virgule flottante Traduit et adapté de l’anglais Perspective du programmeur pour un CPU simple ACC 0000h FLAGS R0 R1 R2 R3 Registers FFFFh Memory • Typique d’une architecture de Von Neumann Traduit et adapté de l’anglais Étapes de développement de programme • 017018117218619519 ?! • On rend le programme plus lisible en remplaçant les codes d’instructions par des représentations mnémoniques – Ex. : 017 mov @17,A • Un assembleur traduit à nouveau le programme obtenu (en langage « pour assembleur ») en langage machine avant l’exécution • Si les locations en mémoire sont fixées à l’avance, on a un assembleur absolu. Traduit et adapté de l’anglais Cycle de développement de programme en assembleur absolu Processus global de génération de code EDITOR source file (*.s) ASSEMBLER Other object files from assembler or HLL compilers • Des fichiers intermédiaires sont générés • Des fichiers d’information sont aussi générés • Un fichier de configuration est aussi requis pour l’éditeur de liens blank device Traduit et adapté de l’anglais list file (*.lst) relocatable object file (*.o) LINKER linker map file (*.map) relocatable linked object file LOCATOR locator map file (*.map) absolute executable file (*.axf) HEXTarget Conversion HEX-ASCII object file (*.hex) DEVICE PROGRAMMER programmed device Processus global de génération de code Other object files from assembler or HLL compilers EDITOR source file (*.s) ASSEMBLER list file (*.lst) relocatable object file (*.o) LINKER/ LOCATOR map file (*.map) absolute executable file (*.axf) Target computer Traduit et adapté de l’anglais ADuC7026 Device Simulator Simulator HEX conversion JTAG POD Pod JTAG ULink Device Programmer ADuC7026 Target Hardware hardware Example de code source ; ; ; ; Filename: sample.s Author: ECE 353 Staff Description: sample program for a ARM7tdmi do **NOT** use this as the basis for any programming! EXPORT IOPORT_ADDRESS AREA ARM Reset_Handler LDR Loop LDR LDR LSL MVN STR NOP B aLoop aPort DCD DCD END Traduit et adapté de l’anglais Reset_Handler EQU ;make available to linker 0x80001000 Reset, CODE, READONLY PC, aLoop ;load PC with program start address R0, R1, R1, R1, R1, ;load address of port ;read switch state ;shift left 8 bits to align ;complement ;write LEDs ;do nothing ;repeat forever aPort [R0] #8 R1 [R0] Loop Loop IOPORT_ADDRESS ; Listage du code généré (1) 5 … 6 00000000 EXPORT 7 00000000 8 00000000 80001000 IOPORT_ADDRESS EQU 9 00000000 10 00000000 AREA 11 00000000 ARM 12 00000000 13 00000000 Reset_Handler 14 00000000 E59FF018 LDR 15 00000004 Loop 16 00000004 E59F0018 LDR Reset_Handler ;make available t o linker 0x80001000 Reset, CODE, READONLY PC, aLoop R0, aPort ;load address of po rt ;read switch state ;shift left 8 bits to align ;complement ;write LEDs ;do nothing ;repeat forever 17 00000008 E5901000 18 0000000C E1A01401 LDR LSL R1, [R0] R1, #8 19 20 21 22 23 24 MVN STR NOP B R1, R1 R1, [R0] DCD Loop DCD IOPORT_ADDRESS 00000010 00000014 00000018 0000001C 00000020 00000020 E1E01001 E5801000 E1A00000 EAFFFFF8 00000000 aLoop 25 00000024 80001000 aPort 26 00000028 27 00000028 Traduit et adapté de l’anglais END Loop Test du design à l’aide d’une carte d’evaluation Traduit et adapté de l’anglais Allure dans une fenêtre de desassemblage 0x00080000 0x00080004 0x00080008 0x0008000C 0x00080010 0x00080014 aLoop 0x00080018 0x0008001C 0x00080020 0x00080024 0x00080028 aPort 0x0008002C 0x00080030 0x00080034 Adresses Traduit et adapté de l’anglais E59FF018 E59F0018 E5901000 E1A01401 E1E01001 E5801000 E1A00000 EAFFFFF8 00080004 80001000 00000000 00000000 00000000 00000000 Code machine DD LDR LDR MOV MVN STR NOP B DD ANDHI ANDEQ ANDEQ ANDEQ ANDEQ 0xE59FF018 R0,[PC,#0x0018] R1,[R0] R1,R1,LSL #8 R1,R1 R1,[R0] ? 0x00080004 0x00080004 R1,R0,R0 R0,R0,R0 R0,R0,R0 R0,R0,R0 R0,R0,R0 Code Assembleur equivalent Débogage • Tout comme le génie, l’écriture de programmes exige 1% d’inspiration et 99% de transpiration – Un code source fonctionne rarement du premier coup ! – Une fois devenu fonctionnel, il doit être validé – Ensuite, il faut le maintenir • Un débogueur permet de : – – – – Charger un programme dans un environnement d’exécution contrôlé Exécuter le programme pas à pas Établir dynamiquement des points d’arrêt (« breakpoints ») Afficher/modifier des valeurs de registres ou locations en mémoire Traduit et adapté de l’anglais Le cycle de programmation High-Level Language Level 5 Assembly Language Level 4 Operating System Level 3 Instruction Set Architecture Level 2 Microarchitecture Level 1 Digital Logic Level 0 Traduit et adapté de l’anglais 41 L’usage de langages de haut niveau High-Level Language Assembly Language Operating System Instruction Set Architecture Microarchitecture Digital Logic • Réduit la « distance Level 5 cognitive » entre l’être Compilateur humain et la machine Level 4 • Augmente la productivité en Level 3 utilisant des instructions « fonctionnelles » Level 2 • Demande un compilateur ou un interpréteur pour traduire Level 1 les instructions en langage Level 0 assembleur Traduit et adapté de l’anglais 42 Cycle de génération de programmes en langage de haut niveau Source de haut niveau Source de haut niveau Compilateur Compilateur • Traduit le code de haut niveau en code assembleur (asm) et génère un fichier de listage Source asm Fichier asm Assembleur Assembleur Fichier object « linker » Assembleur • Traduit le code asm en code machine (obj) et génère un fichier de listage • Agrège les fichiers objet générés • Génère l’information d’agrégation Fichier objet exécutable « loader » • Charge le fichier objet exécutable en mémoire pour exécution par la machine cible Machine cible Traduit et adapté de l’anglais 43 Langages de haut niveau Langage Compilé C, C++, Ada, Forth, etc. Interpreté (?) Perl, Python, Javascript À balises HTML, XML Java Finissent tous en code machine ! Code assembleur Code machine Traduit et adapté de l’anglais Rom, Ram, “Firmware” fixe Exigences pour le code d’un système embarqué • Densité • Rapidité • Accès direct au matériel (registres, bits, etc.) • Robustesse (redondance ?) Contraintes souvent contradictoires étant données les ressources Traduit et adapté de l’anglais