Vous êtes sur la page 1sur 55

Ch 1

Architecture des processeurs


ARM Cortex-M4 et principes de
fonctionnement
Introduction
 ARM (Advanced RISC Machines) est une famille d'architectures de processeurs basées
sur l’architecture RISC.
 Bien connu pour son efficacité énergétique; d'où largement utilisé dans les appareils
mobiles, tels que les téléphones intelligents et les tablettes.
 L'entreprise fait la conception des processeurs ARM; ne fabrique pas, mais vend la
licence à des partenaires de semi-conducteurs qui ajoutent leur propre propriété intellectuelle
à la propriété intellectuelle d'ARM.

2
Architecture Cortex
 L’architecture cortex est divisée en trois familles :
 CORTEX A (APPLICATION) : Microprocesseurs à haute performances,
capables de supporter des systèmes d’exploitation. (Application : smartphones, digital
TV, smart-books…)
 CORTEX R (REAL TIME) : Hautes performances pour les applications temps
réel, grande fiabilité. (Applications : Système de freinage automobile, les groupes
motopropulseurs, etc…)
 CORTEX M (MICROCONTROLEUR) : Des solutions à faible coût pour des
applications embarquées. (Applications : sonorisation, électroniques de carrosserie
automobile et les airbags).

3
Processeur ARM vs architecture ARM
 Architecture ARM
 Décrit les détails du jeu d'instructions, du modèle du programmeur, le modèle d'exception
et la répartition de la carte mémoire.
 Documenté dans le Manuel de Référence de l'Architecture.
 Processeur ARM
 Développé en utilisant l'une des architectures ARM.
 Plus de détails de mise en œuvre.

4
Architecture Cortex M

SIDM : Single Instruction Multiple Data


TCM : (Mémoire à Couplage Etroit) : ITCM (64 bits), DTCM (2 x 32 bits).
AXI : Advenced External Interface : connexion des mémoires externes avec un bus de 64
bits.
ECC : Error Code Correction.
5
Gamme Cortex-M

 La gamme des Cortex-M se décline en différents modèles :


 Le Cortex-M0/M0+/M1 traite des données d’ordre général ainsi que les
tâches d’entrée-sortie standard.
 Le Cortex-M3 s’occupe de traitements avancés sur les données et de la
manipulation des champs de bits et offre des opportunités des connexions.
 Le Cortex-M4 comprend en plus du Cortex-M3, un module DSP (Digital
Signal Processing, traitement numérique des signaux).
 Le Cortex-M4F comprend, en plus du Cortex-M4, une FPU (Floating Point
Unit, unité à virgule flottante).
 Le récent Cortex-M7 délivre un très haut niveau de performance.

6
Gamme Cortex-M

7
La famille STM32
 Actuellement, la famille STM32 se divise en deux grandes catégories :
 Les STM32Fxx, F pour Fast (rapide), sont utilisés dans les applications qui
donnent priorité à la vitesse d’exécution et dont la consommation en énergie n’est
pas une exigence première.
 Les STM32Lxx, L pour Low power (faible consommation), sont utilisés dans des
domaines où la faible consommation en énergie est prioritaire par rapport à la vitesse
d’exécution de l’application.
 Pour aller plus vite on doit consommer plus et, inversement, moins on veut
consommer moins il faut aller vite.
 Il est impossible d’avoir ces deux qualités, vitesse d’exécution et faible
consommation, dans un même microcontrôleur.
 Chacune des deux grandes catégories STM32Fxx et STM32Lxx se divise elle-même
en séries suivant le Cortex-M choisi.
 Un STM32F7 est composé d’un Cortex-M7 et un STM32L4 d’un Cortex-M4. Le
chiffre après la lettre F ou L ne reflète pas toujours le Cortex-M utilisé ; par exemple, le
STM32F1 est composé d’un Cortex-M3. Il faut alors se référer à la documentation pour
connaître le Cortex-M qui compose le STM32 choisi.

8
Cortex M4

WIC : Wakeup Interrupt Controller (optionnel)


NVIC : Nested Vectored Interrupt Controller
ETM : Embedded Trace Macrocell (optionnel)
DAP : Debug Access Port (optionnel)
9
Bloc diagramme de Cortex M4

 Interconnexion de bus
 Permet au transfert de données d'avoir lieu sur différents bus simultanément
 Fournit la gestion du transfert de données, par ex. un tampon d'écriture, opérations
