0% ont trouvé ce document utile (0 vote)
107 vues37 pages

Interfaces d'E/S et Systèmes Embarqués

Le document décrit l'architecture d'un système à processeur et les interfaces d'entrées/sorties. Il explique le fonctionnement des mémoires et les opérations de lecture et d'écriture effectuées par le processeur.

Transféré par

ilef malouch
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
107 vues37 pages

Interfaces d'E/S et Systèmes Embarqués

Le document décrit l'architecture d'un système à processeur et les interfaces d'entrées/sorties. Il explique le fonctionnement des mémoires et les opérations de lecture et d'écriture effectuées par le processeur.

Transféré par

ilef malouch
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction :

Interfaces d’Entrées/Sorties

1
Contenu:

• Architecture d’un système à Processeur.

• SOCs & Microcontrôleurs.

• Interfaçage Processeur – Mémoires.

• Interfaçage Processeur - Interface d’E/S

• Accès aux registres des Interfaces d’E/S.

• Exemples: Commande Leds / Afficheur 7 segments.

2
Introduction
Un “Système à processeur” (exple: PC) possède l’architecture suivante:

Mémoire Program Memory


(SRAM) (Flash, Eeprom, Rom)

Processeur BUS

Interfaces de périphériques (Peripheral Interfaces, Peripherals)

Interfaces de contrôle (Contrôleur d’interruption, DMA)

GPIO (General Purpose Input Output) « Periph Interfaces »


Introduction
Les systèmes embarqués posent des contraintes au niveau:
• Taille.
• Poids.
• Consommation.
Regrouper les composants au niveau d’un seul circuit intégré

qq 100 kBytes  qq MBytes

qq 10 MHz  qq 100 MHz

On parle de SOC (System On Chip)


« Système sur puce »
Introduction
On distingue principalement deux catégories de SOCs:

• SP-SOC: Single Purpose SOC. (« SOC » tout court)


Les composants (Interfaces de périphériques)
sont choisis en fonction de l’application ciblée.

• GP-SOC: General Purpose SOC.


Un grand nombre d’interfaces de périphériques
sont disponibles et peuvent supporter plusieurs types
d’applications
Introduction
SP-SOC: STB de ST-Microelectronics: STi5518 OMEGA
Conçu pour les récepteurs satellite numériques.

les interfaces sont


responsables pour:
 L’encodage numérique.
 Le décodage vidéo/
audio.
 L ’accès au Flash /
Disque dur / carte à puce /
Télécommande / moteur.

Processeur
(80 Mhz)
Introduction
Les microcontrôleurs (µc): Des SOCs à usage général

Mémoire Mémoire programme


(RAM) (Flash, Eeprom, Rom)

Processeur BUS

Entrées /Sorties
Ces périphériques sont ajoutés
Timer(s)
Parallèles
Périphériques selon l’application ciblée:
Convertisseur(s) Communication additionnels On trouve:
A/N & N/A série  Périph. Ethernet pour les
applications réseaux.
 Périph. CAN pour les application
Ces périphériques qui se Automobiles.
trouvent pratiquement dans  Périph PWM pour les application
tous µc en nombres de commande de moteurs.
différents.
Introduction
La programmation d’un système embarqué :

• Une partie traitement (algorithmes basés sur des conditions


+ opérations arithmétiques, ) : programmation standard

• Une partie « Accès aux Interfaces de Périphériques » afin


de communiquer avec l’extérieur.
INTRODUCTION

Dans un système à processeur, Le microprocesseur est relié aux autres


