I- Introduction générale

I-1 I-2 I-3 Introduction ARM et les cœurs CORTEX Pourquoi le Cortex-M3 ?

II-

La famille STM32

III-

Le Cœur Cortex-M3

III-1 Introduction III-2 Caractéristiques du Cortex-M3
III-2-a) III-2-b) III-2-c) Les registres Organisation de la mémoire La gestion des interruptions par le NVIC (Nested Vector Interrupt Controller)

III-2-c-1 Tail Chainig Late Arrival
III-2-d) III-2-e) III-2-f)

Déroulement des interruptions

Les modes opératoires Le Bit Banding Alimentation et Reset

IV-

Le Standard de programmation en ‘C’ : CMSIS 1.0

Le cœur Cortex-M3

Présentation générale de la famille des microcontrôleurs STM32 : Le cœur Cortex-M3
Par Damergi Emir

I- Introduction générale
I-1 : Introduction Un microcontrôleur ou MCU (Microcontroller Circuit Unit) est un système informatique entier ( CPU ou Central Processing Unit , mémoire, bus, contrôleur d’interruption, interfaces parallèles et série, Timers, Convertisseurs A/N et N/A) contenu intégralement dans un circuit intégré unique. Le CPU d’un microcontrôleur étant généralement moins complexe que celui d’un système informatique ordinaire (Ordinateur), à consommation électrique plus faible (qq milliwatt en fonctionnement et de l’ordre du microwatt en veille) et également moins

performant : Il supporte environs une centaine d’instructions (transferts de données, sauts, opérations logiques simples, décalages, et les opérations arithmétiques) et fonctionne à des fréquences relativement basses variant de quelques dizaines de MHz à quelques centaines. Ceci permet de limiter la consommation en énergie du circuit. Ces circuits à prix réduits à grandes quantités (moins de 1$ pour 10000 pièces) sont d’une grande utilité pour les applications embarquées qui ont plus besoin d’un grand nombre de lignes d’E/S pour la commande, l’acquisition ou la communication que d’une capacité de traitement élevée. Ils permettent ainsi la conception de cartes de commandes, de petites tailles et avec des rapports prix/qualité exceptionnels, pour un grand nombre de systèmes embarqués (Machines à laver, systèmes GPS, climatiseurs, cartes à puce, automates programmables, contrôleurs d’ascenseurs, variateurs de vitesse, etc..). Ils couvrent le plus large spectre du domaine de l’embarqué avec des ventes qui ont atteint les $26 billions en 2007. Même si les µc 8 bits (relativement à la largeur du bus de données) se sont imposés longtemps ; l’étendue des domaines d’application des µc, le besoin croissant en capacité de traitement et en comportement temps réel ont incité les constructeurs à proposer des µc 16 et particulièrement 32 bits beaucoup plus performants. En effet, les ventes (en %) des microcontrôleurs 32 bits ont énormément progressé lors de la dernière décennie et sont passées de moins de 1% en 2000, à 30% en 2006 pour atteindre

Damergi Emir

1

Version Draft

x86 -----. sous forme d’un IP « Intellectual Property ».SuperH -----. qui grâce à son nouveau cœur Cortex s’est imposé comme leader des fournisseurs de cœurs 32 bits [2] pour les applications embarquées (figure 2). Microcontrôleurs 8 bits Microcontrôleurs 16 bits Ventes en % Microcontrôleurs 32 bits 2000 2006 2009 Figure 1 : Evolution des ventes en % des microcontrôleurs 8. on trouve les cœurs de la société ARM (Advanced Risc Machines).ARM -----.Le cœur Cortex-M3 les 38 % en 2009 (figure 1) et on prévoit que cette croissance continuera durant les prochaines années [1]. dans leurs circuits et lui ajoutent les mémoires et les entrées/sorties nécessaires pour les applications ciblées. 16 et 32 bits La majorité des fabriquants de microcontrôleurs optent pour l’intégration d’un CPU préconçu.MIPS 2 1 0 2007 2008 2009 2010 2011 2012 2013 Figure 2 : Evolution des ventes des cœurs 32 bits pour les applications embarquées Damergi Emir 2 Version Draft . 3 -----. Parmi les CPUs (IP) les plus utilisés dans les microcontrôleurs 32 bits.PowerPC Ventes en Billions de dollars -----.

946 Intel Xscale ARM 1136. chaque constructeur de microcontrôleurs basés sur les générations précédentes était obligé de concevoir sa propre solution pour la gestion des interruptions. ARM ne fabrique pas des processeurs et les vend directement. Contrairement aux autres sociétés travaillant dans le domaine des semi-conducteurs. ou X désigne le profil auquel appartient le cœur et N son degré de performance qui varie entre 0 (le moins performant) et 9 (le plus performant). Architecture v4/v4T Architecture v5/v5E Architecture v6 Architecture v7 (Cortex) v7-A (Cortex-A) (profil Applications) v7-R (Cortex-R) (profil Real-Time) v7-M (Cortex-M) (profil Microcontrôleurs) Exemples ARM7TDMI 920T. En effet. On distingue 3 profils (figure 4) propres à l’architecture ARM-v7 ou Cortex et qui sont : Damergi Emir 3 Version Draft . la programmation moins transparente et évidement le code difficilement portable. Cortex intègre entre autres la gestion des interruptions et des exceptions ce qui permet une plus grande transparence et souplesse au niveau de la programmation ainsi qu’un portage de code plus simple. les partenaires d’ARM vendent annuellement plus que 2 billions de circuits à base de cœurs ARM dont l’architecture et le jeu d’instructions ont évolué depuis la première version ARM-v1 (devenue obsolète ainsi que les architectures ARM-v2 et v3) jusqu’à la version actuelle ARM-v7. Aujourd’hui. Acorn Computer Group et VLSI Technology. appelée également Cortex (figure 3). 1176. mais elle les conçoit et vend leur licence sous forme d’IP à des partenaires qui les intègrent dans leurs microcontrôleurs et processeurs.Le cœur Cortex-M3 I-2 ARM et les cœurs CORTEX La société ARM a été créée en 1990 par association (joint-venture) de Apple Computer. ce qui rendait l’utilisation d’un outil de développement standard impossible. 1156T Cortex-A8 Cortex-R4 Cortex-M3 Figure 3 : Evolution des architectures des cœurs ARM Contrairement aux architectures précédentes. Les cœurs Cortex portent la désignation Cortex-XN. Intel StrongARM ARM 926.

