Vous êtes sur la page 1sur 26

I- Introduction gnrale

I-1 I-2 I-3 Introduction ARM et les curs CORTEX Pourquoi le Cortex-M3 ?

II-

La famille STM32

III-

Le Cur Cortex-M3

III-1 Introduction III-2 Caractristiques du Cortex-M3


III-2-a) III-2-b) III-2-c) Les registres Organisation de la mmoire 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)

Droulement des interruptions

Les modes opratoires Le Bit Banding Alimentation et Reset

IV-

Le Standard de programmation en C : CMSIS 1.0

Le cur Cortex-M3

Prsentation gnrale de la famille des microcontrleurs STM32 : Le cur Cortex-M3


Par Damergi Emir

I- Introduction gnrale
I-1 : Introduction Un microcontrleur ou MCU (Microcontroller Circuit Unit) est un systme informatique entier ( CPU ou Central Processing Unit , mmoire, bus, contrleur dinterruption, interfaces parallles et srie, Timers, Convertisseurs A/N et N/A) contenu intgralement dans un circuit intgr unique. Le CPU dun microcontrleur tant gnralement moins complexe que celui dun systme informatique ordinaire (Ordinateur), consommation lectrique plus faible (qq milliwatt en fonctionnement et de lordre du microwatt en veille) et galement moins

performant : Il supporte environs une centaine dinstructions (transferts de donnes, sauts, oprations logiques simples, dcalages, et les oprations arithmtiques) et fonctionne des frquences relativement basses variant de quelques dizaines de MHz quelques centaines. Ceci permet de limiter la consommation en nergie du circuit. Ces circuits prix rduits grandes quantits (moins de 1$ pour 10000 pices) sont dune grande utilit pour les applications embarques qui ont plus besoin dun grand nombre de lignes dE/S pour la commande, lacquisition ou la communication que dune capacit de traitement leve. Ils permettent ainsi la conception de cartes de commandes, de petites tailles et avec des rapports prix/qualit exceptionnels, pour un grand nombre de systmes embarqus (Machines laver, systmes GPS, climatiseurs, cartes puce, automates programmables, contrleurs dascenseurs, variateurs de vitesse, etc..). Ils couvrent le plus large spectre du domaine de lembarqu avec des ventes qui ont atteint les $26 billions en 2007. Mme si les c 8 bits (relativement la largeur du bus de donnes) se sont imposs longtemps ; ltendue des domaines dapplication des c, le besoin croissant en capacit de traitement et en comportement temps rel ont incit les constructeurs proposer des c 16 et particulirement 32 bits beaucoup plus performants. En effet, les ventes (en %) des microcontrleurs 32 bits ont normment progress lors de la dernire dcennie et sont passes de moins de 1% en 2000, 30% en 2006 pour atteindre

Damergi Emir

Version Draft

Le cur Cortex-M3

les 38 % en 2009 (figure 1) et on prvoit que cette croissance continuera durant les prochaines annes [1].

Microcontrleurs 8 bits Microcontrleurs 16 bits

Ventes en %

Microcontrleurs 32 bits

2000

2006

2009

Figure 1 : Evolution des ventes en % des microcontrleurs 8, 16 et 32 bits

La majorit des fabriquants de microcontrleurs optent pour lintgration dun CPU prconu, sous forme dun IP Intellectual Property , dans leurs circuits et lui ajoutent les mmoires et les entres/sorties ncessaires pour les applications cibles. Parmi les CPUs (IP) les plus utiliss dans les microcontrleurs 32 bits, on trouve les curs de la socit ARM (Advanced Risc Machines), qui grce son nouveau cur Cortex sest impos comme leader des fournisseurs de curs 32 bits [2] pour les applications embarques (figure 2).

3 ------ ARM ------ PowerPC


Ventes en Billions de dollars

------ x86 ------ SuperH ------ MIPS

0
2007 2008 2009 2010 2011 2012 2013

Figure 2 : Evolution des ventes des curs 32 bits pour les applications embarques

Damergi Emir

Version Draft

Le cur Cortex-M3

I-2 ARM et les curs CORTEX La socit ARM a t cre en 1990 par association (joint-venture) de Apple Computer, Acorn Computer Group et VLSI Technology. Contrairement aux autres socits travaillant dans le domaine des semi-conducteurs, ARM ne fabrique pas des processeurs et les vend directement, mais elle les conoit et vend leur licence sous forme dIP des partenaires qui les intgrent dans leurs microcontrleurs et processeurs. Aujourdhui, les partenaires dARM vendent annuellement plus que 2 billions de circuits base de curs ARM dont larchitecture et le jeu dinstructions ont volu depuis la premire version ARM-v1 (devenue obsolte ainsi que les architectures ARM-v2 et v3) jusqu la version actuelle ARM-v7, appele galement Cortex (figure 3).
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 Microcontrleurs)
Exemples ARM7TDMI 920T, Intel StrongARM ARM 926, 946 Intel Xscale ARM 1136, 1176, 1156T Cortex-A8 Cortex-R4 Cortex-M3

Figure 3 : Evolution des architectures des curs ARM