composants (Mémoire, Interfaces d’Entrées/Sorties (Série, USB, Réseau, etc.)par:
• Bus de contrôle unidirectionnel (μp : transportant les signaux de contrôle
(Read (Lecture) et Write (écriture) indiquant le type d’opération à effectuer.

• Bus d’adresses unidirectionnel (μ p  ): transportant l’adresse dont


le contenu doit être lu ou modifié.
• Bus de données bidirectionnel : transportant les données lues
(des composants vers le μ p) ou écrites (du μ p vers les composants).

Bus de contrôle

Bus d’adresses

Interface Interface Interface Interface


Microprocesseur Mémoire
série parallèle USB …..

Bus de données
Les mémoires

CS
AN-1
Une mémoire est caractérisée par : AN-2
. Mémoire
• N lignes d’adresses: AN-1 AN-2 …..A0 .
A0
• M lignes de données DM-1DM-2……D0

• Des lignes de contrôle (Lecture ‘RD’ et écriture’ WR’).


• Une ligne de validation qui permet d’activer DM-1 DM-2……D0
ou désactiver la mémoire (notée CS :Chip select ou
CE: Chip Enable).

La mémoire contient 2N mots et occupe un espace de 2N adresses


• Commençant par l’adresse 0 …jusqu’à 2N-1.
• Chaque mot (donc adresse) représentant un registre de M bits (8 généralement)
Les mémoires

Une mémoire ayant:


- 3 lignes d’adresses : A2A1A0.
- 4 ligne de données : D3D2D1D0.

Adresse Contenu
A2 A1 A0 D3 D2 D1 D0
Cette mémoire contient: 1 1 1 (07) 1 1 0 1
1 1 0 (06) 1 0 0 1
A2
• 23 = 8 mots occupant 8 adresses : [0..7]. 1 0 1 (05) 0 1 0 0
A1
A0 1 0 0 (04) 1 1 0 0
• Chaque mot (adresse) ayant une taille
0 1 1 (03) 0 0 0 0
de 4 bits.
0 1 0 (02) 1 0 0 0
0 0 1 (01) 0 1 1 0
0 0 0 (00) 1 1 1 0

D3D2D1D0
Les mémoires

Pour une lecture à partir de la mémoire du mot ayant l’adresse 06 = 110:

1) Le µp active le signal READ (lecture).


2) Le µp émet l’adresse du mot à lire .
3) La mémoire émet le contenu de l’adresse 06
(110) sur le bus de données vers le µp.
Adresse Contenu
Microprocesseur A2 A1 A0 D3 D2 D1 D0
1 RD 1 1 1 (07) 1 1 0 1
READ
1 1 0 (06) 1 00 00 11
WRITE WR
1 0 1 (05) 0 1 0 0
1 A2 1 0 0 (04) 1 1 0 0
A2
1 A1 0 1 1 (03) 0 0 0 0
A1
0 1 0 (02) 1 0 0 0
0 A0
A0 0 0 1 (01) 0 1 1 0
0 0 0 (00) 1 1 1 0
D3 D2 D1 D0
D3 D2 D1 D0
Bus de données
Les mémoires

Pour une écriture de la donnée 1111dans la mémoire du mot ayant l’adresse 06 = 110:

1) Le µp active le signal WRITE (Écriture).


2) Le µp émet l’adresse du mot à modifier 110 = 06.
3) La µp émet la donnée (1111) à écrire dans sur
le bus de données vers la mémoire.
Adresse Contenu
Microprocesseur A2 A1 A0 D3 D2 D1 D0
RD 1 1 1 (07) 1 1 0 1
READ
1 1 0 (06) 1 0 0 1
WRITE
1 WR
1 0 1 (05) 0 1 0 0
1 A2 1 0 0 (04) 1 1 0 0
A2
1 A1 0 1 1 (03) 0 0 0 0
A1
0 1 0 (02) 1 0 0 0
0 A0
1 1 1 1 A0 0 0 1 (01) 0 1 1 0
0 0 0 (00) 1 1 1 0
D3 D2 D1 D0
D3 D2 D1 D0
Bus de données
Interfaces d’Entrées/Sorties (1)

Une interface E/S (Entrées/Sorties) est le moyen pour le microprocesseur de