orientées bit (bit-band)
 Peut inclure des ponts de bus (par exemple, un pont de bus AHB à APB) pour connecter
différents bus dans un réseau en utilisant un seul espace mémoire global
 Comprend le système de bus interne, le chemin de données dans le cœur du processeur10et
l'unité d'interface AHB LITE
Bloc diagramme de Cortex M4
 Sous-système de débogage
 Gère le contrôle de débogage, les points d'arrêt du programme et les points de surveillance
des données
 Lorsqu'un événement de débogage se produit, il peut mettre le cœur du processeur dans un
état arrêté, où les développeurs peuvent analyser l'état du processeur à ce stade, comme les
valeurs de registre et les drapeaux.
 Contrôleur d'interruption vectorielle imbriqué (Nested Vectored Interrupt
Controller NVIC)
Jusqu'à 240 signaux de demande d'interruption et une interruption non masquable (NMI)
 Gère automatiquement les interruptions imbriquées, telles que la comparaison des
priorités entre les demandes d'interruption et le niveau de priorité actuel
 Contrôleur d'interruption de réveil (Wakeup Interrupt Controller : WIC)
 Pour les applications à faible consommation, le microcontrôleur peut passer en mode
veille en arrêtant la plupart des composants.
 Lorsqu'une demande d'interruption est détectée, le WIC peut demander à l'unité de gestion
de l'alimentation de mettre le système sous tension.
 Unité de protection de la mémoire (Memory Protection Unit) (en option)
Utilisé pour protéger le contenu de la mémoire, par ex. rendre certaines régions de
mémoire en lecture seule ou empêcher les applications utilisateur d'accéder aux données
d'application privilégiées

11
Cortex M4
 Cortex-M3 et Cortex-M4 sont des microcontrôleurs 32bits.
Cortex-M4 a été étendu pour implémenter le profil d’une architecture Armv7E-M (FPU,
Instructions DSP …).
 Cortex M possède un jeu d’instructions RISC. Toutes les opérations sur les données sont
effectuées sur les registres du CPU, ce qui limite l’accès à la mémoire uniquement pour
chargement et le sauvegarde des données.
 Historiquement les processeurs ARM, possèdent un jeu d’instructions de 32 bits. Dans le
bit d’optimisation de la mémoire, ARM a introduit les instructions Thumb sur 16bits. Par la
suite, ARM a introduit le jeu d’instructions Thumb-2, qui est un mélange de jeux
d’instructions de 16 et 32 bits.
 Cortex M3/M4/M7 sont conçus pour supporter les instructions Thumb et Thumb-2,
avec les instructions de l’unité à virgule flottante et les instructions SIMD : Single
Instruction Multiple Data.
 S’appuyant sur une architecture Hardvard, le microcontrôleur Cortex M possèdent
plusieurs bus, ce qui lui permet d’effectuer plusieurs opérations en parallèles.
 L’accès aux données peut être aligné sur 32 bits ou non aligné ; ces deux modes d’accès
offrent une grande flexibilité et une bonne exploitation de la mémoire.

12
Accès aux données

13
Architecture minimale d ’une Unité Centrale

Bus d ’adresses

Bus de données

Bus de commandes

Sorties
Coupleur
Micro-
ROM RAM d ’entrée
processeur
sortie Entrées

Architecture Von Neumann


Un seul Bus de données ainsi que un seul bus d’adresse.

14
Architecture minimale d ’une Unité Centrale

Bus d ’adresses

Bus de données Bus de Données


Bus de commandes

Coupleur Sorties
Micro- Mémoire
d ’entrée Entrées
processeur données
sortie
Adresses

Instructions Bus Programme


Commandes

Mémoire
programme

Architecture Harvard
15
Cycle d’exécution d’une instruction
Fetch

Exécution Decode

 Fetch: l'instruction suivante est extraite de l'adresse mémoire actuellement stockée dans
le compteur de programme et stockée dans le registre d'instructions. A la fin de l'opération
de récupération, le PC pointe vers la prochaine instruction qui sera lue au cycle suivant.
 Decode : Au cours de cette étape, l'instruction codée présentée dans le registre
d'instructions est interprétée par le décodeur.
 Exécution : l'unité de contrôle de la CPU transmet les informations décodées sous la
forme d'une séquence de signaux de commande aux unités fonctionnelles concernées de la
CPU pour effectuer les actions requises par l'instruction

