TD N°3: Conception Conjointe Avec Le Processeur Embarqué Hardcore Du Sopc Zedboard
TD N°3: Conception Conjointe Avec Le Processeur Embarqué Hardcore Du Sopc Zedboard
Nous allons utiliser la bank 2 des EMIO (32 bits) en entrée plus 2 EMIO supplémentaires en
sortie (34 EMIO au total). Le bouton poussoir (BP est connecté au PS via les MIO). Le
tableau suivant vous indique les connexions à respecter :
1
Institut Supérieur d'Informatique L3SE
5 entity design_1_wrapper is
6 port (
7 DDR_addr : inout STD_LOGIC_VECTOR ( 14 downto 0 );
8 DDR_ba : inout STD_LOGIC_VECTOR ( 2 downto 0 );
9 DDR_cas_n : inout STD_LOGIC;
10 DDR_ck_n : inout STD_LOGIC;
11 DDR_ck_p : inout STD_LOGIC;
12 DDR_cke : inout STD_LOGIC;
13 DDR_cs_n : inout STD_LOGIC;
14 DDR_dm : inout STD_LOGIC_VECTOR ( 3 downto 0 );
15 DDR_dq : inout STD_LOGIC_VECTOR ( 31 downto 0 );
16 DDR_dqs_n : inout STD_LOGIC_VECTOR ( 3 downto 0 );
17 DDR_dqs_p : inout STD_LOGIC_VECTOR ( 3 downto 0 );
18 DDR_odt : inout STD_LOGIC;
19 DDR_ras_n : inout STD_LOGIC;
20 DDR_reset_n : inout STD_LOGIC;
21 DDR_we_n : inout STD_LOGIC;
22 FCLK_CLK0 : out STD_LOGIC;
23 FIXED_IO_ddr_vrn : inout STD_LOGIC;
24 FIXED_IO_ddr_vrp : inout STD_LOGIC;
25 FIXED_IO_mio : inout STD_LOGIC_VECTOR ( 53 downto 0 );
26 FIXED_IO_ps_clk : inout STD_LOGIC;
27 FIXED_IO_ps_porb : inout STD_LOGIC;
28 FIXED_IO_ps_srstb : inout STD_LOGIC;
29 GPIO_I : in STD_LOGIC_VECTOR ( 33 downto 0 );
30 GPIO_O : out STD_LOGIC_VECTOR ( 33 downto 0 )
31 );
32 end design_1_wrapper;
2
Institut Supérieur d'Informatique L3SE
34 component design_1 is
35 port (
36 FCLK_CLK0 : out STD_LOGIC;
37 GPIO_I : in STD_LOGIC_VECTOR ( 33 downto 0 );
38 GPIO_O : out STD_LOGIC_VECTOR ( 33 downto 0 );
39 DDR_cas_n : inout STD_LOGIC;
40 DDR_cke : inout STD_LOGIC;
41 DDR_ck_n : inout STD_LOGIC;
42 DDR_ck_p : inout STD_LOGIC;
43 DDR_cs_n : inout STD_LOGIC;
44 DDR_reset_n : inout STD_LOGIC;
45 DDR_odt : inout STD_LOGIC;
46 DDR_ras_n : inout STD_LOGIC;
47 DDR_we_n : inout STD_LOGIC;
48 DDR_ba : inout STD_LOGIC_VECTOR ( 2 downto 0 );
49 DDR_addr : inout STD_LOGIC_VECTOR ( 14 downto 0 );
50 DDR_dm : inout STD_LOGIC_VECTOR ( 3 downto 0 );
51 DDR_dq : inout STD_LOGIC_VECTOR ( 31 downto 0 );
52 DDR_dqs_n : inout STD_LOGIC_VECTOR ( 3 downto 0 );
53 DDR_dqs_p : inout STD_LOGIC_VECTOR ( 3 downto 0 );
54 FIXED_IO_mio : inout STD_LOGIC_VECTOR ( 53 downto 0 );
55 FIXED_IO_ddr_vrn : inout STD_LOGIC;
56 FIXED_IO_ddr_vrp : inout STD_LOGIC;
57 FIXED_IO_ps_srstb : inout STD_LOGIC;
58 FIXED_IO_ps_clk : inout STD_LOGIC;
59 FIXED_IO_ps_porb : inout STD_LOGIC
60 );
61 end component design_1;
62 begin
3
Institut Supérieur d'Informatique L3SE
Figure 1
On suppose que :
- Le PS fournit au PL (et plus précisément au compteur 8 bits implémenté au niveau du PL)
une horloge CLK0, un signal Reset et une entrée de validation CE.
- Le compteur 8 bits envoie la valeur courante du comptage (compt codée sur 8 bits) vers le
PS.
- Les états des 8 switches (qui sont physiquement connectés au PL) sont acheminés vers le PS.
Ces switches donnent une valeur codée sur 8 bits. SW0 correspond au bit de poids faible et
SW7 correspond au bit de poids fort.
- Le PS calcule la valeur moyenne de l'état des switches et de la valeur du comptage. Cette
valeur moyenne sera envoyée vers les LEDs. La LED0 correspond au bit de poids faible et la
LED7 correspond au bit de poids fort.
On se propose d'utiliser la bank 2 des EMIO (32 bits) en entrée afin de simplifier l’écriture du
programme C. Il sera en effet plus facile de faire une écriture 32 bits dans la bank 2 que
4
Institut Supérieur d'Informatique L3SE
d’écrire chacun des 16 bits dans l’EMIO correspondante. Les 16 entrées inutilisées de la bank
2 seront simplement ignorées par le PS. Les 10 EMIO de sorties seront, en revanche, utilisées
broche par broche. Le tableau suivant indique les connexions à respecter:
Figure 2
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
3 library UNISIM;
4 use [Link];
5 entity design_1_wrapper is
6 port (
7 DDR_addr : inout STD_LOGIC_VECTOR(14 downto 0);
5
Institut Supérieur d'Informatique L3SE
31 );
32 end design_1_wrapper;
34 component design_1 is
35 port (
36 DDR_cas_n : inout STD_LOGIC;
37 DDR_cke : inout STD_LOGIC;
38 DDR_ck_n : inout STD_LOGIC;
39 DDR_ck_p : inout STD_LOGIC;
40 DDR_cs_n : inout STD_LOGIC;
41 DDR_reset_n : inout STD_LOGIC;
42 DDR_odt : inout STD_LOGIC;
43 DDR_ras_n : inout STD_LOGIC;
44 DDR_we_n : inout STD_LOGIC;
45 DDR_ba : inout STD_LOGIC_VECTOR(2 downto 0);
46 DDR_addr : inout STD_LOGIC_VECTOR(14 downto 0);
47 DDR_dm : inout STD_LOGIC_VECTOR(3 downto 0);
48 DDR_dq : inout STD_LOGIC_VECTOR(31 downto 0);
49 DDR_dqs_n : inout STD_LOGIC_VECTOR(3 downto 0);
50 DDR_dqs_p : inout STD_LOGIC_VECTOR(3 downto 0);
51 FIXED_IO_mio : inout STD_LOGIC_VECTOR(53 downto 0);
52 FIXED_IO_ddr_vrn : inout STD_LOGIC;
53 FIXED_IO_ddr_vrp : inout STD_LOGIC;
54 FIXED_IO_ps_srstb : inout STD_LOGIC;
55 FIXED_IO_ps_clk : inout STD_LOGIC;
56 FIXED_IO_ps_porb : inout STD_LOGIC;
57 FCLK_CLK0 : out STD_LOGIC;
58 GPIO_I : in STD_LOGIC_VECTOR(41 downto 0);
59 GPIO_O : out STD_LOGIC_VECTOR(41 downto 0)
6
Institut Supérieur d'Informatique L3SE
60 );
61 end component design_1;
62 begin
7
Institut Supérieur d'Informatique L3SE
end STRUCTURE;
Q1. Modifier le Wrapper afin qu'il réponde au cahier des charges en termes d'entrées/sorties
du système ainsi qu'en termes de signaux internes qui relient le PS et la PL.
Le compteur à implémenter dans la PL possède comme entrée une horloge active au front
montant, un signal Reset actif au niveau haut, une entrée de validation CE active au niveau
haut. Il est à noter que les signaux Reset et CE sont synchrones par rapport au signal d'horloge
et que le signal reset est prioritaire par rapport au signal CE. Le compteur est initialisé à zéro.
Q2. Rajouter dans le Wrapper un process qui décrit le comportement du compteur 8 bits.
Rajouter des signaux internes et des bibliothèques si nécessaire.
N.B : Suivre les commentaires pour écrire ces différentes étapes du programme.
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
int main(void)
8
Institut Supérieur d'Informatique L3SE
{
/* variable pour les données lues en entrée sur le bank 2 (switches
et valeur du comptage)*/
u32 data_in;
u8 compteur; // variable pour la valeur du comptage
u8 E_SW; // variable pour les états des switches
u8 Moy; // variable pour la valeur moyenne
____________________________________________________________________
9
Institut Supérieur d'Informatique L3SE
____________________________________________________________________
// afficher la valeur du compteur
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
// introduire un délai de 0.5s
____________________________________________________________________
// mettre le signal de validation CE au niveau haut
____________________________________________________________________
}
return 0;
}
10
Institut Supérieur d'Informatique L3SE
Figure 1
L'application permet de faire l'addition ou la multiplication de deux nombres codés chacun sur
4 bits. On suppose que :
- Les boutons poussoirs BP1 et BP2 (qui sont physiquement connectés au PS via les MIO)
permettent de choisir le type d'opération: Si on appuie sur BP1 alors on choisit l'addition, et si
on appuie sue BP2 alors on choisit la multiplication des deux nombres.
- Les états des 8 switches (qui sont physiquement connectés au PL) donnent les deux nombres
à additionner ou à multiplier. Les 4 switches de poids faible (de SW0 à SW3) représentent le
premier nombre et les 4 switches de poids fort (de SW4 à SW7) représentent le second
nombre. Les états des 8 switches sont acheminés vers le PS.
- Le PS extrait les deux nombres. Dans le cas d'une addition, la somme est calculée au niveau
PS. Dans le cas d'une multiplication, le PS renvoie les deux nombres (via les signaux N1 et
N2) vers la PL et plus précisément au multiplieur qui calcule le produit (codé sur 8 bits) et
l'envoie à son tour au PS.
- Le résultat de l'addition ou de la multiplication est ensuite envoyé vers les LEDs (qui sont
physiquement connectés au PL). La LED0 correspond au bit de poids faible et la LED7
correspond au bit de poids fort.
On se propose d'utiliser les deux banks (2 et 3) des EMIO afin de simplifier l’écriture du
programme C. Il sera en effet plus facile de faire une écriture 32 bits dans une bank que
d’écrire chacun des bits dans l’EMIO correspondante. La bank 2 est utilisée pour les entrées
et la bank 3 est utilisée pour les sorties. Les entrées ou sorties inutilisées des banks seront
simplement ignorées par le PS. Le tableau suivant indique les connexions à respecter:
11
Institut Supérieur d'Informatique L3SE
Figure 2
Figure 3
La conception sera divisée en deux parties: la partie I est consacrée à l'implémentation
matérielle et la partie II est consacrée à l'implémentation logicielle. Les deux parties peuvent
être considérées indépendantes et chaque question de chaque partie peut être développée
indépendamment des autres.
12
Institut Supérieur d'Informatique L3SE
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
3 library UNISIM;
4 use [Link];
5 entity design_1_wrapper is
6 port (
7 DDR_addr : inout STD_LOGIC_VECTOR(14 downto 0);
8 DDR_ba : inout STD_LOGIC_VECTOR(2 downto 0);
9 DDR_cas_n : inout STD_LOGIC;
10 DDR_ck_n : inout STD_LOGIC;
11 DDR_ck_p : inout STD_LOGIC;
12 DDR_cke : inout STD_LOGIC;
13 DDR_cs_n : inout STD_LOGIC;
14 DDR_dm : inout STD_LOGIC_VECTOR(3 downto 0);
15 DDR_dq : inout STD_LOGIC_VECTOR(31 downto 0);
16 DDR_dqs_n : inout STD_LOGIC_VECTOR(3 downto 0);
17 DDR_dqs_p : inout STD_LOGIC_VECTOR(3 downto 0);
18 DDR_odt : inout STD_LOGIC;
19 DDR_ras_n : inout STD_LOGIC;
20 DDR_reset_n : inout STD_LOGIC;
21 DDR_we_n : inout STD_LOGIC;
22 FIXED_IO_ddr_vrn : inout STD_LOGIC;
23 FIXED_IO_ddr_vrp : inout STD_LOGIC;
24 FIXED_IO_mio : inout STD_LOGIC_VECTOR(53 downto 0);
25 FIXED_IO_ps_clk : inout STD_LOGIC;
26 FIXED_IO_ps_porb : inout STD_LOGIC;
27 FIXED_IO_ps_srstb : inout STD_LOGIC;
28 GPIO_I : in STD_LOGIC_VECTOR(63 downto 0);
29 GPIO_O : out STD_LOGIC_VECTOR(63 downto 0)
30 );
31 end design_1_wrapper;
13
Institut Supérieur d'Informatique L3SE
33 component design_1 is
34 port (
35 DDR_cas_n : inout STD_LOGIC;
36 DDR_cke : inout STD_LOGIC;
37 DDR_ck_n : inout STD_LOGIC;
38 DDR_ck_p : inout STD_LOGIC;
39 DDR_cs_n : inout STD_LOGIC;
40 DDR_reset_n : inout STD_LOGIC;
41 DDR_odt : inout STD_LOGIC;
42 DDR_ras_n : inout STD_LOGIC;
43 DDR_we_n : inout STD_LOGIC;
44 DDR_ba : inout STD_LOGIC_VECTOR(2 downto 0);
45 DDR_addr : inout STD_LOGIC_VECTOR(14 downto 0);
46 DDR_dm : inout STD_LOGIC_VECTOR(3 downto 0);
47 DDR_dq : inout STD_LOGIC_VECTOR(31 downto 0);
48 DDR_dqs_n : inout STD_LOGIC_VECTOR(3 downto 0);
49 DDR_dqs_p : inout STD_LOGIC_VECTOR(3 downto 0);
50 FIXED_IO_mio : inout STD_LOGIC_VECTOR(53 downto 0);
51 FIXED_IO_ddr_vrn : inout STD_LOGIC;
52 FIXED_IO_ddr_vrp : inout STD_LOGIC;
53 FIXED_IO_ps_srstb : inout STD_LOGIC;
54 FIXED_IO_ps_clk : inout STD_LOGIC;
55 FIXED_IO_ps_porb : inout STD_LOGIC;
56 GPIO_I : in STD_LOGIC_VECTOR(63 downto 0);
57 GPIO_O : out STD_LOGIC_VECTOR(63 downto 0)
58 );
59 end component design_1;
60 begin
14
Institut Supérieur d'Informatique L3SE
Process(_________________________________)
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
15
Institut Supérieur d'Informatique L3SE
________________________________________________________________
________________________________________________________________
End process;
end STRUCTURE;
Q1. Modifier le Wrapper afin qu'il réponde au cahier des charges en termes d'entrées/sorties
du système ainsi qu'en termes de signaux internes qui relient le PS et la PL.
N.B : Suivre les commentaires pour écrire ces différentes étapes du programme.
#include <stdio.h>
__________________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
int main(void)
16
Institut Supérieur d'Informatique L3SE
u32 data_in;
u32 data_out;
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
While(1)
____________________________________________________________________
17
Institut Supérieur d'Informatique L3SE
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
/* Lire les états des boutons poussoirs BP1 et BP2 (utiliser les
variables E_BP1 et E_BP2) */
____________________________________________________________________
____________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
18
Institut Supérieur d'Informatique L3SE
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
// Ecrire le résultat sur le bank 3 pour allumer les LEDs
____________________________________________________________________
}
return 0;
}
On suppose que :
- le contrôleur VGA permet l’affichage d’un rectangle d’une certaine couleur à une position
bien précise de l’écran (voir TD1).
- Le PS fournit au PL (et plus précisément au contrôleur VGA) une horloge CLK0 et un signal
Reset.
- Les états des 4 boutons poussoirs (qui sont physiquement connectés au PL) sont acheminés
vers le PS. Ces boutons permettent le déplacement du rectangle. BP0 pour un déplacement en
haut, BP1 en bas, BP2 à gauche et BP3 à droite. Ce déplacement est égale à delta_x si c’est un
déplacement horizontal et à delta_y si c’est un déplacement vertical.
- Le PS fournit au contrôleur les valeurs de x_rect, y_rect, delta_x et delta_y.
On se propose d'utiliser la bank 2 des EMIO (32 bits) pour delta_x et delta_y. On utilise le
channel 1 de l’AXI GPIO pour x_rect et y_rect. Le channel 2 de l’AXI GPIO est réservé pour
les boutons poussoirs. Le tableau suivant indique les connexions à respecter:
19
Institut Supérieur d'Informatique L3SE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use [Link];
entity design_1_wrapper is
port (
DDR_addr : inout STD_LOGIC_VECTOR ( 14 downto 0 );
DDR_ba : inout STD_LOGIC_VECTOR ( 2 downto 0 );
DDR_cas_n : inout STD_LOGIC;
DDR_ck_n : inout STD_LOGIC;
DDR_ck_p : inout STD_LOGIC;
DDR_cke : inout STD_LOGIC;
DDR_cs_n : inout STD_LOGIC;
DDR_dm : inout STD_LOGIC_VECTOR ( 3 downto 0 );
DDR_dq : inout STD_LOGIC_VECTOR ( 31 downto 0 );
DDR_dqs_n : inout STD_LOGIC_VECTOR ( 3 downto 0 );
DDR_dqs_p : inout STD_LOGIC_VECTOR ( 3 downto 0 );
DDR_odt : inout STD_LOGIC;
DDR_ras_n : inout STD_LOGIC;
DDR_reset_n : inout STD_LOGIC;
DDR_we_n : inout STD_LOGIC;
FCLK_CLK0 : out STD_LOGIC;
FIXED_IO_ddr_vrn : inout STD_LOGIC;
FIXED_IO_ddr_vrp : inout STD_LOGIC;
FIXED_IO_mio : inout STD_LOGIC_VECTOR ( 53 downto 0 );
FIXED_IO_ps_clk : inout STD_LOGIC;
FIXED_IO_ps_porb : inout STD_LOGIC;
FIXED_IO_ps_srstb : inout STD_LOGIC;
GPIO_O_0 : out STD_LOGIC_VECTOR ( 32 downto 0 );
gpio2_io_o_0 : out STD_LOGIC_VECTOR ( 19 downto 0 );
gpio_io_i_0 : in STD_LOGIC_VECTOR ( 3 downto 0 )
);
end design_1_wrapper;
component design_1 is
port (
20
Institut Supérieur d'Informatique L3SE
begin
21
Institut Supérieur d'Informatique L3SE
On souhaite implémenter une application embarquée sur le FPGA Zynq du SoPC Zedboard.
Cette application fait appel à la logique programmable (PL) ainsi qu'au système à base de
processeur (PS) du FPGA. L'interfaçage entre la PL et le PS est réalisé avec le port AXI ainsi
qu’avec les EMIO. Le système à implémenter dans le FPGA est décrit par la figure 1.
Figure 1
22
Institut Supérieur d'Informatique L3SE
On suppose que :
-l’application a pour but de piloter un afficheur 7 segments et une matrice de LEDs 4x4. Si
SW=0 alors un chenillard est implémenté sur l’afficheur 7 segments (un seul segment est
allumé à la fois : le segment a puis le segment b puis le segment c…). Si SW=1, une LED est
initialement allumée sur la matrice et selon les états des boutons poussoirs, la LED au-dessus,
au-dessous, à gauche ou à droites sera allumée.
- L’état du switch SW et des 4 boutons poussoirs BPs (qui sont physiquement connectés au
PL) sont acheminés vers le PS.
On se propose d'utiliser le channel 1 de l’AXI GPIO pour acheminer les états des boutons
poussoirs et le channel 2 pour En et LEDs. On utilise l’EMIO 54 en broche pour SW. Le
tableau suivant indique les connexions à respecter:
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
3 library UNISIM;
4 use [Link];
5 entity design_1_wrapper is
6 port (
7 DDR_addr : inout STD_LOGIC_VECTOR ( 14 downto 0 );
8 DDR_ba : inout STD_LOGIC_VECTOR ( 2 downto 0 );
9 DDR_cas_n : inout STD_LOGIC;
10 DDR_ck_n : inout STD_LOGIC;
11 DDR_ck_p : inout STD_LOGIC;
12 DDR_cke : inout STD_LOGIC;
23
Institut Supérieur d'Informatique L3SE
32 );
33 end design_1_wrapper;
35 component design_1 is
36 port (
35 DDR_cas_n : inout STD_LOGIC;
24
Institut Supérieur d'Informatique L3SE
62 begin
25
Institut Supérieur d'Informatique L3SE
end STRUCTURE;
Q1. Modifier le Wrapper afin qu’il réponde au cahier des charges en termes d'entrées/sorties
du système ainsi qu'en termes de signaux internes qui relient le PS et la PL.
Q2. Rajouter un process dans le Wrapper afin d’implémenter le bloc IP diviseur de fréquence.
La fréquence du signal de sortie clkout doit être de fréquence 2Hz.
Q3. Rajouter un second process dans le Wrapper afin d’implémenter le bloc IP C_7seg (le
contrôleur de l’afficheur 7 segments). Quand En est au niveau haut et au front montant de
26
Institut Supérieur d'Informatique L3SE
l’horloge clkout, ce bloc permet d’allumer un seul segment à la fois (segment a puis segment
b puis segment c puis segment d…) et ce, dans le but d’implémenter un effet chenillard sur
l’afficheur. Si le signal En est au niveau bas alors éteindre tous les segments. On suppose que
le signal En est asynchrone par rapport à l’horloge clkout.
Q4. Compléter le code C à implémenter sur le processeur embarqué. Suivre les commentaires
pour écrire ces différentes étapes du programme.
#include <stdio.h>
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
int main(void)
___________________________________________________________________________
___________________________________________________________________________
___________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
27
Institut Supérieur d'Informatique L3SE
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
While(1)
____________________________________________________________________
//Si SW=0 alors mettre En au niveau haut et éteindre toutes les LEDs
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
28
Institut Supérieur d'Informatique L3SE
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
____________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
____________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
____________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
29
Institut Supérieur d'Informatique L3SE
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
}
return 0;
30
Institut Supérieur d'Informatique L3SE
Annexe
int XGpio_Initialize(XGpio*InstancePtr,u16DeviceId)
void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel,u32 DirectionMask)
u32 XGpio_GetDataDirection(XGpio *InstancePtr, unsigned Channel)
u32 XGpio_DiscreteRead(XGpio *InstancePtr, unsigned Channel)
void XGpio_DiscreteWrite(XGpio *InstancePtr, unsigned Channel, u32 Mask)
void XGpio_DiscreteSet(XGpio *InstancePtr, unsigned Channel, u32 Mask)
31
Institut Supérieur d'Informatique L3SE
32