communiquer avec le monde externe (Périphériques).
Relativement à un microprocesseur, une interface E/S est un circuit considéré comme
étant une mémoire dont le contenu peut être lu (READ) et modifié (WRITE):
• Ayant N lignes d’adresses.
• Ayant M lignes de données?
• contenant 2N registres (mots de M bits, avec M=8 généralement)).
• Occupant un espace de 2N adresses: 0..2N-1.

Microprocesseur
RD
READ Circuit d’interface
WR E/S
WRITE
Registre 2N-1
AN-1
AN-1 ……..
..
. Registre 1
. A0
A0 Registre 0

DM DM-1… D0
DM-1 …………… D0
Bus de données
Interfaces d’Entrées/Sorties (2) : Connexion externe

Vue de l’extérieur, une interface d’entrée/Sortie est un connecteur contenant un


certain nombre de pins (broches).
Chaque bit de l’un des registres du
circuit d’interface étant connecté à
un pin (broche) du connecteur.
Circuit d’interface
E/S

RD

b7 b6 b5 b4 b3 b2 b1 b0
WR
Registre i

AN-1
.. b7 b6 b5 b4 b3 b2 b1 b0

A0 Registre i-1

DM-1 …………… D0

Circuit d’interface
E/S (Interne) Interface E/S vu de l’extérieur
Interfaces d’Entrées/Sorties (3) : Sortie

Un registre de l’interface d’E/S peut être utilisé en SORTIE pour une communication du
µp vers l’extérieur  Écriture dans le registre
La valeur de chacun des bits de la donnée écrite dans le registre est transformée:
• en un niveau de tension(V+ = 5V) au niveau du pin si le bit = ‘1’.

• en un niveau de tension(V- = 0V) au niveau du pin si le bit = ‘0’.

Circuit d’interface
E/S 5V
μP
RD
READ
WR
WRITE
0V
AN-1 ‘1’
b b b b b b
‘0’
b b
AN-1 .. 7 6 5 4 3 2 1 0

.
1 0 1 1 0 0 1 0 Registre E/S
. A0
A0

D7 D6… ..D0
D7 …. …………… D0
Bus de données
16
Interfaces d’Entrées/Sorties (4) : Entrée

Un registre de l’interface d’E/S peut être utilisé en ENTREE (communication de l’extérieur vers le µp):
L’application d’un niveau de tension quelconque sur les pins du connecteur se traduit par:
• Apparition d’un ‘ 0 ’ au niveau du bit si on applique au pin une tension de 0V.
• Apparition d’un ‘ 1 ’ au niveau du bit si on applique au pin une tension de +5V.

 Le µp effectue une opération de Lecture depuis le registre

Circuit d’interface
E/S 0V
μP
RD
READ
WR
WRITE

AN-1 +5V
b b b b b b b b
AN-1 .. 7 6 5 4 3 2 1 0

. ‘0‘ ‘1‘
0 X X X X X X 1 . A0 Registre E/S
A0

D7 D6… ..D0
D7 …. …………… D0

Bus de données
Interfaces d’Entrées/Sorties (5) : Programmation en ‘C’

La programmation des interfaces d’E/S en langage ‘C’:

• Pour l’accès en écriture à un registre d’E/S :

#define Reg_name (type_data*) adr;

// Déclaration d’un registre Reg_name de taille type_data et occupant l’adresse adr

*Reg_name = valeur;

// Ecrire une valeur dans le registre Reg_name.


Interfaces d’Entrées/Sorties (5) : Programmation en ‘C’

La programmation des interfaces d’E/S en langage ‘C’:

• Pour l’accès en Lecture à un registre d’E/S :

#define Reg_name (type_data*) adr;

// Déclaration d’un registre Reg_name de taille type_data et occupant l’adresse adr

Variable = *Reg_name ;

// Lire le contenu de l’emplacement du registre Reg_name.


Application commande Leds (1)