16
Stage de Pipeline

 Grace un pipeline à trois niveaux les microcontrôleurs Cortex M exécutent la plupart


des instructions en un cycle machine.
 FETCH
L'instruction est extraite de la mémoire et placée dans le pipeline d'instructions
 DECODE
L'instruction est décodée et les signaux de contrôle du chemin de données sont préparés
pour le cycle suivant
 EXECUTE
La banque de registres est lue, un opérande décalé, le résultat ALU généré et réécrit dans le
registre de destination
 À tout moment, 3 instructions différentes peuvent occuper chacune de ces stages, de
sorte que le matériel pour chaque stage doit être capable d'effectuer des opérations
indépendantes
 Il existe des exceptions : instructions multi-cycles et branches 17
Modes de fonctionnement du programme

 Un programme est exécuté avec le processeur Cortex-M4 via deux modes de


fonctionnement, qui sont le mode Thread ou le mode Handler
 En mode Thread le programme est exécuté normalement où le processeur commence
toujours à s'exécuter après le redémarrage ou bien réinitialisation RESET c’est le mode
normal d’exécution de programme.
 Le mode Handler, c'est le mode dans lequel le processeur bascule en cas de réponse
à des interruptions ou bien des exceptions, et une fois terminé, le processeur revient au
mode Thread.

18
Autorisations du programme
 Il existe deux types d’autorisations du programme : Unprivileged et privilileged
Sans privilège (Unprivileged): sans privilège, ce qui signifie qu'il n'y a pas de
privilèges pour le programme.
 Le programme sera interdit d’utiliser les instruction assembleur MSR ou bien
MRS qui sont des instructions d’écriture dans les registres de microprocesseur.
 Le programme subit aussi un empêchement d’accès au système d’horloge du
système
 Pas d’accès au circuit d’interruption NVIC ainsi que le bloc de contrôle système
(system control block).
 Il a également des autorisations restreintes pour gérer la mémoire et les
périphériques.
 Avec privilège (Privileged): donne au logiciel tous les privilèges. Le logiciel peut
utiliser toutes les instructions et a accès à toutes les ressources. C’est l’autorisation
obtenue après un démarrage ou bien un REST.

 Lorsque le processeur est en mode Handler, il va avoir toujours tous les accès, tandis que
lorsqu'il est en mode Thread, les permissions sont contrôlées par le registre CONTROL.

 Si le mode d’exécution du programme est Unprivileged, il n’est pas possible d’écrire


CONTROL. Par conséquent, le seul moyen de revenir à Privileged consiste à faire
supervisor call à l’aide de l’instruction SVC. Cette instruction est souvent utilisée dans le
cas d’un système d’exploitation pour demander l’utilisation des ressources système. 19
Autorisations du programme

20
Les registres internes
 Un ensemble de registres généraux
R0-R12,
 Un pointeur de pile SP (Stack Pointer)
 Un registre de lien LR (Link
Register),
 Un compteur de programme PC
(Program Counter),
 Un registre d'état du programme PSR
(Program Status Register),
 Un groupe de registres pour traiter les
interruptions, des registres de masque
d'exception
 le registre spécial du contrôleur
CONTRÔLE.

21
Les registres internes
Enregistreurs publics R0-R12
 Tout processus effectué par le processeur les registres généraux doivent faire partie. Par
exemple, le processus d'addition de deux nombres se fait en plaçant les deux nombres à
partir de l'endroit où ils sont stockés dans les registres, par exemple R1 et R2, puis en les
additionne, le résultat sera stocké dans un autre registre, par exemple R3.

Pointeur de pile (stack register)


Les processeurs Cortex-M4 utilisent deux pointeurs piles main stack et process stack.
 La pile est un endroit spécifique dans la mémoire RAM où le processeur stocke les
données d’une fonction dans le cas où une autre fonction serait appelée jusqu'à la fin
d’exécution de la deuxième.
 Pour un processeur Cortex-M4, la pile est décroissante et le pointeur de pile pointe
toujours vers le dernier emplacement de la mémoire dans lequel il a été écrit.
 Par exemple, si nous supposons que l'emplacement de la pile commence à partir du