Contrairement aux architectures prcdentes, Cortex intgre entre autres la gestion des interruptions et des exceptions ce qui permet une plus grande transparence et souplesse au niveau de la programmation ainsi quun portage de code plus simple. En effet, chaque constructeur de microcontrleurs bass sur les gnrations prcdentes tait oblig de concevoir sa propre solution pour la gestion des interruptions, ce qui rendait lutilisation dun outil de dveloppement standard impossible, la programmation moins transparente et videment le code difficilement portable. Les curs Cortex portent la dsignation Cortex-XN, ou X dsigne le profil auquel appartient le cur et N son degr de performance qui varie entre 0 (le moins performant) et 9 (le plus performant). On distingue 3 profils (figure 4) propres larchitecture ARM-v7 ou Cortex et qui sont :

Damergi Emir

Version Draft

Le cur Cortex-M3

Le profil A (sries Cortex-A) : destin pour faire tourner des applications complexes

telles que les systmes dexploitation embarqus (Symbian, Linux, Windows CE) ncessitant une puissance de traitement leve et un systme de gestion de mmoire virtuelle (MMU). Les processeurs appartenant ce profil peuvent fonctionner avec des frquences de 2GHz et avec une performance de 2,5 DMIPS 1 /MHz) et contiennent des acclrateurs SIMD (Single Instruction/ Multiple Data) ainsi que la technologie Jazelle permettant lexcution rapide de langages interprts tel que Java. On les trouve dans des produits tels que les tlviseurs numriques haute dfinition, les terminaux mobiles. Le profil R (sries Cortex-R) : destin principalement aux applications temps rel

contraintes trs svres et exigeant une haute fiabilit et un temps de rponse faible. Les processeurs de ce profil contiennent galement une unit additionnelle pour le calcul en virgule flottante et sont utiliss titre dexemple dans les disques durs, les appareils photo numriques, le domaine de lautomobile (systmes de freinage).

.2000

Cortex-A
ARM/Thumb Thumb-2 GIC MMU Neon (SIMD) DSP VFP Jazelle 13 stages Pipeline Multi-core (1-4)

Frquence de fonctionnement (MHz) 375 475

Cortex-R Cortex-M
Thumb-2 NVIC MPU 3 stages pipeline 12,5 DMIPS/mW Thumb/Thumb-2 GIC MPU FP Unit 8 stages Pipeline 6,5 DMIPS/mW

0,9 1,25 DMIPS

1,6 DMIPS

1,6 2,5 DMIPS

Figure 4 : Performances et domaines dapplications des profils de larchitecture Cortex

Dhrystone MIPS : Performance de traitement du processeur en Millions dInstructions par Seconde obtenue par excution du benchmark Dhrystone

Damergi Emir

Version Draft

Le cur Cortex-M3

Le profil M (sries Cortex-M) : optimis pour des applications ncessitant une basse consommation en nergie, un cot rduit et un comportement dterministe pour le traitement des interruptions. Cest le profil qui est destin tre intgr dans les microcontrleurs. Principalement le cur Cortex-M3, lanc en 2004, et qui grce son cot et sa performance a connu un grand succs et a fait converger la majorit des constructeurs de microcontrleurs, pour la premire fois, vers une architecture commune. Dj 28 socits (dont 6 font partie des top 10) ont opt pour ce cur (Luminary Micro (maintenant faisant partie
de Texas Instruments) ST-Microelectronics, NXP, Atmel, Zilog, Samsung, etc) [3].

I-3 Pourquoi le Cortex-M3 ? Lunanimit des constructeurs autour du cur cortex-M3 est due principalement aux raisons suivantes : Cot : En effet, le critre primordial qui incitait les dveloppeurs de systmes embarqus opter pour les MCUs 8 bits tait le prix. Avec le Cortex-M3, les prix des MCUs 32 bits a considrablement baiss et sont pratiquement dans le mme ordre que les MCUs 8 bits. Efficacit nergtique : Les MCUs, comme tous les processeurs embarqus et usage gnral, sont connus pour tre flexibles au prix dune consommation leve en nergie de lordre de 1 3 MIPS/mW. Avec Cortex-M3, on atteint une efficacit de 12,5 MIPS/mW (figure 5). En plus, il supporte des modes basse consommation et permet une activation slective des priphriques utiliser.

Figure 5 : Efficacit nergtique ( en MIPS/mW ) pour diffrentes plateformes embarques

Damergi Emir

Version Draft

Flexibilit

Le cur Cortex-M3

Performance : Avec une capacit de traitement de 12,5 DMIPS et une frquence de fonctionnement qui peut atteindre la valeur de 275 MHz, les performances du CortexM3 dpassent 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 mmoire : Grce lutilisation de la technologie Thumb-2 qui permet lutilisation simultane dinstructions 16 et 32 bits, 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 dautres architectures

Adaptation au temps rel: Ceci est assur par lintgration dun contrleur dinterruptions grant les priorits et le sauvegarde du contexte matriellement ce qui permet davoir une rponse dterministe et rapide aux vnements externes. En plus, le Cortex-M3 intgre dans son jeu dinstructions, quelques unes qui sexcutent dune manire atomique.

Dbogage puissant: Grce un module de dbogage intgr dans le cur Cortex-M3 et qui permet de fixer un certain nombre de Breakpoints et watchpoints.

Damergi Emir

Version Draft

Le cur Cortex-M3

II- La famille STM32


Comme la majorit des constructeurs de microcontrleurs, ST-Microelectronics a propos toute une famille de microcontrleurs 32 bits base sur le cur Cortex-M3 (figure 8).