le domaine de l’automobile (systèmes de freinage).9 à 1.5 DMIPS/mW Thumb/Thumb-2 GIC MPU FP Unit 8 stages Pipeline 6. Windows CE) nécessitant une puissance de traitement élevée et un système de gestion de mémoire virtuelle (MMU). Linux.5 DMIPS 1 /MHz) et contiennent des accélérateurs SIMD (Single Instruction/ Multiple Data) ainsi que la technologie Jazelle permettant l’exécution rapide de langages interprétés tel que Java. Les processeurs de ce profil contiennent également une unité additionnelle pour le calcul en virgule flottante et sont utilisés à titre d’exemple dans les disques durs.Le cœur Cortex-M3  Le profil A (séries Cortex-A) : destiné pour faire tourner des applications complexes telles que les systèmes d’exploitation embarqués (Symbian. On les trouve dans des produits tels que les téléviseurs numériques haute définition.5 DMIPS Figure 4 : Performances et domaines d’applications des profils de l’architecture Cortex Dhrystone MIPS : Performance de traitement du processeur en Millions d’Instructions par Seconde obtenue par exécution du benchmark Dhrystone 1 Damergi Emir 4 Version Draft . les appareils photo numériques.6 DMIPS 1.25 DMIPS 1.  Le profil R (séries Cortex-R) : destiné principalement aux applications temps réel à contraintes très sévères et exigeant une haute fiabilité et un temps de réponse faible.6 à 2.2000 Cortex-A ARM/Thumb Thumb-2 GIC MMU Neon (SIMD) DSP VFP Jazelle 13 stages Pipeline Multi-core (1-4) Fréquence de fonctionnement (MHz) 375 475 Cortex-R Cortex-M Thumb-2 NVIC MPU 3 stages pipeline 12.5 DMIPS/mW 0. les terminaux mobiles. Les processeurs appartenant à ce profil peuvent fonctionner avec des fréquences de 2GHz et avec une performance de 2. ….

 Efficacité énergétique : Les MCUs. et qui grâce à son coût et sa performance a connu un grand succès et a fait converger la majorité des constructeurs de microcontrôleurs. vers une architecture commune. I-3 Pourquoi le Cortex-M3 ? L’unanimité des constructeurs autour du cœur cortex-M3 est due principalement aux raisons suivantes :  Coût : En effet. on atteint une efficacité de 12. comme tous les processeurs embarqués et à usage général. Zilog. C’est le profil qui est destiné à être intégré dans les microcontrôleurs. sont connus pour être flexibles au prix d’une consommation élevée en énergie de l’ordre de 1 à 3 MIPS/mW. Avec Cortex-M3. un coût réduit et un comportement déterministe pour le traitement des interruptions. Samsung. Figure 5 : Efficacité énergétique ( en MIPS/mW ) pour différentes plateformes embarquées Damergi Emir 5 Version Draft Flexibilité .5 MIPS/mW (figure 5). il supporte des modes basse consommation et permet une activation sélective des périphériques à utiliser. Principalement le cœur Cortex-M3. Atmel. etc…) [3]. Avec le Cortex-M3. le critère primordial qui incitait les développeurs de systèmes embarqués à opter pour les MCUs 8 bits était le prix. pour la première fois.Le cœur Cortex-M3 Le profil M (séries Cortex-M) : optimisé pour des applications nécessitant une basse consommation en énergie. En plus. les prix des MCUs 32 bits a considérablement baissé et sont pratiquement dans le même ordre que les MCUs 8 bits. lancé en 2004. NXP. Déjà 28 sociétés (dont 6 font partie des top 10) ont opté pour ce cœur (Luminary Micro (maintenant faisant partie de Texas Instruments) ST-Microelectronics.

Figure 6 : Comparaison des performances (DMIPS/MHz) du Cortex-M3 par rapport aux architectures 8 et 16 bits  Utilisation optimale de la mémoire : Grâce à l’utilisation de la technologie Thumb-2 qui permet l’utilisation simultanée d’instructions 16 et 32 bits. En plus. le Cortex-M3 intègre dans son jeu d’instructions. Damergi Emir 6 Version Draft .Le cœur Cortex-M3  Performance : Avec une capacité de traitement de 12.5 DMIPS et une fréquence de fonctionnement qui peut atteindre la valeur de 275 MHz. une meilleure densité du code est obtenue relativement aux autres architectures (figure 7).  Débogage puissant: Grâce à un module de débogage intégré dans le cœur Cortex-M3 et qui permet de fixer un certain nombre de Breakpoints et watchpoints. Figure 7 : Comparaison de la densité du code du Cortex-M3par rapport à d’autres architectures  Adaptation au temps rèel: Ceci est assuré par l’intégration d’un contrôleur d’interruptions gérant les priorités et le sauvegarde du contexte matériellement ce qui permet d’avoir une réponse déterministe et rapide aux événements externes.. quelques unes qui s’exécutent d’une manière atomique. les performances du CortexM3 dépassent largement celles des architectures 8 et 16 bits (figure 6).

Le cœur Cortex-M3 II. C pour 256 Kbytes. ST-Microelectronics a proposé toute une famille de microcontrôleurs 32 bits basée sur le cœur Cortex-M3 (figure 8). Cortex-M3 Noyau ARM (CPU) Unité Arithmétique et logique (ALU) + Registres Unité de recherche d’instructions (Fetch unit) Contrôleur d’interruptions (NVIC) Unité de décodage Système de débogage Fourni par ARM Interface Mémoires Bus d’instructions Unité de protection mémoire (MPU) Bus de données Bus d’Interconnexion (Bus Matrix) Conçu et développé par le fabricant du microcontrôleur Périphériques d’entrées/sorties Périphériques système Mémoires SRAM Mémoire Flash Figure 8 : Architecture générique d’un microcontrôleur à base du cœur Cortex-M3 La famille des microcontrôleurs ST est baptisée STM32. C: 48 pins. B pour 128 Kbytes. Il s’agit d’une famille de plus que 70 références portant la désignation STM32F10x y z    10x : désigne la catégorie (ou ligne de produit) à laquelle appartient le µc (voir Tableau 1). On distingue 4 lignes de produits de la famille STM32 qui possèdent un certain nombre de composants en commun. z donne une indication sur la taille de la mémoire flash interne (4 pour 16 Kbytes.La famille STM32 Comme la majorité des constructeurs de microcontrôleurs. D pour 384 Kbytes et E pour 512 Kbytes). y est une référence qui désigne le nombre de pins ainsi que le type de package du circuit intégré (T: 36 pins. 6 pour 32 Kbytes. R : 64 pins. 8 pour 64 Kbytes. mais qui diffèrent en ce qui concerne la fréquence de Damergi Emir 7 Version Draft . V : 100 pins et Z : 144 pins).

Le cœur Cortex-M3 fonctionnement. Damergi Emir 8 Version Draft . PWM (Pulse Width Modulation) : Modulation de largeur d’impulsion. la taille de la mémoire SRAM interne ainsi que le nombre de périphériques d’E/S disponibles. DMA (direct Memory Access) : il permet le transfert direct de données entre mémoires et périphériques. Le tableau suivant présente ces 4 lignes de produit. I2S et Timer PWM. Au niveau de l’architecture interne. DAC (Digital Analog Converter) : Convertisseur Analogique/Numérique. USB  USART (jusqu’à 5)  DAC 12 bits (jusqu’à 2)  Timers 16 bts (jusqu’à 6)  Canaux DMA (jusqu’à 12)  Oscillateurs RC internes (40 KHz et 8 MHz) 102 48 MHz 16 Kbytes 101 36 MHz 48 Kbytes USB.Récepteur fonctionnant dans les modes synchrones et asynchrones. APB1 & 2 (Advanced Peripheral Bus 1 & 2): Chacun des deux bus est connecté au AHB à travers un pont (respectivement AHB-APB1 et AHB-APB2) et servent à véhiculer les données vers et depuis une partie des périphériques (voir figure 9). SDIO. Ligne produit Performance Accès USB (USB Access) Accès (Access) Connectivité de Référence 10x 103 Composants communs Fréquence CPU 72 MHz Mémoire SRAM 64 Kbytes Périphériques spécifiques USB. 72 MHz Jusqu’à 64 Kbytes (classe audio) et Ethernet Tableau 1: Lignes de produit de la famille ST32M Avec: USART (Universal Synchronous Asynchronous Receiver Transmitter): Emetteur. D-Bus & System Bus: connectés directement à la matrice de bus qui sert de lien avec les bus d’accès à la SRAM. CAN. Le microcontrôleur STM32F103VB-T6 qui équipe les Kits Primer fait partie de la ligne « performance » et est doté d’une mémoire Flash de 128 Kbytes. CAN (Controller Area Network) : Il s’agit d’une interface permettant de communiquer sur le bus CAN tout en respectant la norme. le système DMA (Direct Memory Access) ainsi que le AHB (Advnaced High Bus) . il est composé évidement du cœur Cortex-M3 connecté aux mémoires et différents périphériques à travers un certain nombre de bus : I-Bus (Instruction Bus): dédié principalement pour le transfert des instructions (code) entre Cortex et la mémoire Flash. CAN. I 2S (Connectivity) 105 & 107  Horloge temps réel.

 HSE (High Speed External) : Il s’agit d’un signal de fréquence comprise entre 4 et 25 Mhz. Elle présente l’inconvénient de manque de précision et de stabilité.Le cœur Cortex-M3 Figure 9 : Bus des microcontrôleurs de la famille STM32 Ces différents bus. généré par un dispositif (à base d’un cristal) placé à l’extérieur du µc. La synthèse des différentes fréquences à partir de l’un des deux signaux est représentée dans la figure suivante : Figure 10 : Clock Tree des microcontrôleurs de la famille STM32 Damergi Emir 9 Version Draft . composants et périphériques fonctionnent avec des fréquences d’horloge synthétisées à partir de l’un des deux signaux horloge :  HSI (High Speed Internal) : Il s’agit d’un signal de fréquence 8 Mhz généré par un oscillateur interne intégré au niveau du µc. C’est cette fréquence qui est utilisée par défaut après une opération de reset.

Mais. et que les mémoires utilisées étaient généralement de petite taille. L’une des particularités du Cortex-M3 est son jeu d’instruction thumb-2. L’ensemble ainsi obtenu des instructions Thumb 16 et 32 bits est appelé Thumb-2. se traduit par une multitude d’interfaces bus qui peuvent être utilisées simultanément. Cette caractéristique. non précis) appelé LSI (Low Speed Internal) ou bien à partir d’un dispositif externe appelé LSE (Low Speed External) et devant produire une fréquence de 32. un banc de registres 32 bits et des interfaces mémoires de 32 bits. elle a introduit une baisse de performances puisque le CPU doit à chaque fois basculer du mode ARM (32 bits) au mode Thumb (16 bits) et vice versa. cette solution a apporté un gain en occupation mémoire. Il intègre également un nombre de composants internes de débogage qui permettent de fixer des points d’arrêt (breakpoints) et d’observation (watchpoints) et ainsi que le suivi des instructions (instruction trace). Ceci permet d’accéder en même temps aux instructions et aux données.Le cœur Cortex-M3 Il est à noter que deux périphériques (Watch Dog et le Real Time Clock « RTC ») fonctionnent avec un signal d’horloge différent et de faible fréquence qui peut être soit généré localement par un oscillateur interne (~ 32 Khz. Cependant. mais le jeu d’instructions ARM 32 bits a été complètement abondonné au profit d’un nouveau jeu d’instructions Thumb 32 bits. Il contient un chemin de données (data path) 32 bits. le jeu d’instruction Thumb 16 bits a été gardé. IIIIII-1 : Le Cœur Cortex-M3 Introduction C’est un processeur 32 bits. Ainsi. c'est-à-dire qu’il contient deux bus distincts pour le transfert des données et des instructions. Il se base sur un pipeline à 3 étages (Fetch. ARM a introduit depuis son architectures ARMv4 un ensemble d’instructions sur 16 bits (en limitant les opérations possibles ainsi que les registres internes utilisés et rendant les opérandes des instructions implicites) constituant un jeu d’instruction nommé Thumb. D’après ARM. Decode et Execute) et possède une architecture Harvard. Pour le Cortex-M3. En effet. et par conséquent une augmentation de la performance puisque l’accès aux données n’affecte pas le pipeline.768 Khz. étant donnée que les instructions ARM de 32 bits occupent un espace mémoire important. il permet d’optimiser l’utilisation de l’espace Damergi Emir 10 Version Draft . l’espace d’adressage du Cortex-M3 est unique et peut atteindre la taille de 4 GO.

il s’agit de deux registres superposés dont l’accès est contrôlé par le mode opératoire: Damergi Emir 11 Version Draft . on essaiera d’explorer les principales caractéristiques du coeur Cortex-M3.R0 – R12 : 12 registres à usage général qui peuvent être utilisés pour l’exécution de n’importe quelle opération (arithmétiques.Le cœur Cortex-M3 mémoire sans dégrader les performances puisqu’on n’est plus obligé de basculer entre modes de fonctionnement (voir figure 11).833 cycle) .R13 : il s’agit du registre de pile. Figure 11 : performance et densité du code pour différents jeux d’instructions ARM A part l’amélioration des performances. des instructions ont été introduites pour permettre :   III-2 : des divisions matérielles (SDIV et UDIV) qui nécessitent de 2 à 3 cycles horloge. III-2-a) Les registres Comme les processeurs ARM. des multiplications 32 bits qui se déroulent en un cycle horloge. Des benchmarks réalisés donnent une performance de 1. c'est-à-dire le Cortex-M3 exécute. transfert). le Cortex-M3 contient : . . En effet.2 = 0. logiques. En plus. une instruction en moins d’un cycle horloge (1/1. en moyenne. une partie importante de ce nouveau jeu d’instructions Thumb-2 a été spécialement conçue pour être la cible des compilateurs. Caractéristiques du Cortex-M3 Dans cette partie.2 DMIPS/MHz.