dernier endroit de la mémoire et que le pointeur de la pile indique cette adresse, ce qui
signifie qu'il n'y a pas de données à l'intérieur de la pile. Maintenant si le processeur veut
écrire sur la pile, il réduira d'abord l'adresse pour indiquer le nouvel endroit dans lequel il
sera écrit, puis effectue l'opération d'écriture. Ainsi le pointeur de pile pointe toujours vers
l'endroit où la dernière opération d'écriture a eu lieu. Si le processeur veut lire à partir de la
pile, il lira d'abord les données, puis il augmentera l'adresse pour pointer à nouveau vers le
dernier endroit où il a été écrit.
22
Pointeur de pile

23
Pointeur de pile
 Il existe deux pointeurs de pile : le main stack et le process stack.
 Le main stack est le pointeur pile principal qui sera utilisé directement après la
mise sous tension ou bien après un RESET.
 Le process stack peut être utilisé dans le cas où en utilise un système
d’exploitation. Le système d’exploitation réserve pour lui le main stack et si il avait
une application on lui reserve le pointeur process stack pour ne pas avoir un
chevauchement entre les deux.
 Le tableau suivant montre les pointeurs pile utilisés pour chaque mode de privilèges et
type d’accès.

24
Les registres internes
 Registre de lien (Link Register)
Contient les données de retour pour chaque sous-fonction, et supposons que le processeur
exécute une fonction spécifique, et à l'intérieur de cette fonction en appel une autre
fonction, l'adresse de la fonction en cours sera enregistrée dans l'enregistreur de lien avant
d'aller à la deuxième fonction et à la fin de son exécution, l'assistant trouve l'adresse de la
fonction d'origine dans l'enregistreur de lien et y retourne.

 Compteur de programme (Program Counter)


Ce pointeur contient l’adresse de l’instruction qui sera exécuter après l'achèvement de
l'instruction en cours. Généralement, le processeur commence à exécuter le programme à
partir de l'adresse 0x00000004 où il contient la table vectorielle des interruptions, tandis
que l'adresse 0x00000000 contient le pointeur pile. Si notre programme est à une autre
adresse, ce registraire doit être écrit à l'autre adresse afin que le processeur sache par où
commencer l'exécution du programme.

25
Les registres internes
 Registre d'état du programme PSR (Program status register)
Il contient 3 couches APSR, IPSR et EPSR comme indiqué :

 La couche APSR (Application Program Status Register) contient l'état des applications
du programme, en particulier lors de l'utilisation d'opérations mathématiques, nous pouvons
voir si une opération de division s'est produite par zéro ou un débordement pour une variable
particulière.
 La deuxième couche est l'IPSR (Interrup Program Status Register) et contient le
numéro de de l’interruption en cour.
 La couche EPSR (Execution Program Status Register) ), le processeur stocke l'état
actuel d'exécution du programme, par exemple, s'il exécute une instruction qui peut être
interrompue ou non.
26
Les registres internes

 Registres de masque d‘interruption (Exception mask registers)


 PRIMASK : Registre de 1 bit qui permet, s’il est actif, d’interdire toutes les
interruptions sauf l’interruption non masquables (NMI) et les exceptions dues à une erreur
matérielle (Hard Fault).
 FAULTMASK : Registre de 1 bit qui permet, s’il est actif, d’interdire toutes les
interruptions à l’exception de l’interruption non masquables (NMI).
 BASEPRI : Registre de 8 bits dont la valeur indique, si elle est différente de 0, 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,
alors toutes les interruptions sont permises.

Le registre de CONTRÔLE (CONTROL)


Ce registre détermine le type de pile utilisée et les droits d'accès du programme.
27
Les registres internes

28
Les registres internes
 Le tableau suivant contient le type de chaque registre et la validité d'accès ainsi que sa
valeur après le redémarrage

29
Système de bus
 Le système principal de Bus se base sur une matrice de bus multicouche de 32 bits de
haute vitesse (AHB : Advanced High-Speed bus) qui interconnecte 8 unités maîtres à 7
esclaves.
 La matrice de bus permet d'accéder à partir d'un maître à un esclave, permettant un accès
simultané et un fonctionnement efficace même lorsque plusieurs périphériques de vitesse
différents fonctionnent simultanément.
 Il y a 2 types de bus connectées à la matrice : systèmes AHB et APB.

30
Système de bus
 Huit maîtres :
 Cortex™-M4F core I-bus, D-bus et S-bus
 Bus mémoire DMA1
 Bus mémoire DMA2
 Bus périphérique DMA2
 Bus Ethernet DMA
 Bus DMA USB OTG HS
 Sept esclaves :
 Bus ICode de la mémoire Flash interne
 Bus DCode mémoire Flash interne
 SRAM1 interne principale (112 Ko)
 SRAM2 interne auxiliaire (16 Ko)
 SRAM3 interne auxiliaire (64 Ko) disponible uniquement sur les appareils