Cortex-M3
Noyau ARM (CPU)
Unit Arithmtique et logique (ALU) + Registres Unit de recherche dinstructions (Fetch unit)

Contrleur dinterruptions (NVIC)

Unit de dcodage

Systme de dbogage

Fourni par ARM

Interface Mmoires

Bus dinstructions

Unit de protection mmoire (MPU)

Bus de donnes

Bus dInterconnexion (Bus Matrix)

Conu et dvelopp par le fabricant du microcontrleur

Priphriques dentres/sorties

Priphriques systme

Mmoires SRAM

Mmoire Flash

Figure 8 : Architecture gnrique dun microcontrleur base du cur Cortex-M3

La famille des microcontrleurs ST est baptise STM32. Il sagit dune famille de plus que 70 rfrences portant la dsignation STM32F10x y z 10x : dsigne la catgorie (ou ligne de produit) laquelle appartient le c (voir Tableau 1). y est une rfrence qui dsigne le nombre de pins ainsi que le type de package du circuit intgr (T: 36 pins, C: 48 pins, R : 64 pins, V : 100 pins et Z : 144 pins). z donne une indication sur la taille de la mmoire flash interne (4 pour 16 Kbytes, 6 pour 32 Kbytes, 8 pour 64 Kbytes, B pour 128 Kbytes, C pour 256 Kbytes, D pour 384 Kbytes et E pour 512 Kbytes). On distingue 4 lignes de produits de la famille STM32 qui possdent un certain nombre de composants en commun, mais qui diffrent en ce qui concerne la frquence de

Damergi Emir

Version Draft

Le cur Cortex-M3

fonctionnement, la taille de la mmoire SRAM interne ainsi que le nombre de priphriques dE/S disponibles. Le tableau suivant prsente ces 4 lignes de produit.

Ligne produit Performance Accs USB (USB Access) Accs (Access) Connectivit

de

Rfrence 10x 103

Composants communs

Frquence CPU 72 MHz

Mmoire SRAM 64 Kbytes

Priphriques spcifiques USB, SDIO, CAN, I2S et Timer PWM. 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, CAN, I 2S

(Connectivity)

105 & 107 Horloge temps rel.

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- Rcepteur fonctionnant dans les modes synchrones et asynchrones. DAC (Digital Analog Converter) : Convertisseur Analogique/Numrique. DMA (direct Memory Access) : il permet le transfert direct de donnes entre mmoires et priphriques. CAN (Controller Area Network) : Il sagit dune interface permettant de communiquer sur le bus CAN tout en respectant la norme. PWM (Pulse Width Modulation) : Modulation de largeur dimpulsion.

Le microcontrleur STM32F103VB-T6 qui quipe les Kits Primer fait partie de la ligne performance et est dot dune mmoire Flash de 128 Kbytes. Au niveau de larchitecture interne, il est compos videment du cur Cortex-M3 connect aux mmoires et diffrents priphriques travers un certain nombre de bus : I-Bus (Instruction Bus): ddi principalement pour le transfert des instructions (code) entre Cortex et la mmoire Flash. D-Bus & System Bus: connects directement la matrice de bus qui sert de lien avec les bus daccs la SRAM, le systme DMA (Direct Memory Access) ainsi que le AHB (Advnaced High Bus) . 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 vhiculer les donnes vers et depuis une partie des priphriques (voir figure 9).

Damergi Emir

Version Draft

Le cur Cortex-M3

Figure 9 : Bus des microcontrleurs de la famille STM32

Ces diffrents bus, composants et priphriques fonctionnent avec des frquences dhorloge synthtises partir de lun des deux signaux horloge : HSI (High Speed Internal) : Il sagit dun signal de frquence 8 Mhz gnr par un oscillateur interne intgr au niveau du c. Cest cette frquence qui est utilise par dfaut aprs une opration de reset. Elle prsente linconvnient de manque de prcision et de stabilit. HSE (High Speed External) : Il sagit dun signal de frquence comprise entre 4 et 25 Mhz, gnr par un dispositif ( base dun cristal) plac lextrieur du c. La synthse des diffrentes frquences partir de lun des deux signaux est reprsente dans la figure suivante :

Figure 10 : Clock Tree des microcontrleurs de la famille STM32

Damergi Emir

Version Draft

Le cur Cortex-M3

Il est noter que deux priphriques (Watch Dog et le Real Time Clock RTC ) fonctionnent avec un signal dhorloge diffrent et de faible frquence qui peut tre soit gnr localement par un oscillateur interne (~ 32 Khz, non prcis) appel LSI (Low Speed Internal) ou bien partir dun dispositif externe appel LSE (Low Speed External) et devant produire une frquence de 32,768 Khz.

IIIIII-1 :

Le Cur Cortex-M3
Introduction

