Vous êtes sur la page 1sur 5

TP1 : Initiation à la programmation assembleur du

processeur ARM CORTEX M4


1 Objectif
1. Familiarisation avec le jeu d'instruction de l'assembleur ARM CORTEX M4
2. Test des instructions de manipulation de bits et exploration la fonctionnalité bit-band

2 Operations Bit-band
2.1 Principe
La fonctionnalité bit-band offerte par le processeur ARM CORTEX M4 permet de manipuler
un bit d'une donnée en mémoire au moyen des instructions d'accès mémoire LDR et STR.
Le principe de cette fonctionnalité repose sur une correspondance entre deux zones
mémoire du processeur comme le montre la figure 1.

Figure 1 : Mapping de la mémoire pour la fonctionnalité bit-band.

A chacun des mots de 32 bits dans la zone de 1 Mégaoctet (0x20000000 – 0x200FFFFF)


correspondent 32 mots dans la zone de 32 Mégaoctet (0x22000000 – 0x23FFFFFF), dont
chacun représente 1 bit du mot source.

Figure 2 : Correspondance des adresses mémoire.


Pour explorer cette notion, tester le programme de la figure 3

Figure 3 : Programme assembleur de test de la fonctionnalité bit-band.

2.2 Application : Code de Hamming


2.2.1 Introduction
Les codes de Hamming sont des codes détecteurs correcteurs d’erreurs utilisés dans des systèmes de
communications sur des canaux de transmission bruités. Ils se basent sur la construction de clés de
parité qui sont émises avec le mot d’information.
Le schéma synoptique du système codeur / décodeur étudié est présenté sur la figure 4.

x x' a'3
a3 y y' a'2
a2 Codeur Canal de Décodeur
a3 a'3 a'1
a1 z transmission z' a'0
a0 a2 a'2
a1 a'1
a0 a'0
Figure 4 : Codeur /décodeur de Hamming.

2.2.2 Structure de l'application à développer


Il s'agit d'écrire un programme principal comme illustré sur la figure 5. Dans celui-ci se fera l'appel à
tous les sous-programmes des sections décrites dans la suite.
Figure 5 : Structure du programme principal de l'application codeur/décodeur de Hamming.
Dans ce programme, justifier les valeurs des adresses mémoire : 0x22000100, 0x22000180 et
0x22000200.
Analyser ce code avant d'entamer le développement des sous-programmes décrits ci-dessous.
2.2.3 Générateur de parité
Un générateur de parité est un circuit logique qui déterminer la parité du nombre de ’1’ dans un mot
binaire à n bits A = (an−1an−2...a1a0).
Si le nombre de ’1’ est pair, la sortie P vaut ’0’. Si le nombre de ’1’ est impair, la sortie P vaut ’1’. La
sortie P est appelé la clé d’imparité du mot binaire A.
Exemple : n = 4
A = 1010 alors P = 0
A = 1110 alors P = 1
1. Donner l’équation logique de la sortie P en fonction des variables an−1, an−2,...,a0. Pour cela,
raisonner sur n = 2, n = 3, ensuite généraliser.
2. Ecrire le sous-programme générateur de parité d’un nombre binaire à 4 bits :
 __parity1 : en utilisant des instructions de manipulation des bits
 __parity2 : en utilisant la fonctionnalité bit-band
2.2.4 Transmission en code de Hamming
Le générateur de parité est utilisé pour réaliser le code de Hamming. Ce dernier est utilisé pour
détecter et corriger les erreurs de transmission selon le principe suivant :
On décide de transmettre un mot à 4 chiffres binaires A =a3a2aia0 . On lui associe 3 éléments binaires
x, y et z afin de transmettre une information globale sur 7 bits.
x est la clé d’imparité des 3 bits a3, a2 et a0.
y est la clé d’imparité des 3 bits a3, a1 et a0.
z est la clé d’imparité des 3 bits a2, a1 et a0.
La disposition des 7 bits constitue le code de Hamming à l’émission : x y a3 z a2 a1 a0.
1. Quelles-sont les équations logiques de x, y et z.
2. Ecrire le sous-programme __hamming qui génère le code de Hamming.
2.2.5 Réception en code de Hamming
A la réception, on dispose des 7 bits émis qui peuvent être erronés ou non.
On se place dans le cas d’une seule erreur de transmission et on désire détecter cette erreur. Pour
celà, on génére 3 nouvelles clés d’imparité à partir des bits a'3, a'2, a'1, et a'0 selon le principe décrit
en mode émission.:
a est la clé d’imparité des 3 bits a'3, a'2 et a'0.
b est la clé d’imparité des 3 bits a'3, a'1 et a'0.
c est la clé d’imparité des 3 bits a'2, a'1 et a'0.
Ces nouvelles clés d’imparité sont comparées à celles reçues x', y' et z'. u est le résultat de la
comparaison entre x' et a, v est le résultat de la comparaison entre y' et b, w est le résultat de la
comparaison entre z' et c. Si les 3 comparaisons donnent une égalité, l’information transmise est
juste, sinon, il y’a eu une erreur de transmission. La lecture en décimal du nombre binaire wvu donne
l’emplacement du bit erroné.
Exemple : Le code de Hamming du chiffre 7=0111 est 0001111. Supposons qu’il y’a eu une erreur de
transmission qui amène 0001101. Le contrôleur d’erreurs de transmission donne (wvu) = (110)2 = 6,
c’est-à-dire l’erreur de transmission a lieu sur le 6ème bit (en commençant le comptage à gauche).
1. Si l’opération de comparaison donne un ’0’ logique en cas d’égalité, vérifier qu’elle peut être
assimilée à un opérateur ’OU EXCLUSIF’.
2. Quels sont alors les équations logiques des sorties a, b et c.
3. Ecrire le sous-programme __error_position qui calcule la position de l’erreur de transmission.
2.2.6 Correction des erreurs de transmission
A partir de l’information binaire relative à la position de l’erreur, il est possible de corriger le bit
erroné en utilisant une opération logique élémentaire.
1. Quelle-est cette opération logique élémentaire ? En déduire l’expression logique de chaque
information binaire corrigée ou non.
2. Ecrire le sous-programme __error_correction qui permet de corriger l'erreur introduite par le
canal de transmission.