Telechargé par Sidy Mactar

Cours Systeme Embarque Master

publicité
SYSTÈME EMBARQUÉ
Mamadou Lamine NDIAYE
École Supérieure Polytechnique de DAKAR
Master 2016-2017
Dakar 2017
1
SYSTÈME EMBARQUÉ
OBJECTIF GENERAL
30 heures de cours 40 BE
! Comprendre l’architecture et le fonctionnement des
systèmes embarqués
o Connaître l'architecture interne des systèmes
embarqués
o Mettre en œuvre un système embarqué
o Gérer des interfaces entrées – sorties
! Maîtriser l’implémentation de système d’exploitation
pour l’embarqué
o Etre capable d’installer un OS pour l’embarqué
o Etre capable de développer des applications sur
l’OS
2
SYSTÈME EMBARQUÉ
1ière Partie : Introduction aux circuits logiques à architecture
programmable
o
o
INTRODUCTION AUX CIRCUIT FPGA
INTRODUCTION AU VHDL
2ième Partie : ARCHITECTURE DES CALCULATEURS
o
o
Exemple d’architecture CISC le 68HC11
Exemple d’architecture RISC le PIC 16F887
3ième Partie : Introduction aux systèmes embarqués
o
o
o
o
Qu’est ce qu’un système embarqué
Exemple de la Nintendo DS
Programmation des SE
Evolution des processeurs dans les SE
4ième Partie : Processeurs ARM
o STM32 Nucleo F401RE
3
1ième Partie : Introduction aux circuits
logiques à architecture programmable
4
Classification des familles des circuits numériques
5
Introduction aux circuits à architecture
programmable
! Circuits logiques à architecture programmables
o
o
o
o
Ciruits intégrés logiques programmables au sens de sa
reconfiguration.
Cellules logiques librement assemblagbles
Possibilités de modification des connexions par progrmmation.
Plusieurs sigles existent pour désigner ces circuits.
! Quelques Circuits à architecture programmable
o
o
o
o
o
Circuit PAL(Programmable Array Logic) où seules les fonctions
ET sont programmables
Circuit FPLA (Field Programmable Logic Array) est un circuit PAL
dans lequel les fonctions ET et OU sont programmables
Cirduit CPLD (Complex Progrmmable Logic Device) est un circuit
logique programmable complexe
Cirduit EPLD (Erasabe Progrmmable Logic Device) est un circuit
logique programmable et effeçable
Cirduit FPGA (Field Progrmmable Gate Array) est un réseau de
ciruits programmables à la demande
6
Les circuits FPGA
! Les circuits logiques programmables de type FPGA sont de plus en
plus utilisés dans la conception des circuits numériques.
! Matrices de fonctions logiques (cellules logiques SRAM)
! Programmation des interconnexions (reconfiguration de l’architecture)
in situ
! Reprogrammables à volonté
! Temps de développement très court.
! Grande souplesse pour des évolutions rapides à moindre coût
7
Les circuits FPGA
! Densités d’intégration pouvant atteindre plus de 10 millions de portes
logiques.
! Possibilités de traitement parallèle des données (augmentation de la
vitesse de calcul).
! Blocs logiques configurables constitués d’arbres de multiplexeurs
connectés à des points mémoires.
! Capacité limitée par le nombre de blocs logiques configurables (non la
complexité).
8
Carte DE0 NANO
Specifications FPGA
• Altera MAX II EPM2210F324 FPGA device
I/O Devices
• Built-in USB Blaster for FPGA configuration
Switches, LEDs, Displays, and Clocks
• 1 DIP switche
• 4 pushbutton switches
• 2 red user LEDs,
• 2 yellow user LEDs,
• 2 blue user LEDs,
• 2 green user LEDs
• 50-MHz oscillator for clock sources
• Powered by USB
Prototyping Areas
• A 40-pin expansion port area compatible with Altera
DE2/DE1 expansion ports.
• Prototyping Area A with 68 GPIO, 6 3.3V, 2 5V and
8 GND pins
• Prototyping Area B with 20 GPIO, 2 3.3V, and 2
GND pins
9
CARTE DE2 POUR LES TP (ALTERA)
Specifications FPGA
• Cyclone II EP2C35F672C6 FPGA
I/O Devices
• Built-in USB Blaster for FPGA configuration
• 10/100 Ethernet, RS-232, Infrared port
• Video Out (VGA 10-bit DAC)
• Video In (NTSC/PAL/Multi-format)
• USB 2.0 (type A and type B)
• PS/2 mouse or keyboard port
• Line-in, Line-out, microphone-in
(24-bit audio CODEC)
• Expansion headers (76 signal pins)
Memory
• 8-MB SDRAM, 512-KB SRAM, 4-MB Flash
• SD memory card slot
Switches, LEDs, Displays, and Clocks
• 18 toggle switches
• 4 debounced pushbutton switches
• 18 red LEDs, 9 green LEDs
• Eight 7-segment displays
• 16 x 2 LCD display
• 27-MHz and 50-MHz oscillators, external SMA clock
10
input
CARTE DE2 POUR LES TP (ALTERA)
11
VHDL introduction
! VHDL signifie VHSIC Hardware Description Language
! VHSIC = Very High Speed Integrated Circuit.
! VHDL est un langage international défini par la norme IEEE qui
permet de décrire de manière non ambiguë le comportement
d’un circuit ou d’un système numérique.
! Les objectifs du langage VHDL
o Conception de circuits intégrés reconfigurables ou non (ASIC, FPGA…) :
SYNTHESE
o Mise au point de modèle de simulations numériques (circuits virtuels) :
MODELISATION
VHDL introduction
! Ce langage à la différence des autres langages informatiques,
n’est pas destiné à être exécuté, l’aboutissement étant la
synthèse de circuits logiques
! La synthèse est le processus qui permet d’obtenir
automatiquement une organisation matérielle à partir du
codage des spécifications dans un langage de haut niveau
(VHDL, VERILOG, VHDL-AMS, VERILOG-AMS).
! Le langage est capable de DECRIRE
o des composants (ENTITY + ARCHITECTURE)
o des comportements CONCURRENTS ( // )
o des comportements séquentiels
Méthodologie de conception des FPGA (CPLD)
Méthodologie de conception des FPGA (CPLD)
Niveaux de description
! Comportemental ou fonctionnel
o Le modèle est décrit par, sa fonction, son algorithme. Il s’agit de
décrire comment cela fonctionne.
! Structurel (RTL « Register Transfert Logic »)
o Le modèle est décrit sous forme d'éléments séquentiels
o Prend en compte la notion d’horloge, de cycle;
! Porte logique (Structurel)
o Le modèle est décrit par sa topologie (netlist) de portes logiques, de
registres, de composants
! Décomposition du cahier des charges en fonctions simples
o Fonctions combinatoires (instructions concurrentes)
o Fonctions séquentielles (process)
Introduction au VHDL
Introduction au VHDL
Nom du cours
Prof. Mamadou Lamine NDIAYE
Introduction au VHDL
● VHDL signifie VHSIC Hardware Description Language
● VHSIC = Very High Speed Integrated Circuit
● VHDL est un langage international défini par la norme IEEE qui permet
● Synthèse logique des circuits numériques
● Synthèse physique des circuits numériques
● Les objectifs du langage VHDL
●
●
Conception de circuits intégrés reconfigurables ou non (ASIC, FPGA…) : SYNTHESE
Mise au point de modèle de simulations numériques (circuits virtuels) : MODELISATION
Enseignes et afficheurs à LED ! Synthèse de circuits
combinatoires
VHDL : Les concepts de base
Unités de conception : deux parties dépendantes (obligatoires)
● L’entité (Entity) qui représente la vue extérieure du composant
o Déclare les modes des ports en entrée et/ou sortie (in, out, inout, buffer)
o IN port à lecture seule
o OUT port à écriture seule
o INOUT port à lecture/écriture
o BUFFER écriture/lecture sur un port
● L’architecture (Architecture) qui décrit le fonctionnement du composant
o Représente la vue interne du composant
o Décrit le comportement de la fonction à synthétiser
o Décrit les signaux internes, les composants, les constantes, les types d’objets, les
déclarations de sous programmes dans la partie dite déclarative (début)
o A une entité peut correspondre plusieurs architectures
Enseignes et afficheurs à LED ! Synthèse de circuits
combinatoires
Structure générale d’un programme VHDL
Entity Nom_entite is
-- déclarations de paramètres, ports..
Begin
End Nom_entite;
Architecture Nom_archi of Nom_entite is
-- Zone déclarative...
Begin
--instructions concurrentes...
P1: process
-- déclarations...
Begin
--instructions séquentielles...
end process P1;
-- instructions concurrentes...
P2: process
-- déclarations...
Begin
--instructions séquentielles...
end process P2;
-- instructions concurrentes...
End Nom_archi ;
Structure générale d’un programme VHDL
Exemple :
Multiplexeur 2 vers 1
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Déclaration des
bibliothèques
-- multiplexeur 2 vers 1 (commentaire)
e1
e2
sel
mux2
s
Entity mux2 is
-- commentaire
Commentaires en VHDL
Port( e1, e2 : in std_logic;
sel : std_logic;
-- par défaut le mode in est pris
en compte
s : out std_logic
-- mode out à préciser
);
end mux2;
Déclaration de
-- Déclaration de l’architecture (commentaire) l’entité du
multiplexeur
architecture archi_mux2 of mux2 is
Déclaration de
begin
l’architecture du
with sel select
multiplexeur
s <= e1 when ’1’,
-- s recopie e1 lorsque sel
= 1
e2 when others;
-- recopie e2 dans tous les autres
cas
end archi_mux2;
Objets et types de base
Quatre objets « typés »
● Les constantes (CONSTANT), objet dont la valeur ne change pas
durant la simulation.
● Les variables (VARIABLE) objet dont la valeur peut changer par
affectation au cours de la simulation. Une variable n’existe que
dans un PROCESS.
● Les signaux (SIGNAL) désignent des signaux internes qui ne
sortent pas du composant.
● Les fichiers (FILE) permettent l'échange de données entre
l'extérieur et le simulateur VHDL.
Objets et types de base
Quelques exemples
CONSTANT cte : INTEGER :=10;
VARIABLE vari : BIT_VECTOR(3 DOWNTO 0):= "0000";
VARIABLE n : INTEGER range 0 to 65535;
SIGNAL sig : std_logic;
SIGNAL a : bit_vector (3 downto 0);
FILE fich : TEXT IS IN "entree.txt";
Objets et types de base
Quelques exemples
Bit : peut prendre les valeurs `0´ ou `1´.
Bit_vector : groupe de bits défini entre " "
Boolean: peut prendre les valeurs true ou false.
Integer : Valeur entière codée sur 32 bits (de - 2.147.483.648 à 2.147.483.647)
Std_logic, std_ulogic : Similaires au bit mais avec 9 états possibles.
Time : comptage du temps sur 64 bits, en ps, ns, us, ms, sec, min, hr (non
synthétisable) ;
Opérateurs en VHDL
Les opérateurs arithmétiques et logiques
VHDL manipule six opérateurs hiérarchisés
● 1 Opérateurs divers :
● 2 Opérateurs de multiplication :
● 3 Opérateurs d’addition :
● 4 Opérateurs relationnels :
● 5 Opérateurs de décalage :
● 6 Opérateurs logiques :
**, abs, not
*, /, mod, rem
+, -, &
=, /=, < , <= , >, >=
sll, srl , sla,sra,rol,ror
and , or, nand, nor, xor, xnor
Littéraux en VHDL
Les littéraux (valeurs explicites)
● Caractères :
● Chaînes :
● Chaînes de bits :
● Décimaux :
● Basés :
1 , c , b , #
"10110100", "bonjour", "x@&"
B"0010_1101", X "2F", O "265"
27, -5, 4e3, 76_562, 4.25
2#1001#, 8#65_07, 16#C5#e2
● Une chaine de bit est représenté par un vecteur de bits
● std_logic_vector( 7 downto 0);
● std_logic_vector( 0 to 7);
-- bit poids fort => poids faible
-- bit faible poids => poids fort
Tableaux en VHDL
Les tableaux (ARRAY)
● Les tableaux sont des collections de données de même type
● Les données sont rangées suivant un index (entier) ou des
énumérés
type bus is array (0 to 31) of bit;
type COULEURS is (ROUGE, JAUNE, BLEU, VERT, ORANGE);
-- type énuméré
TYPE memoire IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
-- déclaration du tableau mémoire
type TABLEAU1 is array(0 to 31) of bit_vector(7 downto 0);
type TABLEAU2 is array(0 to 31, 0 to 7) of bit;
SIGNAL Tab_Mem: memoire; -- création d’un tableau de type memoire
Signal S1 : TABLEAU1;
Signal S2 : TABLEAU2;
Begin
S1(0) <="01101011 »;
-- Modification des bits de la première ligne
S1 (31)(5) <= '1';
-- Modification du bit la 32ieme ligne 6ime colonne de S1
S2(4,7) <= '0';
-- Modification du bit la 5ieme ligne 8ime colonne de S2
Concepts de base du VHDL : instructions
concurrentes
Nom du cours
Prof. Mamadou Lamine NDIAYE
VHDL : Les instructions concurrentes
Logique combinatoire : Instructions concurrentes
●Décomposition en fonction simple (concurrente), ensemble de
composants ou d’algorithmes travaillant en parallèle et agissant
les uns sur les autres.
●Chaque instruction effectue donc un traitement en parallèle avec
les autres instructions.
●L’ordre d’écriture des instructions est sans importance.
Affectation simple
signal <=
● Connexion de deux signaux
● Utilise l’opérateur <=
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
Entity fonction_simple is
Port( e1, e2 : in std_logic;
s1, s2 : out std_logic
);
End fonction_simple;
Architecture archi_simple of
fonction_simple is
Begin
s1 <= e1 and e2;
-- ordre d écriture indiff
s2 <= e1 or e2;
-- ordre d écriture indiff
end archi_simple;
signal1
Affectation conditionnelle
signal <=
signal1 when expresion1 else
………
signal2 when expresion2 else
signal3 ;
● Affectation conditionnelle WHEN / ELSE
o C’est une instruction qui a une seule cible mais peut avoir plusieurs expressions.
o Les conditions sont évaluées séquentiellement, si une condition est vraie alors
l’expression correspondante est exécutée.
Affectation conditionnelle
signal <=
signal1 when expresion1 else
………
signal2 when expresion2 else
signal3 ;
● Affectation conditionnelle WHEN / ELSE
o C’est une instruction qui a une seule cible mais peut avoir plusieurs expressions.
o Les conditions sont évaluées séquentiellement, si une condition est vraie alors
l’expression correspondante est exécutée.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
Entity mux2 is
Port( e1, e2 , sel : in std_logic;
s : out std_logic
architecture archi_mux2 of
mux2 is
begin
s <= e1 when sel=’0’ else
e2;
);
end mux2;
end archi_mux2;
Affectation sélective
with expression select
signal
<= signal1 when valeur1,
signal2 when valeur2,
signal 3 when others ;
● Affectation sélective WITH ……SELECT
o C’est une affectation d’une valeur suivant l’état de l’expression testée.
o Exemple : Décodeur 7 segment
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity Bcd7Segment is
Port ( data : in STD_LOGIC_VECTOR (3 downto 0);
7Segment : out STD_LOGIC_VECTOR (0 to 6));
end Bcd7Segment;
Affectation sélective
with expression select
signal
<= signal1 when valeur1,
signal2 when valeur2,
signal 3 when others ;
architecture comportement of
Bcd7Segment is
begin
with data select
7Segment <=
"0000001" when x"0" ,
"1001111" when x"1" ,
"0010010" when x"2" ,
"0000110" when x"3" ,
"1001100" when x"4" ,
"0100100" when x"5" ,
"0100000" when x"6" ,
"0001111" when x"7" ,
"0000000" when x"8" ,
"0000100" when x"9" ,
"1111111" when others;
end comportement;
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity Bcd7Segment is
Port ( data : in STD_LOGIC_VECTOR
(3 downto 0);
7Segment : out
STD_LOGIC_VECTOR (0 to 6));
end Bcd7Segment;
Component
Les Composants (component)
● Le mot COMPONENT permet de déclarer un prototype (modèle) de composant
● L’instanciation du composant se fait alors dans le corps de l’architecture
● <NOM_INSTANCE>:<NOM_COMPOSANT> port map (LISTE DES CONNEXIONS);
ARCHITECTURE Structure OF Decodeur_7seg IS
LIBRARY ieee;
USE ieee.std_logic_1164.all;
COMPONENT Bcd7Segment
PORT (data : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
ENTITY Decodeur_7seg IS
HEX
PORT (SW : IN STD_LOGIC_VECTOR(15
DOWNTO 0);
BEGIN
LEDR : OUT STD_LOGIC_VECTOR(15
DOWNTO 0);
-- red LEDs
HEX3, HEX2, HEX1, HEX0 : OUT
STD_LOGIC_VECTOR(0 TO 6));
-- 7-segs
END Decodeur_7seg ;
: OUT
STD_LOGIC_VECTOR(0 TO 6));
END COMPONENT;
LEDR <= SW;
digit3: Bcd7Segment PORT MAP (SW(15 DOWNTO 12),
HEX3);
digit2: Bcd7Segment PORT MAP (SW(11 DOWNTO 8), HEX2);
digit1: Bcd7Segment PORT MAP (SW(7 DOWNTO 4), HEX1);
digit0: Bcd7Segment PORT MAP (SW(3 DOWNTO 0), HEX0);
END Structure;
Génération conditionnelle
label : if (condition) generate
● Génération conditionnelle : GENERATE
o
o
o
o
-- suite d’instructions concurrentes
end generate label;
Permet l’exécution conditionnelle d’instructions concurrentes
label : for i in 0 to x generate
Permet l’exécution itérative d’instructions concurrentes
Les instructions ne seront prises en compte que si la condition est vraie. -- suite d’instruction concurrente
End generate label ;
s’utilise avec for (itérative) ou if (conditionnelle)
Génération conditionnelle
● Génération conditionnelle : GENERATE
o
s’utilise avec for (itérative) ou if (conditionnelle)
label : if (condition) generate
-- suite d’instructions concurrentes
end generate label;
label : for i in 0 to x generate
-- suite d’instruction concurrente
End generate label ;
--librairie pour inclure type std_logic
Library ieee;
Use ieee.std_logic_1164.all;
entity Additionneur4bit is
Port(
ri : IN std_logic ;
A, B : IN
std_logic_vector(3 downto 0) ;
s : OUT
std_logic_vector(3 downto 0) ;
r : OUT std_logic
);
end Additionneur4bit;
architecture Structure of
Additionneur4bit is
-- declaration du composant
additionneur1bit
component additionneur1bit is
port( ri : IN std_logic ;
a,b :IN std_logic ;
So,r : OUT std_logic ) ;
end component additionneur1bit ;
-- declaration des signaux internes
pour le report des retenues ci
signal C : std_logic_vector( 3
downto 0 );
Begin
C(0) <= ri ;
-- Création des 4 aditionneurs
A : for i IN 0 to 3 GENERATE
LSB : if i = 0 GENERATE
b0 : additionneur1bit port map
(C(i) , A(i) , B(i) , s(i) , C(i) );
End GENERATE LSB
MSB : if i > 0 GENERATE
b3 : additionneur1bit port map
(C(i-1) , A(i) , B(i) , s(i) , C(i) );
End GENERATE MSB;
End GENERATE A;
r <= C(3) ;
end Structure;
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY additionneur1bit IS
PORT ( ri, a, b : IN
STD_LOGIC;
So, r : OUT STD_LOGIC);
END additionneur1bit;
ARCHITECTURE Archi OF
additionneur1bit IS
BEGIN
r <= (a AND b) OR (ri AND (a
XOR b));
So <= a XOR b XOR ri;
END Archi;
Concepts de base du VHDL : Instructions
séquentielles
Nom du cours
Prof. Mamadou Lamine NDIAYE
VHDL : Les concepts de base
Logique séquentielle : Mot clè PROCESS
! Les instructions séquentielles du VHDL sont très évoluées à
l’image des langages de haut niveau.
o On les utilise souvent dans un process, les instructions s’exécutent suivant l’ordre
d’écriture.
o Plusieurs process peuvent s’exécuter en parallèle dans une même architecture;
o le déroulement est SEQUENTIELLE (ordre d’écriture des instructions).
o Un process peut contenir des parties combinatoires, des parties séquentielles.
o Un process est activé lors d’un changement d’état d’un des signaux de la liste de
sensibilité
o Les instructions utilisables dans un PROCESS sont SPECIFIQUE ( pas de when/
else par exemple)
o Les signaux sont mis à jour uniquement à la fin du process
SYNTHAXE
Process
begin
q <= d;
wait until Reloj = 1 ;
end process;
Process
begin
c <= a and b;
wait on a, b;
end process;
Process(a,b)
begin
c <= a and b;
end process;
Les Process
Les instructions séquentielles du VHDL sont très évoluées à
l’image des langages de haut niveau :
o Utilisation d’un process ou un sous-programme
o Déroulement séquentiel (ordre d’écriture des instructions)
o Possibilité d’exécution de plusieurs Process en parallèle
o Un Process peut contenir des parties combinatoires et des parties séquentielles
o Un Process est activé lors d’un changement d’état d’un des signaux de la liste de
sensibilité
o Les instructions utilisables dans un Process sont spécifiques
o Les signaux sont mis à jour uniquement à la fin du Process
Les Process
Les règles de fonctionnement :
o Boucle infinie
o Synchronisation par des points d’arrêt
Process (S1, S2)
Begin
SYNTHAXE
…............
end process;
Process
Begin
…............
Wait …....;
…............
end process;
Les Process
L’instruction séquentielle wait peut prendre plusieurs formes :
o wait on signal
o wait for temps
SYNTHAXE
o wait until conditions
o wait on signal until conditions for temps
-- liste de
sensibilité
wait on S1, S2;
-- délai
wait for 100ns;
-- conditions
wait until ck = ‘1’;
-- conditions
wait on S1, S2 until
ck = ‘1’;
-- forme générale
wait on S1, S2 until ck = ‘1’ for
100ns;
Instructions de contrôle
● Instruction IF
if
elsif
else
end if;
o If … then …; [ elsif …then] ; [ else …] ; end if;
o Toute instruction if doit se terminer par un end if;
expression1 then action1 ;
expression2 then action2 ;
….......
action3 ;
Instructions de contrôle
●Instruction CASE…IS
CASE
WHEN
WHEN
selecteur IS
condition1
=> instructions 1;
condition2
=> instructions 2;
…............
WHEN OTHERS
=>
instructions N
END CASE;
o Permet de sélectionner une séquence d’instructions en fonction de la valeur d’une
expression.
o Tous les cas doivent être traités, on utilisera ainsi la directive when others pour lister
les différents cas possibles.
o Souvent utilisée pour la description de machines d’état ou toute fonction de type
table de vérité.
Instructions de contrôle
●Instructions de boucle
o Mot clé LOOP.
o Possibilité d’utiliser Next
o Possibilité d’utiliser Exit
-- boucle for
-- la variable de boucle est i de 1 à 100
etiquette: FOR i IN 1 TO 100 LOOP
-- instruction répétitive
…..........
END LOOP etiquette;
-- boucle while
etiquette: WHILE conditions LOOP – boucle tant que
-- instruction répétitive
…..........
END LOOP etiquette;
-- boocle générale
etiquette: LOOP – boucle infinie
-- instruction répétitive
…..........
END LOOP etiquette;
Synthèse des bascules
● Bascule RS
Enseignes et afficheurs à LED ! Synthèse de circuits
combinatoires
Synthèse des bascules
● Bascule RS
o Activé sur front montant de l'horloge (Ck)
ARCHITECTURE Archit OF BasculeRS IS
SIGNAL Sr, Ss, Qa, Qb: STD_LOGIC ;
BEGIN
PROCESS(Ck, R, S) -- liste de sensibilité
BEGIN
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY BasculeRS IS
PORT (Ck, R, S : IN STD_LOGIC;
Q : OUT STD_LOGIC);
END BasculeRS;
-- validation du front montant
IF Ck'event and Ck = '1' then
-- rising_edge(Ck) front montant
-- falling_edge(Ck) descendant
Sr <= R;
Ss <= S;
Qa <= NOT ( Sr OR Qb);
Qb <= NOT ( Ss OR Qa);
END IF;
END PROCESS;
Q <= Qa;
END Archit;
Synthèse des bascules
● Bascule D
o La sortie Q prend l'état de l'entrée D sur front montant de l'horloge (Ck)
Synthèse des bascules
● Bascule D
o La sortie Q prend l'état de l'entrée D sur front montant de l'horloge (Ck)
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY BasculeD IS
PORT (Ck, D : IN
STD_LOGIC;
Q : OUT STD_LOGIC);
END BasculeD;
ARCHITECTURE Structural OF BasculeD IS
SIGNAL Qa: STD_LOGIC ;
BEGIN
PROCESS(Ck, D) -- liste de sensibilité
BEGIN
-- validation du front montant
IF RISING_EDGE(Ck) then
Qa <= D;
ELSE Qa <=Qa ;
END IF;
END PROCESS;
Q <= Qa;
END Structural;
Synthèse des bascules
● Bascule D avec entrées de forçage SET et RESET
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY BasculeD IS
PORT (Ck, D, R, S : IN STD_LOGIC;
Q : OUT STD_LOGIC);
END BasculeD;
ARCHITECTURE Structural OF BasculeD IS
SIGNAL Qa: STD_LOGIC ;
BEGIN
PROCESS(Ck, D, R, S) -- liste de sensibilité
BEGIN
IF R = ‘1’ THEN
Qa <= ‘0’;
ELSIF S = ‘1’ THEN Qa <= ‘1’;
ELSIF Ck’EVENT AND Ck = '1’ THEN
Qa <= D;
-- validation du front montant
ELSE Qa <=Qa ;
END IF;
END PROCESS;
Q <= Qa;
END Structural;
Synthèse des bascules
● Bascule JK
J
K
Q
0
0
1
1
0
1
0
1
Inchangée
0
1
Opposée
Synthèse des bascules
● Bascule JK
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY BasculeJK IS
Port ( Ck, J, K : in std_logic;
Q : out std_logic);
End BasculeJK;
ARCHITECTURE Structural OF BasculeJK IS
SIGNAL Qa : std_logic;
BEGIN
PROCESS (Ck, J, K)
BEGIN
IF Ck'event and Ck='1’
then
IF J=‘0’ and K='0’
then Qa <= Qa;
ELSIF J=‘0’ and K=’1'
then Qa <= ‘0’ ;
ELSIF J=‘1’ and K=’0'
then Qa <= ‘1’ ;
ELSE
Qa <= (NOT) Qa ;
END IF;
END IF;
END PROCESS;
Q <= Qa;
END Strctural;
Synthèse des compteurs
● Compteur modulo 10
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY Compteur IS
PORT (Ck, R : IN
STD_LOGIC;
Q: OUT STD_LOGIC_VECTOR (3 downto
0));
END Compteur;
ARCHITECTURE Structural OF Compteur IS
SIGNAL Qa: STD_LOGIC_VECTOR (3 downto 0);
BEGIN
PROCESS(Ck, R) -- liste de sensibilité
BEGIN
IF R = ‘0’ then
Qa <= "0000";
-- validation du front montant
ELSIF Ck'event and Ck = '1' then
Qa <= STD_LOGIC_VECTOR (UNSIGNED(Qa)+ 1);
IF Qa=”1001" THEN Qa <= "0000";
END IF;
END IF;
END PROCESS;
Q <= Qa;
END Structural;
Synthèse des compteurs
● Compteur modulo 10
● Fréquence du comptage
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY Compteur IS
PORT (Ck, R : IN
STD_LOGIC;
Qh: OUT STD_LOGIC_VECTOR (23 downto 0);
Q: OUT STD_LOGIC_VECTOR (3 downto 0));
END Compteur;
ARCHITECTURE Structural OF Compteur IS
SIGNAL Qa: STD_LOGIC_VECTOR (3 downto 0) ;
SIGNAL Qha: STD_LOGIC_VECTOR (23 downto 0) ;
BEGIN
PROCESS(Ck, R) -- liste de sensibilité
BEGIN
IF R = ‘1’ THEN Qa <= "0000";
ELSIF (Ck'event and Ck = '1’) THEN
Qha <= STD_LOGIC_VECTOR (UNSIGNED(Qha)+ 1);
IF (Qha ="100110001001011010000000") THEN
IF Qa=”1010" THEN
Qa <= "0000";
ELSE
Qa <= STD_LOGIC_VECTOR (UNSIGNED( Qa) + 1);
END IF;
ELSE
Qa <= Qa;
END IF;
END IF;
END PROCESS;
Q <= Qa;
END Structural;
Synthèse des compteurs
● Compteur modulo N
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY Compteur IS
PORT (Ck, R : IN
STD_LOGIC;
Q0: OUT STD_LOGIC_VECTOR (3 downto 0);
Q1: OUT STD_LOGIC_VECTOR (3 downto 0);
Q2: OUT STD_LOGIC_VECTOR (3 downto 0));
END Compteur;
ARCHITECTURE Structural OF Compteur IS
SIGNAL Qa0, Qa1, Qa2: STD_LOGIC_VECTOR (3 downto
0) ;
BEGIN
PROCESS(Ck, R) -- liste de sensibilité
VARIABLE Qh : INTEGER RANGE 0 TO 50000000;
BEGIN
IF R = ‘1’ THEN
Qa0 <= "0000"; Qa1 <= "0000"; Qa2 <= "0000";
ELSIF (Ck'event and Ck = '1’) THEN
Qh := Qh + 1;
IF (Qh = 50000000) THEN
Qa0 <= Qa0 + 1;
IF Qa0 =“1001” then Qa1 <= Qa1 + 1;
Qa0 <=
“0000“;
IF Qa1 =“1001” then Qa2 <= Qa2 + 1;
Qa1 <= “0000“;
END IF;
END IF;
ELSE
Qa0 <= Qa0; Qa1 <= Qa1; Qa2 <= Qa2;
END IF;
END IF;
END PROCESS;
Q0 <= Qa0; Q1 <= Qa1; Q2 <= Qa2;
END Structural;
Synthèse des regitres
● Registre à décalage série parallèle
Synthèse des regitres
● Registre à décalage série parallèle
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY BasculeD IS
PORT (Ck, D : IN STD_LOGIC;
Q : OUT STD_LOGIC);
END BasculeD;
ARCHITECTURE Structural OF BasculeD IS
SIGNAL Qa: STD_LOGIC ;
BEGIN
PROCESS(Ck, D) -- liste de sensibilité
BEGIN
-- validation du front montant
IF Ck'event and Ck = '1' then
Qa <= D;
ELSE Qa <=Qa ;
END IF;
END PROCESS;
Q <= Qa;
END Structural;
Synthèse des regitres
● Registre à décalage série parallèle
ARCHITECTURE Structural OF RegistreSP IS
COMPONENT BasculeD
PORT (Ck, D : IN
Library ieee;
Use ieee.std_logic_1164.all;
ENTITY RegistreSP IS
PORT (Ck, ES : IN
STD_LOGIC;
SS : OUT
STD_LOGIC;
SP : OUT
STD_LOGIC_VECTOR (0 TO 3));
END RegistreSP;
Q : OUT
STD_LOGIC;
STD_LOGIC);
END COMPONENT ;
SIGNAL Qa, Qb, Qc, Qd: STD_LOGIC ;
BEGIN
U1:
BasculeD PORT MAP (Ck, ES, Qa);
U2:
BasculeD PORT MAP (Ck, Qa, Qb);
U3:
BasculeD PORT MAP (Ck, Qb, Qc);
U4:
BasculeD PORT MAP (Ck, Qc, Qd);
SP(0) <= Qa; SP(1) <= Qb; SP(2) <= Qc;
SP(3) <= Qd;
END Structural;
Application au contrôle d’une matrice à LED
Nom du cours
Prof. Mamadou Lamine NDIAYE
Matrice à LED RGB 16X32 de Adafruit
Matrice 16X32(Adafruit)
● 512 Led RGB rangées sous forme de matrice 16X32 (existe aussi en 32X32)
● Nécessite 12 pins (6 données et 6 contrôle) et une alimentation de 5V (2A
minimum suggérée)
● Contrôle par Arduino et carte FPGA
● Adafruit à developper des bibliothèses pour Aduino
Cette version de la matrice RGB 16x32 à
des LEDs placées tous les 6mm. La matrice
est composée de 512 LEDs RGB brillantes
arrangées en grille de 16x32 à l'avant.
L'arrière est équipé de deux connecteurs
IDC (un pour le signal d'entrée (input) et un
pour la sortie (output)). En théorie, ces
panneaux sont chainables et 12 latchs 16bit permettent de piloter l'afficheur avec un
taux de rafraîchissement de 1:8.
La matrice est divisée en 8 sections. La
première section est constitué de la 1ère
ligne et de la 9ième ligne, la 2ième section de
la 2ième ligne et de la 10ième , …..la dernière
section de la 8ième ligne et de la 16ième.
Ces af ficheur s sont techniquement
'chaînable' - connectez la sortie de l'un à
l'entrée de l'autre. Ces panneaux
nécessitent une bonne alimentation 5V.
Chaque panneau peut consommer jusque 2
Ampères. Nous vous recommandons une
alimentation (minimum) 5V intégrant un
régulateur.
Matrice à LED RGB 16X32 de Adafruit
Alimentation
● Existe en 2 types de connecteur pour l’alimentation
Input pins
Output pins
Input pins
Matrice à LED RGB 16X32 de Adafruit
Connecteur IDC
● Existe 2 connecteurs (input et output)
D pin ou Masse
Input pins
Matrice à LED RGB 16X32 de Adafruit
Spécifications des pins IDC
● Les pins R1, G1 and B1 délivrent les données de couleurs pour
la première moitiée des leds (1-8x32). Si nous utilisons Arduino
pour la commande: les connecter sur les pins 2, 3, 4 (UNO) ou
24,25,26 (MEGA)
●Les pins R2, G2 and B2 délivrent les données de couleurs pour
la deuxième moitiée des leds (9-16x32). Si nous utilisons Arnuino
pour la commande: les connecter sur les pins 5, 6, 7 (UNO) ou
27,28,29 (MEGA)
● Les pins A, B, C permettent de sélectionner les 8 sections de
leds à commander. Si vous utiliser un 16X32 D doit être à la
masse. A, B, C seront connectés sur les pins A0, A1 et A2 et D à
A3 ou à la masse
●LAT (latch) signale la fin de la ligne des données, il sera
connecté au pin A3
●CLK (clock) rythme le contrôle de chaque bit de données. il sera
connecté au pin 8 (UNO) ou 11(MEGA)
●OE (output enable) permet de commuter les LEDs pour aller
d’une ligne au suivant. il sera connecté au pin 9.
D pin ou Masse
Matrice à LED RGB 16X32 de Adafruit
Assignation des pins IDC pour Ardiono
IDC pin
R1
G1
UNO
MEGA
2 3
24 25
B1
R2
G2
B2
A
B
C
LAT
CLK
OE
4
26
5
27
6
28
7
29
A0
A0
A1
A1
A2
A2
A3
A3
8
11
9
9
D pin ou Masse
Matrice à LED RGB 16X32 de Adafruit
Library Arduino
● Deux Librairies à télécharger :
o RGB Matrix Panel Library: https://github.com/adafruit/RGB-matrix-Panel
o Adafruit GFX Library : https://github.com/adafruit/Adafruit-GFX-Library
●Des exemples de codes disponibles en téléchargement :
https://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries
● La librairie offre plusieurs fonctions permettant de manipuler plus simplement la matrice.
Présentation de la matrice à LED
Présentation de la matrice à LED
Matrice 32x32
● 1024 Led RGB rangées sous forme de matrice 32X32
● Résolution : 32 x 32 pixels, 3 couleurs par pixel (rouge, vert, bleu)
● Distance entre deux pixels : 6mm
● Longueur d’onde :
o
o
o
Rouge : 625±5nm
Vert
: 520±5nm
Bleu
: 470±5nm
● Tension d’alimentation : 5V DC (régulé)
● Consommation max : 4A
● Dimensions: 190.5mm x 190.5mm x 14mm
● Nécessite 13 pins (6 données et 7 contrôle) et une alimentation de 5V (4A
minimum suggérée)
● Contrôle par Microcontrôleur et carte FPGA
Présentation de la matrice à LED
Matrice 32X32(fonctionnement)
32x32
Présentation de la matrice à LED
Matrice 32x32 (fonctionnement)
16x32
32x32
16x32
Présentation de la matrice à LED
o
o
o
o
o
Matrice 32x32 (Chargement des données)
Trois registres à décalages 32 bits
3 registres pour chaque moitié
Synchronisés par la même horloge
Chargement en série des données de couleurs
32 bits par couleur (Rouge, Vert, Bleu)
Présentation de la matrice à LED
Matrice 32x32 (Registre de chargement)
Présentation de la matrice à LED
Matrice 32x32 (Seléction des lignes )
Présentation de la matrice à LED
Matrice 32x32 (Sélection des lignes )
D
C
B
A
Ligne
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0 et 16
1 et 17
2 et 18
3 et 19
4 et 20
5 et 21
6 et 22
7 et 23
8 et 24
9 et 25
10 et 26
11 et 27
12 et 28
13 et 29
14 et 30
15 et 31
Contrôle de la Matrice à LED RGB 32x32
Spécifications des pins IDC
● Les pins R1, G1 et B1 délivrent les données de couleurs pour la
première moitiée des leds (1-16x32).
● Les pins R2, G2 et B2 délivrent les données de couleurs pour la
deuxième moitiée des leds (17-32x32).
● Les pins A, B, C, D permettent de sélectionner les 16 sections
de leds à commander.
● CLK (clock) rythme le contrôle de chaque bit de données.
● LAT (latch) permet le transfère des données à la fin du
chargement.
● OE (output enable) permet d’activer ou de verrouiller l’affichage.
Contrôle de la Matrice à LED RGB 32x32
Assignation des pins IDC pour test sur DE0 ALTERA
Matrix Pin FPGA Pin Pin Name
R1
G1
B1
R2
G2
B2
A
B
C
D
CLK
OE
LAT
PIN_E7
PIN_E10
PIN_E8
PIN_F9
PIN_D9
PIN_C9
PIN_E11
PIN_D11
PIN_C11
PIN_B11
PIN_A12
PIN_D12
PIN_B12
GPIO 18
GPIO 27
GPIO 20
GPIO 22
GPIO 24
GPIO 25
GPIO 26
GPIO 31
GPIO 28
GPIO 29
GPIO 30
GPIO 32
GPIO 33
Contrôle de la Matrice à LED RGB 32x32
Assignation des pins IDC pour test sur DE0 ALTERA
Matrix Pin FPGA Pin Pin Name
R1
G1
B1
R2
G2
B2
A
B
C
D
CLK
OE
LAT
PIN_E7
PIN_E10
PIN_E8
PIN_F9
PIN_D9
PIN_C9
PIN_E11
PIN_D11
PIN_C11
PIN_B11
PIN_A12
PIN_D12
PIN_B12
GPIO 18
GPIO 27
GPIO 20
GPIO 22
GPIO 24
GPIO 25
GPIO 26
GPIO 31
GPIO 28
GPIO 29
GPIO 30
GPIO 32
GPIO 33
Contrôle de la Matrice à LED RGB 32x32
Structure du projet
● Matrix32x32rgb
ohorloge
oscan_matrice
Matrix32x32rgb.vhd
Horloge.vhd
scan_matrice.vhd
Contrôle de la Matrice à LED RGB 32x32
o Entité de Matrix32x32rgb.vhd.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
entity Matrix32x32rgb is
port (
horloge_in : in std_logic;
rst_n
: in std_logic;
r1
: out std_logic;
g1
: out std_logic;
b1
: out std_logic;
r2
: out std_logic;
g2
: out std_logic;
b2
: out std_logic;
ck_ser
: out std_logic;
-- clk
ck_par
: out std_logic;
-- lat
oe_n
: out std_logic;
-- oe
ligne_sel : out std_logic_vector(3
downto 0) );
end Matrix32x32rgb ;
Contrôle de la Matrice à LED RGB 32x32
o Architecture de
Matrix32x32rgb.vhd.
Architecture Behavioral of
Matrix32x32rgb is
signal rst_p
: std_logic;
signal horloge_bit : std_logic;
Begin
-- Le bouton reset est activé niveau bas
rst_p <= not rst_n;
-- Horloge (diviseur de frequence)
MON_HORLOGE : entity work.horloge
port map (
rst
=>
rst_p,
clk_in
=>
horloge_in,
clk_out =>
horloge_bit
);
-- Raffraichssement de la matrice
SCAN_MATRICE : entity
work.scan_matrice
port map (
rst
=> rst_p,
clk_in
=> horloge_bit,
matrice_r1
=> r1,
matrice_g1
=> g1,
matrice_b1
=> b1,
matrice_r2
=> r2,
matrice_g2
=> g2,
matrice_b2
=> b2,
matrice_ck_ser => ck_ser,
matrice_ck_par => ck_par,
matrice_oe_n
=> oe_n,
matrice_abcd => ligne_sel
);
end Behavioral ;
Contrôle de la Matrice à LED RGB 32x32
o Entité de horloge.vhd.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity horloge is
port (
clk_in
: in std_logic;
clk_out
: out std_logic;
rst : in std_logic
);
end entity horloge;
architecture bhv of horloge is
constant clk_in_freq
: integer := 50000000;
constant clk_out_freq
: integer := 10000000;
constant OUT_PERIOD_COUNT : integer :=
(clk_in_freq / clk_out_freq)-1;
begin
Contrôle de la Matrice à LED RGB 32x32
o Architecture de horloge.vhd
Process (clk_in , rst)
variable count : integer range 0 to OUT_PERIOD_COUNT;
begin
if( rst = '1') then
count := 0;
clk_out <= '0';
elsif (rising_edge( clk_in )) then
if( count = OUT_PERIOD_COUNT) then count := 0;
else count := count + 1;
end if;
if( count > OUT_PERIOD_COUNT / 2) then clk_out <= '1';
else clk_out <= '0';
end if;
end if;
end process;
end bhv;
Contrôle de la Matrice à LED RGB 32x32
o Entité de scan_matrice.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity scan_matrice is
port (
clk_in
rst
matrice_r1
matrice_g1
matrice_b1
matrice_r2
matrice_g2
matrice_b2
matrice_ck_ser
matrice_ck_par
matrice_oe_n
matrice_abcd
);
end entity scan_matrice;
: In std_logic;
: In std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic_vector (3 downto 0)
Contrôle de la Matrice à LED RGB 32x32
o Entité de scan_matrice.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity scan_matrice is
port (
clk_in
rst
matrice_r1
matrice_g1
matrice_b1
matrice_r2
matrice_g2
matrice_b2
matrice_ck_ser
matrice_ck_par
matrice_oe_n
matrice_abcd
);
end entity scan_matrice;
: In std_logic;
: In std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic_vector (3 downto 0)
Contrôle de la Matrice à LED RGB 32x32
o Architecture de scan_matrice.vhd
Architecture archi of scan_matrice is
signal ck_ser : std_logic;
signal ck_par : std_logic;
signal oe
: std_logic;
signal count : std_logic_vector (9 downto 0);
signal ligne : std_logic_vector (3 downto 0);
Begin
Process (clk_in, rst, count, ligne)
begin
if( rst = '1') then
count <= (others => '0');
ligne <= (others => '0');
Contrôle de la Matrice à LED RGB 32x32
o Architecture de scan_matrice.vhd (suite)
elsif ( rising_edge( clk_in )) then
if( count = "1111111111") then
count <= (others => '0');
if ( ligne = "1111") then
ligne <= (others => '0');
else
ligne <= std_logic_vector( unsigned ( ligne ) + 1 );
end if;
else
count <= std_logic_vector( unsigned ( count ) + 1 );
end if;
end if;
if (unsigned (count) < 32) then ck_ser <= '1'; else
if (unsigned (count) = 32) then ck_par <= '1'; else
if (unsigned (count) > 32) then oe
<= '1'; else
end if;
end process;
end archi;
ck_ser <= '0'; end if;
ck_par <= '0'; end if;
oe
<= '0';
Contrôle de la Matrice à LED RGB 32x32
o Architecture de scan_matrice.vhd suite
Réalisation de motifs fixes avec AND
process( clk_in )
begin
-- Chargement des données de couleurs
matrice_r1
<= count (0) and ligne (0) and
matrice_g1
<= count (1) and ligne (1) and
matrice_b1
<= count (2) and ligne (2) and
matrice_r2
<= count (0) and ligne (0) and
matrice_g2
<= count (1) and ligne (1) and
matrice_b2
<= count (2) and ligne (2) and
-- Génération des signaux de contrôle
matrice_ck_ser
matrice_ck_par
matrice_oe_n
matrice_abcd
end process;
<=
<=
<=
<=
ck_ser and clk_in;
ck_par and clk_in;
not oe;
ligne;
(not
(not
(not
(not
(not
(not
oe);
oe);
oe);
oe);
oe);
oe);
Contrôle de la Matrice à LED RGB 32X32 de
Adafruit
Contrôle de la Matrice à LED RGB 32X32 de
Adafruit
Réalisation de motifs fixes avec XOR
process( clk_in )
begin
-- chargement des données de couleurs
matrice_r1
<= ( count (0) xor ligne (0)) and (not oe);
matrice_g1
<= ( count (1) xor ligne (1)) and (not oe);
matrice_b1
<= ( count (2) xor ligne (2)) and (not oe);
matrice_r2
<= ( count (0) xor ligne (0)) and (not oe);
matrice_g2
<= ( count (1) xor ligne (1)) and (not oe);
matrice_b2
<= ( count (2) xor ligne (2)) and (not oe);
-- Génération des signaux de contrôle
matrice_ck_ser
<=
ck_ser and clk_in;
matrice_ck_par
<=
ck_par and clk_in;
matrice_oe_n <=
not oe;
matrice_abcd
<=
ligne;
end process;
Simulation des signaux de Contrôle
Simulation des signaux de Contrôle
Test sur la matrice RGB 32x32
Contrôle de la Matrice à LED RGB 32x32
Ajout d’une mémoire
● Matrix32x32rgb
ohorloge
oscan_matrice
omemoire_vive
Matrix32x32rgb.vhd
horloge.vhd
scan_matrice.vhd
memoire_vive.vhd
Contrôle de la Matrice à LED RGB 32x32
o Architecture de Matrix32x32rgb.vhd.
Architecture Behavioral of Matrix32x32rgb
is
signal
signal
signal
0);
signal
0);
rst_p
: std_logic;
horloge_bit : std_logic;
adresse : std_logic_vector(8 downto
donnee : std_logic_vector (5 downto
begin
-- Le bouton reset est activé niveau bas
rst_p <= not rst_n;
-- Memoire
MEMOIRE_VIVE : entity work.memoire
port map (
rst
=> rst_p,
clk_rd
=> horloge_bit,
addr
=> adresse,
output => donnee
);
-- Raffraichssement de la matrice
SCAN_MATRICE : entity
work.scan_matrice
port map (
rst
=> rst_p,
clk_in
=>
horloge_bit,
matrice_r1
=> r1,
matrice_g1
=> g1,
matrice_b1
=> b1,
matrice_r2
=> r2,
matrice_g2
=> g2,
matrice_b2
=> b2,
matrice_ck_ser => ck_ser,
matrice_ck_par => ck_par,
matrice_oe_n
=> oe_n,
matrice_abcd => ligne_sel ,
addr
=> adresse,
data
=> donnee
);
end Behavioral ;
Contrôle de la Matrice à LED RGB 32x32
o Entité de scan_matrice.vhd
entity scan_matrice is
port (
clk_in
rst
matrice_r1
matrice_g1
matrice_b1
matrice_r2
matrice_g2
matrice_b2
matrice_ck_ser
matrice_ck_par
matrice_oe_n
matrice_abcd
addr
data
);
end entity scan_matrice;
: In std_logic;
: In std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic_vector (3 downto 0) ;
: out std_logic_vector (8 downto 0);
: in std_logic_vector (5 downto 0)
Contrôle de la Matrice à LED RGB 32x32
o Architecture de scan_matrice.vhd
Architecture archi of scan_matrice is
signal ck_ser : std_logic;
signal ck_par : std_logic;
signal oe : std_logic;
signal count : std_logic_vector (10 downto 0);
signal ligne : std_logic_vector (3 downto 0);
Begin
Process (clk_in, rst, count, ligne)
begin
if( rst = '1') then
count <= (others => '0');
ligne <= (others => '0');
Contrôle de la Matrice à LED RGB 32X32
o Architecture de scan_matrice.vhd (suite)
elsif ( rising_edge( clk_in )) then
if( count = "11111111111") then
count <= (others => '0');
if ( ligne = "1111") then
ligne <= (others => '0');
else
ligne <= std_logic_vector( unsigned ( ligne ) + 1 );
end if;
else
count <= std_logic_vector( unsigned ( count ) + 1 );
end if;
end if;
if (unsigned (count) < 32) then ck_ser
if (unsigned (count) = 32) then ck_par
if (unsigned (count) > 32) then oe
end process;
end archi;
<= '1'; else ck_ser <= '0'; end if;
<= '1'; else ck_par <= '0'; end if;
<= '1'; else oe
<= '0'; end if;
Contrôle de la Matrice à LED RGB 32X32
Chargement des données et génération des signaux de contrôle
process( clk_in )
begin
-- Gestion des adresses
addr(0) <= count(0);
addr(1) <= count(1);
addr(2) <= count(2);
addr(3) <= count(3);
addr(4) <= count(4);
addr(5) <= ligne(0);
addr(6) <= ligne(1);
addr(7) <= ligne(2);
addr(8) <= ligne(3);
-- chargement des données de couleurs
matrice_r1
matrice_g1
matrice_b1
matrice_r2
matrice_g2
matrice_b2
<= data(0);
<= data(1);
<= data(2);
<= data(3);
<= data(4);
<= data(5);
-- Génération des signaux de contrôle
matrice_ck_ser <= ck_ser and clk_in;
matrice_ck_par <= ck_par and clk_in;
matrice_oe_n <= not oe;
matrice_abcd <=
ligne;
end process;
Contrôle de la Matrice à LED RGB 32x32
o Entité de memoire.vhd
entity memoire is
port (
rst
clk_rd
addr
output
);
end entity memoire ;
: In std_logic;
: In std_logic;
: in std_logic_vector (8 downto 0);
: out std_logic_vector (5 downto 0)
Contrôle de la Matrice à LED RGB 32x32
o Architecture de memoire.vhd
architecture archi1 of memoire is
type ram is array (511 downto 0) of std_logic_vector (5 downto 0);
signal mem : ram;
begin
process ( clk_rd, rst )
begin
if ( rst = '1') then
-- initialisation des données de la memoire
elsif ( falling_edge ( clk_rd )) then
-- chargement des données de la memoire
end if;
end process;
process( clk_rd )
begin
if( falling_edge( clk_rd )) then
output <= mem (conv_integer ( addr ));
end if;
end process;
end archi1;
Matrice à LED RGB 16X32 de Adafruit
Exemples : Testcolors
#include <Adafruit_GFX.h>
// Core graphics library
#include <RGBmatrixPanel.h>
// Hardware-specific library
#define CLK 8
// si vous utilisez UNO
#define LAT A3
#define OE 9
#define A A0
#define B A1
#define C A2
RGBmatrixPanel matrix(A, B, C,
CLK, LAT, OE, false);
void loop() {
// Ne fait rien
}
void setup() {
matrix.begin();
uint8_t r=0, g=0, b=0;
// Déssine la première moitié
for (uint8_t x=0; x < 32; x++) {
for (uint8_t y=0; y < 8; y++) {
matrix.drawPixel(x, y,
matrix.Color333(r, g, b));
r++;
if (r == 8) {
r = 0;
g++;
if (g == 8) {
g = 0;
b++;
}
}
}
}
// Déssine la deuxième moitié
for (uint8_t x=0; x < 32; x++) {
for (uint8_t y=8; y < 16; y++) {
matrix.drawPixel(x, y,
matrix.Color333(r, g, b));
r++;
if (r == 8) {
r = 0;
g++;
if (g == 8) {
g = 0;
b++;
}
}
}
}
}
2ième Partie : ARCHITECTURE DES
CALCULATEURS
100
Architecture des calculateurs
1.
2.
3.
4.
5.
Architecture de base
Les mémoires
Le microprocesseur
Les échanges de données
Exemple du microcontrôleur 68HC11
101
Architecture des calculateurs
1. Architecture de Von Neumann
Architecture de base des systèmes à microprocesseurs
!
Les bus :
• Données: bidirectionnel pour le transfert des informations entre le
microprocesseur et son environnement
• Adresses: unidirectionnel qui permet la sélection des informations à traiter
dans un espace mémoire (ou espace adressable) qui peut avoir 2n
emplacements et
• Commande: constitué par quelques conducteurs qui assurent la synchronisation
des flux d'informations sur les bus des données et des adresses
102
Architecture des calculateurs
2. Architecture de Harvard
Architecture de base des systèmes à
microprocesseurs
Les bus :
L’architecture Harvard est souvent utilisée dans :
• les processeurs numériques de signal (DSP) ;
• les microcontrôleurs, notamment les PIC de Microchip et les AVR d'Atmel.
103
Architecture des calculateurs
3. Architecture de Von Neumann vs Harvard
104
Architecture des calculateurs
1. Architecture de Von Neumann
Architecture de base des systèmes à microprocesseurs
Mémoire de
programme
(ROM)
Mémoire de
donnée
(RAM)
Unité de commande
microprocesseur
Unité Arithmétique et Logique
Horloge
Coupleurs d’E/
S
Etc..
Périphériques
105
Architecture des calculateurs
1. Architecture de base : Von Neumann
Architecture de base des systèmes à microprocesseurs
Unité Centrale
• Composée essentiellement du microprocesseur
• Interpréter et exécuter les instructions d’un programme
• Lire et écrire à la mémoire
•
Communiquer avec les entrées sorties.
Mémoire Principale
• Contenir les instructions du programme et les données associées
•
Mémoires ROM et RAM
Entrées sorties
• Assurer la communication entre le microprocesseur et les périphériques
Bus
• Ensemble de fils qui assurent la transmission des informations.
• Bus : données, adresse et commande
106
Architecture des calculateurs
1. Architecture de base : Décodage d’adresse
La multiplicité des périphériques autour du microprocesseur oblige la présence d’un
décodeur d’adresse pour éviter les conflits (bus, sélection, ).
!
Chaque périphérique est associé à une zone d’adresse; une fonction de décodage
d’adresse est nécessaire pour la sélection de chaque composants.
107
Architecture des calculateurs
1. Architecture de base : Décodage d’adresse
La multiplicité des périphériques autour du microprocesseur oblige la présence d’un
décodeur d’adresse pour éviter les conflits (bus, sélection, ).
Exemple de cartographie mémoire
Espace adressable
du µP (65536@)
$0003
$0000
Périphérique
1
Espace
Libre
$2000
$FFFF
RAM
ROM
$4FFF
Espace
Libre
$3FFF
108
Architecture des calculateurs
2. Les mémoires
Avec une adresse de n bits (nombre de fil du bus d’adresse) il est possible de référencer
2n cases mémoire. Chaque case est remplie par un mot de longueur m qui est toujours
une puissance de 2.
Le nombre de fils de données définit la taille des données que l’on peut sauvegarder
dans chaque case mémoire.
Caractéristique d’une mémoire
!
Capacité: Quantité de données max de la mémoire
Format des données: nombre de bits mémorisable par case mémoire
Temps d’accès : temps entre le lancement et la disponible sur bus de données.
Temps de cycle : intervalle minimum qui doit séparer deux opérations successives.
Débit : nombre maximum d'informations lues ou écrites par seconde.
Volatilité : permanence des informations dans la mémoire.
109
Architecture des calculateurs
2. Les mémoires : différents types
! Mémoires Vives : RAM
o Volatile
o Stockage temporaire des données
o Temps de cycle court
! Mémoires mortes: ROM
o
o
o
o
Non volatile
Stockage permanente des données
Mémoire à lecture seule.
Type : ROM, PROM, EPROM, EEPROM FLASH EPROM
110
Architecture des calculateurs
2. Les mémoires : Mémoire cache
Une mémoire cache est motivée par l’écart de performance entre la vitesse du microprocesseur et
celle de la mémoire.
!Problèmes d’accès à la mémoire
o décodage des adresses et la lecture/écriture d’une donnée sont des étapes
difficiles à accélérer
o Le temps de cycle processeur décroît plus vite que le temps d’accès mémoire
o La mémoire n’est pas en mesure de délivrer des informations aussi rapidement
que le processeur est capable de les traiter
!Solutions : mémoire cache
o disposer une mémoire très rapide entre le microprocesseur et la mémoire
o SRAM de taille réduite (à cause du coût)
o stocker les informations les plus récentes ou les plus souvent utilisées par le
microprocesseur
111
Architecture des calculateurs
2. Les mémoires : Mémoire cache
le microprocesseur n’a pas conscience de sa présence et lui envoie toutes ses requêtes comme s’il
agissait de la mémoire principale
!
112
Architecture des calculateurs
2. Les mémoires : Hiérarchie Mémoire
Les mémoires de grande capacité sont souvent très lentes et les mémoires rapides sont
très chères. Le temps d’accès conditionne dans une large mesure les performances.
!
Les registres sont interne au processeur et servent au stockage intermédiaires.
La mémoire cache destinée à accélérer l’accès à la mémoire centrale.
La mémoire principale est l’organe principal de rangement des informations.
La mémoire d’appui elle joue le même rôle que la mémoire cache.
La mémoire de masse est une mémoire périphérique de grande capacité utilisée pour
le stockage permanent magnétiques (disque dur, ZIP) ou optiques (CDROM, DVDROM).
113
Architecture des calculateurs
3. Microprocesseur
Un microprocesseur est construit autour de
deux éléments principaux : unité de
commande et unité de traitement.
5-1 L’unité de commande assure la
recherche et le décodage de l'instruction.
" Compteur de programme
" Registre d'instruction et le décodeur
d'instruction :
" Bloc logique de commande (ou
séquenceur) :
5-2 L’unité de traitement est le cœur du microprocesseur
"L’Unité Arithmétique et Logique (UAL)
"Le registre d'état est généralement composé de 8 bits à considérer
individuellement.On les appelle indicateur d’état ou flag ou drapeaux.
On peut citer par exemple les indicateurs de :
• retenue (carry : C)
• retenue intermédiaire (Auxiliary-Carry : AC)
• signe (Sign : S)
• débordement (overflow : OV ou V)
• zéro (Z)
• parité (Parity : P)
!
114
Architecture des calculateurs
BUS DE DONNEES
3. Microprocesseur : Architecture
Registre de données
Bus interne de données
R0
Rn
Registre d instruction
Registre auxiliaire
Code Op.
Adresse
ALU
Registre d état
Signaux internes
de commande
Décodeur
R
E
G
I
S
T
R
E
D
I
N
D
E
X
SP
PC
Bus interne d adresses
A
C
C
U
M
U
L
A
T
E
U
R
BLOC LOGIQUE DE COMMANDE (CU)
Horloge
Bus de commande
Registre d adresses
BUS D ADRESSES
115
Architecture des calculateurs
3. Microprocesseur : composants
! ALU : C'est un circuit complexe qui assure les fonctions:
o arithmétiques: addition et soustraction
o logiques: ET, OU, OU exclusif
o comparaison, décalage à droite ou à gauche, incrémentation,
décrémentation, mise à 1 ou à 0 d'un bit, test de bit.
! Bloc logique de de commande: Il organise l'exécution des instructions au
rythme d une horloge. Il élabore tous les signaux de synchronisation
internes ou externes (bus des commandes) du microprocesseur
! Registre et décodeur d instructions: Chacune des instructions à exécuter
est rangée dans le registre instruction dont le format est 24 bits. Le premier
octet ( 8 bits) est toujours le code de l'opération que le décodeur d'instruction
doit identifier.
! Pointeur de pile ou stack pointeur: C'est un registre compteur de 16 bits
qui contient l'adresse du sommet de la pile. La pile est externe au
microprocesseur. C'est une certaine partie de la mémoire RAM. Elle est
utilisée pour sauvegarder les contenus des différents registres, lors de l'appel
à un sous-programme ou lors de la gestion d'une interruption, par exemple.
116
Architecture des calculateurs
3. Microprocesseur : composants
! Registre de données: Ce registre de 8 bits est un registre tampon qui
assure l'interfaçage entre le microprocesseur et son environnement ou
inversement. Il conditionne le bus externe ou le bus interne des données.
! Registre d adresses : Ce registre de 16 bits est un registre tampon qui
assure l' interfaçage entre le microprocesseur et son environnement. Il
conditionne le bus externe des adresses.
! Accumulateur :
Un accumulateur est un registre de travail de 8 ou 16 bits qui sert:
o à stocker une opérande au début d'une opération arithmétique et le
résultat à la fin de l'opération.
o à stocker temporairement des données en provenance de l'extérieur du
microprocesseur avant leur reprise pour être rangées en mémoire.
o à stocker des données provenant de la mémoire ou de l'UAL pour les
présenter vers l'extérieur du microprocesseur.
! Registre d état : Chacun de ces bits est un indicateur dont l'état dépend du
résultat de la dernière opération effectuée. On les appelle indicateur d état
ou flag ou drapeaux. Dans un programme le résultat du test de leur état
conditionne souvent le déroulement de la suite du programme.
117
Architecture des calculateurs
3. Microprocesseur : composants
! Registre d’indexe : Le contenu de ce registre de 16 bits est une adresse. Il
est utilisé dans le mode d'adressage indexé
! Registres auxiliaires : Ils permettent de stocker le résultat des instructions
exécuter par l ALU
118
Architecture des calculateurs
3. Microprocesseur
La puissance d’un microprocesseur est caractérisée par le nombre
d’instructions qu’il est capable de traiter par seconde. Elle est définie par :
! le CPI (Cycle Par Instruction) qui représente le nombre moyen de cycles
d’horloge nécessaire pour l’exécution d’une instruction pour un
microprocesseur donné.
! le MIPS (Millions d'Instructions Par Seconde) qui représente la puissance de
traitement du microprocesseur.
FH
MIPS =
CPI
! Pour augmenter les performances d’un microprocesseur, on peut donc soit
augmenter la fréquence d'horloge (limitation matérielle), soit diminuer le CPI
(choix d'un jeu d'instruction adapté).
119
Architecture des calculateurs
3. Microprocesseur : les accumulateurs
120
!
Architecture des calculateurs
3. Le microprocesseur : Cycle d’exécution d’une instruction
Le traitement d’une instruction se fait en 3 phases :
! Phase 1: Recherche de l'instruction
o Le PC contient l'adresse de l'instruction suivante
o Au bout d'un certain temps, le contenu de la case mémoire sélectionnée
est disponible sur le bus des données.
o L'instruction est stockée dans le registre instruction du processeur.
! Phase 2: Décodage de l'instruction et recherche de l’opérande
o L'unité de commande transforme l'instruction en une suite de commandes
élémentaires nécessaires au traitement de l'instruction.
o
Si l'instruction nécessite une donnée en provenance de la mémoire,
l'unité de commande récupère sa valeur sur le bus de données.
o L’opérande est stockée dans un registre.
! Phase 3: Exécution de l'instruction
o Le micro-programme réalisant l'instruction est exécuté.
o Les drapeaux sont positionnés (registre d'état).
o L'unité de commande positionne le PC pour l'instruction suivante.
121
Architecture des calculateurs
3. Le microprocesseur : Le jeu d’instruction
Ensemble des opérations élémentaires que le microprocesseur pourra
exécuter. Il détermine architecture
Type d’instructions
Les instructions peuvent être classées en 4 groupes :
" Transfert de données pour charger ou sauver en mémoire, effectuer des
transferts de registre à registre, etc…
" Opérations arithmétiques : addition, soustraction, division, multiplication
" Opérations logiques : ET, OU, NON, NAND, comparaison, test, etc…
" Contrôle de séquence : branchement, test, etc…
Chaque instruction est toujours codée sur un nombre entier d’octets afin de
faciliter son décodage par le processeur. Une instruction est composée de
deux champs :
" le code instruction, qui indique au processeur quelle instruction réaliser
" le champ opérande qui contient la donnée, ou la référence à une donnée en
mémoire (son adresse).
122
Architecture des calculateurs
3. Le microprocesseur : Le mode d’adressage
Un mode d'adressage définit la manière dont le microprocesseur va accéder
à l’opérande. Les différents modes d'adressage dépendent des
microprocesseurs mais on retrouve en général :
! l'adressage immédiat où l’opérande est située immédiatement après
l’instruction
! l'adressage direct où la donnée est située à l’adresse dont la partie basse
est indiquée après l’instruction, la partie haute étant égale à $00.
! l'adressage indexé de registre où la donnée est située à l’adresse
correspondant à la somme du registre utilisée et de la valeur numérique
qui suit l’instruction
! l'adressage étendu où la donnée est située à l’adresse indiquée après
l’instruction
! l’adressage inhérent ou implicite où l’instruction se suffit à elle même
! L’adressage relatif où la donnée est située à l’adresse correspondant à
l’étiquette donnée
123
Architecture des calculateurs
3. Le microprocesseur : Langage de programmation
Niveau 1 : Le langage machine : Langage de plus bas niveau. C’est le seul
langage que comprend la machine car toutes les instructions et données sont
codées en binaire. C’est le rôle des compilateurs de générer ce code. C’est ce code
là qui est transférer dans la machine.
Niveau 2 : Langage assembleur : Les instructions ne sont pas représentés par
des nombres mais par des mnémoniques. Un mnémonique est une abréviation du
langage parlé afin de décrire une exécution exécutable par le µP
(ex : movlw 7 veut dire mettre la valeur litéralle « 7 » dans le registre W)
Ce langage est propre à chaque µProcesseur.
Niveau 3 : Langage évolué : Afin de facilité la programmation on a mis au point
des langages de haut niveau proche de celui de l’homme : FORTRAN, PASCAL, C,
BASIC, COBOL dont la principale caractéristique est d’être indépendant du
microprocesseur utilisé.
124
Architecture des calculateurs
3. Le microprocesseur : Langage de
programmation
Le langage machine est le langage compris par le
microprocesseur. La taille d’une instruction
(nombre de bits nécessaires pour la représenter
en mémoire) dépend du type d’instruction et aussi
du type d’opérande. L’assembleur est le langage
le plus proche de la machine.
! Chaque instruction est codée en une séquence
de bits sur un nombre entier d’octets afin de
faciliter son décodage par le processeur,
chaque instruction représente un code machine
différent.
! Chaque microprocesseur peut posséder un
assembleur différent
! Forte dépendance avec la machine.
! Langage de Haut niveau : nécessité d’un
compilateur
!
125
Architecture des calculateurs
3. Le microprocesseur : Architecture CISC et RISC
Le sigle CISC signifie Complex Instruction Set Computer.
L’architecture CISC est caractérisée par :
! Grand nombre d’instructions et tâches complexes par une instruction unique
! Instructions complexes pour mieux gérer le temps d’accès mémoire très lent
! Problèmes de compilation pour les langages de haut niveau
! Décodeur d’instruction complexe.
Le sigle RISC signifie Reduce Instruction Set Computer.
L’architecture RISC est motivé par :
! Plus de 80% des traitements des langages de haut niveau faisaient appel à
moins de 20% des instructions du microprocesseur.
! les compilateurs se contentaient le plus souvent d'affectations, d'additions et
de multiplications par des constantes
L’architecture RISC est caractérisée par :
! Instructions simples et en nombre très réduit
! Simplicité du séquenceur libérant ainsi de l’espace permet d’augmenter les
registres.
! Instructions complexes seront réalisées à partir d’instruction élémentaires.
126
Architecture des calculateurs
3. Le microprocesseur : Architecture CISC et RISC
Architecture RISC
instructions simples ne prenant qu’un
seul cycle
instructions au format fixe
décodeur simple (câblé)
beaucoup de registres
seules les instructions LOAD et STORE
ont accès à la mémoire
peu de modes d’adressage
compilateur complexe
Architecture CISC
instructions complexes prenant plusieurs
cycles
instructions au format variable
décodeur complexe (microcode)
peu de registres
toutes les instructions sont susceptibles
d’accéder à la mémoire
beaucoup de modes d’adressage
compilateur simple
127
Architecture des calculateurs
3. Le microprocesseur spéciaux : Le processeur de signal
!Le processeur de signal conçu pour une application spécifique
!Le processeur DSP (Digital Signal Processor) est optimisé pour effectuer du
traitement numérique du signal (calcul de FFT, convolution, filtrage numérique,
etc...).
!Les domaines d’application des D.S.P sont :
o les télécommunications
o le secteur militaire
o Le multimédia (lecteur CD, MP3, etc..)
o l’électronique grand public (télévision numérique, téléphone portable,
etc…),
o l’automatique,
o l’instrumentation,
o l’électronique automobile,
128
Architecture des calculateurs
3. Le microprocesseur spéciaux : Le microcontrôleur
!Un microcontrôleur est un circuit intégré contenant sur une sele puce un
CPU, de la RAM, de la ROM et des ports d’Entrée/Sorties (parallèles, séries,
I2C, etc..).
!Il peut intègrer aussi des fonctions spécifiques comme des compteurs
programmables (mesures de durées), des CAN voir des CNA (chaînes
d’acquisition), des interfaces de communication
!Les domaines d’application des microcontrôleurs sont nombreux :
o applications embarquées
o appareil électroménagers,
o chaîne d’acquisition,
o lecteur carte à puce,
o multimédia (lecteur CD, MP3, etc..)
o l’instrumentation,
o l’électronique automobile,
o Etc.
129
Architecture des calculateurs
4. Les échanges de données
!Un calculateur est équipé d’une ou plusieurs interfaces d’entrées/sorties pour
communiquer avec le monde extérieur.
!Chaque périphérique sera relié au système par l’intermédiaire d’une interface
(ou contrôleur) pour connecter et gérer les échanges
!L’interface est constituée par :
o Un registre de commande dans lequel le processeur décrit le travail à
effectuer (sens de transfert, mode de transfert).
o Un ou plusieurs registres de données qui contiennent les mots à
échanger entre le périphérique et la mémoire.
o Un registre d’état qui indique si l’unité d’échange est prête, si
l’échange s’est bien déroulé, etc…
!Il existe 2 modes d’échange d’information :
o Le mode programmé par scrutation ou interruption où le
microprocesseur sert d’intermédiaire entre la mémoire et le
périphérique
o Le mode en accès direct à la mémoire (DMA) où le microprocesseur ne
se charge pas de l’échange de données.
130
Architecture des calculateurs
4. Les échanges de données : mode programmé scrutation ou
interruption
!le microprocesseur interroge l’interface pour savoir si des transferts sont prêts
!tant que des transferts ne sont pas prêts, le microprocesseur attend
!:
o Un registre de commande dans lequel le processeur décrit le travail à
effectuer (sens de transfert, mode de transfert).
o Un ou plusieurs registres de données qui contiennent les mots à
échanger entre le périphérique et la mémoire.
o Un registre d’état qui indique si l’unité d’échange est prête, si l’échange
s’est bien déroulé, etc…
131
Architecture des calculateurs
4. Les échanges de données : mode programmé
Par scrutation
! le microprocesseur interroge l’interface pour savoir si des transferts sont prêts
! tant que des transferts ne sont pas prêts, le microprocesseur attend
! Le microprocesseur est souvent occupé par les interfaces d’entrées sorties
! Echanges lents et dépend du programme, il faut que le microprocesseur se
trouve dans la boucle de scrutation
Par interruption
! Une interruption est un signal asynchrone au programme en cours
! Un microprocesseur dispose d’une ou de plusieurs entrées d’interruption
! Un signal sur l’une de ces entrées peut interrompre le travail du
microprocesseur et forcer l’exécution d’un programme prioritaire.
! Avant chaque exécution d’instructions, le microprocesseur examine si il y a eu
une requête sur sa ligne d’interruption
! On peut donc interdire ou autoriser certaines sources d’interruptions, on les
appelle les interruptions masquables
! Les interruptions sont classées par ordre de priorité. Si plusieurs interruptions
se présentent en même temps, le microprocesseur traite d’abord celle avec la
priorité la plus élevée
132
Architecture des calculateurs
4. Les échanges de données : mode programmé
!
133
Architecture des calculateurs
4. Les échanges de données : mode direct avec la mémoire
Ce mode permet le transfert de blocs de données entre la mémoire et un
périphérique sans passer par le microprocesseur
!un circuit appelé contrôleur de DMA (Direct Memory Access) prend en charge
les différentes opérations
!Le microprocesseur contribue dans ce transfert à :
o initialiser l’échange en donnant au DMA l’identification du périphérique
concerné
o donner le sens du transfert
o fournir l’adresse du premier et du dernier mot concernés par le transfert
!Un contrôleur de DMA dispose
o d’un registre d’adresse, d’un registre de donnée, d’un compteur et d’un
dispositif de commande (logique câblée).
o Pour chaque mot échange, le DMA demande le contrôle du bus, effectue
la lecture ou l'écriture mémoire dans son registre et libère le bus.
o Il incrémente le registre d’adresse et décrémente son compteur. Lorsque
le compteur atteint zéro, le dispositif informe le processeur de la fin du
transfert par une ligne d'interruption
134
Architecture des calculateurs
4. Les échanges de données : mode direct avec la mémoire
Avantage
! Pendant toute la durée du transfert, le processeur est libre d'effectuer un
traitement quelconque.
Inconvénient
! Limitation des accès mémoire au processeur pendant toute la durée de
l'opération
135
!
Architecture des calculateurs
5.1 Exemple d’architecture CISC le 68HC11 : Présentation
Le 68HC11 série E est un microcontrôleur développé par Motorola construit
autour d’une unité centrale 8 bits. Il possède:
!un espace adressable de 64 Ko (bus d’adresses de 16 bits).
!un convertisseur analogique/numérique 8 bits multiplexé sur 8 canaux.
!une interface de communication série asynchrone(RS232)
!une interface de communication série synchrone
!Des timers très complets
!Chien de garde
!Générations d’interruptions (internes et externes)
!Ports paralèlles.
!Jusqu’à 12 Ko de ROM ou d’EPROM
!Jusqu’à 1 Ko de RAM
!Jusqu’à 8 Ko d’EEPROM
!Le 68 HC11 est disponible en plusieurs versions
136
Architecture des calculateurs
5.1 Exemple le 68HC11 : Structure interne
137
Architecture des calculateurs
5.1 Exemple le 68HC11 : Mode de fonctionnement
Durant la phase reset, deux broche MODA et MODB définissent le mode de
fonctionnement:
!UC seul : fonctionnement autonome, tous les ports du microcontrôleurs sont
disponibles mais la mémoire est limitée à la capacité interne.
!Etendu : Extension de la capacité mémoire ainsi que les périphériques par
ajout de boitiers externes. L’ensemble devient plus puissant mais on perd deux
ports.
!Bootstrap : Lors du reset un programme BOOTLOADER télécharge en RAM un
programme provenant SCI (liaison série asynchrone
!Special Test: Mode destiné pour des tests, le développement en particulier
l’émulateur.
138
Architecture des calculateurs
5.1 Exemple le 68HC11 : Cartographie mémoire
139
Architecture des calculateurs
5.1 Exemple le 68HC11 : Les registres
140
Architecture des calculateurs
5.1 Exemple le 68HC11 : Registres d’état
C’est un registre 8 bits, chaque bit change d’état en fonction du dernier traitement
du microcontrôleur :
!C(0) Carry, retenue: Le résultat de la dernière opération a causé une retenue.
!V(1) Overflow, débordement: le résultat de la dernière opération a provoqué un
débordement.
!Z(2) Zéro: le résultat de la dernière opération est nulle
!N(3) Négatif : le résultat de la dernière opération est négatif
!I(4) masque d’interruption: Les interruptions sont ignorées quand ce bit est à 1.
!H(5) Half Carry, demi-retenue: Utilisé en représentation décima codé en binaire
!X(6) masque d’interruption: Les interruptions XIRQ sont ignorées quand ce bit
est à 1.
!S(7) Ignorer Stop : L’instruction STOP est ignorée lorsque ce bit est à 1.
141
Architecture des calculateurs
5.1 Exemple le 68HC11 : Les différents ports
Le 68HC11 ayant de multiples versions la composition des entrées-sorties est
variable. La série 68HC11A1 ou E1 comporte 38 lignes entrées-sorties réparties
en 5 Ports ( PORTA....PORTE ), Certains sont bidirectionnels et d’autres
unidirectionnels :
! PORT A : Le port A est un port à usage général qui peut être partagé avec le «
Timer » et l’accumulateur d’impulsions.
! PORT B : Le port B est un port à usage général orienté uniquement en sortie.
le tableau ci-dessous montre le registre intervenant sur l’utilisation du Port B.
142
Architecture des calculateurs
5.1 Exemple le 68HC11 : Les différents ports
! PORT C : Le port C est un port à usage général. DDRC est le registre de
contrôle de direction du Port C. PORTCL n’est utile que lorsque le port C est
en entrée, dans ce cas les états logiques présents sur les broches du port C
sont mémorisés dans ce registre à l’instant d’un front actif sur la broche STRA.
143
Architecture des calculateurs
5.1 Exemple le 68HC11 : Les différents ports
! PORT D : Le port D est un port à usage général de 6 bits partagé avec la
communication Série. DDRD est le registre de contrôle de direction du Port D,
il permet de configurer le sens de transfert des données sur les lignes PDO à
PD5 : 0 pour une entrée, 1 pour une sortie.
! PORT E : Le port E est un port à usage général orienté uniquement en entrée,
partagé avec le Convertisseur Analogique Numérique,
144
Architecture des calculateurs
5.1 Exemple le 68HC11 : Le convertisseur Analogique numérique
! PORT D : Le 68HC11 est équipé́ d’un Convertisseur Analogique Numérique à
8 entrées multiplexées. Le multiplexage des 8 entrées se fait en 2 temps c’està-dire 2*4entrées. Il peut également ne faire la conversion que d’une seule
voie par action sur le registre de contrôle du convertisseur ADCTL.
! Les registres qui interviennent dans le fonctionnement du convertisseur
analogique numérique.
145
Architecture des calculateurs
5.1 Exemple le 68HC11 : Le convertisseur Analogique numérique
! ADCTL est le registre de contrôle du convertisseur numérique analogique :
o MUX : 1 le convertisseur réalise les 4 conversions suivant le bit 0 le
convertisseur réalise une conversion suivant les bits CA,CB,CC.
o SCAN: 0 le convertisseur ne réalise qu’une salve de conversion. 1 le
convertisseur réalise les conversions en continu.
o CCF : 1 Indicateur de fin conversion, il est remis à 0 par écriture dans
ADCTL, ce qui provoque une nouvelle conversion quand SCAN = 0
146
Architecture des calculateurs
5.1 Exemple le 68HC11 : La liaison série SCI
! Cette interface permet la communication avec un autre équipement, terminal
ou ordinateur. Les données sont transmises et reçues sous forme série. La
norme RS232 impose des niveaux qui ne sont pas ceux de la logique TTL, il
faut faire appel à un circuit spécialisé́ qui réalise la mise à niveau (MAX232).
Les deux lignes TXD et RXD sont les lignes PD0 et PD1 du 68HC11.
! La mise en service de la SCI va ignorer les valeurs des bits de DDRD0 et
DDRD1 qui fixent le rôle (entrée ou sortie) des lignes PD0 et PD1 et imposer
une sortie pour TXD (PD1) et une entrée pour RXD (PD0). Dès que la SCI ne
sera plus utilisée, les deux lignes reprendront le rôle correspondant DDRD
($1009).
! Les registres qui interviennent dans le fonctionnement de la liaison série
asynchrone.
147
Architecture des calculateurs
5.1 Exemple le 68HC11 : La liaison série SCI
! Les registres qui interviennent dans le fonctionnement de la liaison série
asynchrone.
! SCDR: registre de données
! BAUD: permet de choisir la vitesse de transmission
! SCCR1: configuration de format des données dont les bits les plus
couramment utilisés sont: M = l 9 bits de données. 0 donne 8 bits de données.
! T8 Ecriture du 9ème bit de données. R8 Lecture du 9ème bit de données.
148
Architecture des calculateurs
5.1 Exemple le 68HC11 : La liaison série SCI
!SSCR2 registre de contrôle de la liaison série asynchrone SCI dont les bits les
plus couramment utilisés sont:
o
o
o
o
RE 1 Réception activé, 0 récepteur déconnecté
TE 1 Emetteur activé, 0 emetteur déconnecté
RIE 1 active interruption RDRF-OR, 0 les inhibe
TIE 1 active interruption TDRE, 0 l’inhibe
o
o
o
o
FE 1 Erreur de format de données.
OR 1 Débordement, réception d’une donnée avant utilisation de la précédente.
RDRF 1 Registre de réception plein
149
TDRE 1 Registre d’émission vide
!SCSR registre d’état de la liaison série, bits couramment utilisés:
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Mode d’adressage
!Inhérent: Il n’y a pas d’opérande. Exemple INCA, LSLA, RTI, RTS, etc.
!Immédiat : L’opérande suit immédiatement le code de l’instruction. Exemple LDAA
#20
!Etendu : 16 bits, l’adresse de l’opérande se trouve dans les deux octets qui suivent le
code de l’instruction. Exemple LDAA $1024
!Direct: 8 bits, l’adresse de l’opérande se trouve dans l’octet qui suit le code de
l’instruction. Exemple LDAA $0020
!Relatif : Adressage réservé aux instructions de branchement. Adresse de
branchement = adresse instruction diminuée jusqu’à -128 ou augmentée jusqu’ +127.
Exemple : BNE TEMPO
!Indexé : L’adresse est calculé par le contenu du registre d’index en ajoutant une
valeur comprise entre $00 à $FF qui se trouve dans l’octet qui suit le code de
l’instruction. Exemple LDAA $10, X
!Manipulation de bit: BCLR PORTB, %00110001 Mise à 0 de PB5, PB4 et PB0
BSET $1C,%1110 0100 Mise à 1 de Bit7, 6, 5, 2 de la donnée à l’@
$001C
!Branchement sur test Bit d’1 variable: BRCLR ADCTL,%1000
0000 ,TEMPO Le programme fait un saut à l’étiquette TEMPO si le bit
7 du registre ADCTL vaut 0
150
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Directives d’assemblage
Elles n’ont aucune influence sur le programme proprement dit mais elles orientent le
processus d’assemblage. Processus d’assemblage : Passage du programme texte en
programme binaire compréhensible par le 68HC11
Directive ORG $@ Indique le début ( origine ) du programme
! Directive EQU Equivalence : Associe un nom à une donnée ou une adresse.
Ex :
REGBAS EQU $1000
PORTC EQU $03
! Directive FDB, FDD, FCC Form Constant Byte, Double Byte, Character.
Allocation et mise en place d’octets dans une zone précise en mémoire.
Exemple :CHAINE FCC « VIVE » ici CHAINE correspond à une chaîne de
caractères qui est situé en mémoire.
! Directive RMB Reserve Memory Byte : Réserver un Octet en Mémoire. Exemple
CAPT RMB 2
2 Octets alloués pour une variable appelée CAPT dont on ne
connaît pas la valeur.
151
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Structure d’un programme
Définition des étiquettes « symboles » utilisées
**** EQU ****
Optionnel
ORG $@
Origine RAM si l’on veut affecter des variables de traitement
**** RMB $****
Optionnel
**** FDB $****
Optionnel
ORG $@
Origine RAM du programme
Emplacement des variables de travail
**** Programme ****
END
152
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Instructions de chargement
153
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Instructions Arithmétique et logique
154
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Instructions de décalage et de rotation
155
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Instructions opérations sur des bits
Instructions sur les registres d’index
156
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Instructions de branchement et de contrôle
157
Architecture des calculateurs
5.1 Exemple le 68HC11 : Jeux d’instruction
Instructions de branchement et de contrôle
158
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Présentation du PIC (pages 3,4,8,9,17,20-22)
159
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Présentation du PIC (pages 3,4,8,9,17,20-22)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Les éléments essentiels du PIC 16F887 sont :
Une mémoire programme de type EEPROM flash de 8K mots de 14 bits,
Une RAM donnée de 368 octets,
Une mémoire EEPROM de 256 octets,
Cinq ports d'entrée sortie, A (8 bits), B (8 bits), C (8 bits), D (8 bits), E(4bits)
Convertisseur Analogiques numériques 10 bits à 14 canaux,
USART, Port série universel, mode asynchrone (RS232) et mode synchrone
SSP, Port série synchrone supportant I2C
Trois TIMERS avec leurs Prescalers, TMR0, TMR1, TMR2
Deux modules de comparaison et Capture CCP1 et CCP2
Un chien de garde,
13 sources d'interruption,
Générateur d'horloge, à quartz (jusqu’ à 20 MHz) ou à Oscillateur RC
Protection de code,
Fonctionnement en mode sleep pour réduction de la consommation,
Programmation par mode ICSP (In Circuit Serial Programming) 12V ou 5V,
Possibilité aux applications utilisateur d’accéder à la mémoire programme,
Tension de fonctionnement de 2 à 5V,
Jeux de 35 instructions
160
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Présentation du PIC (pages 3,4,8,9,17,20-22)
161
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Présentation du PIC (pages 3,4,8,9,17,20-22)
162
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Cartographie mémoire (pages 23-24,26, 28-30)
163
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Cartographie mémoire (pages 23-24,26, 28-30)
164
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Mode d’adressage (pages 39-40)
o Mode d’adressage direct
• on précise dans l’instruction la valeur de l’adresse à laquelle on
veut accéder. Exemple MOVWF 20h.
o Mode d’adressage indirect
• Pour accéder à une position de la RAM en utilisant l’adressage
indirect, on passe toujours par une position fictive appelée INDF
(Indirect File).
• INDF est la case mémoire pointée par le pointeur IRP/FSR.
• IRP est un bit qui se trouve dans STATUS et FSR est un registre
accessible dans tous les bancs.
•
165
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Mode d’adressage (pages 39-40)
166
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Quelques registres de configuration
167
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Ports I/O (page 41-71)
• Le PIC 16F887 dispose de 36 broches d’entrée sortie regroupés dans
5 ports PORTA(8 bits), PORTB(8 bits), PORTC(8 bits), PORTD(8 bits)
et PORTE(4 bits). Chaque broche d’un port peut être configurée soit en
entrée soit en sortie à l’aide des registres de direction TRISA, TRISB,
TRISC et TRISD et TRISE:
• Bit k de TRISx = 0 broche k de PORTx = SORTIE
• Bit k de TRISx = 1 broche k de PORTx = ENTRÉE
• ANSEL: ANALOG SELECT REGISTER pour configurer les
entrées analogiques
168
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Résumé des registres associés au portA
169
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Jeu d’instructions (pages 227-228, 229-235)
o {W,F?d} signifie résultat dans W si d=0 ou w, dans F si d=1 ou f
170
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Jeu d’instructions (pages 227-228, 229-235)
171
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Jeu d’instructions (pages 227-228, 229-235)
172
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Jeu d’instructions (pages 227-228, 229-235)
173
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! ADC (pages 101-111)
174
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! ADC (pages 101-111)
o Ce module est constitué d'un convertisseur Analogique Numérique 10
bits dont l'entrée analogique peut être connectée sur l'une des 14
entrées analogiques externes.
o Les entrées analogiques doivent être configurées en entrée à l'aide
des registres TRISX et/ou ANSEL.
o Les tensions de références permettant de fixer la dynamique du
convertisseur. Elles peuvent être choisies parmi Vdd, Vss, Vref+ ou
Vrefo Le control du module se fait par les deux registres ADCON0 et
ADCON1
175
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! ADC (pages 101-111)
176
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! ADC (pages 101-111)
177
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! ADC (pages 101-111) Programmation
o 1) Configurer les E/S en Analogique/Numérique/Référence (ADCON1)
o 2) Configurer les entrées analogiques en entrées (ANSEL, TRISX)
o 3) Définir l'horloge de conversion à l'aide du diviseur dans ADCON0
o 4) Choisir le canal à convertir et valider le module(ADCON0)
o 5) Attendre le temps d’acquisition(12µs)
o 6) Lancer la conversion, GO=1(ADCON0)
o 7) Attendre fin de conversion,GO=0 ou drapeau ADIF=1
o 8) Traiter le résultat
o 9) Si l'on désire prendre d'autres mesures, recommencer au point 7 en
faisant attention aux timings
178
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! TIMER 0 (pages 75-77) est un compteur 8 bits
! Il est incrémenté́ en permanence soit par l’horloge interne Fosc/4 (mode
timer) soit par une horloge externe appliquée à la broche RA4 du port A
(mode compteur). Le choix de l'horloge se fait à l'aide du bit T0CS du
registre OPTION_REG
o T0CS=0horloge interne
o T0CS=1horloge externe appliquée à RA4
! Dans le cas de l'horloge externe, Le bit T0SE du registre OPTION_REG
permet de choisir le front sur lequel le TIMER s'incrémente.
o T0SE=0incrémentation sur fronts montants
o T0SE=1incrémentation sur fronts descendants
! Quelque soit l'horloge choisie, on peut la passer dans un diviseur de
fréquence programmable (prescaler) dont le rapport est fixé par les bits
PS0, PS1 et PS2 du registre OPTION_REG. L'affectation ou non du
prédiviseur se fait à l'aide du bit PSA du registre OPTION_REG
o PSA=0onutiliseleprédiviseur
o PSA=1pas de prédiviseur(affecté au chien de garde)
! Le contenu du timer TMR0 est accessible par le registre qui porte le
même nom.
179
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! TIMER 0 (pages 75-77)
180
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! TIMER 0 (pages 75-77)
181
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
! L'USART (Universal Synchronous Asynchronous Receiver Transmitter) est
l'un des deux modules de communication série dont dispose le PIC.
! La communication se fait sur les deux broches RC6/TX et RC7/RX qui
doivent être configurés toutes les deux en ENTREE par TRISC.
! Les registres de configuration
• Transmit Status and Control(TXSTA)
• Receive Status and Control(RCSTA)
• Baud Rate Control(BAUDCTL)
!
182
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
! Si on place le bit SYNC du registre TXSTA à 0, l'USART fonctionne dans le
mode asynchrone standard, 10 (ou 11) bits sont transmis ou reçus dans
l'ordre ci-dessous :
- 1 bit de START (toujours 0)
- 8 ou 9 bits de donnée (LSB d'abord)
- 1 bits de STOP (toujours 1)
! La transmission se fait sur RC6/TX et la réception sur RC7/RX
! La configuration et le control du port par les registres TXSTA et RCSTA
! La vitesse de communication par le registre SPBRG et le bit TXSTA.BRGH
! L'accès au port en lecture ou écriture se fait par les registres tampon
RCREG et TXREG. La transmission et la réception se font par deux
registres à décalage, un pour la transmission (TSR) et un pour la réception
(RSR). L'accès au registres tampon peut se faire alors que les registre à
décalage sont en train de transmettre/recevoir une donnée.
! Les drapeaux PIR1.RCIF et PIR1.TXIF sont très utiles pour gérer la lecture/
écriture dans le port. RCIF est positionné quand le port a terminé une
réception et TXIF est positionné quand le buffer de transmission TXREG est
"vide".
183
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
184
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
185
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
! Les étapes de transmission (sans interruption, mode 8 bits)
• 1) S’assurer que l’interruption TXI n’est pas validée
• 2) Configurer la broche TX/RC6 en entrée
• 3)Configurer le registre TXSTA (mode 8bits, valider transmission,
asynchrone, BRGH)
• 4) Initialiser le registre SPBRG pour définir la vitesse de transmission
• 5) Valider le port avec le bit RCSTA.SPEN
• 6) Vérifier que le drape au PIR1.TXIF=1 c.à.d TXREG est vide
• 7) Placer la donnée à transmettre dans le registre TXREG
• 8) recommencer au point 6) tant qu’on a des données à transmettre
186
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
USART (pages 153-166)
La réception est validée par le bit CREN
La réception d'un octet démarre à la réception du bit START
A la réception du bit stop le contenu du registre à décalage RSR est recopié
dans le registre tampon de réception RCREG. Le drapeau RCIF (PIR1.5)
est positionné, l'interruption associée est déclenchée si elle est validée. Le
drapeau RCIF est remis à zéro automatiquement à la lecture dans RCREG.
! Le registre RCREG est un registre double (FIFO à 2 positions). On peut
donc avoir 2 octets en attente dans ce registre et être en train de recevoir
un 3ème dans le registre RSR. A la fin de la réception du 3ème octet, si RCREG
est toujours plein, alors le dernier octet reçu est perdu et le bit OERR
(Overrun ERRor bit) est positionné ce qui provoque l'arrêt des transfert du
registre RSR vers le buffer RCREG. Pour reprendre la réception il faut
réinitialiser le module de réception en mettant à 0 puis à 1 le bit CREN.
! Le drapeau PIR1.RCIF ne passe à 0 que quand la pile RCREG est vide
! Si on reçoit un 0 à la position du bit STOP qui doit être toujours à 1, alors le
bit FERR (Framing ERRor) est positionné. Ce bit ainsi que le 9ème bit (si
utilisé) sont bufferisés, Il doivent être lu dans le registre RCSTA avant la
lecture du registre RCREG.
187
!
!
!
!
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
188
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
189
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
! Les étapes de réception (sans interruption, mode 8 bits)
• 1) S’assurer que l’interruption RCI n’est pas validée
• 2) Configurer la broche RX/RC7 en entrée
• 3) Initialiser le registre SPBRG pour définir la vitesse de
communication
• 4)Configurer le registre TXSTA (asynchrone, BRGH)
• 5)Configurer le registre RCSTA (validation port, mode 8bits, valider
réception continue)
• 6) Attendre que drapeau RCIFpasse à 1 ce qui annonce la fin de
réception d'un octet
7) Lire l’octet reçu dans le registre RCREG
8) recommencer au point 6) tant qu’on a des données à recevoir
190
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
! La gestion de la vitesse de communication
• 1) La vitesse de communication est déterminée par le générateur de
rythme BRG (Baud Rate Generator) qui est dédié au port série. La
vitesse de communication est définie à l'aide du registre de control
SPBRG et du bit BRGH (TXSTA.2) qui quadruple la vitesse quand il est
positionné. Il préférable d'utiliser le mode haute vitesse (BRGH=1) car
permet d'obtenir une meilleur précision sur la fréquence.
191
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! USART (pages 153-166)
! La gestion de la vitesse de communication
192
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Interruption (pages 218-221)
! Une interruption provoque l’arrêt du programme principal pour aller
exécuter une procédure d'interruption. A la fin de cette procédure, le
microcontrôleur reprend le programme principal à l’endroit où il l’a laissé. A
chaque interruption sont associés deux bits, un bit de validation et un
drapeau. Le premier permet d'autoriser ou non l'interruption, le second
permet au programmeur de savoir de quelle interruption il s'agit.
! Sur le 16F887, l'es interruptions sont classées en deux catégories, les
interruptions primaires et les interruptions périphériques. Elles sont gérées
par les registres :
193
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Interruption (pages 218-221)
194
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Interruption (pages 218-221)
! Déroulement d'une interruption
! Lorsque l'événement déclencheur d'une interruption intervient, alors son
drapeau est positionné à 1 (levé). Si l'interruption a été validée (bits de
validations = 1), elle est alors déclenchée : le programme arrête ce qu'il est
en train de faire et va exécuter la procédure d'interruption qui se trouve à
l'adresse 4 en exécutant les étapes suivantes :
o l'adresse contenue dans le PC (Program Counter) est sauvegardée
dans la pile, puis remplacée par la valeur 0004 (adresse de la routine
d'interruption)
o Le bit GIE est placé "0" pour inhiber toutes les interruptions (afin que le
PIC ne soit pas dérangé́ pendant l'exécution de la procédure
d'interruption).
! A la fin de la procédure d'interruption :
o le bit GIE est remis à 1 (autorisant ainsi un autre événement)
o le contenu du PC est rechargé à partir de la pile ce qui permet au
programme de reprendre là où il s'est arrêté
195
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Interruption (pages 218-221)
! Déroulement d'une interruption
! Deux remarques importantes sont à faire :
o Le drapeau reste à l’état haut même après le traitement de
l’interruption. Par conséquent, il faut toujours le remettre à "0" à la fin
de la routine d'interruption sinon l'interruption sera déclenchée de
nouveau juste après la routine d’interruption.
o Seul le PC est empilé automatiquement. Si cela est nécessaire, les
registres W et STATUS doivent être sauvegardés en RAM puis
restaurés à la fin de la routine pour que le microcontrôleur puisse
reprendre le programme principal dans les mêmes conditions où il l'a
laissé.
196
Architecture des calculateurs
5.2 Exemple d’architecture RISC le PIC 16F887 :
! Interruption (pages 218-221)
! Déroulement d'une interruption
! Les sources d'interruption :
197
3ième Partie : SYSTÈME EMBARQUÉ
198
Qu’est ce qu’un système embarqué ?
o Traditionnelement
o
o
o
o
Contrôleurs de machines à laver
Régulateurs de température du frigo
Vidéocassettes
...
o ASICs ou microcontrôleurs simples
(8-bit PIC MB95F204K ou famille de 16-bit PIC)
199
Qu’est ce qu’un système embarqué ?
o Maintenant les systèmes embarqués sont partout
o Caméras, console de jeux, SmartPhones, etc.
o ...
200
Qu’est ce qu’un système embarqué ?
o Le business ultime : la convergence digitale
o
Un dispositif avec plusieurs fonctions
o Microprocesseurs 32 bits
o Plus de mémoire, plus de versatilité
o 75% du marché sont des cœurs ARM (Advanced Risc Machines)
201
Conception des systèmes embarqués
o Les systèmes embarqués sont très complexes
o Microprocesseurs 32 bit, plusieurs types de mémoires, etc.,
oLes ingénieurs doivent travailler avec tous les composants de
ces nouveaux systèmes
o Limités en capacités de mémoire et de performance
o Valeur dans l’ensemble: compréhension et optimisation globale du système
complet!
202
Conception des systèmes embarqués
o Étudier les systèmes embarqués en détail:
o Microprocesseurs de 32 bit, mémoires, Bluetooth, boutons, touch-pad, écran
tactile, wifi, son, etc.
o Utiliser un « système réel »: Nintendo Development System (DS) par
exemple
203
Contenu de cette partie
o Introduction aux systèmes embarqués microprogrammés
o Plate-forme physique de la Nintendo DS (NDS)
o Introduction au logiciel de compilation et GUI
oMicroprocesseur et hiérarchie de mémoire
o Architecture des microprocesseurs et mémoire dans la Nintendo DS
o Programmation combinée C-assembleur
o Gestion des E/S et des circuits périphériques
o Description des périphériques et des E/S dans la Nintendo DS
o Contrôleurs d’interruption simple
o Interface et gestion des boutons, clavier, écrans (LCD et tactile) et son
o Développement de « solutions complètes » sur la NDS
o Utiliser un « système réel »: Nintendo Development System (DS) par
exemple
204
Contenu de cette partie
o Introduction aux systèmes embarqués microprogrammés
o Système embarqué microprogrammé : quoi, pourquoi et quand
o Comparaisons avec les systèmes embarqués traditionnels
o Principaux domaines d'application et les contraintes de conception
o Différents niveaux d’architectures : matériel et logiciel
o Développement en C
o Etude de cas: Nintendo DS (NDS) Lite
o Architecture matérielle
o Conception de logiciels - compilation basée sur C
o Travaux pratiques 2: Se familiariser avec l'environnement et en commençant par C
pour NDS
205
Qu’est ce qui a changé dans les s. e ?
oDéfinition du système embarqué (traditionnel):
o Système informatique conçu pour exécuter un (ou quelques) fonctions dédiées,
souvent avec la complexité de calcul limitée, mais avec des contraintes de calcul
en temps réel. Il fait partie d'un dispositif complet typiquement y compris le matériel
et les pièces mécaniques.
o Caractéristiques et fonctionnalités obligatoires : ARMS
o Availability A(t) : Disponibilité = probabilité du système à travailler à l'instant t
o Reliability R(t) : Fiabilité = probabilité du système à travailler correctement à
l'instant t
o Maintainability M(d) : Maintenabilité = probabilité du système à travailler
correctement d unités de temps après la survenue d’une erreur.
o Safety : Sécurité
oContraintes obligatoires de conception:
o De petite taille, mais à faible coût (grand volume de production)
o Utilisation de faible puissance
206
Clé du développement de l’electronique automobile
oQu'est-ce que "l'électronique automobile»?
o fonctions de véhicules mis en œuvre avec des systèmes embarqués
• l'électronique de carrosserie
• Electronique système: châssis, moteur
• Information / divertissement
70% des futures innovations dans nos véhicules sera possible que grâce à
l'amélioration des systèmes électroniques embarqués
207
Dernières électronique automobile
oensemble complexe de systèmes embarqués microprogrammés
o Les dernières BMW contiennent plus de 150 microprocesseurs embarqués
208
Convergence numérique, l'exemple du SmartPhone
oQuels sont les principaux nouveaux composants de ces systèmes
embarqués microprogrammés?
o Un dispositif, de multiples fonctions
o Centre des médias omniprésents et les réseaux sociaux
o SmartPhone : la prochaine commande pour semi-conducteurs. Industrie
209
Qu’est ce qui a changé dans les s. e ?
oDéfinition du système embarqué microprogrammé:
o Système informatique conçu pour exécuter un ensemble de fonctions (y
compris la vidéo, la communication et un grand ensemble de dispositifs
d'E / S) spécifique au domaine, mais avec calcul limité et des contraintes
souples en temps réel. Il est un appareil portable qui comprend le
matériel, les logiciels et les pièces mécaniques.
o Dispose de fonctionnalités ARMS importants, mais pas essentiel
o Pas vraiment à risque, seuls les clients malheureux
o
Pas d’usage général en informatique! Nécessité de gérer les
contraintes dans la conception des s.e pour ne pas perdre le marché
o
Petite taille / poids, le coût plus faible possible (moyenne production
vol.)
o L'intégration de puissance faible est la contrainte la plus importante:
o "Les téléphones 3G actuels peuvent difficilement être utilisés de nos jours
pour plus d'une heure, si les données sont vraiment en cours de
transmission" en 2010. Alors qu’avec la 4G en 2015, certains SmartPhone
peuvent tenir 8 heures.
210
Architecture matérielle des s.e
oQuatre composantes fondamentales du matériel
o 1. Unité centrale de traitement / s (CPU): 32 bits Reduced Instruction Set Computer
(RISC)
o 2. Hiérarchie de mémoire: 1-2 niveau de cache, rapide et principaux mémoires à
semi-conducteurs externes
o 3. Interconnexions: un ou plusieurs bus multiples (nombre différent de largeurs ou
vitesses bits)
o 4. Dispositifs E/S : Multiple, personnalisé par domaine
oArchitecture NDS Lite
o
o
2 processeurs: ARM9 et ARM7
mémoire Cache, 4MB mem
principale., 656KB de VRAM,
deux 16KB RAM rapide
o 17 bus 16 bits et 8 bus 32 bits
o 1 LCD TFT, 1 écran tactile TFT,
8 boutons, 4 directions,
microphone, haut-parleur, Wifi et
GBA sur chariot carte flash,
211
NDS : Traitement et gestion des E/S
oDeux noyaux asymétriques Advanced RISC Microprocesseurs 32 bits
o 946E-S ARM: traitement des logiciels utilisateur et différents périphériques d'E /S
o ARM 7TDMI-S: dédié I / O support (son, wifi et des clés spécifiques)
212
NDS : Cartographie mémoire
213
Contrôle et Programmation des s.e
o Plusieurs niveaux d'abstraction possible, le choix dépend de
l'efficacité requise I / O et la complexité générale de la validation des
systèmes embarqués
o
Bas niveau = Assemblée Langue, chaque ligne est une opération fondamentale
minimum à faire par le microcontrôleur / microprocesseur
o Haut niveau : langues d'abstraction de haut niveau
214
Java and C: trendiest languages for
Java et C lesmicroprogrammed
langages les plus embedded
utilisés dans
les s.e
systems
Very
different très
objectives,
but both
foundont
their
reason
be there
o Objectifs
différents,
maishave
les deux
trouvé
leurtoraison
d'être là
• Java:
most solution
retargettable
machine),
interpreted
language
o Java:
la plus solution
reciblable(Virtual
(machine
virtuelle), langage
interprété
• C: o
closest
to HW
language,
verymachine,
optimized
compilation
technologytrès optimisée
C: la plus
proche
des langage
technologie
de compilation,
“For infrastructure technology, C will
be hard to displace” [Dennis Ritchie, 1972]
Source: http://www.tiobe.com/
“Java will be the next wave in computing: no
worries about portability” [James A. Gosling, 1995]
Source: http://dev.langpop.com/
©ESL/EPFL
17
215
Environnement de développement des s.e
o Systèmes embarqués microprogrammé sont des dispositifs avec des
ressources limitées, et ne sont généralement pas assez puissant pour
exécuter un compilateur, un système de fichiers ou un environnement
de développement.
oL’environnement
de développement permet
la séparation de
l'environnement de construction du système et l'environnement cible
o Avantages
o
o
Compilation rapide des applications
Mise au point et les tests avec plus de ressources que disponibles sur cible
embarquée système
216
Outils de développement des s.e basé sur C
o Le flux complet pour générer le binaire final pour la plate-forme cible
et sa validation pour la cible microprogrammé systèmes embarqués
nécessite des outils de développement et de compilation croisée.
o Il s’agit d’un ensemble d'outils en cours d'exécution sur une machine
hôte, utilisé pour:
o Les fichiers pré-process tête (#include) et macros (#define) et Compiler du
code de haut niveau source (.c) le code objet cible (.o) - Possibilité d'obtenir
une sortie de montage comme étape intermédiaire (.s)
o Lier
les collections ou bibliothèques de fichiers objets (.o) pré-existantes
pour obtenir un objet exécutable final (.elf) avec tout le code objet
nécessaire
o Formater
l'objet exécutable dans un format qui peut fonctionner avec la
hiérarchie de mémoire cible et I / O sous-système (.nds)
217
Outils de développement des s.e basé sur C
218
Compilation pour NDS: 2 processeurs - 2 flux
219
Compatibilité dans la compilation pour les
systèmes embarqués microprogrammés
o Deux phases ont été séparées
o
1. Le code source est facile
de migrer langue source
standard (par exemple, ANSI
C) ● bibliothèques multi-plateforme standard (par exemple,
stdio, stdlib, etc.)
o
2. Code de l'objet n’est pas
portable, pas même parmi les
compilateurs pour la même
architecture ● code objet tiers
lié à la plate-forme.
220
Example: compilation en C de source code pour NDS
221
Assemblage des fichiers selon le s.e et les E/S
o Outil
pour emballer les binaires
dans 1 fichier (file.nds) pour le
format de cartouche NDS: ndstool
o Outil
additionnel à permet le
démarrage.
222
Pratique 1 : Se familiariser avec l’environnement
o Partie A: Premiers pas avec la machine virtuelle pour la NDS
o Utilisation de VirtualBox: http://www.virtualbox.org
223
Pratique 2 : Se familiariser avec l’environnement
o Partie A: Premiers pas avec la machine virtuelle pour la NDS
o Utilisation de VirtualBox: http://www.virtualbox.org
oPartie B:
Prise en main avec du C dans le NDS: "Hello World"
224
Evolution des processeurs dans les S.E
o Les microprocesseurs ont beaucoup évolué depuis 1971
o plus de fonctionnalité et de performance
o Plus de consommation aussi en énergie.
225
Processeurs ARM dans tous les S.E
o
Reduced Instruction Set Informatique (RISC) pour l'efficacité
énergétique des systèmes microprogrammés
o Instructions
avec minimum de sémantique (déplacer les données, opération
arithmétique et logique, ....)
o ARM2 [1986], probablement plus simple processeur 32 bits : 30K transistors,
pas de mémoire cache
o Large gamme d’architecture ARM conçu: toujours architecture RISC de base +
extensions
o Business model
o Licence
ARM pour les
entreprises partenaires qui
conçoivent et fabriquent "à la
carte" pour des clients
226
Processeurs ARM dans tous les S.E
o
Reduced Instruction Set Informatique (RISC) pour l'efficacité
énergétique des systèmes microprogrammés
o Instructions
avec minimum de sémantique (déplacer les données, opération
arithmétique et logique, ....)
o ARM2 [1986], probablement plus simple processeur 32 bits : 30K transistors,
pas de mémoire cache
o Large gamme d’architecture ARM conçu: toujours architecture RISC de base +
extensions
Business model
Licence ARM pour les entreprises
partenaires qui conçoivent et
fabriquent "à la carte" pour des
clients
90% de tous les systèmes
embarqués microprogrammés
utiliser un ou plusieurs
processeurs ARM!
o15 milliards de cœurs ARM expédiés, Meilleures ventes: ARM9 et ARM7TDMI
227
Historique des processeurs Nintendo DS (NDS)
o Précurseur : Game Boy Advance (GBA), Mar. 2001
o Ecran: 2.9 pouces, TFT LCD (240x160 pixels)
o Processeurs
• ARM 7TDMI, 16.78 MHz: user sw processing
• Z80, 8MHz: microcontroller pour les E/S
o Nintendo DS, Nov. 2004; et DS Lite, Mar. 2006
o Ecarn: 3 vs 3.1 pouces, TFT LCD (256 x 192 pixels)
o Processeurs
• ARM 946E-S, 67.028 MHz: user software
•
processing and main I/O peripherals
ARM 7TDMI-S,16.78 MHz: dedicated I/O support
(sound, wifi and specific keys)
o Nintendo DSi, Nov. 2008, and DSi XL, Oct. 2009
o Ecran: 3.2 vs. 4.2 pouces, TFT LCD (256 x 192 pixels)
o Processeurs
• ARM 946E-S, 133 MHz: user software processing
•
and main I/O peripherals
ARM 7TDMI-S, 16.78 MHz: dedicated I/O support
(sound, wifi and specific keys)
228
Traitement et contrôle des E/S de (NDS)
oDeux processeurs 32-bit Advanced RISC Microprocessors (ARM)
o ARM 946E-S: user software processing and main I/O peripherals
o ARM 7TDMI-S: dedicated I/O support (sound, wifi and specific keys)
229
Cartographie mémoire de (NDS)
o 1 Go
oC a r t r i d g e
ROM:
0x08000000 - 0x09ffffff
(32MB)
oM a i n R A M :
0x02000000 - 0x023fffff
(4MB)
oBIOS (Basic Input/
Output System) in
ROM,
Adresses
Memoire
00000000
Octet 3
Octet 2
Octet 1
Octet 0
00000004
Octet 7
Octet 6
Octet 5
Octet 4
.
.
.
.
.
.
.
.
FFFFFFFC
o ARM9:
0xffff0000 0xffff7fff (32KB);
o ARM7: 0x00000000 0x00003fff (16KB)
230
Architecture des processeurs ARM
oProcesseurs RISC 32-bit (instruction 32-bit = mot)
o 37 registres de 32-bits (16 disponible)
o Avec UAL, Multiplieur, Shiffer et (often) caches
o Architecture Von Neuman (ARM7) et Harvard (ARM9)
o 8- / 16- / 32-bit de données (bus)
231
Allocation des données et instructions
oT a i l l e
d e s d o n n é e s Adresse
possible dans un uP ARM
00000000
o Mot 32 bits (4 octets)
o Demi-mot 16bits (2 octets)
o Octets (8 bits)
oDeux types d’instructions ,
o Instruction régulières (32bits)
o Instruction compacte (16bits)
00000004
.
.
.
.
Demi-mot #2
Demi-mot #0
Octet 3
Octet 2
Octet 1
Octet 0
Octet 7
Octet 6
Octet 5
Octet 4
Demi-mot #6
.
Demi-mot #4
.
.
.
FFFFFFFC
232
Registres et Mode d’adressage
oLes processeurs ARM intégrent 37 régistres de 32 bits
o 1 compteur de programme (PC)
o 1 registre d’état
o 5 registres pour store the program state when we switch operation mode in
the processor
o 30 registres à usage général
oRegidtre de base + offset / deplacement (ex. LDR r0,[r1,#8] )
233
Organisation des différents registres
oThe System mode uses the User mode register set
234
Registres d’état (cpsr)
Drapeaux disponibles dans le NDS
oCondition code flags (or bits)
o Z = Zero result from ALU
o N = Negative result from ALU
o C = ALU operation Carried out
o V = ALU operation oVerflowed
oInterrupt Disable bits.
o I = 1: Disables the IRQ.
o F = 1: Disables the FIQ.
oMode bits
o Specify the processor mode
oSticky overflow flag - Q flag
o Architecture 5TE/J only (ARM9)
o Indicates if saturation has
occurred
oT Bit
o Architecture xT only
o T = 0: Processor in ARM state
o T = 1: Processor in Thumb state
oJ bit
o Architecture 5TEJ only (ARM9)
o J = 1: Processor in Jazelle state
235
Jeu d’instruction des processeurs ARM
o5 types d’instructions Assembleur
o 3 types d’instruction RISC fondemantales
•
•
•
Instructions d’accés à la mémoire
Instructions arithmétiques et logiques
Instructions de branchement (jump)
o 2 types d’instruction RISC étendues pour le controle du processeur
•
•
Instructions spéciales de manipulation du registre d’atat (cpsr)
Instructions de changement du mode d’éxecution
236
Instruction d’accés à la mémoire
o2 opérations basiques
o LDR : charger le contenu d’un registre avec la valeur provenant de la
mémoire
o STR : stocker dans un registre la valeur provenant de la mémoire
o Syntaxe:
• LDR{<cond>}{<size>} Rd, <address>
• STR{<cond>}{<size>} Rd, <address>
• Examples: LDR r0,[r1,#8]
STR r0,[r1,#8]
o La mémoire doit prendre en charge toutes les tailles (par défaut la taille
est un mot)
•
•
<size> = Signed (S) and then Byte (B), Halfword (H)
Examples: LDR STR
LDRB STRB
LDRH STRH
LDRSB Load
LDRSH Load
Word
Byte
Halfworld
byte with sign
halfword with sign
237
Instructions arithmetiques et logiques
oElles ne s’appliquent qu’entre des registres
o Arithmétique : ADD ADC SUB MUL SBC RSB RSC
o Logique :
AND ORR EOR BIC
o Comparaisons : CMP CMN TST TEQ
o Mouvement: MOV MVN
oSyntax: <Operation>{<cond>}{S} Rd, Rn, Operand2
o Example: ADD r0, r1, r2
o Remarques :
o Comparisons only fix the flags (or bits) of cpsr (not the Rd value)
o Example: CMP r3,#0
o Data movements do not specify Rn
o Example: MOV r0,#0xFF
238
Instructions de branchement
oB <Label>
o Jump fait un saut relatif jusqu’à ± 32Mo par rapport au contenu du PC
oBL <subroutine>
o Stockage du contenu du PC dans le registre LR(r14)
o Rechargement du contenu du PC depuis le resitre LR aprés l’execution de
subroutine
239
Exécution conditionnelle
oLes
instructions conditionnelles permettent d’améliorer la
densité de code et les performances en réduisant le nombre
d'instructions de branchement.
o Example: ADD{<cond>} Rd, Rn, Operand2
240
Exécution conditionnelle
oLes instructions conditionnelles possibles dans les processeurs
ARM
241
Equivalence entre C et assembleur dans ARM
oInstruction if
oUtilisation
: if(cond) {instTrue;} else {instFalse;}
de l’instruction de comparison (CMP) et le branchement conditionnel
(Bcond)
oExample
if (a==7) {count+=1;}
else {count-=1;}
…..
o a est stocké dans r0 ;
o count est stocké dans r1
oSolution
CMP r0, #7
BNE caseFalse
ADDS r1,r1,#1
B regroup
caseFalse:
SUBS r1,r1,#1
regroup:
…..
242
Equivalence entre C et assembleur dans ARM
oInstruction compacte
: instruction conditionnelle
oUtilisation de l’instruction de if-else
if (a==7) {count+=1;}
else {count-=1;}
o a est stocké dans r0 ; count est stocké dans r1
oSolution
CMP
ADDEQ
SUBNE
r0, #7
r1, r1, #1
r1, r1, #1
; compare a avec 7
; faire count = count++, si a==7
; faire count= count--, si a !=7
243
Equivalence entre C et assembleur dans ARM
oInstruction While loop : instruction conditionnelle
o Utilisation de l’instruction ; while (cond) {instructsTrue;} after_loop_instructs
oExample
while (a<3) {
count+=1;
a++;
}
…..
o a est stocké dans r0 ;
o count est stocké dans r1
oSolution
Loop:
CMP
BGE
ADD
ADD
B loop
caseFalse:
…..
r0, #3
caseFalse
r1,r1,#1
r0,r0,#1
244
Equivalence entre C et assembleur dans ARM
oInstruction for
: instruction itérative
oExample
count = 0;
for (i=10; i > 0; i--)
count+=1;
o a est stocké dans r0 ;
o count est stocké dans r2
oSolution
MOV
MOV
Loop:
CMP
BLE
ADD
SUBS
B loop
caseFalse:
r2, #0
r0, #10
r0,#0
caseFalse
r2,r2, #1
r0, r0, #1
245
Développement d’un programme Assembleur
1. Declaration de variables et
adresses
2.Definition de la fonction
principale (.global)
3.Debut du code (.text)
4.Fin du programme (.end)
246
Intégration de code Assembleur dans un code C
oDirectement dans un programme C
o
o
utilisé pour chaque code assembleur
asm(“assembly Instruct.");
oUtilisation
dans du code C des
fichiers assembleur externes
o Déclarer
en C l'utilisation de fonctions
extérieur: EXTERN Prototype_funct;
o
Déclaration de fonctions assembleur
comme symbol global .GLOBAL
Name_funct
o
Implementation de fonctions dans le
texte : .text du programme :
Name_funct:
247
4ième Partie : PROCESSEUR ARM
248
STM32 : Présentation
• MicroContrôleur ST basé sur le processeur ARM Cortex M4
• Processeur RISC
• Architecture Harvard : bus instructions et données séparés
• Mode de gestion de la consommation
249
Processeur ARM : Présentation
Processeurs(RISC(32(bits((ARM1(à(ARM7)(
et(64(bits((ARM8..)(développées(par(
ARM(Ltd
Architecture)simple
Faible)consomma3on
Très(employés(en(électronique(
embarquée.
ARM(ne(fabrique(pas(de((puce.(ARM(
vend(des(architectures(sous(licence(de(
propriété(intellectuelle(aux(concepteurs
Famille(nombreuse,(de(ARM6(à(ARM11(
(muOPcoeurs)
ARM- CORTEX
• Les SoC CORTEX (systèmes on chip CPU + GPU + DSP +
mémoires + périphériques) sont équipés de processeurs ARM
• CORTEX A pour l’informatique
• CORTEX R pour les applications temps réel
• CORTEX M pour les applications embarquées
• Le CORTEX M3 est équipé d’un processeur ARM7 cadencé à
100MHz
• (prix : 11€ à l’unité et moins de 5€ par 2000).
• Plus de 10 milliards de licences vendues
STM32 : Nucleo – F401RE(
STM32F401RET6 in LQFP64 package
ARM®32-bit Cortex®-M4 CPU with FPU
84 MHz max CPU frequency
VDD from 1.7 V to 3.6 V
512 KB Flash
96 KB SRAM
GPIO (50) with external interrupt
capability
12-bit ADC with 16 channels
RTC
Advanced-control Timer
General Purpose Timers (7)
Watchdog Timers (2)
USART/UART (4)
I2C (3)
SPI (3)
SDIO
USB 2.0 OTG FS
STM32 : Nucleo – F401RE(
Connecteurs Arduino Uno. (Tous les
shields sont compatibles)
Connecteurs STMicroelectronics Morpho
mbed-enabled (http://mbed.org)
ST-LINK/V2-1 debugger/programmer
intégré
Une LED utilisateur
Deux boutons poussoirs USER et RESET
USB supportant trois modes :
Virtual Com port
Memoire USB
Debug port
Adapté à tous les EDI ex : IAR™, Keil®,
AC6-GCC
9€((Farnell)
STM32 : Nucleo – F401RE(
STM32F401RET6 in LQFP64 package
ARM®32-bit Cortex®-M4 CPU with FPU
84 MHz max CPU frequency
VDD from 1.7 V to 3.6 V
512 KB Flash
96 KB SRAM
GPIO (50) with external interrupt
capability
12-bit ADC with 16 channels
RTC
Advanced-control Timer
General Purpose Timers (7)
Watchdog Timers (2)
USART/UART (4)
I2C (3)
SPI (3)
SDIO
USB 2.0 OTG FS
NUCLEO)32,)64,)144)
Tous(les(microcontrôleurs(STM32(ont(été(implantés(sur(des(
cartes(NUCLEO(
Cartes(NUCLEOP64(avec(connecOque(ARDUINO(et(ST(
Cartes(NUCLE0P32(pour(le(prototypage(sur(support(DIP((
STM32 : Nucleo – F401RE(
STM32 : Nucleo – F401RE(
STM32 : ARM - MBED
http://developer.mbed.org/
• Projet(libre(,(licence(GNU,(
plus(de(45(plateformes(
cibles.(
• Environnement(de(
développement(C/C++(en(
ligne,(un(navigateur(suffit.(
• Pas$de$debug(
• Bibliothèques(intégrées(
• DocumentaOon(et(
communauté(importante(
• Plate(forme(collaboraOve(
• Pour(le(bebug,(exportaOon(
vers(KeilPµVision,(Eclipse...(
(
STM32 : KEIL µVision
OS Windows
Simulateur
intégré
Version gratuite
limitée à 32KO
de code
ST offre une
licence gratuite
illimité pour les
STM32 CORTEX
M0
STM32 : AC6 System Workbench
OS
Windows,
Linux,
MacOS
Logiciel
« libre »
Licence
GNU
STM32 : Cube
Générateur de
code d’initialisation
de périphériques.
STM32 Cube
facillite
(grandement) la
configuration des
périphériques.
Il crée un projet
(exAC6, µVision
avec un « main() »
vide.
STM32 : Registres des ARM Cortex-M
262
STM32 : Memory MAP
263
STM32 : Memory MAP
264
STM32 : Memory MAP
265
STM32 : Memory MAP peripherals
RM0368
266
STM32 : Memory MAP peripherals
RM0368
267
STM32: GPIO
268
STM32 : GPIO MAP
o Un port d'entrée/sortie communique avec l'extérieur du micro-contrôleur par le
biais de plusieurs fils (broches), en général regroupés par paquets de 16.
o Tout périphérique possède en son sein un certain nombre de registres
accessibles en lecture ou écriture pour configurer et d'utiliser le périphérique.
o Chaque port GPIO dispose de 4 régistres 32 bits de configuration
(GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR and GPIOx_PUPDR), 2
registres 32 bits de données (GPIOx_IDR and GPIOx_ODR), 1 registre 32-bit
set/reset (GPIOx_BSRR), 1 registre 32-bit locking register (GPIOx_LCKR) et 2
registre 32-bit alternate function selection (GPIOx_AFRH and GPIOx_AFRL).
o The GPIOx_MODER register is used to select the I/O direction (input,
output, AF, analog).
o The GPIOx_OTYPER and GPIOx_OSPEEDR registers are used to select
the output type (push-pull or open-drain) and speed (the I/O speed pins are
directly connected to the corresponding GPIOx_OSPEEDR register bits
whatever the I/O direction).
o The GPIOx_PUPDR register is used to select the pull-up/pull-down
whatever the I/O direction.
269
STM32 : GPIO CONFIGURATION
RM0368
270
STM32 : GPIO REGISTRE DE CONFIGURATION
RM0368
271
STM32 : GPIO REGISTRE DE CONFIGURATION
272
STM32 : GPIO REGISTRE DE CONFIGURATION
273
STM32 : GPIO REGISTRE DE CONFIGURATION
0x4002 03FF
0x4002 0024
0x4002 0020
0x4002 03FF
0x4002 0000
GPIOA(1 KB)
0x4002 001C
0x4002 0018
0x4002 0014
0x4002 0010
0x4002 000C
0x4002 0008
0x4002 0004
0x4002 0000
AFR[1]
AFR[0]
LCKR
BSRR
ODR
IDR
PUPDR
OSPEEDR
OTYPER
MODER
274
STM32 : GPIO REGISTRE DE CONFIGURATION
0x4002 0017
1 mot (32 bits)
ODR
0x4002 0014
0x4002 0017
0x4002 0016
4 octets (32 bits)
0x4002 0015
0x4002 0014
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
1
275
0
STM32 : GPIO DESCRIPTION FONCTIONNEL
276
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie, 4 registres de configuration (GPIOx_ODR, GPIOx_MODER,
GPIOx_OTYPER and GPIOx_PUPDR)
277
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie, 4 registres de configuration (GPIOx_ODR, GPIOx_MODER,
GPIOx_OTYPER and GPIOx_PUPDR)
278
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie, 4 registres de configuration (GPIOx_ODR, GPIOx_MODER,
GPIOx_OTYPER and GPIOx_PUPDR)
279
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie, 4 registres de configuration (GPIOx_ODR, GPIOx_MODER,
GPIOx_OTYPER and GPIOx_PUPDR)
280
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie
281
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie
00 = Input,
10 = AF,
01 = Ouput
11 = Analog(default)
282
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie
0 = Output push-pull (default)
1 = Ouput open-drain
00 = Input,
10 = AF,
01 = Ouput
11 = Analog(default)
283
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie
00 = No pull-up, no Pull-down,
10 = Pull-down,
01 = Pull-up
11 = Reserved
0 = Output push-pull (default)
1 = Ouput open-drain
00 = Input,
10 = AF,
01 = Ouput
11 = Analog(default)
284
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En sortie : Push Pull et Open Drain
En mode Push-Pull, c'est le port d'E/S qui impose le niveau logique d'une broche,
que ce soit un niveau '1' ou '0'. Il est le maître, le circuit extérieur est l'esclave,
récepteur.
En mode Open Drain (Drain est le nom de la broche du transistor MOS reliée à la
broche : Drain laissé ouvert), le port d'E/S ne peut imposer que le niveau logique '0'.
Le niveau '1' est fixé par le circuit extérieur. Le port d'E/S n'est donc pas le seul
maître du potentiel sur la broche. Le circuit extérieur l'est aussi.
285
STM32 : GPIO DESCRIPTION FONCTIONNEL
286
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En entrée, il y a trois modes : Mode entrée flottante (floating input),
Mode entrée tirée au niveau bas (Pull Down input) et Mode entrée
tirée au niveau haut (Pull up input)
287
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En entrée, il y a trois modes : Mode entrée flottante (floating input),
Mode entrée tirée au niveau bas (Pull Down input) et Mode entrée
tirée au niveau haut (Pull up input)
288
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En entrée, il y a trois modes : Mode entrée flottante (floating input),
Mode entrée tirée au niveau bas (Pull Down input) et Mode entrée
tirée au niveau haut (Pull up input)
289
STM32 : GPIO DESCRIPTION FONCTIONNEL
o En entrée, il y a trois modes : Mode entrée flottante (floating input),
Mode entrée tirée au niveau bas (Pull Down input) et Mode entrée
tirée au niveau haut (Pull up input)
290
STM32 : GPIO DESCRIPTION FONCTIONNEL
o GPIO Mode Register (GPIOx_MODER)
o 32 bits (16 pins, 2 bits par pin)
00 = Input mode
01 = Ouput mode
10 = Alternate Function mode (PMW, ..),
11 = Analog mode (default)
291
STM32 : GPIO DESCRIPTION FONCTIONNEL
o GPIO Pull-Up / Pull-Down Register (GPIOx_PUPDR)
o 32 bits (16 pins, 2 bits par pin)
00 = No Pull-Up, no pull down
01 = Pull-Up
10 = Pull-down
11 = Reserved
292
STM32 : GPIO DESCRIPTION FONCTIONNEL
o GPIO Ouput Type Register (GPIOx_OTYPE)
o 16 bits réservés, 16 bits de données, 1 bits par pin
0 = Output push-pull (default)
1 = Open drain
293
STM32 : GPIO DESCRIPTION FONCTIONNEL
o GPIO Output Data Register (GPIOx_ODR)
o 16 bits réservés, 16 bits de données, 1 bits par pin
294
STM32 : GPIO DESCRIPTION FONCTIONNEL
o GPIO Input Data Register (GPIOx_IDR)
o 16 bits réservés, 16 bits de données, 1 bits par pin
295
STM32 : GPIO CONFIGURATION
296
STM32: TIMER
297
STM32 : TIMER
o Compteur/Decompteur électronique 16bits rechargeable automatiquement.
o Prédiviseur 16 bits programmable
o Jusqu’à 4 canaux indépendants permettant :
o La capture d’événements
o La comparaison avec le compteur
o Un mode PWM
o Mode on-Pulse
o Cirduit de synchronisation externe et chainage des différents timers possible
o Générateur d’interruption ou de requête DMA sur différents événements
o Recyclage du compteur, initialisation du compteur
o Déclenchement (Start, Stop, initialisation ou déclenchement interne /externe)
o Capture d’événement
o Comparaison
298
STM32 : TIMER
299
STM32 : Description Fonctionnelle
o Unité de base
o
o
o
o
Le Composant principal : un compteur 16 bits
Mode décompteur/compteur – auto chargement
Prédiviseur de l’horloge du compteur
Les registres
o Registre du compteur :
TIMx_CNT
o Registre du prediviseur :
TIMx_PSC
o Registre autochargement :
TIMx_ARR
o Registre de repetition
TIMx_RCR
o Fonctionnement
o Le registre d’auto-chargement (ARR) est préchargé
o Lire ou écrire dans le registre d’autochargement revient à accéder au
régitre de préchargement
o Le contenu du registre de préchargement est transférer dans le
registre d’auto-chargement (Shadow) soit de façon permanente ou à
charque événement de mise à jour (bit UEV) en fonction du bit ARPE
dans le registre CR1.
o L’événement de mise à jour est généré quand le compteur recycle (ou
logiciellement) et que le bit UDIS du registre CR1 est à 0.
300
STM32 : Description Fonctionnelle
o Prédiviseur
o Le compteur est piloté par une horloge prédivisé CK_CNT
o Cette horloge est activée uniquement si le bit CEN du registre CR1 est à 1
o Remarque : le signal CNT EN relié à CK CNT passe à 1 après 1 cycle
d’horloge suite à la mise à 1 du bit CEN.
o Il peut diviser l’horloge d’un facteur compris entre 1 et 65536
o C’est un compteur 16 bits contrôler par le registre 16 bits PSC
o Sa valeur peut être changée au fil de l’eau elle sera alors prise en compte
au prochain événement de mise à jour
o Mode Compteur
o Bit CMS=00 et bit DIR=0 (registre CR1)
o Dans ce mode le compteur compte de 0 à la valeur du registre d’autochargement (registre ARR)
o Arrivée à la valeur du registre ARR il recycle en redémarrant un cycle de
comptage de 0
o Au recyclage un événement de dépassement de capacité est généré
(Overflow)
o Un événement de mise à jour peut être généré à chaque recyclage ou en
positionnant le bit UG du registre EGR
301
STM32 : Description Fonctionnelle
o Mode Compteur
o L’ événement de mise à jour peut être désactivé via le bit UDIS du registre
CR1
o Si le bit URS (registre CR1) est à 1, positionner le bit UG génére un
événement de mise à jour sans générer d’interruption
o Quand un événement de mise à jour survient, tous les registres sont mise
à jour et le bit d’interruption IUF du registre SR est mis à 1 en fonction de
la valeur du bit URS.
o Mode Compteur – Mise à jour
o Le registre tampon du prédiviseur est rechargé avec la valeur du registre
PSC
o Le registre d’auto-chargement est rechargé avec la valeur du registre
ARR.
302
STM32 : TIMER
303
STM32 : TIMER
304
STM32 : Description Fonctionnelle
o Mode décompteur
o Bit CMS=00 et bit DIR=0 (registre CR1)
o Idem mode compteur sauf que comptage de la valeur du registre de
préchargement à 0.
o Mode Compteur – Mise à jour
o Bit CMS = 01,10 ou11 (registre CR1)
o Dans un premier temps mode compteur de 0 à valeur d’auto-chargement
o Puis recyclage
o Dans un second temps mode décompteur de valeur d’auto-chargement à 0
o Puis recyclage
o et reprise en mode compteur et ainsi de suite
305
STM32 : TIMER
306
STM32 : Description Fonctionnelle
o Selection horloge
o L’horloge du compteur peut provenir de
o L’horloge interne par défaut CK INT qui est générée par :
o HSI par défaut Oscillateur 8 MHz (bits SW = 00 registre
CFGR unité CRR)
o HSE oscillateur externe (bits SW = 01 registre CFGR unité
CRR)
o PLL (bits SW = 10 registre CFGR unité CRR)
o Une première horloge externe sur une broche TIx
o Horloge
o Une seconde horloge externe sur une entrée de déclenchement ETR
o Un signal de déclenchement interne (ITRx) utilisant un timer comme
prédiviseur pour un autre timer. Par exemple le Timer1 sert de prédiviseur
au Timer2.
o Sélection de CK_INT quand le champs SMS=000 dans le registre SMCR
o Sélection première horloge externe quand SMS=111
o Sélection seconde horloge externe quand ECE=1 dans le registre SMCR
307
STM32 : TIMER
o Mode compteur
Period =(1+ARR)*Clock Period = 7* Clock Period
308
STM32 : TIMER
o Mode décompteur
Period =(1+ARR)*Clock Period = 7* Clock Period
309
STM32 : TIMER
o Mode alterné
Period =2*Clock Period = 12* Clock Period
310
STM32 : TIMER-PWM
o Mode 1: PWM
o TIMER Ouput =1 si counter < CCR
o TIMER Ouput =0 si counter >= CCR
311
STM32 : TIMER-PWM
o Mode 1: PWM
o TIMER Ouput =1 si counter < CCR
o TIMER Ouput =0 si counter >= CCR
312
STM32 : TIMER-PWM
o Mode 1: PWM
o TIMER Ouput =1 si counter < CCR
o TIMER Ouput =0 si counter >= CCR
313
STM32 : TIMER-PWM
o Mode 2: PWM
o TIMER Ouput =0 si counter < CCR
o TIMER Ouput =1 si counter >= CCR
314
STM32 : TIMER-PWM
o Mode 2: PWM
o TIMER Ouput =0 si counter < CCR
o TIMER Ouput =1 si counter >= CCR
315
STM32 : TIMER-PWM
o Mode 2: PWM
o TIMER Ouput =0 si counter < CCR
o TIMER Ouput =1 si counter >= CCR
316
STM32 : TIMER-PWM
o Mode 2: PWM
o TIMER Ouput =0 si counter < CCR
o TIMER Ouput =1 si counter >= CCR
317
STM32 : TIMER (Différents registres)
318
STM32 : TIMER (Différents registres)
319
STM32 : TIMER (Différents registres)
320
STM32 : TIMER (Différents registres)
o Détails des régitres voir à partir de la page 243 du document
Manual RM0368.
o Les unités TIMx du STM32 ont hormis le mode minuteur basique
deux autres mode d’utilisation :
o Le mode Capture-Compare. Dans ce mode il est possible d’une part
de capturer en fonction d’un événement la valeur du compteur du
Timer, d’autre part de comparer la valeur du compteur à une valeur
préalablement charger dans le registre Capture-Compare.
o Le mode PWM : Pulse Width Modulation, qui permet de générer des
signaux périodiques ayant un rapport cyclique variable.
o Ces fonctions sont mises en œuvre à l’aide de 4 canaux
indépendants.
321
STM32 : TIMER (Différents registres)
o Capture
o En mode capture, le registre TIMx_CCRx copie la valeur du compteur
après la détection d’une transition sur le signal ICx
o Quand une capture est réalisée, le drapeau correspondant CCxIF du
registre TIMx_SR est mis à 1
o Une interruption ou une requête DMA peut être prise en compte si elle
est autorisée (bits CCxIE et CCxDE du registre TIMx_DIER).
o Si une capture intervient alors que le drapeau CCxIF est à 1, alors le
drapeau CCxOF (over-capture) du registre TIMx_SR est mis à 1.
o Le drapeau CCxIF est mis à 0 soit par logiciel, soit en lisant la valeur
du registre TIMx CCR.
o Le drapeau CCxOF est mis 0 par logiciel.
322
STM32 : TIMER (Différents registres)
o Capture
o Ce mode permet de générer un signal périodique de fréquence fixé
par le registre TIMx_ARR et de rapport cyclique fixé par le registre
TIMx_CCRx.
o Les 4 canaux peuvent être indépendamment initialisés dans ce mode
en mettant les valeurs ”110” ou ”111” dans les bits OCxM du registre
TIMx_CCMRx.
o Il faut autoriser la sortie via le bit OCxPE du registre TIMx_CCMRx
o Possibilité d’utiliser le mode Capture pour spécifier la valeur de la
fréquence et du rapport cyclique
323
STM32: ADC
324
STM32 : ADC
o Structure générale, et fonctionnement d'un périphérique ADC
325
STM32 : ADC
o Structure générale, et fonctionnement d'un périphérique ADC
o le mode single conversion : l'utilisateur lance une conversion
et récupère le résultat dans le registre associé, soit en scrutant
le drapeau EOC, soit en attendant l'entrée en interruption.
o Le mode auto conversion : l'utilisateur lance une conversion,
et dès que l'ADC finit sa conversion, il en lance une autre,
éventuellement sur un autre canal, et ce de manière cyclique.
Les résultats sont donc à lire régulièrement, sinon ils sont
perdus. Selon le microcontrôleur les résultats peuvent être
stockés dans une table de registres internes au périphérique,
ou directement dans une table en RAM. On parle alors de DMA
(Direct Memory Access).
326
STM32 : ADC
o Tensions et durées importantes dans la conversion A/N
o
o
Temps d'acquisition, tacq : durée pendant laquelle l'échantillonneur est fermé.
La tension e(t) évolue de manière exponentielle à cause du condensateur. Il
est donc nécessaire, de tenir l'échantillonneur fermé un certain temps, tacq.
Temps de conversion, tconv : Lorsque l'échantillonneur est ouvert, la tension
e(t) reste constante, et la conversion peut commencer. Elle dure un temps lié à
l'horloge d'entrée de l'ADC et à la technologie de l'ADC.
327
STM32 : ADC
o Caractéristiques
o Résolution : Amplitude de la plus petite variation. Correspond au LSB
(Least Significant Bit)
o Temps de conversion : Temps de stabilisation de la donnée en sortie
o Erreur de Quantification : Incertitude du à la conversion
o Pleine Echelle : Etendue de la grandeur Analogique d’entrée
328
STM32 : ADC
o ADC STM32 : Caractéristiques principales
o
o
o
o
o
o
o
o
o
o
o
o
o
Résolution de 12 bits
Interruption de fin de conversion
Mode simple conversion ou conversion continue
Mode de balayage multi-canal
Auto-Calibration
Alignement des données sur 16 bits (droite ou gauche)
Temps de conversion programmable canal par canal
Déclenchement par signal externe
Mode de conversion discontinue lors de balayage
Chainage de convertisseur (si le circuit en posséde au moins 2)
Tension requise entre 2,4 V et 3,6V
Plage de conversion entre Vref − <= Vin <= Vref +
Requête DMA pour la conversion régulière
329
STM32 : ADC
o ADC STM32 : Schéma
330
STM32 : ADC
o Mise sous tension
Mise sous tension via la mise à 1 du bit ADON (registre CR2 de l’ADC)
La première mise à 1 du bit ADON met sous tension l’ADC
La seconde mise à 1 du bit ADON démarre la conversion
La mise hors tension et l’arrêt de la conversion s’effectue en mettant à
0 le bit ADON
o En mode hors tension l’ADC ne consomme que quelques µA
o
o
o
o
o Horloge
o l’horloge ADCCLK du convertisseur est synchrone avec celle du bus
APB2, l’horloge PCLK2
o Il est possible de programmer un prédiviseur, par rapport à PCLK2,
pour l’horloge ADCCLK dans le contrôleur RCC
331
STM32 : ADC
o Sélection des canaux
o Il y a 16 canaux de conversions multiplexés
o Organisation possible en deux groupes : réguliers et injectés
o Un groupe est une séquence de conversions (16 au plus pour
réguliers, 4 au plus pour injectés)
o Une séquence peut-être réalisée dans un ordre aléatoire
o Le nombre de conversions, l’ordre de conversion sont fixés via les
registres SQRx et ISQR
o Horloge
o Capteur de Température interne connecté au canal 16
o Une tension Vrefint interne est connectée au canal 17
o Accessible avec l’ADC1.
332
STM32 : ADC
o Mode simple conversion
o Bit CONT à 0 (registre CR2)
o Démarrage par bit ADON uniquement pour groupe réguliers
o Une fois le canal converti
o La donnée convertie est stockée dans le registre 16 bits DR
o Le drapeau EOC est positionnée
o Une interruption est générée si le bit EOCIE est à 1.
o Mode Conversion continue
o Bit CONT à 1 (registre CR2)
o Démarrage par bit ADON uniquement pour groupe réguliers
o Une fois le canal converti
o La donnée convertie est stockée dans le registre 16 bits DR
o Le drapeau EOC est positionnée
o Une interruption est générée si le bit EOCIE est à 1.
333
STM32 : ADC
o Mode simple conversion : Diagramme Temporel
334
STM32 : ADC Description Fonctionnelle
o Balayage Multi-Canaux
oBit SCAN à 1 (registre CR1)
oConversion des canaux sélectionnés via les registres SQRx et JSQR
oUne conversion est effectuée pour chaque canal du groupe
oAprés la fin de la conversion d’un canal, le canal suivant est directement
traité
oNécesité d’utiliser le DMA pour récupérer les données
oUne interruption est générée, si EOCIE est à 1, aprés la dernière
conversion.
oMode Discontinu
oBit DISCEN à 1 (registre CR1)
oConversion d’un sous ensemble de canaux d’un groupe
oTaille du sous ensemble n <= 8
oTaille spécifiée via les bits DISCNUM[2:0] (registre CR1)
oPiloté par un événement externe
oLors de l’événement, conversion des n canaux parmi le groupe
335
STM32 : ADC Description Fonctionnelle
o Calibration
o Procédure d’auto-calibration
o Réduction des erreurs de précision du aux variations des capacités
internes
o Calcul de l’erreur pour chaque capacité
o Démarrage par mise à 1 du bit CAL (registre CR2)
o Remise à zéro automatique du bit CAL après calibration
o Procédure recommandée à la mise sous tension de l’ADC.
o Alignement des données
o Bit ALIGN (registre CR2)
o Alignement à droite si ALIGN = 0
o Alignement à gauche si ALIGN = 1
336
STM32 : ADC Description Fonctionnelle
o Temps de Conversion
o Échantillonnage sur n ADCCLK cycles
o n modifiable
o bits SMPx[2:0] pour le canal x (registres SMPR1 et SMPR2)
o Différenciation du temps par canal
o Temps Total
o Tconv = Tps Rchant. + 12,5 cycles
oDéclenchement externe
o Conversion pilotage par événement externe
o Entrée EXTI
o bits EXTSEL [2:0] pour séléctionner le type de l’événement
337
STM32 : ADC Description Fonctionnelle
o Déclenchement externe
338
STM32 : Memory MAP peripherals
RM0368
339
STM32 : ADC Les registres
o Cartographie mémoire du CAN
340
STM32 : ADC Les registres
o Cartographie mémoire du CAN
341
STM32 : ADC Les registres
o Cartographie mémoire du CAN
342
STM32 : ADC Les registres
o Cartographie mémoire du CAN
343
STM32 : ADC Les registres
o Cartographie mémoire du CAN
344
STM32 : ADC Les registres
o Registre Horloge RCC
345
STM32 : ADC Les registres
o Registre Horloge RCC
346
STM32: Interruptions
347
STM32 : INTERRUPTIONS
o Qu’est ce qu’une interruption ?
o C’est un évenement qui provoque
oL’arrêt de l’exécution normale d’un programme : le programme est
interrompu
ola sauvegarde de l’état du programme en cours d’exécution : le contexte
d’exécution
ol’exécution d’une routine spécifique liée à cet événement : la routine de
service de l’interruption
ola restauration du contexte d’exécution
ole retour à l’exécution du programme interrompu
o Elle survient de de façonn asynchrones. Elle est commandée par le
matériel (interruption externe) ou par le systéme (interruption
systéme ou exception). Aucune relation avec les instructions en
cours d’exécution.
348
STM32 : INTERRUPTIONS
o Qu’est ce qu’une interruption ?
349
STM32 : INTERRUPTIONS
o Qu’est ce qu’une interruption ?
350
STM32 : INTERRUPTIONS
o Interruptions STM32
o Les interruptions du STM32 sont dites vectorisées
o A chaque source d’interruption correspond un vecteur
d’interruption sur 32 bits
o Le vecteur d’interruption contient l’adresse de la routine de
service de l’interruption
o Pour l’exception système reset, la valeur du vecteur est la valeur
initiale du compteur de programme
o Les vecteurs d’interruption sont contenus dans une table qui est
relogeable
351
STM32 : INTERRUPTIONS
o Interruptions STM32
o Pour la gestion des interruptions le microcontrôleur STM32 via le
CortexM4 fournit
o Sauvegarde et restauration automatique du contexte
d’exécution.
o Le processeur empile les registres avant de servir
l’interruption et les dépile après exécution de la routine de
service de l’interruption. Pas de nécessité d’instruction
spécifique, c’est automatique et transparent pour le
programmeur.
o Lecture automatique d’une table dite de table de vecteur qui
contient les adresses des routines de service des interruptions.
o Effectué en parallèle de la sauvegarde de contexte.
352
STM32 : INTERRUPTIONS
o Interruptions STM32
o Le microcontrôleur STM32 a deux types d’interruptions :
o les exceptions système
o les interruptions externes numérotées de 0 à 59
o le numéro de l’interruption en cours de service peut-être connue
par :
o le registre spécial IPSR (Interrupt Program Status Register)
o le registre ICSR (Interrupt Control State Register) du NVIC
(Nested Vectored Interrupt Controller) dans le champs
VECTACTIVE
o les interruptions ont des priorités permettant d’avoir un systéme
préemptif
353
Téléchargement