Cest un processeur 32 bits. Il contient un chemin de donnes (data path) 32 bits, un banc de registres 32 bits et des interfaces mmoires de 32 bits. Il se base sur un pipeline 3 tages (Fetch, Decode et Execute) et possde une architecture Harvard, c'est--dire quil contient deux bus distincts pour le transfert des donnes et des instructions. Ceci permet daccder en mme temps aux instructions et aux donnes, et par consquent une augmentation de la performance puisque laccs aux donnes naffecte pas le pipeline. Cette caractristique, se traduit par une multitude dinterfaces bus qui peuvent tre utilises simultanment. Cependant, lespace dadressage du Cortex-M3 est unique et peut atteindre la taille de 4 GO. Il intgre galement un nombre de composants internes de dbogage qui permettent de fixer des points darrt (breakpoints) et dobservation (watchpoints) et ainsi que le suivi des instructions (instruction trace). Lune des particularits du Cortex-M3 est son jeu dinstruction thumb-2. En effet, tant donne que les instructions ARM de 32 bits occupent un espace mmoire important, et que les mmoires utilises taient gnralement de petite taille, ARM a introduit depuis son architectures ARMv4 un ensemble dinstructions sur 16 bits (en limitant les oprations possibles ainsi que les registres internes utiliss et rendant les oprandes des instructions implicites) constituant un jeu dinstruction nomm Thumb. Ainsi, cette solution a apport un gain en occupation mmoire. Mais, 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. Pour le Cortex-M3, le jeu dinstruction Thumb 16 bits a t gard, mais le jeu dinstructions ARM 32 bits a t compltement abondonn au profit dun nouveau jeu dinstructions Thumb 32 bits. Lensemble ainsi obtenu des instructions Thumb 16 et 32 bits est appel Thumb-2. Daprs ARM, il permet doptimiser lutilisation de lespace

Damergi Emir

10

Version Draft

Le cur Cortex-M3

mmoire sans dgrader les performances puisquon nest plus oblig de basculer entre modes de fonctionnement (voir figure 11). Des benchmarks raliss donnent une performance de 1,2 DMIPS/MHz, c'est--dire le Cortex-M3 excute, en moyenne, une instruction en moins dun cycle horloge (1/1,2 = 0,833 cycle) .

Figure 11 : performance et densit du code pour diffrents jeux dinstructions ARM

A part lamlioration des performances, une partie importante de ce nouveau jeu dinstructions Thumb-2 a t spcialement conue pour tre la cible des compilateurs. En plus, des instructions ont t introduites pour permettre : III-2 : des divisions matrielles (SDIV et UDIV) qui ncessitent de 2 3 cycles horloge. des multiplications 32 bits qui se droulent en un cycle horloge. Caractristiques du Cortex-M3

Dans cette partie, on essaiera dexplorer les principales caractristiques du coeur Cortex-M3.

III-2-a)

Les registres

Comme les processeurs ARM, le Cortex-M3 contient : - R0 R12 : 12 registres usage gnral qui peuvent tre utiliss pour lexcution de nimporte quelle opration (arithmtiques, logiques, transfert). - R13 : il sagit du registre de pile. En effet, il sagit de deux registres superposs dont laccs est contrl par le mode opratoire:

Damergi Emir

11

Version Draft

Le cur Cortex-M3

MSP (Main Stack Pointer) : Registre de pile principal qui est utilis quand des applications ayant le niveau Privileged sont excutes. PSP (Process Stack Pionter) : Registre de pile de processus qui est utilis quand des applications ayant le niveau Unprivileged sont excutes. - R14 : il sagit du registre de lien (LR : Link register) qui permet de stocker ladresse de retour quand une fonction ou routine est appele. - R15: il sagit du registre compteur programme (ou Program Counter) qui indique ladresse de la prochaine instruction excuter par le processeur. Le Cortex-M3 contient galement un certain nombre de registres spciaux : PSRs (Program Status Registers) : Registres de statut du programme qui sont au nombre de 3 ASPR (Application PSR): Registre dtat relatif lexcution du programme. ISPR (Interrupt PSR) : Registre dtat relatif linterruption en cours. ESPR (Execution PSR) : Registre dtat qui donne des informations sur linstruction en

cours (mode thumb ou ARM et si elle est atomique). Ces 3 registres 32 bits peuvent tre accds sparment ou bien tre superposs pour construire un registre unique 32 bits : xPSR. Registres de masque dinterruption : On distingue 3 registres qui sont PRIMASK : Registre de 1 bit qui permet, sil est actif, dinterdire toutes les

interruptions sauf linterruption non masquables (NMI) et les exceptions dues une erreur matrielle (Hard Fault). FAULTMASK : Registre de 1 bit qui permet, sil est actif, dinterdire toutes les

interruptions lexception de linterruption non masquables (NMI). BASEPRI : Registre de 9 bits dont la valeur indique, si elle est diffrente de 0, le

niveau de priorit des interruptions permises : uniquement les interruptions ayant un niveau de priorit strictement suprieur cette valeur sont autorises. Si cette valeur est gale 0, alors toutes les interruptions sont permises. Registres de contrle : Un registre de 2 bits qui indique le niveau de privilge du code excut en cours ainsi que le registre de pile utilis.
III-2-b) Organisation de la mmoire

Le processeur Cortex-M3 tant un cur standard pour les microcontrleurs, il possde une mmoire organise dune faon prdtermine. La mmoire occupe un espace dadressage de 4GO rparti comme suit

Damergi Emir

12

Version Draft

