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

sous forme d’un IP « Intellectual Property ».ARM -----. Parmi les CPUs (IP) les plus utilisés dans les microcontrôleurs 32 bits. on trouve les cœurs de la société ARM (Advanced Risc Machines).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].SuperH -----.x86 -----. 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.PowerPC Ventes en Billions de dollars -----.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 -----. 16 et 32 bits La majorité des fabriquants de microcontrôleurs optent pour l’intégration d’un CPU préconçu. dans leurs circuits et lui ajoutent les mémoires et les entrées/sorties nécessaires pour les applications ciblées.

En effet. Aujourd’hui. Les cœurs Cortex portent la désignation Cortex-XN. 1156T Cortex-A8 Cortex-R4 Cortex-M3 Figure 3 : Evolution des architectures des cœurs ARM Contrairement aux architectures précédentes. 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. 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. Acorn Computer Group et VLSI Technology. 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. On distingue 3 profils (figure 4) propres à l’architecture ARM-v7 ou Cortex et qui sont : Damergi Emir 3 Version Draft . 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). ce qui rendait l’utilisation d’un outil de développement standard impossible. 946 Intel Xscale ARM 1136. Contrairement aux autres sociétés travaillant dans le domaine des semi-conducteurs.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. 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. Intel StrongARM ARM 926. ARM ne fabrique pas des processeurs et les vend directement. 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. appelée également Cortex (figure 3). la programmation moins transparente et évidement le code difficilement portable. 1176.

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 .  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. On les trouve dans des produits tels que les téléviseurs numériques haute définition. 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.5 DMIPS/mW 0.25 DMIPS 1.9 à 1. le domaine de l’automobile (systèmes de freinage).6 DMIPS 1.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.5 DMIPS/mW Thumb/Thumb-2 GIC MPU FP Unit 8 stages Pipeline 6. Les processeurs appartenant à ce profil peuvent fonctionner avec des fréquences de 2GHz et avec une performance de 2. les appareils photo numériques.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. les terminaux mobiles.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.6 à 2. Linux. …. Windows CE) nécessitant une puissance de traitement élevée et un système de gestion de mémoire virtuelle (MMU).

pour la première fois. Avec le Cortex-M3. Figure 5 : Efficacité énergétique ( en MIPS/mW ) pour différentes plateformes embarquées Damergi Emir 5 Version Draft Flexibilité . vers une architecture commune. Atmel. le critère primordial qui incitait les développeurs de systèmes embarqués à opter pour les MCUs 8 bits était le prix. 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.  Efficacité énergétique : Les MCUs. on atteint une efficacité de 12. il supporte des modes basse consommation et permet une activation sélective des périphériques à utiliser. Principalement le cœur Cortex-M3. 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. NXP. C’est le profil qui est destiné à être intégré dans les microcontrôleurs. comme tous les processeurs embarqués et à usage général. sont connus pour être flexibles au prix d’une consommation élevée en énergie de l’ordre de 1 à 3 MIPS/mW.5 MIPS/mW (figure 5). Samsung. Zilog. un coût réduit et un comportement déterministe pour le traitement des interruptions. etc…) [3]. En plus. lancé en 2004. les prix des MCUs 32 bits a considérablement baissé et sont pratiquement dans le même ordre que les MCUs 8 bits. Avec Cortex-M3.Le cœur Cortex-M3 Le profil M (séries Cortex-M) : optimisé pour des applications nécessitant une basse consommation en énergie. 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.

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.. Damergi Emir 6 Version Draft . les performances du CortexM3 dépassent largement celles des architectures 8 et 16 bits (figure 6).  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. quelques unes qui s’exécutent d’une manière atomique. le Cortex-M3 intègre dans son jeu d’instructions. En plus.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). 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.Le cœur Cortex-M3  Performance : Avec une capacité de traitement de 12.