PSP (Process Stack Pionter) : Registre de pile de processus qui est utilisé quand des applications ayant le niveau « Unprivileged» sont exécutées. s’il est actif. si elle est différente de 0. Registres de masque d’interruption : On distingue 3 registres qui sont PRIMASK : Registre de 1 bit qui permet.R15: il s’agit du registre compteur programme (ou Program Counter) qui indique l’adresse de la prochaine instruction à exécuter par le processeur. . Le Cortex-M3 contient également un certain nombre de registres spéciaux : PSRs (Program Status Registers) : Registres de statut du programme qui sont au nombre de 3 ASPR (Application PSR): Registre d’état relatif à l’exécution du programme. BASEPRI : Registre de 9 bits dont la valeur indique. il possède une mémoire organisée d’une façon prédéterminée. . Si cette valeur est égale à 0.Le cœur Cortex-M3 MSP (Main Stack Pointer) : Registre de pile principal qui est utilisé quand des applications ayant le niveau « Privileged » sont exécutées. Registres de contrôle : Un registre de 2 bits qui indique le niveau de privilège du code exécuté en cours ainsi que le registre de pile utilisé. d’interdire toutes les interruptions sauf l’interruption non masquables (NMI) et les exceptions dues à une erreur matérielle (Hard Fault). La mémoire occupe un espace d’adressage de 4GO réparti comme suit Damergi Emir 12 Version Draft .R14 : il s’agit du registre de lien (LR : Link register) qui permet de stocker l’adresse de retour quand une fonction ou routine est appelée. III-2-b) Organisation de la mémoire Le processeur Cortex-M3 étant un cœur standard pour les microcontrôleurs. d’interdire toutes les interruptions à l’exception de l’interruption non masquables (NMI). ESPR (Execution PSR) : Registre d’état qui donne des informations sur l’instruction en cours (mode thumb ou ARM et si elle est atomique). alors toutes les interruptions sont permises. le niveau de priorité des interruptions permises : uniquement les interruptions ayant un niveau de priorité strictement supérieur à cette valeur sont autorisées. FAULTMASK : Registre de 1 bit qui permet. s’il est actif. ISPR (Interrupt PSR) : Registre d’état relatif à l’interruption en cours. Ces 3 registres 32 bits peuvent être accédés séparément ou bien être superposés pour construire un registre unique 32 bits : xPSR.

