P. 1
Doc Chap2 Cortex STM32 GL3

Doc Chap2 Cortex STM32 GL3

|Views: 1,406|Likes:

More info:

Published by: Med Taieb Ghodbane on May 09, 2012
Droits d'auteur :Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/25/2014

pdf

text

original

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

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

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

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

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

. 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). 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. 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.Le cœur Cortex-M3  Performance : Avec une capacité de traitement de 12. le Cortex-M3 intègre dans son jeu d’instructions. En plus. Damergi Emir 6 Version Draft .5 DMIPS et une fréquence de fonctionnement qui peut atteindre la valeur de 275 MHz.

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

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

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

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

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

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

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

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

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

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

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

Le cœur Cortex-M3 (Memory Protection Unit). 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 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. Une pile MSP pour les exceptions « privileged » tournant en mode Handler.

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

Damergi Emir 21 Version Draft . Liste des interruptions du STM32 spécifiques au noyau Cortex-M3. Timer système) misc. une troisième est développée par le fabricant du microcontrôleur.c Stm32f10x.h Fichier entête de configuration contenant la liste des périphériques utilisés du STM32 misc. on trouve un certain nombre de fichiers. Application.c System_st32f10x. Ainsi.h System_st32f10x. Options de configuration.h stm32f10x_rcc. dans un environnement de développement intégré donné. Certains faisant partie du CMSIS.  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.Le cœur Cortex-M3 En plus de ces deux couches. Organisation de la mémoire STM32 et définition des adresses physiques des registres.h stm32f10x_conf.h stm32f10x_ppp.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.c Les drivers des périphériques de base (noyau) (Contrôleur d’interruptions.h stm32f10x_ppp.h - L’application développée par l’utilisateur Startup_stm32f10x_xx.s stm32f10x_it.c Fichier de démarrage (assembleur) pour l’initialisation des paramètres du STM32 Routines relatives aux exceptions du Cortex-M3 stm32f10x_it. 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 et .h. La liste suivante présente les principaux périphériques de la famille des microcontrôleurs STM32 (particulièrement le STM32F103VB).c et . stm32f10. Ce dossier possède l’hiérarchie suivante : Library CMSIS Core CM3 Startup Startup_sm32f10x_xx.h.h src misc.h STM32F10x_StdPerpiph Drivers inc misc.h n’est pas uniquement utilisé pour désigner un seul fichier mais elle s’étend à un certain nombre de fichiers. 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). stm32f10x_conf. stm32f10x ppp. stm32f10x_ppp.h. Core_cm3. stm32f10x_it.Le cœur Cortex-M3 Il est à noter que stm32f10x_ppp. 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. il faut commencer par copier le dossier contenant les librairies ainsi que les template.c.c et .h Template RIDE STM3210B_Eval Dossiers à inclure ( include directory ) Fichiers du projet ride main.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). System_stm32f10x.c et .

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

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

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

You're Reading a Free Preview

Télécharger
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->