Le cur Cortex-M3
0xFFFFFFFF Zone Constructeur Firmware : code ncessaire agissant trs bas niveau (Driver) et permettant aux applications dutiliser le matriel dune faon transparente 0xE0100000 0xE00FFFFF Priphriques systme 0xE0000000 0xDFFFFFFF Priphriques Externes (1 GO) 0xA0000000 0x9FFFFFFF RAM 0x60000000 0x5FFFFFFF Priphriques (0,5 GO) 0x40000000 0x3FFFFFFF SRAM (0,5 GO) 0x20000000 0x1FFFFFFF CODE (0,5 GO) 0x00000000 Espace utilis pour stocker du code excutable. On peut galement stocker des donnes. Espace utilis pour stocker les donnes relatives au code. Externe (1 GO) Espace utilis pour adresser les priphriques ajouts par le constructeur du microcontrleur intgrant le CortexM3. (1 MO) Espace utilis pour adresser les priphriques du CortexM3 : Contrleur dinterruption, le Timer systme, le bloc de contrle, etc.

Il est noter que les zones SRAM et Priphriques contiennent chacune un espace mmoire de 1MO appel Bit Band Region et adressable et manipulable au niveau bit par des oprationsdatomiques.

III-2-c)

La gestion des interruptions par le NVIC (Nested Vector Interrupt Controller)

Il sagit dun contrleur dinterruptions standard du cur Cortex-M : tous les microcontrleurs bass sur ce cur ont la mme structure et principe de fonctionnement indpendamment du fabricant. Par consquent, les codes dvelopps ainsi que les systmes dexploitation peuvent tre facilement ports dun microcontrleur un autre sans tre oblig de se familiariser avec des structures de nouveaux registres, ni dadapter des parties du code.

Damergi Emir

13

Version Draft

Le cur Cortex-M3

Le NVIC est capable de grer jusqu 240 interruptions gnres par des priphriques externes au Cotex-M3 et dont le niveau de priorit peut tre dynamiquement fix parmi 256 niveaux possibles. En plus de ces interruptions, le NVIC gre un certain nombre dexceptions dclenches par des priphriques internes du Cortx-M3 (Bus AHB, MPU, Timer SysTick, etc..) ou par des fautes au niveau du programme mme. Le tableau suivant numre ces exceptions internes et dcrit lorigine.
Nr 1 2 3 4 5 6 7-10 11 12 13 14 15 16 . 256 Type dexception Reset NMI Hard Fault MemManage Fault Bus Fault Usage Fault Rserv SVCall Debug Monitor Rserv PendSV SYSTICK Interrupt # 0 . Interrupt # 240 Niveau de priorit par dfaut -3 (maximum, fig) -2 (fig) -1 (fig) 0 (paramtrable) 1 (paramtrable) 2 (paramtrable) 3 (paramtrable) 4 (paramtrable) 5 (paramtrable) 6 (paramtrable) 7 (paramtrable) .. 247 (paramtrable) Description Dclenche quand un signal de reset est dtect. Il sagit de lentre Non Masquable Interrupt qui est gnralement connecte au WatchDog. Erreur de matriel pour lequel aucune routine na t prvue Dclenche en cas dune tentative daccs une zone mmoire non autorise. Gnre quand linterface du bus AHB reoit une erreur. Dclenche par une erreur au niveau dun programme (exple : division par 0). Dans le cas dun appel un service systme. Dclenche quand un point de break (ou watch) est atteint ou bien quand le dbogage est activ.

Relative au Timer interne SYSTICK Il sagit dvnements dclenchs par les autres priphriques externes ajouts par le fabricant du microcontrleur.

Quand une exception autorise est dclenche, le CPU commence par rcuprer ladresse de la routine excuter partir dun emplacement mmoire spcifique connu davance. Lensemble des adresses des routines relatives aux diffrentes sources dinterruptions forme la table de vecteurs dinterruptions. Dans le Cortex-M3, la table de vecteurs commence partir de ladresse 0 de la zone code :
Adresse 0x00 0x04 0x08 0x0C 0x10 0x14 0x18 0x1C 0x2B 0x2C 0x30 0x34 0x38 0x3C 0x40 Vecteur Adresse de dbut de la pile principale Reset NMI Hard fault MemManage Fault Bus Fault Usage Fault SVCall Debug Monitor Rserv PendSV SYSTICK IRQ0 .

Damergi Emir

14

Version Draft

Le cur Cortex-M3

Parmi les spcificits du NVIC, on cite : Une rponse rapide grce larchitecture matrielle du NVIC dune part et lutilisation du jeu dinstructions thumb-2 qui permet dinterrompre lexcution des instructions multi cycles (load et store). Un temps de rponse (latence) dterministe ainsi que la possibilit de premption des interruptions grce lutilisation de plusieurs niveaux de priorit. Ceci permet de supporter les applications temps rel. Il est conu pour tre programm entirement en langage C sans tre oblig de passer par des instructions ou fonctions crites en assembleur.

III-2-c-1

Droulement des interruptions

Quand une interruption autorise est dclenche par un priphrique, le NVIC force le processeur la servir. Il commence par sauvegarder un certain nombre de registres dans la pile, et paralllement, il rcupre ladresse de la routine relative linterruption. Le temps total qui scoule du moment ou linterruption se dclenche jusqu lexcution de la premire instruction de la routine est de seulement 12 cycles. Une fois lexcution de la routine est termine, les contenus des registres sauvegards sont rcuprs partir de la pile ainsi que ladresse de linstruction suivante du programme principal. Cette phase dure galement 12 cycles (voir figure).

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 dtat)