5 GO) 0x20000000 0x1FFFFFFF CODE (0. les codes développés ainsi que les systèmes d’exploitation peuvent être facilement portés d’un microcontrôleur à un autre sans être obligé de se familiariser avec des structures de nouveaux registres.5 GO) 0x00000000 Espace utilisé pour stocker du code exécutable. Damergi Emir 13 Version Draft . Il est à noter que les zones SRAM et Périphériques contiennent chacune un espace mémoire de 1MO appelé Bit Band Region et adressable et manipulable au niveau bit par des opérationsdatomiques. le Timer système. On peut également stocker des données. III-2-c) La gestion des interruptions par le NVIC (Nested Vector Interrupt Controller) Il s’agit d’un contrôleur d’interruptions standard du cœur Cortex-M : tous les microcontrôleurs basés sur ce cœur ont la même structure et principe de fonctionnement indépendamment du fabricant. Par conséquent. le bloc de contrôle. (1 MO) Espace utilisé pour adresser les périphériques du CortexM3 : Contrôleur d’interruption.5 GO) 0x40000000 0x3FFFFFFF SRAM (0.Le cœur Cortex-M3 0xFFFFFFFF Zone Constructeur Firmware : code nécessaire agissant à très bas niveau (Driver) et permettant aux applications d’utiliser le matériel d’une façon transparente 0xE0100000 0xE00FFFFF Périphériques système 0xE0000000 0xDFFFFFFF Périphériques Externes (1 GO) 0xA0000000 0x9FFFFFFF RAM 0x60000000 0x5FFFFFFF Périphériques (0. Espace utilisé pour stocker les données relatives au code. etc. Externe (1 GO) Espace utilisé pour adresser les périphériques ajoutés par le constructeur du microcontrôleur intégrant le CortexM3. ni d’adapter des parties du code.

Nr 1 2 3 4 5 6 7-10 11 12 13 14 15 16… …. 256 Type d’exception Reset NMI Hard Fault MemManage Fault Bus Fault Usage Fault Réservé SVCall Debug Monitor Réservé PendSV SYSTICK Interrupt # 0 ……………. Dans le cas d’un appel à un service système. Quand une exception autorisée est déclenchée. Relative au Timer interne SYSTICK Il s’agit d’événements déclenchés par les autres périphériques externes ajoutés par le fabricant du microcontrôleur. Le tableau suivant énumère ces exceptions internes et décrit l’origine. Déclenchée quand un point de break (ou watch) est atteint ou bien quand le débogage est activé. Dans le Cortex-M3. Timer SysTick. le CPU commence par récupérer l’adresse de la routine à exécuter à partir d’un emplacement mémoire spécifique connu d’avance. Interrupt # 240 Niveau de priorité par défaut -3 (maximum. la table de vecteurs commence à partir de l’adresse 0 de la zone code : Adresse 0x00 0x04 0x08 0x0C 0x10 0x14 0x18 0x1C – 0x2B 0x2C 0x30 0x34 0x38 0x3C 0x40 …… Vecteur Adresse de début de la pile principale Reset NMI Hard fault MemManage Fault Bus Fault Usage Fault SVCall Debug Monitor Réservé PendSV SYSTICK IRQ0 ……………. Il s’agit de l’entrée Non Masquable Interrupt qui est généralement connectée au WatchDog. le NVIC gère un certain nombre d’exceptions déclenchées par des périphériques internes du Cortx-M3 (Bus AHB. Damergi Emir 14 Version Draft . figé) -2 (figé) -1 (figé) 0 (paramétrable) 1 (paramétrable) 2 (paramétrable) 3 (paramétrable) 4 (paramétrable) 5 (paramétrable) 6 (paramétrable) 7 (paramétrable) ……………. etc.. Erreur de matériel pour lequel aucune routine n’a été prévue Déclenchée en cas d’une tentative d’accès à une zone mémoire non autorisée.. MPU. En plus de ces interruptions. L’ensemble des adresses des routines relatives aux différentes sources d’interruptions forme la table de vecteurs d’interruptions.Le cœur Cortex-M3 Le NVIC est capable de gérer jusqu’à 240 interruptions générées par des périphériques externes au Cotex-M3 et dont le niveau de priorité peut être dynamiquement fixé parmi 256 niveaux possibles. Générée quand l’interface du bus AHB reçoit une erreur. Déclenchée par une erreur au niveau d’un programme (exple : division par 0).) ou par des fautes au niveau du programme même. 247 (paramétrable) Description Déclenchée quand un signal de reset est détecté.

III-2-c-1 Déroulement des interruptions Quand une interruption autorisée est déclenchée par un périphérique. et parallèlement. R12 R15 (Program Counter) R14 (Link register) PSR (Registre d’état) Damergi Emir 15 Version Draft . on cite :  Une réponse rapide grâce à l’architecture matérielle du NVIC d’une part et l’utilisation du jeu d’instructions thumb-2 qui permet d’interrompre l’exécution des instructions multi cycles (load et store). Il commence par sauvegarder un certain nombre de registres dans la pile.Le cœur Cortex-M3 Parmi les spécificités du NVIC.  Un temps de réponse (latence) déterministe ainsi que la possibilité de préemption des interruptions grâce à l’utilisation de plusieurs niveaux de priorité. Une fois l’exécution de la routine est terminée. Le temps total qui s’écoule du moment ou l’interruption se déclenche jusqu’à l’exécution de la première instruction de la routine est de seulement 12 cycles.  Il est conçu pour être programmé entièrement en langage ‘C’ sans être obligé de passer par des instructions ou fonctions écrites en assembleur. Ceci permet de supporter les applications temps réel. Cette phase dure également 12 cycles (voir figure). le NVIC force le processeur à la servir. il récupère l’adresse de la routine relative à l’interruption. les contenus des registres sauvegardés sont récupérés à partir de la pile ainsi que l’adresse de l’instruction suivante du programme principal. IRQ i PUSH 12 cycles Routine i POP 12 cycles Sauvegarde des registres : Restaurer les registres : R0-R3 .

C 6 cycles Routine i POP 12 cycles A la fin du traitement de IRQ j.IRQ i Instant possible de IRQ i PUSH 12 cycles Routine j T. une autre interruption de priorité supérieure est déclenchée. alors les mêmes étapes sont refaites (voir figure).IRQ i PUSH 12 cycles Routine i PUSH Routine j POP 12 cycles Routine i POP 12 cycles 12 cycles Cet enchaînement d’interruptions peut avoir lieu plusieurs fois. il commence directement par récupérer l’adresse de la routine relative à l’interruption sans retourner au programme principal . Cortex teste s’il y’a d’autres interruptions en attente. il récupère l’adresse de la routine relative avant de retourner au programme principal : Tail Chaining (T. ceci dure juste 6 cycles (voir figure).C) Damergi Emir 16 Version Draft . Si c’est le cas. Si oui. Niveau de priorité + IRQ j . d’où l’appellation nested (en cascade). il teste si entre temps une (des) interruption(s) de priorité inférieure s’est (se sont) produites. ce qui fait perdre énormément de temps.  Tail Chainig Contrairement à d’autres processeurs qui retournent au programme principal après le traitement d’une interruption avant de traiter l’interruption de priorité inférieure . Cortex utilise une méthode appelée Tail Chaining qui permet un temps de réponse plus court : à la fin du traitement d’une interruption. que si au cours Niveau de priorité + IRQ j . Il faut noter également.Le cœur Cortex-M3 Il est à noter que si au cours du traitement d’une interruption.

IRQ i PUSH 12 cycles Routine j T. Dans ce cas.C 6 cycles Routine i POP 12 cycles Damergi Emir 17 Version Draft .Le cœur Cortex-M3 La prise en compte d’une interruption de priorité inférieure peut avoir lieu non seulement au cours du traitement de l’interruption en cours. Niveau de priorité + IRQ j . Cortex commence l’opération d’empilement (PUSH) et puis et avant de traiter la routine relative à l’interruption i. il teste si d’autres interruptions de priorité supérieure ont eu lieu.18 cycles  Late Arrival En plus du tail chaining.C Routine i POP 12 cycles 6 1. Il commence par traiter la routine de l’interruption de plus haute priorité. Cortex arrête immédiatement l’opération POP et récupère l’adresse de la routine à exécuter (voir figure). Au moment du déclenchement d’une interruption i. Si c’est le cas.IRQ i Instant possible de IRQ i PUSH 12 cycles Routine j POP T. Cortex utilise une autre technique appelée Late Arrival (Arrivée Tardive) qui permet de servir plus rapidement les interruptions de plus haute priorité. Niveau de priorité + IRQ j Instant possible de IRQ j .12 cycles cycles 7. mais également lors de la restauration des valeurs des registres depuis la pile (POP). Ainsi. une interruption de haute priorité peut être servie en premier même si elle arrive avec un certain retard (jusqu’à 12 cycles) après une autre (voir figure).

En plus. Ainsi. En fait. il faut qu’il passe par une exception pour pouvoir accéder au registre de contrôle. Au cours de l’exécution d’un programme en mode handler. Mode « Handler » : utilisé quand le processeur exécute des exceptions. quand une exception se déclenche. MRS et CPS). quand un programme « UnPrivileged » se trompe. le contrôleur d’interruptions (NVIC) ni le bloc de contrôle du système. le niveau est basculé automatiquement vers « Privileged ».Le cœur Cortex-M3 III-2-d) Les modes opératoires Le Cortex-M3 supporte deux modes de fonctionnement : Mode « Thread » ou user : utilisé pour exécuter les applications logicielles (programme principal). il sera dans l’impossibilité de changer les valeurs du registre de contrôle. un programme s’exécutant dans le niveau « UnPrivileged » ne peut pas changer son niveau de privilège. les différentes combinaisons possibles sont : Niveau « Privileged » Mode « Handler » Mode « Thread » Exécution d’une exception Exécution du programme principal Exécution du programme principal Niveau « Unprivileged » Un programme s’exécutant dans le mode thread dans le niveau « Privileged » peut basculer vers le niveau « Unprivileged » en changeant l’état d’un bit dans un registre particulier appelé registre de contrôle. Une fois le traitement du Handler terminé. on retourne au niveau et au mode précédents. C’est le niveau par défaut après un reset. Niveau « Unprivileged » : Une application ayant ce niveau a un certain nombre de limites : Ne peut pas accéder le Timer System (SysTick). Pourrait avoir des restrictions quant à l’accès à la mémoire et aux périphériques si le processeur intègre un MPU (Memory Protection Unit). Ces différents modes et niveaux de privilège offrent plus de sécurité et de robustesse. si le processeur est équipé d’une MPU Damergi Emir 18 Version Draft . les applications possèdent deux niveaux de privilège : Niveau « Privileged » : Dans ce niveau le programme en cours peut utiliser toutes les instructions et peut accéder à toutes les ressources du processeur. C’est le mode par défaut du processeur après un reset. En plus. En effet. Par contre. Ne peut pas utiliser un certain nombre d’instructions (MSR.

il est possible d’interdire aux programmes « UnPrivileged » d’accéder à la mémoire En plus et pour éviter la possibilité de faire crasher le système qui peut être causé par des erreurs d’opérations sur la pile. Une pile MSP pour les exceptions « privileged » tournant en mode Handler.Le cœur Cortex-M3 (Memory Protection Unit). Le diagramme suivant résume le passage entre les différents états du système : Privileged / Handler Mode Retour d’Int Interruption Edition du contenu Registre de ctrl Privileged / Thread Mode Retour d’Int UnPrivileged / Thread Mode III-2-e) Le Bit Banding A compléter III-2-f) Alimentation et Reset A compléter Damergi Emir 19 Version Draft . le STM32 offre deux piles : Une pile PSP pour les programmes « unprivileged » tournant en mode thread.