6 pour 32 Kbytes. 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. 8 pour 64 Kbytes.La famille STM32 Comme la majorité des constructeurs de microcontrôleurs. On distingue 4 lignes de produits de la famille STM32 qui possèdent un certain nombre de composants en commun. 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 pour 256 Kbytes. V : 100 pins et Z : 144 pins). ST-Microelectronics a proposé toute une famille de microcontrôleurs 32 bits basée sur le cœur Cortex-M3 (figure 8). 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). B pour 128 Kbytes. R : 64 pins. C: 48 pins. z donne une indication sur la taille de la mémoire flash interne (4 pour 16 Kbytes. mais qui diffèrent en ce qui concerne la fréquence de Damergi Emir 7 Version Draft .Le cœur Cortex-M3 II.

Le cœur Cortex-M3 fonctionnement. PWM (Pulse Width Modulation) : Modulation de largeur d’impulsion. le système DMA (Direct Memory Access) ainsi que le AHB (Advnaced High Bus) . 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. CAN. DMA (direct Memory Access) : il permet le transfert direct de données entre mémoires et périphériques. 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. I 2S (Connectivity) 105 & 107  Horloge temps réel. 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. Le tableau suivant présente ces 4 lignes de produit. D-Bus & System Bus: connectés directement à la matrice de bus qui sert de lien avec les bus d’accès à la SRAM. I2S et Timer PWM. 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.Récepteur fonctionnant dans les modes synchrones et asynchrones. Au niveau de l’architecture interne. CAN (Controller Area Network) : Il s’agit d’une interface permettant de communiquer sur le bus CAN tout en respectant la norme. DAC (Digital Analog Converter) : Convertisseur Analogique/Numérique. 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. 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. la taille de la mémoire SRAM interne ainsi que le nombre de périphériques d’E/S disponibles. Damergi Emir 8 Version Draft . CAN.

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.  HSE (High Speed External) : Il s’agit d’un signal de fréquence comprise entre 4 et 25 Mhz. 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 . C’est cette fréquence qui est utilisée par défaut après une opération de reset. 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. généré par un dispositif (à base d’un cristal) placé à l’extérieur du µc.

c'est-à-dire qu’il contient deux bus distincts pour le transfert des données et des instructions. et que les mémoires utilisées étaient généralement de petite taille. et par conséquent une augmentation de la performance puisque l’accès aux données n’affecte pas le pipeline. il permet d’optimiser l’utilisation de l’espace Damergi Emir 10 Version Draft . cette solution a apporté un gain en occupation mémoire. Il contient un chemin de données (data path) 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. 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. mais le jeu d’instructions ARM 32 bits a été complètement abondonné au profit d’un nouveau jeu d’instructions Thumb 32 bits. L’une des particularités du Cortex-M3 est son jeu d’instruction thumb-2. Mais. Cette caractéristique. Decode et Execute) et possède une architecture Harvard.768 Khz. IIIIII-1 : Le Cœur Cortex-M3 Introduction C’est un processeur 32 bits. Il se base sur un pipeline à 3 étages (Fetch. étant donnée que les instructions ARM de 32 bits occupent un espace mémoire important. se traduit par une multitude d’interfaces bus qui peuvent être utilisées simultanément. un banc de registres 32 bits et des interfaces mémoires de 32 bits. D’après ARM. 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. l’espace d’adressage du Cortex-M3 est unique et peut atteindre la taille de 4 GO. le jeu d’instruction Thumb 16 bits a été gardé. Cependant. En effet. L’ensemble ainsi obtenu des instructions Thumb 16 et 32 bits est appelé Thumb-2.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. Ainsi. 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. Pour le Cortex-M3.

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 . le Cortex-M3 contient : . En plus.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). Caractéristiques du Cortex-M3 Dans cette partie. logiques. En effet. transfert). en moyenne. III-2-a) Les registres Comme les processeurs ARM. on essaiera d’explorer les principales caractéristiques du coeur Cortex-M3.2 = 0. des multiplications 32 bits qui se déroulent en un cycle horloge.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. une partie importante de ce nouveau jeu d’instructions Thumb-2 a été spécialement conçue pour être la cible des compilateurs.R13 : il s’agit du registre de pile.2 DMIPS/MHz. c'est-à-dire le Cortex-M3 exécute. une instruction en moins d’un cycle horloge (1/1. des instructions ont été introduites pour permettre :   III-2 : des divisions matérielles (SDIV et UDIV) qui nécessitent de 2 à 3 cycles horloge. Des benchmarks réalisés donnent une performance de 1. .833 cycle) . Figure 11 : performance et densité du code pour différents jeux d’instructions ARM A part l’amélioration des performances.