STM32F42xxx et STM32F43xxx
 Périphériques AHB1, y compris les ponts AHB vers APB et les périphériques
APB
 Périphériques AHB2
 FSMC (flexible static memory controller)

31
Système de bus

32
Interconnexions du CPU avec les mémoires et les périphériques
 Les mémoires flash et SRAM sont connectées au CPU à travers le bus AHB
(Advanced High-Speed bus), tandis que les périphériques sont connectés à un ou
plusieurs bus APB (Advanced Peripheral Bus).
 Le bus AHB est également pris en charge des maîtres de bus supplémentaires, tels que
des unités DMA (Direct Memory Access).
 En ajoutant des périphériques plus complexes tels que l’Ethernet MAC et USB ayant
leurs propres DMA. Avec la puissance et la complexité des périphériques, l’arbitrage des
bus est devenu difficile à maitriser.
 La famille de processeurs Cortex-M résout ce problème en utilisant une matrice de
bus AHB.
 La matrice de bus AHB consiste en un certain nombre de bus AHB parallèles
connectés à différentes régions du circuit. Ces zones sont définies par le fabricant lors de
la conception de la puce.
 Chaque région est un périphérique esclave; il peut s'agir d'une mémoire flash, d'un
bloc de mémoire SRAM ou d'un groupe de périphériques utilisateur sur un bus APB.
 Chacune de ces régions est ensuite connectée à chacun des maîtres de bus par le
biais de bus AHB supplémentaires pour former la matrice de bus.
 Cette technique permet aux fabricants de concevoir des périphériques complexes avec
plusieurs processeurs Cortex-M, unités DMA et périphériques avancés, chacun avec des
chemins d'accès parallèles vers les différentes ressources de périphérique.
33
AHB vs APB
 Les deux font partie du standards AMBA (Advanced Microcontroller Bus Architecture)

 AHB Advanced High-performance Bus


 Pipeline
 Multiple master
 Communication parallèle Full duplex
 Transaction en rafale
 APB Advanced Peripheral Bus
 Pas de pipeline
 un seul master
 complexité réduite
 faible puissance
 bus 32 bits

34
Horloge système et bus

 L'horloge système est utilisée pour déterminer la vitesse à laquelle les instructions sont
exécutées et elle a une vitesse maximale de 168 MHz.
 Le Bus AHB est dérivé de l'horloge système, ce bus a une vitesse maximale de
168MHz.
 Le Bus APB1 est dérivé de l'AHB, ce bus a une vitesse maximale de 42MHz.
 Le Bus APB2 est dérivée de l'AHB, ce bus a une fréquence maximale de 84MHz.
 Périphériques d'horloge non système : Un certain nombre d'horloges périphériques ne
sont pas dérivées de l'horloge système mais ont leur propre source indépendante.

35
Système de bus
I-Bus (Instruction Bus): dédié principalement pour le transfert des instructions (code)
entre Cortex et la mémoire Flash. Principalement pour la mémoire de programme. Ce bus
de 32 bits permet la recherche des instructions et des vecteurs à partir de l’adresse
0x00000000 à 0x1FFFFFFF. Basé sur le protocole AMBA 3.0 AHB.
D-Bus (Data Bus) dédié principalement pour le transfert des données (SRAM) entre
Cortex et la mémoire SRAM. Principalement pour la mémoire de programme. Il permet
l’accès aux données à partir de l’adresse 0x20000000 à 0x2FFFFFFF. Ce bus est de 32
bits.
S-Bus (System bus) Ce bus permet d'accéder aux données situées dans un périphérique ou
dans la SRAM. Les instructions peuvent également être récupérées sur ce bus (moins
efficace que ICode). Les cibles de ce bus sont les SRAM1, SRAM2 et SRAM3 internes,
les périphériques AHB1 comprenant les périphériques APB, les périphériques AHB2 et les
mémoires externes. Principalement pour la RAM et les périphériques. Il permet l’accès à
la totalité de l’espace compris entre 0x20000000 et 0xFFFFFFFF à l’exception de la
région PPB (Private Peripheral Bus : bus pour le traçage des données). Ce bus est de
32 bits.
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 .