ARM a défini avec un ensemble de fabricants de circuits intégrés et de développeurs de compilateurs. Cette couche est adaptée par le fabricant du microcontrôleur aux périphériques qui ont été ajoutés au noyau Cortex-M. programmes utilisateurs. Ce standard présente une approche standard et commune pour interfacer les modules logiciels relatifs aux périphériques. un standard de programmation appelé CMSIS (Cortex Microcontroller Software Interface Standard). Elle définit également une interface indépendante de l’architecture matérielle pour les systèmes d’exploitation temps réel.Le cœur Cortex-M3 IV- Le Standard de programmation en ‘C’ : CMSIS 1. Comme partie des fonctionnalités CMSIS. ARM fournit les couches logicielles suivantes disponibles pour divers compilateurs :  Couche d’accès aux périphériques de base (du noyau): contient les définitions. Il s’agit en effet d’un ensemble de modules (drivers) qui permettent aux applications d’accéder au matériel d’une façon transparente (voir figure suivante). et systèmes d’exploitation temps réel.0 Pour faciliter le portage et la réutilisation des applications écrites en langage ‘C’ pour les microcontrôleurs se basant sur un cœur Cortex-M. interlogiciel (Middleware).  Couche d’accès interlogiciel (Middleware): Fournit des méthodes communes pour accéder aux périphériques hors noyau. les adresses et les fonctions d’accès aux différents registres des périphériques du noyau (core peripherals) contenus dans Cortex même. Damergi Emir 20 Version Draft .