Damergi Emir

15

Version Draft

Le cur Cortex-M3

Il est noter que si au cours du traitement dune interruption, une autre interruption de priorit suprieure est dclenche, alors les mmes tapes sont refaites (voir figure). Il faut noter galement, que si au cours
Niveau de priorit

+ IRQ j

- IRQ i
PUSH
12 cycles Routine i PUSH Routine j

POP
12 cycles

Routine i

POP
12 cycles

12 cycles

Cet enchanement dinterruptions peut avoir lieu plusieurs fois, do lappellation nested (en cascade). Tail Chainig Contrairement dautres processeurs qui retournent au programme principal aprs le traitement dune interruption avant de traiter linterruption de priorit infrieure ; ce qui fait perdre normment de temps. Cortex utilise une mthode appele Tail Chaining qui permet un temps de rponse plus court : la fin du traitement dune interruption, il teste si entre temps une (des) interruption(s) de priorit infrieure sest (se sont) produites. Si cest le cas, il commence directement par rcuprer ladresse de la routine relative linterruption sans retourner au programme principal ; ceci dure juste 6 cycles (voir figure).
Niveau de priorit

+ IRQ j - IRQ i

Instant possible de IRQ i

PUSH
12 cycles

Routine j

T.C 6 cycles

Routine i

POP
12 cycles

A la fin du traitement de IRQ j, Cortex teste sil ya dautres interruptions en attente. Si oui, il rcupre ladresse de la routine relative avant de retourner au programme principal :

Tail Chaining (T.C)

Damergi Emir

16

Version Draft

Le cur Cortex-M3

La prise en compte dune interruption de priorit infrieure peut avoir lieu non seulement au cours du traitement de linterruption en cours, mais galement lors de la restauration des valeurs des registres depuis la pile (POP). Dans ce cas, Cortex arrte immdiatement lopration POP et rcupre ladresse de la routine excuter (voir figure).
Niveau de priorit

+ IRQ j - IRQ i
Instant possible de IRQ i

PUSH
12 cycles

Routine j

POP

T.C

Routine i

POP
12 cycles

6 1- 12 cycles cycles 7- 18 cycles

Late Arrival En plus du tail chaining, Cortex utilise une autre technique appele Late Arrival

(Arrive Tardive) qui permet de servir plus rapidement les interruptions de plus haute priorit. Au moment du dclenchement dune interruption i, Cortex commence lopration dempilement (PUSH) et puis et avant de traiter la routine relative linterruption i, il teste si dautres interruptions de priorit suprieure ont eu lieu. Si cest le cas, Il commence par traiter la routine de linterruption de plus haute priorit. Ainsi, une interruption de haute priorit peut tre servie en premier mme si elle arrive avec un certain retard (jusqu 12 cycles) aprs une autre (voir figure).

Niveau de priorit

+ IRQ j
Instant possible de IRQ j

- IRQ i
PUSH
12 cycles Routine j T.C 6 cycles Routine i

POP
12 cycles

Damergi Emir

17

Version Draft

Le cur Cortex-M3 III-2-d) Les modes opratoires

Le Cortex-M3 supporte deux modes de fonctionnement : Mode Thread ou user : utilis pour excuter les applications logicielles (programme principal). Cest le mode par dfaut du processeur aprs un reset. Mode Handler : utilis quand le processeur excute des exceptions. En plus, les applications possdent deux niveaux de privilge : Niveau Privileged : Dans ce niveau le programme en cours peut utiliser toutes les instructions et peut accder toutes les ressources du processeur. Cest le niveau par dfaut aprs un reset. Niveau Unprivileged : Une application ayant ce niveau a un certain nombre de limites : Ne peut pas accder le Timer System (SysTick), le contrleur dinterruptions (NVIC) ni le bloc de contrle du systme. Ne peut pas utiliser un certain nombre dinstructions (MSR, MRS et CPS). Pourrait avoir des restrictions quant laccs la mmoire et aux priphriques si le processeur intgre un MPU (Memory Protection Unit). Ainsi, les diffrentes combinaisons possibles sont :
Niveau Privileged Mode Handler Mode Thread Excution dune exception Excution du programme principal Excution du programme principal Niveau Unprivileged

Un programme sexcutant dans le mode thread dans le niveau Privileged peut basculer vers le niveau Unprivileged en changeant ltat dun bit dans un registre particulier appel registre de contrle. Au cours de lexcution dun programme en mode handler; quand une exception se dclenche, le niveau est bascul automatiquement vers Privileged . Une fois le traitement du Handler termin, on retourne au niveau et au mode prcdents. Par contre, un programme sexcutant dans le niveau UnPrivileged ne peut pas changer son niveau de privilge. En fait, il faut quil passe par une exception pour pouvoir accder au registre de contrle. Ces diffrents modes et niveaux de privilge offrent plus de scurit et de robustesse. En effet, quand un programme UnPrivileged se trompe, il sera dans limpossibilit de changer les valeurs du registre de contrle. En plus, si le processeur est quip dune MPU

Damergi Emir

18

Version Draft

Le cur Cortex-M3

(Memory Protection Unit), il est possible dinterdire aux programmes UnPrivileged daccder la mmoire En plus et pour viter la possibilit de faire crasher le systme qui peut tre caus par des erreurs doprations sur la pile, 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. Le diagramme suivant rsume le passage entre les diffrents tats du systme :