36
Système de bus
Bus Matrix La matrice de Bus gère l'arbitrage d'accès entre maîtres. L'arbitrage utilise un
algorithme à tour de rôle.
Ponts AHB / APB (APB) Les deux ponts AHB / APB, APB1 et APB2, fournissent des
connexions synchrones complètes entre l'AHB et les deux bus APB, permettant une
sélection flexible de la fréquence périphérique. Avant d'utiliser un périphérique, vous
devez activer son horloge dans le registre RCC_AHBxENR ou RCC_APBxENR.
Remarque: Lorsqu'un accès 16 ou 8 bits est réalisé sur un registre APB, l'accès est
transformé en accès 32 bits: le pont duplique les données 16 ou 8 bits pour alimenter le
vecteur 32 bits

37
Système de bus

38
Système de bus

39
Répartition de Mémoire
 Le processeur possède un bus d’adresse de 32 bits donc on peut adresser un espace
mémoire de 4Go dans laquelle chaque adresse et/ou une zone spécifique est allouée à
chaque mémoire ou extrémité de terminal.

1er adresse 00000000h


Dernière adresse FFFFFFFFh

 Accès pour le programme (par exemple région CODE)


 Accès aux données (par exemple, région SRAM)
 Périphériques (par exemple, région périphérique)
 Contrôle interne et composants de débogage du processeur
(par exemple, bus périphérique privé)

40
Répartition de Mémoire

41
Répartition de Mémoire
 Le premier 1 Go de mémoire est réparti uniformément entre une région de code et une
région SRAM.
 L'espace de code est optimisé pour être exécuté à partir du bus I-Code.
 La SRAM est atteinte avec le bus D-code.
 La SRAM démarre à partir de l'adresse 0x2000 0000 et peut potentiellement durer jusqu'à
0x3FFF FFFF.
 L'adresse de fin réelle dépend de la quantité effective de SRAM interne. Par exemple,
en supposant un STM32F103RB avec 20 Ko de SRAM , nous avons que l'adresse finale est
0x200013FF. Essayer d’accéder à un emplacement en dehors de cette zone provoquera
une exception Bus Fault .
 Bien que le code puisse être chargé et exécuté à partir de la SRAM, les instructions seraient
récupérées à l'aide du bus système, ce qui entraîne un état d'attente supplémentaire. Il est
probable que le code s'exécute plus lentement à partir de la SRAM qu'à partir de la mémoire
FLASH sur puce située dans la région de code.
 En fait, pour tous les appareils STM32, une zone commençant à l' adresse 0x08000000 est
liée à la mémoire FLASH interne du MCU , et c'est la zone où réside le code de
programme .
 Grâce à une configuration de démarrage spécifique, cette zone est également alaisée à
partir de l’adresse 0x0000 0000.
 Cela signifie qu'il est parfaitement possible de consulter le contenu de la mémoire
FLASH aussi bien à partir de l'adresse 0x0800 0000 que de celle 0x0000 0000 (par
exemple, une routine placée à l'adresse 0x0800 16DC est également accessible à partir de l'
42
adresse 0x000016DC. .
Répartition de Mémoire
 Le 0,5 Go de mémoire suivant est la région périphérique sur puce.
 Chaque périphérique fourni par le MCU (timers, interfaces I2C et SPI, USART, etc.) est
associé à cette région.
 Le premier 1 Mo des régions SRAM et Périphérique est adressable en bits en utilisant
une technique appelée bande de bits.
 Étant donné que toutes les SRAM et tous les périphériques utilisateur du STM32 sont
situés dans ces régions, tous les emplacements de mémoire du STM32 peuvent être
manipulés au niveau du mot ou au niveau du bit.
 L'espace d'adressage de 2 Go suivant est alloué à la SRAM mappée en mémoire
externe et aux périphériques.
 La RAM externe est dédiée à la SRAM externe et aux flashs. Les dispositifs Cortex-M
peuvent exécuter du code et charger/stocker des données à partir de mémoires
externes, qui étendent les ressources de mémoire interne, via l'interface EMI/FSMC.
Le dernier 0,5 Go est alloué aux périphériques internes du processeur Cortex et à une
région pour les futures améliorations spécifiques du fournisseur du processeur Cortex.
 Tous les registres du processeur Cortex se trouvent à des emplacements fixes pour tous
les microcontrôleurs Cortex.
 Cela permet au code d'être plus facilement porté entre les différentes variantes de