c Fichier de démarrage (assembleur) pour l’initialisation des paramètres du STM32 Routines relatives aux exceptions du Cortex-M3 stm32f10x_it.c System_st32f10x.Le cœur Cortex-M3 En plus de ces deux couches.h stm32f10x_ppp. Certains faisant partie du CMSIS.c Stm32f10x. Organisation de la mémoire STM32 et définition des adresses physiques des registres.h stm32f10x_rcc. Application.c Les drivers des périphériques de base (noyau) (Contrôleur d’interruptions. d’autres sont fournis par le fabricant du microcontrôleur et enfin d’autres qui sont développés par l’utilisateur (voir figure). une troisième est développée par le fabricant du microcontrôleur. Timer système) misc.h - L’application développée par l’utilisateur Startup_stm32f10x_xx. Damergi Emir 21 Version Draft .h Fichier entête de configuration contenant la liste des périphériques utilisés du STM32 misc.h System_st32f10x. Ainsi. Liste des interruptions du STM32 spécifiques au noyau Cortex-M3.h stm32f10x_conf. dans un environnement de développement intégré donné.h stm32f10x_ppp. on trouve un certain nombre de fichiers. Options de configuration.s stm32f10x_it.  Couche d’accès aux périphériques hors noyau: fournit les définitions et les adresses de tous les périphériques ajoutés par le fabricant.h Core_m3.c Microcontrôleur STM32 Fonctions bas niveau de l’API pour l’accès aux fonctionnalités des périphériques Fichiers CMSIS fournis par la société ARM Fichiers d’accès aux périphériques fournis par ST-Microelectronics Fichiers « template » configurés par l’utilisateur ou code développé entièrement par l’utilisateur.

