Page Personnelle de Vincent Kerhoas
Vincent Kerhoas
Enseignant du Supérieur
Professeur Agrégé
Page Personnelle de Vincent Kerhoas

Les Périphériques

Back                  << Index >>


Qu’est-ce qu’un périphérique ?

Jusqu’à présent nous avons considéré le processeur et sa mémoire.
Pour illustrer les notions d’architecture des microcprocesseurs, nous avons codé des programmes de calcul ou de traitement de chaines de caractère.

Nous allons maintenant voir comment le processeur peut interragir avec le monde extérieur, dans une application de robotique ou d’objet connecté.

Pour cela le processeur utilise des périphériques pour :

Quels documents utiliser

Le Reference Manual ou User Manual d’un microcontrôleur détaille l’ensemble des composants le constituant. Ce document étant volumineux, il faut bien faire apparaitre l’index pour accéder à la documentation du périphérique étudié.


Dialogue entre un processeur et un périphérique

Il faut voir la programmation d’un périphérique comme un dialogue entre le processeur et ce périphérique.
Le périphérique contient des registres permettant de récéptionner des ordres depuis le périphérique, ou d’indiquer des états.

Prenons l’exemple d’un périphérique pour une liaison série :
1. Le Processeur veut envoyer la valeur 45, il la copie donc dans le registre Data
2. Le Processeur donne l’ordre au périphérique d’envoyer la donnée en écrivant 1 dans le registre de contrôle.
3. Une fois la donnée envoyée, Le périphérique écrit 1 dans le registre Status afin d’indiquer qu’une autre donnée peut être transmise si nécessaire.


Accès aux registres des périphériques

Comme pour la mémoire, les liens entre un périphérique et le microcontrôleur sont les bus d’adresse et de données.

Si le processeur veut relever le registre Status du périphérique 0, il force la valeur 9 sur le bus d’adresses.

Le contenu du registre Status est alors visible sur le bus de données et lisible par le processeur.

L’accès au périphériques s’apparente donc à un accès à une case mémoire.
Le seule différence réside dans le fait que certains registres peuvent être accessibles uniquement en lecture ou en écriture.
Le schéma ci-dessus fait apparaitre la Memory Map, à savoir les plages d’adresse correspondant aux différents composants adressables ( mémoires ou périphériques ).

L’extrait ci dessous montre la Memory Map du microcontrôleur STM32F411 :


Modèle de programmation pour accéder aux périphériques

Dès lors qu’accéder à un registre de périphérique revient à accéder à une case mémoire, il suffit donc de réaliser une opération de lecture ou d’écriture en envoyant la bonne adresse.

On considère le registre GPIOA_MODER ; pour accéder à ce registre, il faut envoyer l’adresse 0x40020000.

En assembleur, les opérations d’accès mémoires sont réalisées par ldr et str.

Je peux donc écrire :

En langage C, cela donne :

Quand dans mon code, j’utilise GPIOA_MODER, je peux le remplacer par *((volatile uint32_t *) 0x40020000 )
Je désigne donc le contenu d’une case mémoire de taille uint32_t d’adresse spécifique 0x40020000.
Le terme volatile indique au compilateur de ne pas faire d’optimisation ( remplacement d’un accès mémoire par un transfert de registre ).

Une autre solution ( que nous adopterons ) en langage C est d’utiliser des structures :

La définition des adresses de tous les périphériques est faite dans le fichier stm32f411xe.h


Back                  << Index >>