STM32 et en fait les microcontrôleurs Cortex d'autres fournisseurs.
 Un processeur à apprendre, un ensemble d'outils dans lesquels investir et de grandes
quantités de code réutilisable sur une large gamme de microcontrôleurs. 43
Répartition de Mémoire
Le Cortex-M4 définit une carte mémoire fixe de 4 Go qui spécifie les régions pour les
périphériques de code SRAM, la mémoire externe et les périphériques et les registres du
système Cortex.
 Cette carte mémoire est commune à tous les appareils Cortex.
 L'adresse de départ de la mémoire dans laquelle le programme est stocké est 0x00000000
et le plus grand espace pouvant être utilisé est de 512 Mo, bien sûr, cela varie en fonction de
la RAM ou de la mémoire flash disponible dans chaque contrôleur, par exemple, avec le
contrôleur stm32F429, la mémoire flash est de 2 Mo.

44
Répartition de Mémoire
 à l'adresse 0x00000000 il est toujours stocké l’adresse de pointeur de pile, l'adresse de la
pile en RAM, et à l‘adresse suivante, qui est 0x00000004, est stocké le vecteur
d’interruption. La société ST divise cet espace pour les contrôleurs STM32, par exemple, les
codes de programme sont toujours placés à partir de l'adresse 0x08000000, qui est dédiée à
la mémoire flash.

 L'adresse de départ de la RAM est 0x20000000

 L'adresse de départ pour les périphériques


tels que UART ou ADC est 0x40000000

 L'adresse de la RAM externe, telle que celle de la carte Discovery, est 0x60000000, car les
processeurs Cortex-M peuvent exécuter le programme et traiter les données sur la mémoire
externe et cette mémoire est utile dans le cas de systèmes d'exploitation ou d'applications
45
multimédias.
Fonctionnalité bit-Banding
 L'une des grandes caractéristiques des processeurs ARM Cortex-M4 est qu'un bit est
contrôlé en écrivant un mot complet et un mot signifie 4 octets. Par exemple, si nous
voulons changer la valeur d'un bit particulier, que ce soit le bit 2 d'une variable dans la
mémoire RAM, le processeur lit d'abord le mot que cette variable contient et récupère sa
valeur, puis le change par la fonction logique ET ou bien OU, puis il est réécrit, et cela
prend 3 cycles, et si une interruption se produit pendant ce processus, la situation ne sera
pas bonne.

 Grâce à la fonction Bit-Banding, le processus précédent peut être complété en une seule
étape qu'en écrivant directement sur un mot entier à un autre endroit, et le bit que nous
voulons est automatiquement changé, l'idée ici est que le processeur 32 bits traite plus
rapidement la réponse de mot et non un bit spécifique.

A chaque zone de bit-banding de 1 Mo lui correspond une zone de 32Mo.

 Dans la figure suivante, nous voyons les endroits désignés pour les opérations de bande
de bits pour la RAM, car il y a aussi une zone de bande de bits dédiée aux périphérique.

46
Fonctionnalité bit-Banding

47
Fonctionnalité bit-Banding

 La région de bit-band pour la RAM est à l'adresse 0x20000000 et de taille de 1


Mo et son équivalent, qui est la région bit-band alias est à l'adresse 0x22000000
de taille de 32 Mo, car chaque mot contient 32 bits. Pour calculer l'adresse de bit-
band alias correspondant à la région de band-bit, nous utilisons l'équation
suivante:

bit_word_offset =bit_band_base + (byte_offset x 32) +


(bit_number × 4)
bit_word_addr = bit_band_base + bit_word_offset
bit_word_offset est la position du bit cible dans la région de mémoire de bande de
bits.
byte_offset est le numéro de l'octet dans la région de bande binaire qui contient le
bit ciblé.
bit_number est la position de bit, de 0 à 7, du bit ciblé.
bit_word_addr est l'adresse du mot dans la région de mémoire d'alias qui
correspond au bit ciblé.
bit_band_base est l'adresse de début de la région d'alias.
48
Fonctionnalité bit-Banding

49
Fonctionnalité bit-Banding/ EXEMPLE
 Cherchant l’adresse du bit 2 de l'octet situé à l'adresse SRAM 0x2000 0300
dans la région d'alias se fait comme suit :
0x2200 6008 = 0x2200 0000 + (0x300*32) + (2*4).
 L'écriture à l'adresse 0x2200 6008 a le même effet qu'une opération de lecture-