h. Chaque fichier étant relatif à l’un des périphériques du microcontrôleur (ppp étant remplacée par l’abréviation du périphérique).h.h Dossiers devant contenir les exécutables et listings (output et listing directory) Damergi Emir 22 Version Draft .c et .h Template RIDE STM3210B_Eval Dossiers à inclure ( include directory ) Fichiers du projet ride main. L’interface de communication série synchrone et asynchrone Fonctions haut niveau du contrôleur d’interruptions et du timer système (SysTick) Développement d’applications pour les µc STM32 dans l’environnement Ride Une fois l’EDI Ride installé sur la plateforme de développement (PC).h.h STM32F10x_StdPerpiph Drivers inc misc. stm32f10x_conf. stm32f10x_it. stm32f10x_ppp.c et . il faut commencer par copier le dossier contenant les librairies ainsi que les template. Core_cm3. stm32f10.Le cœur Cortex-M3 Il est à noter que stm32f10x_ppp.c et .c.h src misc. Nom de fichier stm32f10x_adc stm32f10x_bkp stm32f10x_can stm32f10x_crc stm32f10x_dac stm32f10x_dma stm32f10x_exti stm32f10x_gpio stm32f10x_iwdg stm32f10x_pwr stm32f10x_rcc stm32f10x_rtc stm32f10x_tim stm32f10x_usart misc Périphérique Convertisseur Analogique/Numérique Sauvegarde de données Bus CAN Calcul des codes de détection d’erreurs Convertisseur Analogique/Numérique Accès direct à la mémoire Interruptions externes Entrées/sorties parallèles Chien de garde Gestion du mode d’alimentation Contrôle du reset et de la distribution du signal d’horloge Horloge temps réel Les Timers (compteurs).h n’est pas uniquement utilisé pour désigner un seul fichier mais elle s’étend à un certain nombre de fichiers. stm32f10x ppp.c et .h. Ce dossier possède l’hiérarchie suivante : Library CMSIS Core CM3 Startup Startup_sm32f10x_xx. System_stm32f10x. La liste suivante présente les principaux périphériques de la famille des microcontrôleurs STM32 (particulièrement le STM32F103VB).h.