. BASEPRI : Registre de 9 bits dont la valeur indique. s’il est actif. Registres de masque d’interruption : On distingue 3 registres qui sont PRIMASK : Registre de 1 bit qui permet. si elle est différente de 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. 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. FAULTMASK : Registre de 1 bit qui permet. il possède une mémoire organisée d’une façon prédéterminée.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. ISPR (Interrupt PSR) : Registre d’état relatif à l’interruption en cours. d’interdire toutes les interruptions à l’exception de l’interruption non masquables (NMI). La mémoire occupe un espace d’adressage de 4GO réparti comme suit Damergi Emir 12 Version Draft . ESPR (Execution PSR) : Registre d’état qui donne des informations sur l’instruction en cours (mode thumb ou ARM et si elle est atomique). le niveau de priorité des interruptions permises : uniquement les interruptions ayant un niveau de priorité strictement supérieur à cette valeur sont autorisées. Si cette valeur est égale à 0. s’il est actif. PSP (Process Stack Pionter) : Registre de pile de processus qui est utilisé quand des applications ayant le niveau « Unprivileged» sont exécutées. III-2-b) Organisation de la mémoire Le processeur Cortex-M3 étant un cœur standard pour les microcontrôleurs. alors toutes les interruptions sont permises.R15: il s’agit du registre compteur programme (ou Program Counter) qui indique l’adresse de la prochaine instruction à exécuter par le processeur. 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). 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.

le bloc de contrôle. Externe (1 GO) Espace utilisé pour adresser les périphériques ajoutés par le constructeur du microcontrôleur intégrant le CortexM3.5 GO) 0x20000000 0x1FFFFFFF CODE (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. etc. Damergi Emir 13 Version Draft . (1 MO) Espace utilisé pour adresser les périphériques du CortexM3 : Contrôleur d’interruption. Par conséquent.5 GO) 0x00000000 Espace utilisé pour stocker du code exécutable. ni d’adapter des parties du code. On peut également stocker des données. 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. 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. Espace utilisé pour stocker les données relatives au code. 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.5 GO) 0x40000000 0x3FFFFFFF SRAM (0. le Timer système.

. Damergi Emir 14 Version Draft . le NVIC gère un certain nombre d’exceptions déclenchées par des périphériques internes du Cortx-M3 (Bus AHB.) ou par des fautes au niveau du programme même. 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. 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 ……………. 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. Nr 1 2 3 4 5 6 7-10 11 12 13 14 15 16… …. MPU.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. 247 (paramétrable) Description Déclenchée quand un signal de reset est détecté. L’ensemble des adresses des routines relatives aux différentes sources d’interruptions forme la table de vecteurs d’interruptions. Dans le cas d’un appel à un service système. 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. En plus de ces interruptions. 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 ……………. Timer SysTick. Il s’agit de l’entrée Non Masquable Interrupt qui est généralement connectée au WatchDog. Déclenchée par une erreur au niveau d’un programme (exple : division par 0). Quand une exception autorisée est déclenchée. Générée quand l’interface du bus AHB reçoit une erreur. Le tableau suivant énumère ces exceptions internes et décrit l’origine. Interrupt # 240 Niveau de priorité par défaut -3 (maximum.. Déclenchée quand un point de break (ou watch) est atteint ou bien quand le débogage est activé. Dans le Cortex-M3. 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.

et parallèlement. le NVIC force le processeur à la servir. Cette phase dure également 12 cycles (voir figure). Il commence par sauvegarder un certain nombre de registres dans la pile.Le cœur Cortex-M3 Parmi les spécificités du NVIC. 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. Ceci permet de supporter les applications temps réel. III-2-c-1 Déroulement des interruptions Quand une interruption autorisée est déclenchée par un périphérique. Une fois l’exécution de la routine est terminée.  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. il récupère l’adresse de la routine relative à l’interruption. IRQ i PUSH 12 cycles Routine i POP 12 cycles Sauvegarde des registres : Restaurer les registres : R0-R3 . R12 R15 (Program Counter) R14 (Link register) PSR (Registre d’état) Damergi Emir 15 Version Draft . 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. 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).  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é.

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