Exemple1: Un PC dispose d’un circuit d’interface E/S parallèle ‘8255’ contenant un registre 8 bits
(Port A) occupant l’ adresse 300 Hexa et connecté à 8 Diodes Leds (voir figure).
Ces Leds s’allument quand on leur applique V=+5V et s’éteignent quand on leur applique V = 0V.
 Écrire un programme en ‘C’ qui permet de faire clignoter continuellement les 8 Leds.
(ne pas tenir compte de la configuration des pins du port)

8255
PA7 Led7
.
μP RD PA6
.
READ PA5 .
WR .
PA4
WRITE .
PA3
.
A1 PA2 .
A1
.
A0 PA1
.
A0
PA0 Led0
D7 D6… ..D0
D7 …. …………… D0
Bus de données
Application commande Leds (2) : solution

Commençons par modéliser le Fonctionnement du système par un diagramme:

Appliquer des ‘1’ à toutes


Les Leds pour les allumer.
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
Allumer les
Leds 1 1 1 1 1 1 1 1
= FF Hexa
F F

Appliquer des ‘0’ à toutes


Allumer les Les Leds pour les éteindre.
Leds PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

0 0 0 0 0 0 1 0
0 0
= 00 Hexa
Application commande Leds (3) : solution

Le programme en ‘C’ :

#define PortA (uint8_t*) 0x300;

// Répéter continuellement
While (1)
{
8255
// Allumer les Leds 1
PA7 Led7
.
*PortA = 0x0FF; μP RD 1
PA6
.
READ 1
PA5 .
// Éteindre les Leds WR .
1
PA4
.
*portA = 0x00; WRITE
1
PA3 .
} A1 .
A1 1
PA2
.
A0 1
PA1
.
A0
1
PA0 Led0
D7 D6… ..D0
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
Application commande Leds (4) : solution

Le programme en ‘C’ :

#define PortA (uint8_t*) 0x300

// Répéter continuellement
While (1)
{
8255
// Allumer les Leds PA7 1 Led7
*PortA = 0x0FF; .
μP RD PA6 1 .
READ PA5 1 .
// Éteindre les Leds WR .
*portA = 0x00;
PA4 1
WRITE .
PA3 1 .
} A1 PA2 1 .
A1
.
A0 PA1 1 .
A0
PA0
1 Led0
D7 D6… ..D0
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
Application commande Leds (5) : solution

#define PortA (uint8_t*) 0x300;

// Répéter continuellement
While (1)
{
// Allumer les Leds
*PortA = 0x0FF; 8255
0
PA7 1 Led7
.
// Éteindre les Leds μP RD 0
PA6 1 .
*portA = 0x00; READ 0
PA5 1 .
WR .
} 0
PA4 1
WRITE .
0
PA3 1 .
A1 1 .
A1 0
PA2
.
A0 0
PA1 1 .
A0
0
PA0
1 Led0
D7 D6… ..D0
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
Application commande Leds (6) : solution

#define PortA (uint8_t*) 0x300;

// Répéter continuellement
While (1)
{
8255
// Allumer les Leds PA7 0 Led7
*PortA = 0x0FF; 0 .
μP RD PA6
.
// Éteindre les Leds READ PA5 0 .
WR .
*portA = 0x00; PA4 0
WRITE .
PA3 0 .
} A1
A1 PA2 0 .
.
A0 PA1 0 .
A0
PA0
0 Led0
D7 D6… ..D0
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
Application Afficheur ‘7’ segments (1)

Exemple2: Un PC dispose d’un circuit d’interface E/S parallèle ‘8255’ contenant un registre 8 bits
(noté port C) occupant l’ adresses 30E Hexa et connecté à un afficheur 7 segments (voir figure).

Chacun des segments s’allume quand on lui applique +5V et s’éteint quand on lui applique 0V.
 De telle sorte à pouvoir afficher n’importe quel nombre entre 0 et 9.
 Écrire un programme en ‘C’ qui permet d’afficher ‘3’. (ne pas tenir compte de la configuration)

8255
PC7 a a
b
μP RD PC6