medium. indiquer chemin de l’installation de ride\Lib\ARM. les premières parties du code élémentaires nécessaires et communes à toute application sont :     La définition des variables (structures) relatives aux périphériques. Sdram). (voir diagramme suivant) Damergi Emir 23 Version Draft .c. L’initialisation des périphériques avec les valeurs déterminées. indiquer le chemin du dossier entouré en bleu (figure ci-dessus)). Les divers périphériques à utiliser Pour une application n’utilisant pas le mécanisme d’interruptions. Avant de commencer la programmation. tels que :    la fréquence du signal d’horloge externe appliqué à l’entrée OSc du microcontrôleur. Activation des signaux d’horloges attaquant les périphériques. le type de microcontrôleur à utiliser (High. Pour le library directory. il est indispensable de commencer par configurer certains paramètres au niveau des différents fichiers de configuration. sélectionner le microcontrôleur à utiliser ainsi que les différents chemins des répertoires (pour l’include directory. La détermination des valeurs des différentes propriétés des périphériques. low ou connectivity) qui permet de déterminer les tailles des différentes zones mémoire (Flash. Pour l’output directory ainsi que le listing directory. Ces différentes parties faisant généralement partie du fichier main.Le cœur Cortex-M3 Il faut ensuite ouvrir le projet ride (dossier ride) et dans la zone projet>>propriétés. indiquer les chemins entourés en rouge (figure ci-dessus).

h" /* private variables --------*/ PPP1_InitTypeDef PPP1_InitStructure ……………………………………….)*/ RCC_APBxPeriphClockCmd (RCC_APBxPeriph_PPPi.Le cœur Cortex-M3 system_stm32f10x..membren = propriété Initialiser le périphérique PPPi_Init (&PPPi_InitStructure) Damergi Emir 24 Version Draft . PPPi_InitTypeDef PPPi_InitStructure Activer le signal d’horloge Pour chaque périphérique …… …… int main (void) { Systeminit( ).h" */ #include "stm32f10x_PPP1.h" */ /* #include "stm32f10x_bkp.h" /* #include "stm32f10x_can. Enable) Déterminer les propriétés de ses différents membres PPPi_InitStructure..h Décommenter les périphériques à activer /* #include "stm32f10x_adc.c Décommenter l’option correspondante /* #define SYSCLK_FREQ_HSE HSE_Value */ /* #define SYSCLK_FREQ_24MHz 24000000 */ /* #define SYSCLK_FREQ_36MHz 36000000 */ /* #define SYSCLK_FREQ_48MHz 48000000 */ /* #define SYSCLK_FREQ_56MHz 56000000 */ #define SYSCLK_FREQ_72MHz 72000000 Identifier la fréquence horloge à l’entrée OSC du microcontrôleur Déterminer les périphériques PPP à activer dans l’application stm32f10x_conf.h" */ #include "stm32f10x_PPPi.h" Déclarer les variables relatives aux périphériques activés Main.h" */ /* #include "stm32f10x_crc. /* configurer (horologe. flash.c #include "stm32f10x. PPPi_InitStructure.membre1 = propriété ………………………………………. etc.

il est possible de l’appliquer à une partie du périphérique et non pas au périphérique entier. GPIOD et GPIOE) qui peuvent être initialisés indépendamment l’un des autres. etc. #include "stm32f10x_NVIC. Il est également indispensable de définir au niveau du périphérique source d’interruption un certain nombre de propriétés relatives au déclenchement de l’interruption. à la source d’interruption et déterminer ses propriétés (telles que niveau de priorité. Dans ce cas.c une structure (variable) relative au NVIC : NVIC_InitTypeDef NVIC_InitStructure En reliant le NVIC.h. &PPPi_InitStructure) Gestion des interruptions.h" dans le fichier En déclarant au niveau du fichier main.. peut prendre les valeurs 1 ou 2 (relativement aux bus APB1 et APB2) et que l’activation des signaux d’horloge des périphériques connectés au même bus peut être faite en une seule ligne : RCC_APBxPeriphClockCmd (RCC_APBxPeriph_PPP1 |…|…|…| RCC_APBxPeriph_PPPn .Le cœur Cortex-M3 Il est à noter que pour l’activation du signal horloge.Enable) En ce qui concerne l’initialisation. Pour les applications utilisant le mécanisme d’interruption.h..c et la déclarer dans le fichier entête stm32f10x_it. il faut spécifier dans l’instruction d’initialisation le ou les ports du périphérique GPIO à initialiser : GPIO_Init (GPIOA. A titre d’exemple le périphérique d’entrées/sorties (GPIO : General Purpose Input Output) contient 5 ports (GPIOA.NVIQ_IRQChannel= PPPx_IRQn .c également.NVIQ_IRQChannelPremptionPriority = val1. (le périphérique PPP est source d’interruption) NVIC_InitStructure.) : NVIC_InitStructure. il faut évidement écrire la routine d’interruption au niveau du fichier stm32f10x_it. x dans APBxPeriph. (Niveau de priorité du groupe) NVIC_InitStructure. GPIOC. de priorité de PPPX dans le groupe) NVIC_InitStructure. On reviendra en détail sur ces propriétés pour chaque périphérique à part.NVIQ_IRQChannelSubPriority = val2. Damergi Emir 25 Version Draft . GPIOB.NVIQ_IRQChannelCmd=ENABLE (autoriser l’interruption) NVIC_Init (&NVIC_InitStructure) En plus. (Niv. il faut considérer le contrôleur d’interruptions en cascade NVIC (Nested Vector Interrupt Controller) comme étant lui-même un périphérique qu’il faut activer et initialiser :    En décommantant la directive stm32f10x_conf. au niveau de main. l’événement de déclenchement.

Sign up to vote on this title
UsefulNot useful