12 cycles cycles 7.C 6 cycles Routine i POP 12 cycles Damergi Emir 17 Version Draft . Cortex utilise une autre technique appelée Late Arrival (Arrivée Tardive) qui permet de servir plus rapidement les interruptions de plus haute priorité. Dans ce cas. Cortex commence l’opération d’empilement (PUSH) et puis et avant de traiter la routine relative à l’interruption i. Ainsi. Cortex arrête immédiatement l’opération POP et récupère l’adresse de la routine à exécuter (voir figure). mais également lors de la restauration des valeurs des registres depuis la pile (POP).IRQ i Instant possible de IRQ i PUSH 12 cycles Routine j POP T.C Routine i POP 12 cycles 6 1. il teste si d’autres interruptions de priorité supérieure ont eu lieu. Si c’est le cas. Niveau de priorité + IRQ j . Niveau de priorité + IRQ j Instant possible de IRQ j . Il commence par traiter la routine de l’interruption de plus haute priorité.18 cycles  Late Arrival En plus du tail chaining.IRQ i PUSH 12 cycles Routine j T. 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).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. Au moment du déclenchement d’une interruption i.

le contrôleur d’interruptions (NVIC) ni le bloc de contrôle du système. Par contre. C’est le niveau par défaut après un reset. Ces différents modes et niveaux de privilège offrent plus de sécurité et de robustesse. Niveau « Unprivileged » : Une application ayant ce niveau a un certain nombre de limites : Ne peut pas accéder le Timer System (SysTick). 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. Une fois le traitement du Handler terminé. MRS et CPS). on retourne au niveau et au mode précédents. un programme s’exécutant dans le niveau « UnPrivileged » ne peut pas changer son niveau de privilège. il faut qu’il passe par une exception pour pouvoir accéder au registre de contrôle. Ainsi. En plus. Ne peut pas utiliser un certain nombre d’instructions (MSR. Au cours de l’exécution d’un programme en mode handler.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. le niveau est basculé automatiquement vers « Privileged ». Mode « Handler » : utilisé quand le processeur exécute des exceptions. En effet. si le processeur est équipé d’une MPU Damergi Emir 18 Version Draft . 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. En plus. C’est le mode par défaut du processeur après un reset. En fait. quand une exception se déclenche. 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). quand un programme « UnPrivileged » se trompe.

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 . 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. le STM32 offre deux piles : Une pile PSP pour les programmes « unprivileged » tournant en mode thread.Le cœur Cortex-M3 (Memory Protection Unit). Une pile MSP pour les exceptions « privileged » tournant en mode Handler.

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. ARM a défini avec un ensemble de fabricants de circuits intégrés et de développeurs de compilateurs. interlogiciel (Middleware). Elle définit également une interface indépendante de l’architecture matérielle pour les systèmes d’exploitation temps réel. Cette couche est adaptée par le fabricant du microcontrôleur aux périphériques qui ont été ajoutés au noyau Cortex-M. Ce standard présente une approche standard et commune pour interfacer les modules logiciels relatifs aux périphériques.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. 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).Le cœur Cortex-M3 IV- Le Standard de programmation en ‘C’ : CMSIS 1. Damergi Emir 20 Version Draft . programmes utilisateurs. un standard de programmation appelé CMSIS (Cortex Microcontroller Software Interface Standard). et systèmes d’exploitation temps réel.  Couche d’accès interlogiciel (Middleware): Fournit des méthodes communes pour accéder aux périphériques hors noyau. Comme partie des fonctionnalités CMSIS. 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.