READ PC5 c f b
WR
PC4 d g
WRITE PC3 e e c
A1 PC2
A1 f
A0 PC1
g d h
A0
PC0
h
D7 D6… ..D0
D7 …. …………… D0
Bus de données
Application Afficheur ‘7’ segments (2) : solution

Commençons par modéliser le fonctionnement


du système par un diagramme:

PC7 a a
PC6 b Mettre à ‘1’ les segments
devant être allumés
PC5 c f b
PC4 d g

PC3 e e c Afficher ‘3’ PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
 Allumer les (a) (b) (c) (d) (e) (f) (g) (h)
PC2 f d h Segments: 1 1 1 1 0 0 1 0
PC1 g
a, b, c, d et g F 2
= F2 Hexa
PC0
h
Application Afficheur ‘7’ segments (3) : solution

#define PortC (uint8_t*) 0x30E;

// Allumer les segments a,b,c,d & g


*PortC = 0x0F2;
8255
1
PC7 a a
RD 1
PC6 b
1
PC5 c f b
WR
1
PC4 d g
0
PC3 e e c
A1 0
PC2 f
A0 1
PC1
g d h
0
PC0
h

D7 …. …………… D0
Application Afficheur ‘7’ segments (4) : solution

#define PortC (uint8_t*) 0x30E;

// Allumer les segments a,b,c,d & g


*PortC = 0x0F2;
8255
PC7 1a a
RD PC6 1b
PC5 1c f b
WR
PC4 1d g
PC3 0e e c
A1 PC2 0f
A0 PC1 1g d h
PC0 0h

D7 …. …………… D0
Application Boutons Poussoir + Leds (1)
Exemple3: Un PC dispose d’un circuit d’interface E/S parallèle ‘8255’ contenant deux registres 8
bits: Port A occupant l’ adresse 0x300 et le Port C occupant l’adresse 0x30E
Le port A à 2 Diodes Leds et le port C à deux boutons poussoir (voir figure).
 Écrire un programme en ‘C’ qui permet de Tester l’état des deux boutons poussoirs BP0
et BP1 et: - allumer la Led0 si le bouton BP0 est appuyé.
- allumer la Led1 si le bouton BP1 est appuyé.
- éteindre les 2 Leds sinon.
(ne pas tenir compte de la configuration des pins du port)

8255
PA7

μP RD …

READ PA1 Led1


WR Led0
PA0
WRITE
A1 PC7
A1 …
A0 BP1 Un bouton poussoir génère
A0 PC1
0V au repos et +5V quand
PC0
D7 D6… ..D0 BP0 il est appuyé
D7 …. …………… D0 30
Bus de données Damergi Emir - INSAT 2013/14
Application Boutons Poussoir + Leds (2): solution

Commençons par modéliser le


Fonctionnement du système par
un diagramme:

Configurer
l’interface 8255

Lire Etat BPs


 Lire Port C
BP1 BP0
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
Appui BP0 Sinon Appui BP0 0 1 = 01 Hexa
Appui BP1 1 0 = 02 hexa
Appui BP1

Led1 Led0
Allumer Allumer Éteindre PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
Led 0 Led 1 Leds Allumer Led0 0 1 = 01 H
Allumer Led1 1 0 = 02 H
Éteindre Leds 0 0 = 00 H
31
Damergi Emir - INSAT 2013/14
Application Boutons Poussoir + Leds (2): solution

Le programme en ‘C’:
// Déclaration des pointeurs
#define PortA (uint8_t*) 0x300;
#define PortC (uint8_t*) 0x30E;
Lire Port C
(30Eh)
Uint8_t etat_bouton; // variable 8 bits

// Lire État des Boutons Poussoir (Port C)


etat_bouton = * portC ;
Port C = 01 h Sinon

// Test et traitement
Port C = 02 h
switch (etat_bouton)
{
case 0x01: *portA = 0x01;
Port A (300h) Port A (300h) Port A (300h) case 0x02: *portA = 0x02);
= 01 h = 02 h = 00 h default : *portA = 0x00);
}