Privileged / Handler Mode Retour dInt Interruption Edition du contenu Registre de ctrl Privileged / Thread Mode Retour dInt

UnPrivileged / Thread Mode

III-2-e)

Le Bit Banding

A complter

III-2-f)

Alimentation et Reset

A complter

Damergi Emir

19

Version Draft

Le cur Cortex-M3

IV-

Le Standard de programmation en C : CMSIS 1.0

Pour faciliter le portage et la rutilisation des applications crites en langage C pour les microcontrleurs se basant sur un cur Cortex-M, ARM a dfini avec un ensemble de fabricants de circuits intgrs et de dveloppeurs de compilateurs, un standard de programmation appel CMSIS (Cortex Microcontroller Software Interface Standard). Ce standard prsente une approche standard et commune pour interfacer les modules logiciels relatifs aux priphriques, interlogiciel (Middleware), programmes utilisateurs, et systmes dexploitation temps rel. Il sagit en effet dun ensemble de modules (drivers) qui permettent aux applications daccder au matriel dune faon transparente (voir figure suivante).

Comme partie des fonctionnalits CMSIS, ARM fournit les couches logicielles suivantes disponibles pour divers compilateurs :

Couche daccs aux priphriques de base (du noyau): contient les dfinitions, les adresses et les fonctions daccs aux diffrents registres des priphriques du noyau (core peripherals) contenus dans Cortex mme. Elle dfinit galement une interface indpendante de larchitecture matrielle pour les systmes dexploitation temps rel.

Couche daccs interlogiciel (Middleware): Fournit des mthodes communes pour accder aux priphriques hors noyau. Cette couche est adapte par le fabricant du microcontrleur aux priphriques qui ont t ajouts au noyau Cortex-M.

Damergi Emir

20

Version Draft

Le cur Cortex-M3

En plus de ces deux couches, une troisime est dveloppe par le fabricant du microcontrleur.

Couche daccs aux priphriques hors noyau: fournit les dfinitions et les adresses de tous les priphriques ajouts par le fabricant. Ainsi, dans un environnement de dveloppement intgr donn, on trouve un certain

nombre de fichiers. Certains faisant partie du CMSIS, dautres sont fournis par le fabricant du microcontrleur et enfin dautres qui sont dvelopps par lutilisateur (voir figure).
Liste des interruptions du STM32 spcifiques au noyau Cortex-M3. Organisation de la mmoire STM32 et dfinition des adresses physiques des registres. Options de configuration. Application.c Fichier de dmarrage (assembleur) pour linitialisation des paramtres du STM32 Routines relatives aux exceptions du Cortex-M3 stm32f10x_it.h Fichier entte de configuration contenant la liste des priphriques utiliss du STM32 misc.c Les drivers des priphriques de base (noyau) (Contrleur dinterruptions, Timer systme) misc.h stm32f10x_ppp.h stm32f10x_rcc.h

Lapplication dveloppe par lutilisateur

Startup_stm32f10x_xx.s stm32f10x_it.c Stm32f10x.h Core_m3.h System_st32f10x.c System_st32f10x.h

stm32f10x_conf.h stm32f10x_ppp.c

Microcontrleur STM32

Fonctions bas niveau de lAPI pour laccs aux fonctionnalits des priphriques

Fichiers CMSIS fournis par la socit ARM Fichiers daccs aux priphriques fournis par ST-Microelectronics Fichiers template configurs par lutilisateur ou code dvelopp entirement par lutilisateur.

Damergi Emir

21

Version Draft

Le cur Cortex-M3

Il est noter que stm32f10x_ppp.c et .h nest pas uniquement utilis pour dsigner un seul fichier mais elle stend un certain nombre de fichiers. Chaque fichier tant relatif lun des priphriques du microcontrleur (ppp tant remplace par labrviation du priphrique). La liste suivante prsente les principaux priphriques de la famille des microcontrleurs STM32 (particulirement le STM32F103VB).
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 Priphrique Convertisseur Analogique/Numrique Sauvegarde de donnes Bus CAN Calcul des codes de dtection derreurs Convertisseur Analogique/Numrique Accs direct la mmoire Interruptions externes Entres/sorties parallles Chien de garde Gestion du mode dalimentation Contrle du reset et de la distribution du signal dhorloge Horloge temps rel Les Timers (compteurs). Linterface de communication srie synchrone et asynchrone Fonctions haut niveau du contrleur dinterruptions et du timer systme (SysTick)

Dveloppement dapplications pour les c STM32 dans lenvironnement Ride Une fois lEDI Ride install sur la plateforme de dveloppement (PC), il faut commencer par copier le dossier contenant les librairies ainsi que les template. Ce dossier possde lhirarchie suivante :

Library

CMSIS

Core

CM3

Startup

Startup_sm32f10x_xx. Core_cm3.c et .h, stm32f10.h, System_stm32f10x.c et .h

STM32F10x_StdPerpiph Drivers

inc

misc.h, stm32f10x ppp.h

src

misc.h, stm32f10x_ppp.h

Template

RIDE

STM3210B_Eval Dossiers inclure ( include directory )

Fichiers du projet ride main.c, stm32f10x_conf.h, stm32f10x_it.c et .h

Dossiers devant contenir les excutables et listings (output et listing directory)