h stm32f10x_ppp.Le cœur Cortex-M3 En plus de ces deux couches. une troisième est développée par le fabricant du microcontrôleur. Timer système) misc.c System_st32f10x. Application. Liste des interruptions du STM32 spécifiques au noyau Cortex-M3. Damergi Emir 21 Version Draft . dans un environnement de développement intégré donné.s stm32f10x_it.h Core_m3.c Fichier de démarrage (assembleur) pour l’initialisation des paramètres du STM32 Routines relatives aux exceptions du Cortex-M3 stm32f10x_it.h Fichier entête de configuration contenant la liste des périphériques utilisés du STM32 misc.h System_st32f10x. on trouve un certain nombre de fichiers.c Stm32f10x. Options de configuration.  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.c Les drivers des périphériques de base (noyau) (Contrôleur d’interruptions. Ainsi.h - L’application développée par l’utilisateur Startup_stm32f10x_xx. Organisation de la mémoire STM32 et définition des adresses physiques des registres.h stm32f10x_ppp.h stm32f10x_rcc.h stm32f10x_conf. d’autres sont fournis par le fabricant du microcontrôleur et enfin d’autres qui sont développés par l’utilisateur (voir figure).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. Certains faisant partie du CMSIS.

stm32f10x_conf.Le cœur Cortex-M3 Il est à noter que stm32f10x_ppp.c et .c et .h Dossiers devant contenir les exécutables et listings (output et listing directory) Damergi Emir 22 Version Draft . 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.h.c.h. La liste suivante présente les principaux périphériques de la famille des microcontrôleurs STM32 (particulièrement le STM32F103VB).c et . il faut commencer par copier le dossier contenant les librairies ainsi que les template.h src misc. Core_cm3. 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). Ce dossier possède l’hiérarchie suivante : Library CMSIS Core CM3 Startup Startup_sm32f10x_xx. stm32f10x ppp. stm32f10x_ppp. 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.h Template RIDE STM3210B_Eval Dossiers à inclure ( include directory ) Fichiers du projet ride main. System_stm32f10x.h. stm32f10x_it.c et . stm32f10.h STM32F10x_StdPerpiph Drivers inc misc.

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

h" */ /* #include "stm32f10x_bkp.h" */ #include "stm32f10x_PPPi.Le cœur Cortex-M3 system_stm32f10x. PPPi_InitStructure..h" /* private variables --------*/ PPP1_InitTypeDef PPP1_InitStructure ……………………………………….. /* configurer (horologe.c #include "stm32f10x. Enable) Déterminer les propriétés de ses différents membres PPPi_InitStructure.membre1 = propriété ………………………………………. flash.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. etc.)*/ RCC_APBxPeriphClockCmd (RCC_APBxPeriph_PPPi.h" Déclarer les variables relatives aux périphériques activés Main.membren = propriété Initialiser le périphérique PPPi_Init (&PPPi_InitStructure) Damergi Emir 24 Version Draft .h" */ #include "stm32f10x_PPP1. PPPi_InitTypeDef PPPi_InitStructure Activer le signal d’horloge Pour chaque périphérique …… …… int main (void) { Systeminit( ).h" /* #include "stm32f10x_can.h" */ /* #include "stm32f10x_crc.h Décommenter les périphériques à activer /* #include "stm32f10x_adc.

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.NVIQ_IRQChannelCmd=ENABLE (autoriser l’interruption) NVIC_Init (&NVIC_InitStructure) En plus. Pour les applications utilisant le mécanisme d’interruption. x dans APBxPeriph.h.NVIQ_IRQChannelPremptionPriority = val1.. de priorité de PPPX dans le groupe) NVIC_InitStructure. GPIOC. à la source d’interruption et déterminer ses propriétés (telles que niveau de priorité. il est possible de l’appliquer à une partie du périphérique et non pas au périphérique entier. A titre d’exemple le périphérique d’entrées/sorties (GPIO : General Purpose Input Output) contient 5 ports (GPIOA. (Niveau de priorité du groupe) NVIC_InitStructure. il faut spécifier dans l’instruction d’initialisation le ou les ports du périphérique GPIO à initialiser : GPIO_Init (GPIOA.c également. etc.NVIQ_IRQChannel= PPPx_IRQn . (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. il faut évidement écrire la routine d’interruption au niveau du fichier stm32f10x_it. 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. #include "stm32f10x_NVIC. &PPPi_InitStructure) Gestion des interruptions. On reviendra en détail sur ces propriétés pour chaque périphérique à part.c et la déclarer dans le fichier entête stm32f10x_it. Damergi Emir 25 Version Draft .h" dans le fichier En déclarant au niveau du fichier main.Enable) En ce qui concerne l’initialisation.h. Dans ce cas.) : NVIC_InitStructure. au niveau de main.c une structure (variable) relative au NVIC : NVIC_InitTypeDef NVIC_InitStructure En reliant le NVIC. GPIOD et GPIOE) qui peuvent être initialisés indépendamment l’un des autres.NVIQ_IRQChannelSubPriority = val2. (le périphérique PPP est source d’interruption) NVIC_InitStructure. GPIOB.. l’événement de déclenchement.

Sign up to vote on this title
UsefulNot useful