modification-écriture sur le bit 2 de l'octet à l'adresse SRAM 0x2000 0300
 L'adresse de lecture 0x2200 6008 renvoie la valeur (0x01 ou 0x00) du bit 2 de
l'octet à l'adresse SRAM 0x2000 0300 (0x01 : bit activé ; 0x00 : bit effacé)
 Le mot d'alias à 0x23FFFFE0 correspond au bit [0] de l'octet de bande binaire à
0x200FFFFF :
0x23FFFFE0 = 0x22000000 + (0xFFFFF*32) + 0*4.
 Le mot d'alias à 0x23FFFFFC correspond au bit [7] de l'octet de bande binaire à
0x200FFFFF :
0x23FFFFFC = 0x22000000 + (0xFFFFF*32) + 7*4.
 Le mot d'alias à 0x22000000 correspond au bit [0] de l'octet de bande binaire à
0x20000000 :
0x22000000 = 0x22000000 + (0*32) + 0*4.
 Le mot d'alias à 0x2200001C correspond au bit [7] de l'octet de bande binaire à
0x20000000 :
0x2200001C = 0x22000000 + (0*32) + 7*4. 50
Fonctionnalité bit-Banding
Dans cet exemple, nous voulons pouvoir mettre à 1 ou 0 le huitième bit de registre de
donnée de sortie GPIO de port B qui est à l’adresse 0x40010C0C

Adresse du mot = 0x40010C0C


Périphérique bit band base = 0x40000000
Périphérique bit band Alias base = 0x42000000
octets d’offset à partir de bit band base = 0x40010C0C – 0x40000000 = 10C0C
Décalage de mot de bit = (0x10C0C x 0x20) +(8x4) = 0x2181A0
Adresse de Bit Alias = 0x42000000 + 0x2181A0 = 0x422181A0
Nous pouvons maintenant créer un pointeur vers cette adresse en utilisant la ligne suivante
de C:
#define PortBbit8 (*((volatile unsigned long *) 0x422181A0 ))
Ce pointeur peut ensuite être utilisé pour définir et effacer le bit du port IO:

PB8 = 1; //led on

51
Disposition des variables en mémoire

 Toute variable 32 bits se compose de 4 octets. La question qui se pose est comment
placer cette information dans la mémoire?
 Pour cela, il y a deux méthodes de placement:
 Big-endian est un ordre dans lequel la valeur la plus significative de la séquence est
stockée en premier.
 little-endian, la valeur la moins significative de la séquence est stockée en premier.
 Par exemple, dans une CPU big-endian, les quatre octets de données 0x01020304
seraient stockés 0x01 (adresse + 0), 0x02 (adresse + 1), 0x03 (adresse + 2), 0x04 (adresse +
3). Dans un processeur little-endian, les mêmes octets seraient stockés 0x04 (adresse + 0),
0x03 (adresse + 1), 0x02 (adresse + 2), 0x01 (adresse + 3).

52
Architecture du microcontrôleur STM32F4xx

53
Configuration de Boot

 Les valeurs sur les broches BOOT sont verrouillées sur le 4e front montant de
SYSCLK après une réinitialisation
 Il appartient à l'application de définir les broches BOOT1 et BOOT0 après la
réinitialisation pour sélectionner le mode de démarrage requis.
 Les broches BOOT sont également ré-échantillonnées lors de la sortie du mode
veille et doivent donc être conservées dans le mode de démarrage requis en mode
veille.
 Une fois ce délai de démarrage écoulé, la CPU récupère la valeur de haut de pile à
partir de l'adresse 0x0000 0000, puis démarre l'exécution du code à partir de la
mémoire de démarrage à partir de 0x0000 0004.
Architecture du microcontrôleur STM32F4xx

 Le circuit STM32F4xx est basé sur une architecture ARM® Cortex™-M4 RISC 32 bits,
fonctionnant à une fréquence maximale de 168 MHz.
 Il intègre une mémoire flash de 1Mo, une mémoire système SRAM de 128 Ko, une
mémoire SRAM de sauvegarde de 4 Ko, une RAM couplée au core de 64Ko et une vaste
gamme de périphériques d’entrées-sorties.
 L’intégration efficace des différents composants exige l’emploie d’un bus système à
haute performance et ayant une grande bande passante pour effectuer des opérations en
parallèle.

55

Vous aimerez peut-être aussi