Damergi Emir

22

Version Draft

Le cur Cortex-M3

Il faut ensuite ouvrir le projet ride (dossier ride) et dans la zone projet>>proprits, slectionner le microcontrleur utiliser ainsi que les diffrents chemins des rpertoires (pour linclude directory, indiquer les chemins entours en rouge (figure ci-dessus). Pour loutput directory ainsi que le listing directory, indiquer le chemin du dossier entour en bleu (figure ci-dessus)). Pour le library directory, indiquer chemin de linstallation de ride\Lib\ARM. Avant de commencer la programmation, il est indispensable de commencer par configurer certains paramtres au niveau des diffrents fichiers de configuration, tels que : la frquence du signal dhorloge externe appliqu lentre OSc du microcontrleur, le type de microcontrleur utiliser (High, medium, low ou connectivity) qui permet de dterminer les tailles des diffrentes zones mmoire (Flash, Sdram). Les divers priphriques utiliser

Pour une application nutilisant pas le mcanisme dinterruptions, les premires parties du code lmentaires ncessaires et communes toute application sont : La dfinition des variables (structures) relatives aux priphriques. Activation des signaux dhorloges attaquant les priphriques. La dtermination des valeurs des diffrentes proprits des priphriques. Linitialisation des priphriques avec les valeurs dtermines. Ces diffrentes parties faisant gnralement partie du fichier main.c. (voir diagramme suivant)

Damergi Emir

23

Version Draft

Le cur Cortex-M3

system_stm32f10x.c Dcommenter loption 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 frquence horloge lentre OSC du microcontrleur

Dterminer les priphriques PPP activer dans lapplication

stm32f10x_conf.h Dcommenter les priphriques activer /* #include "stm32f10x_adc.h" */ /* #include "stm32f10x_bkp.h" */ #include "stm32f10x_PPP1.h" /* #include "stm32f10x_can.h" */ /* #include "stm32f10x_crc.h" */ #include "stm32f10x_PPPi.h"

Dclarer les variables relatives aux priphriques activs

Main.c #include "stm32f10x.h" /* private variables --------*/ PPP1_InitTypeDef PPP1_InitStructure .. PPPi_InitTypeDef PPPi_InitStructure

Activer le signal dhorloge

Pour chaque priphrique

int main (void) { Systeminit( ); /* configurer (horologe, flash, etc.)*/ RCC_APBxPeriphClockCmd (RCC_APBxPeriph_PPPi, Enable)

Dterminer les proprits de ses diffrents membres

PPPi_InitStructure.membre1 = proprit .. PPPi_InitStructure.membren = proprit Initialiser le priphrique

PPPi_Init (&PPPi_InitStructure)

Damergi Emir

24

Version Draft

Le cur Cortex-M3

Il est noter que pour lactivation du signal horloge, x dans APBxPeriph.. peut prendre les valeurs 1 ou 2 (relativement aux bus APB1 et APB2) et que lactivation des signaux dhorloge des priphriques connects au mme bus peut tre faite en une seule ligne :
RCC_APBxPeriphClockCmd (RCC_APBxPeriph_PPP1 |||| RCC_APBxPeriph_PPPn ,Enable)

En ce qui concerne linitialisation, il est possible de lappliquer une partie du priphrique et non pas au priphrique entier. A titre dexemple le priphrique dentres/sorties (GPIO : General Purpose Input Output) contient 5 ports (GPIOA, GPIOB,
GPIOC, GPIOD et GPIOE) qui peuvent tre initialiss indpendamment lun des autres. Dans ce

cas, il faut spcifier dans linstruction dinitialisation le ou les ports du priphrique GPIO initialiser :
GPIO_Init (GPIOA, &PPPi_InitStructure)

Gestion des interruptions. Pour les applications utilisant le mcanisme dinterruption, il faut considrer le contrleur dinterruptions en cascade NVIC (Nested Vector Interrupt Controller) comme tant lui-mme un priphrique quil faut activer et initialiser : En dcommantant la directive
stm32f10x_conf.h. #include "stm32f10x_NVIC.h"

dans le fichier

En dclarant au niveau du fichier main.c une structure (variable) relative au NVIC :


NVIC_InitTypeDef NVIC_InitStructure

En reliant le NVIC, au niveau de main.c galement, la source dinterruption et dterminer ses proprits (telles que niveau de priorit, lvnement de dclenchement, etc..) :
NVIC_InitStructure.NVIQ_IRQChannel= PPPx_IRQn ; (le priphrique PPP est source dinterruption) NVIC_InitStructure.NVIQ_IRQChannelPremptionPriority = val1; (Niveau de priorit du groupe) NVIC_InitStructure.NVIQ_IRQChannelSubPriority = val2; (Niv. de priorit de PPPX dans le groupe) NVIC_InitStructure.NVIQ_IRQChannelCmd=ENABLE (autoriser linterruption) NVIC_Init (&NVIC_InitStructure)

En plus, il faut videment crire la routine dinterruption au niveau du fichier stm32f10x_it.c et la dclarer dans le fichier entte stm32f10x_it.h. Il est galement indispensable de dfinir au niveau du priphrique source dinterruption un certain nombre de proprits relatives au dclenchement de linterruption. On reviendra en dtail sur ces proprits pour chaque priphrique part.

Damergi Emir

25

Version Draft