32
Damergi Emir - INSAT 2013/14
Application Boutons Poussoir + Leds (3): Poblème lecture d’un bit

Dans la solution proposée, on a testé juste les


Lire Port C
(30Eh)
valeurs 01 et 02 H en supposant que les autres
Valeurs sont à 0.

Port C = 01 h Sinon
?
Port C = 02 h
Ceci n’est pas vrai car les autres
entrées du port C peuvent prendre des
valeurs aléatoires inconnues

PC7

PC6
etat_bouton: à tester
PC5 ?
PC4
donnée b7 b6 b5 b4 b3 b2 b1 b0
PC3
Bits à masquer Bits à
AND garder
PC2

PC1 BP1
variable 0 0 0 0 0 0 1 1 = 03h
PC0
BP0

Résultat 0 0 0 0 0 0 b1 b0
33
Damergi Emir - INSAT 2013/14
Application Boutons Poussoir + Leds (4): Solution corrigée

La solution est de forcer les valeurs des bits non utilisés à ‘0’
 On parle d’opération de masquage

Il s’agit d’effectuer une opération de ET logique entre la donnée à tester


et une variable binaire dont la valeur est déterminée comme suit:
- 0 pour chaque bit occupant la même position d’un bit à masquer.
- 1 pour les autres bits

Dans notre exemple, on s’intéresse aux bits b1


et b0 et on veut masquer les autres bits b7..b2

etat_bouton: à tester
// Lire État des Boutons Poussoir
(Port C)
donnée b7 b6 b5 b4 b3 b2 b1 b0
etat_bouton = *PortC AND 0x03;
Bits à masquer Bits à
AND garder

variable 0 0 0 0 0 0 1 1 = 03h

Résultat 0 0 0 0 0 0 b1 b0
34
Damergi Emir - INSAT 2013/14
Application Boutons Poussoir + Leds (1)
Exemple3: Le port A à 2 Diodes Leds et le port C à deux
Le programme en ‘C’:
boutons poussoir // Déclaration des pointeurs
Tester l’état des deux boutons poussoirs BP0 et BP1 et: #define PortA (uint8_t*) 0x300;
#define PortC (uint8_t*) 0x30E;

- allumer la Led0 si le bouton BP0 est appuyé. Uint8_t etat_bouton; // variable 8 bits

- allumer la Led1 si le bouton BP1 est appuyé.


- éteindre les 2 Leds sinon.
// Lire État des Boutons Poussoir (Port C)

etat_bouton = * portC & 0x03;

8255 // Test et traitement


PA7 switch (etat_bouton)
{
μP RD …
case 0x01: *portA = 0x01; //allumer led0
READ PA1 Led1
WR Led0 case 0x02: *portA = 0x02; //allumer led1
PA0
WRITE
A1 PC7 default : *portA = 0x00;//éteindre 2leds
A1 … }
A0 BP1
A0 PC1

PC0
D7 D6… ..D0 BP0
D7 …. …………… D0 35
Bus de données Damergi Emir - INSAT 2018/19
Application Boutons Poussoir + Leds (5): Poblème Imposer valeurs de bits

Dans la solution proposée, on a allumé resp. les 0


leds 1 et 2 en utilisant les valeurs 01 (bit 0=1) et 02 0
0
(Bit 1 = 1)
0
On a ainsi forcé tous les autres bits (2 ..7) à 0 !! 0
(qui sont probablement utilisés pour contrôler d’autres 0
périphs )

36
Embedded Training
Application Boutons Poussoir + Leds (6): Solution = masquage logique

• Lecture du contenu du registre (dont le contenu est à

modifier)

• Imposer les valeurs ‘0’ et ‘1’ dans des positions précises.

 Masquage logique

• Ecrire la nouvelle valeur dans la registre.

37
Damergi Emir - INSAT 2018/19

Vous aimerez peut-être aussi