• Aucun résultat trouvé

GELE5343 Chapitre 1 : Introduction aux syst`emes `a microprocesseurs

N/A
N/A
Protected

Academic year: 2022

Partager "GELE5343 Chapitre 1 : Introduction aux syst`emes `a microprocesseurs"

Copied!
174
0
0

Texte intégral

(1)

GELE5343 Chapitre 1 :

Introduction aux syst` emes ` a microprocesseurs

Gabriel Cormier, Ph.D., ing.

Universit´e de Moncton

Hiver 2013

(2)

Introduction

Contenu

1 Introduction

2 D´efinition

3 March´e

4 Caract´eristiques

5 PIC32

(3)

efinition

Syst` eme embarqu´ e

Dispositif contenant un microprocesseur Parfois invisible `a l’utilisateur

Pas n´ecessaire d’avoir un syst`eme `a la fine pointe

(4)

efinition

Syst` eme embarqu´ e

Utile pour :

Flexibilit´e : plus facile `a modifier le logiciel (software) que le mat´eriel (hardware)

Plus facile `a corriger les erreurs

Permet d’ajouter de la fonctionnalit´e plus tard (peut ˆetre une source de revenus)

(5)

efinition

Exemples

Sonicare Elite : Brosse `a dent ´electrique (8 bit) Imprimantes

Carte de contrˆole de disque dur Automobiles, avions

Cam´era num´erique

Sant´e : pacemaker, ´equipement de diagnostique

(6)

March´e

March´ e

Selon certains estim´es : 100 fois plus de microcontrˆoleurs vendus que de microprocesseurs de PC

March´e de gros volume, mais moins grand revenus

(7)

March´e

March´ e des microprocesseurs en 2002

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

Volume Dollars

32-Bit 16-Bit 8-Bit 4-Bit DSP

(8)

March´e

March´ e des microprocesseurs en 2006

0% 10% 20% 30% 40% 50% 60%

Type

64-Bit 32-Bit 16-Bit 8-Bit 4-Bit

(9)

March´e

March´ e des microprocesseurs en 2012

DSP; 7%

4/8 bit; 6%

16 bit; 7%

32 bit; 10%

MPU; 70%

PART DU MARCHÉ DES MICROPROCESSEURS, 2012 (73.8 G$)

(10)

March´e

March´ e des microprocesseurs en 2011

0 5000 10000 15000 20000 25000

Marché des microcontrolleurs (M$)

(11)

March´e

Langage de programmation des microprocesseurs en 2006

0% 10% 20% 30% 40% 50% 60% 70%

C C++

C#

Java Assembleur Autres

(12)

March´e

Langage de programmation des microprocesseurs en 2011

C C++

.NET Java Assembleur Autres

(13)

March´e

Croissance pr´ evue du march´ e 2011 – 2016

Communications Automobile Total Industriel Gov./Mil.

Ordinateur Consommateur

(14)

March´e

Vendeurs principaux en 2011

Entreprise Rang 2011 March´e % changement de 2010

Renesas Electronics 1 17.3% -1%

Freescale Semiconductor 2 10.1% 4%

Atmel 3 7.4% 25%

Microchip 4 6.7% 6%

Infineon 5 6.6% 18%

Texas Instruments 6 5.5% 4%

Fujitsu 7 5.5% -17%

NXP Semiconductors 8 4.8% -2%

ST Microlectronics 9 4.4% -3%

Samsung 10 3.4% -1%

Autres 28.4% 2%

(15)

Caract´eristiques

Microcontrˆ oleurs : Caract´ eristiques

Tr`es souvent des syst`emes `a temps r´eel Contraintes de minutage tr`es importantes Deux cat´egories : Critique et non critique

(16)

Caract´eristiques

Syst` emes critiques

D´efaillance peut ˆetre catastrophique : freins dans voiture, syst`eme de coussins gonflables, stimulateur cardiaque, etc.

Le microprocesseur doit d´etecter correctement les entr´ees et appliquer la sortie appropri´ee selon le d´elai prescrit.

(17)

Caract´eristiques

Syst` emes non critiques

Syst`eme o`u la d´efaillance n’est pas catastrophique Erreurs de minutage ou de fonctionnement pas critiques Ex : lecteur MP3

(18)

Caract´eristiques

Autres caract´ eristiques

Auto-d´emarrage Horloge de surveillance Coˆut

Fiabilit´e

Consommation de puissance Performance

Design et d´eveloppement

(19)

Caract´eristiques

Design et d´ eveloppement

G´en´eralement, `a base d’´ev´enements

Communiqu´es au processeur par des interruptions (interrupt)

Doit g´erer ces interruptions (ex : plus d’un en mˆeme temps) ; priorit´es Contrˆole des exceptions (ex : division par z´ero ?)

(20)

Caract´eristiques

Design et d´ eveloppement

G´en´eralement, choisir le microcontrˆoleur le moins cher qui fait le travail.

Ne pas n´egliger l’exp´erience avec un manufacturier V´erifier si du code peut ˆetre r´eutilis´e

V´erifier la facilit´e et coˆut des outils de d´eveloppement

(21)

Caract´eristiques

Design et d´ eveloppement

Souvent, les microcontrˆoleurs n’ont pas de syst`eme d’exploitation (operating system)

Si oui, c’est un syst`eme d’exploitation en temps r´eel (SETR ouRTOS) R´eagit `a des ´ev´enements de fa¸con consistante (d´elai toujours le mˆeme)

Pas comme Windows qui vous dit d’attendre ! Quelques exemples :

INTEGRITY LynxOS OSE

Windows CE

(22)

Caract´eristiques

Erreur logicielles catastrophiques

Attention aux erreurs logiciels

Therac-25 (1985 – 1987) : quelques patients morts `a cause de doses massives de radiation, due `a une mauvaise s´equence de clavier dans un intervalle de 8 s lors de traitements pour le cancer.

Ariane 5 - vol 501 (1996) : fus´ee et satellite de 500M$ d´etruit `a cause d’erreur de conversion d’une valeur 64 bit virgule flottante `a 16 bit entier (overflow ou d´epassement).

Phobos 1 (1998) : code de d´ebogage a ´et´e activ´e par erreur de 1 caract`ere, et la sonde n’a pas pu recharger ses batteries et a ´et´e perdue.

(23)

Caract´eristiques

Erreur logicielles catastrophiques

Apollo 11 (1969) : Armstrong a ´et´e forc´e de faire un atterrissage manuel `a cause d’une erreur dans le manuel.

Missile Patriot (1991) : Un missile Patriot n’a pas intercept´e un Scud irakien causant la mort de 28 personnes, due `a une erreur

d’arrondissement de 1/1011. Le syst`eme n’´etait pas con¸cu pour op´erer continuellement, et l’erreur d’arrondissement s’est multipli´ee et a caus´e une erreur de minutage.

(24)

Caract´eristiques

Manufacturiers

AMD : www.amd.com

Analog Devices : www.analog.com/processors

ARM :www.arm.com/products/CPUs/embedded.html(IP) ATMEL :www.atmel.com/products

Freescale :www.freescale.com(Motorola)

Intel : www.intel.com/design/embedded/solutions Microchip :www.microchip.com(PIC)

MIPS : www.mips.com/products/processors(IP) TI :focus.ti.com

(25)

PIC32

PIC32

Caract´eristiques :

80 MHz, 1.56 DMIPS/MHz Multiplication en 1 cycle Cache 256 Bytes

Contrˆoleur DMA 8 canaux Convertisseur A/N 10 bit

Port parall`ele 16 bit pour vid´eo (QVGA) USB, Ethernet

Unit´e arithm´etique en entier (pas de FPU)

512 KB m´emoire, 128KB RAM (PIC32MX460F512L)

(26)

PIC32

(27)

GELE5343 Chapitre 2 :

R´ evision de la programmation en C

Gabriel Cormier, Ph.D., ing.

Universit´e de Moncton

Hiver 2013

(28)

Introduction

Contenu

1 Introduction

2 Flot de programmation

3 Variables et ´evaluations

4 Boucles

5 Optimisation

6 Compteur

7 Interruptions

(29)

Introduction

Rappel : C

On s’int´eresse seulement aux commandes communes de programmation pour des microcontrˆoleurs.

Ressources web :

www.cprogramming.com C: Wikipedia

The C book

(30)

Flot de programmation

Flot de programmation

Fonctions efinitions Programme principal

main() D´eclarations Initialisation des fonctions Commandes de pr´eprocesseur

(31)

Flot de programmation

D´ eclarations

Commandes avec “#” sont pour le pr´eprocesseur

Pr´eprocesseur : passe `a travers le document 1 fois avant de compiler

#include <stdio.h>: Va chercher le contenu du fichier stdio.h pour le placer dans le fichier actuel

#define foo bar: cherche pour foodans le fichier et le remplace par bar. Utile pour des constantes.

#pragma : Commandes propres `a l’impl´ementation : d´epend du compilateur. Si ces commandes ne sont pas comprises par le compilateur, elles sont ignor´ees.

(32)

Variables et ´evaluations

Types de variables

Entiers :

int: entier, `a 32 bits. Utilisera 4B en m´emoire. De −231 `a231−1 short : entier `a 16 bits (2B en m´emoire). De−215`a215−1 long long : entier `a 64 bits (8B en m´emoire). De−263 `a263−1 unsigned: permet d’avoir des entiers positifs seulement. Ex : unsigned short, de 0`a65 535

char : pour des caract`eres ; 8 bits. Utile pour des compteurs de−128

`

a127(ou 0`a255).

Ex : int i = 22ouint i = 0x0016 (en hexad´ecimal)

(33)

Variables et ´evaluations

Types de variables

Autres :

float : chiffre `a virgule flottante, 32 bits

long double: chiffre `a virgule flottante `a 64 bits

(34)

Variables et ´evaluations

Quel type utiliser ?

Multiplication Bits Cycles Performance relative

Int Float

char 8 6 1 –

short 16 6 1 –

int 32 6 1 –

long long 64 21 3.5 –

float 32 71 11.8 1

long double 64 159 26.5 2.23

(35)

Variables et ´evaluations

Vecteurs et matrices

On ajoute des parenth`eses carr´ees lors de la d´eclaration.

char c[10]: matrice de 10 entiers de 8 bits Le premier ´el´ement est l’´el´ement0 :

Selon l’exemple, on ac[0]`ac[9].

Il faut initialiser le vecteur au complet avant de l’utiliser ; on ne peut pas avoir de matrice de dimension inconnue.

(36)

Variables et ´evaluations

Evaluation de variables ´

Evaluations logiques´

Faux est repr´esent´e par 0

Vrai est repr´esent´e par n’importe quel entier sauf 0

|| : op´erateur OU (OR)

&& : op´erateur ET (AND)

!: op´erateur NON (NOT) Ex : Sia= 17etb= 1,

a || best VRAI a && best VRAI

!aest FAUX

(37)

Variables et ´evaluations

Comparaison de variables

== “est ´egal `a”

!= “n’est pas ´egal `a”

>“plus grand que”

>= “plus grand ou ´egal `a”

<“plus petit que”

<= “plus petit ou ´egal `a”

Exemple : sia= 10, a>1est VRAI -a >= 0est FAUX a == 17est FAUX a != 3est VRAI

(38)

Variables et ´evaluations

Incr´ ementation

Deux autres op´erateurs : ++ :

i++´equivalent `a i = i+1 --

i--´equivalent `a i = i-1

Peut ˆetre appliqu´e avant ou apr`es une assignation. Ex : soita= 0 et b= 1 :

a = b++donnea= 1,b= 2 a = ++bdonnea= 2,b= 2

(39)

Boucles

Boucles

Trois types principaux de boucles : Boucle for

Boucle while Boucle do- while

(40)

Boucles

Boucle for

c h a r i ;

f o r ( i =0; i<5; i ++) { // f a i r e q u e l q u e c h o s e

// s e r a e x ´e c u t ´e p o u r i = 0 , 1 , 2 , 3 e t 4 }

Les trois arguments :

i=0: initialise le compteur

i<5: v´erifie s’il faut s’arrˆeter avec une expression logique

(41)

Boucles

Boucle while

w h i l e ( x ) {

// f a i r e q u e l q u e c h o s e }

x: n’importe quelle expression logique

Le code dans la boucle sera ex´ecut´e aussi longtemps que xest vrai.

(42)

Boucles

Boucle do

do {

// f a i r e q u e l q u e c h o s e } w h i l e ( x )

x: n’importe quelle expression logique

Le code dans la boucle sera ex´ecut´e 1 fois, puis ensuite aussi longtemps que xest vrai.

(43)

Optimisation

Optimisation du programme

Espace m´emoire limit´e sur un microcontrˆoleur Espace RAM limit´e

Il faut faire plus attention `a la programmation

(44)

Optimisation

M´ emoire

Eviter les grosses librairies (ex :´ printf) Eviter l’allocation dynamique de m´´ emoire Eviter les structures complexes´

Attention aux d´eclarations de variables (ne pas utiliser intsi char est suffisant)

Les calculs en virgule flottante sont beaucoup plus longs Il peut ˆetre plus efficace d’utiliser des tables pour les fonctions complexes (sin,cos, etc.) que de faire le calcul directement.

(45)

Compteur

Compteurs

Le PIC32 a 6 compteurs, mais seulement 5 devraient ˆetre utilis´es.

Le compteur de coeur du CPU ne devrait pas ˆetre utilis´e (il est cependant accessible).

Les compteurs utilisent l’horloge de p´eriph´erique (qui est plus petite ou ´egale `a l’horloge CPU).

Contrˆol´es par 3 SFR (Special Function Register), ex pour Timer1 : TMR1: contient la valeur (16 bit) du compteur

T1CON: contrˆole l’activation et le mode d’op´eration PR1: P´eriode du compteur (16 bit : valeur max 65 535)

(46)

Compteur

Compteurs

Timer1 est 16 bits, Timer2 `a Timer5 peuvent ˆetre combin´es pour 32 bits (mais 16 bits par d´efaut)

Les compteurs utilisent l’horloge de p´eriph´eriquePBCLK

Il faut r´egler le diviseur d’horloge FBDIV correctement (valeur par d´efaut = 8 ; PBCLK = CLK/8) ;

(47)

Compteur

Compteurs

(48)

Compteur

Compteurs

T1CON :

7 : 0 TGATE TCKPS<1 : 0> TSYNC TCS

15 : 8 TON FRZ SIDL TMWDIS TMWIP

Bit 15/7 Bit 14/6 Bit 13/5 Bit 12/4 Bit 11/3 Bit 10/2 Bit 9/1 Bit 8/0

Les bits 16 `a 31 ne sont pas utilis´es

(49)

Compteur

Compteur T1

TON: Active le compteur

TCS: Horloge du compteur : 0 = horloge interne

TCKPS : Multiplicateur ; 00 = 1, 01 = 8, 10 = 64, 11 = 256 SIDL : comportement en mode inactif du CPU (0 si pas important) TSYNC : Synchronisation avec une horloge externe = 1 (0 sinon) TGATE : Pour horloge externe

FRZ: Pour le d´ebogage (0 par d´efaut)

(50)

Compteur

Exemple

Supposons qu’on veut un compteur de p´eriode 0.2s, avec une horloge de 36MHz interne.

T = 1

fpb ×MP S×P Rx

o`ufpb est la fr´equence de l’horloge de p´eriph´erique,MP S est le

multiplicateur du compteur, et PRxest le nombre de cycles n´ecessaire pour avoir le d´elai voulu.

0.2 = 1

36×106(256)(P Rx)

(51)

Compteur

Exemple (suite)

Avec Timer1 :

TON = 1 : Activer le Timer

TCS = 0 : On utilise l’horloge interne TCKPS = 11: Multiplicateur = 256

TGATE = 0, TSYNC = 0: On utilise l’horloge interne SIDL = 0: Mode veille pas important

7 : 0 TGATE TCKPS<1 : 0> TSYNC TCS

15 : 8 TON FRZ SIDL TMWDIS TMWIP

Bit 15/7 Bit 14/6 Bit 13/5 Bit 12/4 Bit 11/3 Bit 10/2 Bit 9/1 Bit 8/0

(52)

Compteur

Compteurs

T2CON :

7 : 0 TGATE TCKPS<2 : 0> T32 TCS

15 : 8 TON SIDL

Bit 15/7 Bit 14/6 Bit 13/5 Bit 12/4 Bit 11/3 Bit 10/2 Bit 9/1 Bit 8/0

Les bits 16 `a 31 ne sont pas utilis´es. TCKPSest 3 bits pour Timer2-5

(53)

Compteur

Compteur T2

TON: Active le compteur

TCS: Horloge du compteur : 0 = horloge interne TCKPS : Multiplicateur ; (valeur `a 3 bits)

000 = 1, 001 = 2, 010 = 4, 011 = 8 100 = 16, 101 = 32, 110 = 64, 111 = 256

SIDL : comportement en mode inactif du CPU (0 si pas important) T32: 0 = mode 16 bit, 1 = mode 32 bit

(54)

Interruptions

Interruptions

Interruption : ´ev´enement interne ou externe qui demande rapidement l’attention du CPU

PIC32 : 64 sources d’interruption

L’action `a effectuer : ISR (Interrupt Service Routine) G´en´eralement asynchrone

3 – 4 cycles entre l’interruption et l’action correspondante

(55)

Interruptions

Exception

Exception : perturbe le fonctionnement normal du programme Exception

Interruption Reset

Division par 0

Erreur m´emoire

· · ·

(56)

Interruptions

Quelques r` egles...

Le compilateur s’occupe des proc´edures complexes d’interruption, si : Le ISR ne retourne pas de valeur (type void) : asynchrone Aucun param`etre est retourn´e au ISR (param`etre void) N’est pas appel´e par d’autres fonctions

Id´ealement, ne devrait pas appeler d’autres fonctions : rendement Le langage C n’a pas ´et´e con¸cu pour utiliser des interruptions...

(57)

Interruptions

Sources d’interruption

Sources externes :

5 pins externes avec d´etection du niveau

22 pins externes branch´ees au module de notification de changement 5 entr´ees Input Capture

5 sorties Output Compare 2 interfaces port s´erie (UART)

4 interfaces s´eries synchrone (SPI et I2C) 1 port parall`ele

(58)

Interruptions

Sources d’interruption

Sources internes :

1 compteur interne 32 bit 5 compteurs internes 16 bit

1 convertisseur analogique-num´erique 1 module comparateur analogique 1 horloge et calendrier

1 contrˆoleur Flash 1 moniteur d’horloge 2 interruptions logiciel

(59)

Interruptions

Priorit´ es

Chaque source d’interruption a 7 bits de contrˆole : Interrupt Enable :-IE; un seul bit :

0, l’´ev´enement ne g´en`ere pas d’interruption ; 1, l’interruption peut ˆetre ´evalu´ee.

La valeur par d´efaut est 0 pour toutes les interruptions.

Interrupt Flag:-IF; un seul bit, est activ´e (valeur 1) chaque fois que l’´ev´enement a lieu, ind´ependamment de IE. If faut le remettre `a 0 manuellement `a la fin de la routine d’interruption, sinon l’interruption est r´e-activ´ee imm´ediatement.

(60)

Interruptions

Priorit´ es

Group Priority Level:-IP; il y a 7 niveaux de priorit´e, de ipl1`a ipl7. Si deux interruptions ont lieu en mˆeme temps, celle avec la priorit´e la plus ´elev´ee est effectu´ee en premier. N´ecessite 3 bits. Par d´efaut, toutes les interruptions sont `aipl0.

Subpriority Level : 4 niveaux de priorit´e dans le mˆeme groupe En cas d’´equivalence, le tableau 5.2 pp. 86–88 donne les priorit´es.

(61)

Interruptions

D´ eclarations

v o i d a t t r i b u t e ( ( i n t e r r u p t ( i p l X ) , v e c t o r ( 0 ) ) ) I n t e r r u p t H a n d l e r ( v o i d) {

// c o d e i c i }

ou

#pragma i n t e r r u p t I n t e r r u p t H a n d l e r i p l X v e c t o r 0 v o i d I n t e r r u p t H a n d l e r ( v o i d) {

// c o d e i c i }

InterruptHandler est le nom de l’interruption

(62)

Interruptions

D´ eclarations : macros PIC32

v o i d I S R ( 0 , i p l X ) I n t e r r u p t H a n d l e r ( v o i d) { // c o d e i c i

}

D´efinit danssys/attribs.h

(63)

Interruptions

Librairie

Librairieint.h :#include <int.h>

Plusieurs macros pour simplifier l’implantation Compris dans#include <plib.h>

Macros commencent par m:

INTEnableSystemSingleVectoredInt(): fonction pour initialiser correctement le module de contrˆole des interruptions. `A utiliser ! ! ! mXXSetIntPriority( x): Assigne le niveau de priorit´e de

l’interruptionXX. Les abr´eviations sont donn´ees dans le tableau 5.2 pp.

86 – 88 du manuel.

mXXClearIntFlag(): permet de remettre `a 0 leIFd’une interruption.

(64)

Interruptions

Interruption : Exemple

#i n c l u d e <p 3 2 x x x x . h>

#i n c l u d e <p l i b . h> // i n c l u s m a c r o s p o u r i n t e r r u p t i o n s i n t c o u n t ;

#pragma i n t e r r u p t I n t e r r u p t H a n d l e r i p l 1 v e c t o r 0 v o i d I n t e r r u p t H a n d l e r ( v o i d) {

c o u n t ++;

m T 2 C l e a r I n t F l a g ( ) ; // −I F = 0 }

main ( ) {

PR2 = 1 5 ; // P ´e r i o d e du c o m p t e u r

T2CON = 0 x 8 0 3 0 ; // C o n t r ˆo l e du c o m p t e u r

m T 2 S e t I n t P r i o r i t y ( 1 ) ; // P r i o r i t ´e 1 `a c a u s e de i p l 1 I N T E n a b l e S y s t e m S i n g l e V e c t o r e d I n t ( ) ;

(65)

Interruptions

Interruptions multiples

Priorit´e r´esout seulement une partie du probl`eme

D´ecide seulement laquelle est ex´ecut´ee si 2 sont d´eclench´ees en mˆeme temps

Si une interruption est d´ej`a active, qu’arrive-t’il si une 2e est d´eclench´ee ?

Par d´efaut, il faut attendre la fin de l’interruption avant de d´eclencher la 2e.

Parfois une interruption de plus haute priorit´e doit interrompre une de moindre priorit´e

(66)

Interruptions

Interruptions multiples

On doit manuellement r´e´etablir les interruptions aussitˆot dans le ISR N´ecessite une instruction assembleur MIPS

asm("ei") : r´eactiver les interruptions (enable interrupt)

V´erifier par code la source de l’interruption : ex, mT3GetIntFlag() pour v´erifier si l’interruption li´ee `a Timer3 a ´et´e d´eclench´ee

(67)

Interruptions

Interruptions multiples : Exemple

v o i d I S R ( 0 , i p l 1 ) I n t e r r u p t H a n d l e r ( v o i d) { asm ( ” e i ” ) ;

i f ( m T 3 G e t I n t F l a g ( ) ){ // c o d e

m T 3 C l e a r I n t F l a g ( ) ; }

e l s e i f ( m T 2 G e t I n t F l a g ( ) ){ // c o d e

m T 2 C l e a r I n t F l a g ( ) ; }

} main ( ) {

PR3 = 2 0 ; // P ´e r i o d e du c o m p t e u r 3 ; e x e m p l e PR2 = 1 5 ; // P ´e r i o d e du c o m p t e u r 2 ; e x e m p l e T3CON = 0 x 8 0 3 0 ; // C o n t r ˆo l e du c o m p t e u r T2CON = 0 x 8 0 3 0 ; // C o n t r ˆo l e du c o m p t e u r

m T 3 S e t I n t P r i o r i t y ( 3 ) ; // P l u s h a u t e p r i o r i t ´e m T 2 S e t I n t P r i o r i t y ( 1 ) ;

(68)

Interruptions

Interruptions multiples

Les versions plus r´ecentes du PIC ont les interruptions imbriqu´ees par d´efaut

L’exemple pr´ec´edent n’est plus recommand´e

La commandeasm("ei") est activ´ee par d´efaut `a l’appel de la routine

On modifie l’appel `a la routine :

void ISR Single( 0, ipl1) InterruptHandler( void)

(69)

Interruptions

Interruptions multiples : approche multi-vecteurs

Le PIC32 offre une approche alternative pour g´erer des interruptions multiples

Vecteurs multiples et registres multiples

Tableau 5.3 pp. 99 – 100 montre les diff´erents vecteurs du PIC32 64 vecteurs pour 96 interruptions (limites dues au MIPS)

Ex : Timer1 : le vecteur est TIMER 1 VECTOR , vecteur no 4

(70)

Interruptions

Interruptions multiples : approche multi-vecteurs

L’utilisation de vecteurs diff´erents acc´el`ere l’application des interruptions

Pour vitesse max, utiliser ipl7 : registres sp´eciaux L’approche imbriqu´ee est quand mˆeme valide

(71)

Interruptions

Interruptions multiples : approche multi-vecteurs : Exemple

v o i d I S R ( TIMER 3 VECTOR , i p l 7 ) T 3 I n t e r r u p t H a n d l e r ( v o i d) { // c o d e

m T 3 C l e a r I n t F l a g ( ) ; }

v o i d I S R ( TIMER 2 VECTOR , i p l 1 ) T 2 I n t e r r u p t H a n d l e r ( v o i d) { asm ( ” e i ” ) ;

// c o d e

m T 2 C l e a r I n t F l a g ( ) ; }

} main ( ) {

PR3 = 2 0 ; // P ´e r i o d e du c o m p t e u r 3 ; e x e m p l e PR2 = 1 5 ; // P ´e r i o d e du c o m p t e u r 2 ; e x e m p l e T3CON = 0 x 8 0 3 0 ; // C o n t r ˆo l e du c o m p t e u r T2CON = 0 x 8 0 3 0 ; // C o n t r ˆo l e du c o m p t e u r

m T 3 S e t I n t P r i o r i t y ( 7 ) ; // P l u s h a u t e p r i o r i t ´e m T 2 S e t I n t P r i o r i t y ( 1 ) ;

I N T E n a b l e S y s t e m S i n g l e V e c t o r e d I n t ( ) ;

(72)

Ports

Ports entr´ ee-sortie (I/O)

Ports A `a G sont programmables I/O TRISx : direction, 1 = Input, 0 = Output.

Ex :TRISA = 1veut dire que le port A est en mode entr´ee.

PORTx : lecture / ´ecriture au port.

Ex :PORTD = 0x0020veut dire que le bit 5 du port D est haut.

En mode lecture, acceptent jusqu’`a 5 V en entr´ee.

En mode sortie, la tension est 3.3 V

Par d´efaut, les ports sont en mode lecture (Input)

(73)

Ports

Librairies

La librairie plib.hdonne acc`es `a plusieurs macros Ex : mPORTASetBits( BIT 8 | BIT 10)

Ex : PORTSetBits( IOPORT A, BIT 8 | BIT 10) Pour r´egler les ports comme entr´ee ou sortie :

PORTSetPinsDigitalIn(IOPORT x, BIT y) PORTSetPinsDigitalOut(IOPORT x, BIT y)

(74)

Ports

Lecture

Fonctions et macros de lecture : mPORTxRead()

mPORTxReadBits()

PORTRead(IO PORT ID) : lecture de tous les bits

PORTReadBits(IO PORT ID, bits): lecture des bits sp´ecifi´es

(75)

Ports

Ecriture ´

Fonctions et macros d’´ecriture : mPORTxWrite(bits) mPORTxSetBits(bits) mPORTxClearBits(bits) mPORTxToggleBits(bits)

PORTWrite(IO PORT ID): ´ecriture de tous les bits

PORTSetBits(IO PORT ID, bits) : ´ecriture des bits sp´ecifi´es (`a 1) PORTClearBits(IO PORT ID, bits): ´ecriture de 0 aux bits sp´ecifi´es PORTToggleBits(IO PORT ID, bits) : inverse la valeur des bits sp´ecifi´es

(76)

GELE5343 Chapitre 3 : M´ emoire

Gabriel Cormier, Ph.D., ing.

Universit´e de Moncton

Hiver 2013

(77)

Introduction

Contenu

1 Introduction

2 Chaˆıne

3 Allocation de m´emoire

4 Pointeurs

5 Bus m´emoire

6 Configuration

(78)

Chaˆıne

Chaˆınes

Chaˆıne : s´erie de caract`eres (string)

Initialisation (un caract`ere) : char c = 0x41ouchar c = ’a’; Plusieurs caract`eres :

char s[5]: {’H’, ’E’, ’L’, ’L’, ’O’}

char s[5]: "HELLO"

char s[]: "HELLO"

Le code\0est automatiquement ajout´e `a la fin de la chaˆıne (code de fin de chaˆıne).

(79)

Chaˆıne

Caract` ere

Peut ˆetre utilis´e avec des incr´ementeurs c h a r c ;

c = ’ a ’

c++; // c r e p r ´e s e n t e m a i n t e n a n t ’ b ’ Ne fonctionne pas avec des chaˆınes

c h a r s [ 1 5 ] ;

s = ” H e l l o ! ” ; // E r r e u r !

(80)

Chaˆıne

String.h

string.h: manipuler des chaˆınes

strcpy( s, "Hello");: copier une chaˆıne dans une autre strcat( s, "World");: ajouter une chaˆıne `a la fin d’une autre i = strlen( s) : Calcule la longueur de la chaˆıne

(81)

Allocation de m´emoire

Allocation de m´ emoire

Le compilateur g´en`ere le code qui manipule les variables.

L’´editeur de liens (linker) d´etermine o`u les variables sont plac´ees en m´emoire (adresse physique)

Ex : char s[] = "GELE5343 Systemes"

Linker r´eserve 18 bytes continues en m´emoire (dans r´egiondata) La valeur d’initialisation est plac´e dans une table de 18 bytes dans l’espace Flash (dans r´egionrodata)

Compilateur cr´ee une routine qui sera appel´ee avantmain()pour copier la valeur en RAM

2x la m´emoire est utilis´e : 1 fois en Flash et 1 fois en RAM

(82)

Allocation de m´emoire

Allocation de m´ emoire

Si la chaˆıne ne sera pas modifi´ee, utiliserconst Seul l’espace en Flash (rodata) sera utilis´e Pas besoin de routine d’initialisation Ne gaspille pas le RAM

(83)

Allocation de m´emoire

Table de m´ emoire

Compilateur cr´ee un fichier .map

Montre l’allocation en m´emoire (valeurs et addresses) Contient :

Liste des fichiers inclus

Configuration de la m´emoire : position et taille de chaque espace emoire

Table de m´emoire

(84)

Allocation de m´emoire

Table de m´ emoire

Contient :

Section .reset: code `a ex´ecuter apr`es un reset

Section .vector x: pointeurs aux sources d’interruption Section .startup: code d’initialisation

Section .text: plusieurs r´egions, contiennent le code g´en´er´e par le code source du programme

Section .rodata: donn´ees constantes (read-only) Section .data: m´emoire pour variables globales Section .data1: autres variables

(85)

Pointeurs

Pointeurs

Pointe `a l’adresse en m´emoire

M´ecanisme puissant pour manipuler la m´emoire Facile de causer des erreurs de m´emoire

(86)

Pointeurs

Exemple :

i n t ∗p i ; // p o i n t e u r

i n t i ; // c o m p t e u r

i n t a [ 1 0 ] ; // m a t r i c e f o r ( i =0; i<10; i ++)

a [ i ] = i ;

p i = a ; // p o i n t e l ’ a d r e s s e de a f o r ( i =0; i<10; i ++) {

∗p i = i ; p i ++;

(87)

Pointeurs

Exemple

Boucle 1 :

Multiplie la valeur deipar la dimension (4 bytes) pour trouver le ecalage de l’adresse

Ajoute le d´ecalage `a l’adresse initiale Assigne la valeur deien m´emoire Boucle 2 :

Le pointeur incr´emente automatiquement l’adresse Assigne la valeur en m´emoire

Simplifi´e `a :*pi++ = i;

(88)

Pointeurs

Tas (Heap)

Espace m´emoire r´eserv´e pour les objets allou´es dynamiquement Outils dans stdlib.h

Fonctions fondamentales :

void *malloc(sizet size): R´eserve un bloc m´emoire de la dimension demand´ee et retourne un pointeur `a ce bloc

void free(void *ptr): Lib`ere le bloc de m´emoire point´e par ptr Pour le PIC32, la quantit´e de m´emoire r´eserv´ee pour le tas doit ˆetre explicit´ee par le programme ; la valeur par d´efaut est 0

(89)

Bus m´emoire

Bus m´ emoire

PIC32 : Bus m´emoire de type Von Neumann

Un bus donne acc`es `a la m´emoire de programme (Flash) et `a la m´emoire de donn´ees (RAM)

Permet d’ex´ecuter du code de la m´emoire RAM

Utilise un pipeline `a 5 ´etages et cachepre-fetch pour avoirune instruction par cycle d’horloge

(90)

Configuration

Configuration

Le PIC 32 poss`ede plusieurs bits de configuration

Utilis´es pour les r´eglages d’horloges (affectent la consommation de puissance)

Varient selon le mod`ele du PIC32 (v´erifier les fiches) Appliqu´ees avec commandes #pragma

(91)

Configuration

Horloges

Le PIC 32 poss`ede 5 oscillateurs (sources d’horloge)

Oscillateur interne (FRC) : pour op´eration `a haute vitesse avec faible consommation de puissance. Ne n´ecessite aucun composant externe ; 8 MHz±2%

Oscillateur `a basse fr´equence (LPRC) : op´eration `a basse fr´equence et faible consommation de puissance. Ne n´ecessite aucun composant externe ; 32 kHz, faible pr´ecision

Oscillateur primaire externe (POSC) : op´eration `a haute fr´equence et pr´ecision. Cristaux de fr´eqence max 20 MHz peuvent ˆetre branch´es (OSCI, OSCO)

(92)

Configuration

Horloges

Oscillateur secondaire (SOSC) : op´eration `a basse fr´equence et faible consommation de puissance. Branch´es `a SOSCI et SOSCO ;

32.768 kHz, tr`es grande pr´ecision

Source externe (EC) : permet `a un circuit externe de compl`etement remplacer l’oscillateur

(93)

Configuration

Horloges

Contraintes de puissance :

La consommation de puissance va d´eterminer la taille des batteries `a utiliser ; pour des applications mobiles, c’est tr`es critique

La performance d´etermine la quantit´e de travail effectu´ee par le microcontrˆoleur

Plus la fr´equence d’horloge est ´elev´ee, plus la consommation de puissance est ´elev´ee

Ex : le PIC32M4 consomme 11 mA `a 4 MHz, mais 64 mA `a 72 MHz

(94)

Configuration

Contrˆ ole d’horloges

Le PIC32 offre les caract´eristiques suivantes :

Commutation pendant l’op´eration entre les sources externes et internes d’oscillateurs

Contrˆole pendant l’op´eration des diviseurs d’horloge

Contrˆole pendant l’op´eration du circuit PLL (multiplicateur de fr´equence)

Mode IDLE (inactif), o`u le CPU est arrˆet´e et les p´eriph´eriques continuent

Mode SLEEP (sommeil), o`u le CPU et les p´eriph´eriques sont arrˆet´es Contrˆole du diviseur d’horloge de p´eriph´erique (PBCLK) s´epar´ement

(95)

Configuration

Oscillateur principal du PIC32

Running 147

So when using the Explorer 16 board or the PIC32 Starter Kit, to respect the first rule we will need to reduce the input frequency from 8 MHz to 4 MHz. Looking at the block diagram in Figure 7.1 or the simplified diagram in Figure 7.3 , you will notice how the input divider is conveniently available to us to perform the first frequency reduction.

4 MHz 72 MHz

8 MHz

System Clock

72 MHz Input

Divider PLL

Output Divider

1 : 2 118 1 : 1

Figure 7.3 : Primary oscillator clock chain.

The multiplication factor of the PLL can be selected among a number of values ranging from 15 all the way up to 24 and it is controlled by thePLLMULT bits. Since the maximum operating frequency of the PIC32MX is (at the time of this writing) restricted to 75 MHz, selecting a factor of 18 will give 72 MHz, the closest match compatible with the device operating specifications. The output divider block provides us with a final opportunity to manage the clock frequency. When we will need the maximum performance, we will leave the output divider set to a 1:1 ratio. Should our application require it, we will be able to reduce the power consumption by dividing the output frequency all the way down to 1:256 th or approximately 280 kHz. Below this frequency we would be much better served by using the secondary oscillator (SOSC), its operating range is in fact between 32 kHz and 100 kHz, or by the low power internal oscillator (LPRC) operating at approximately 32 kHz. For our reference, from the advanced datasheet we learn that the typical power consumption of the PIC32 when operating off the LPRC would be just 200 A!

The Peripheral Bus Clock

As another way to optimize performance and power consumption in an application, the PIC32 feeds a separate clock signal to all the peripherals. This is obtained by sending the System clock through yet another divide circuit (extending further the chain of modules illustrated in Figure 7.3 ), producing the PB clock signal. Very often a high processor

Le PLL n´ecessite une fr´equence ≤4 MHz, donc il faut diviser la fr´equence du cristal par 2

On contrˆole l’ensemble `a l’aide du registre 32bit OSCCON, ou par configuration #pragma

Gabriel Cormier (UdeM) GELE5343 Chapitre 3 Hiver 2013 20 / 27

(96)

Configuration

Registre OSCCON

146 Day 7

The Primary Oscillator Clock Chain

We will begin our exploration at the primary oscillator clock signal chain, since it is the most common and, in many of the following chapters, we will need to develop demonstration projects that will require either a high level of performance or high clock accuracy. As you can verify visually, on the Explorer 16 demonstration board and PIC32 Starter Kit, an 8 MHz crystal is connected across the OSCI and OSCO pins. At this frequency (below 10 MHz) it is recommended we set the primary oscillator for operation in XT mode.

Depending on the application, we are immediately confronted with two possibilities. We could use the 8 MHz input signal as is or feed it to a multiplier (PLL) circuit. The appeal of the second option is obvious, but with it comes the need to learn more about PLL circuits.

Phase locked loops (PLLs) are complex little circuits, but the designers have managed to hide all the complexity of the PIC32 PLL from us with the condition that we respect a few simple rules. First, we need to feed it with a specific input frequency range ( 4 MHz). Second, we need to allow it time to stabilize or “ lock ” before we attempt to execute code and synchronize with it. A simple control mechanism is provided (via the OSCCON register illustrated in Figure 7.2 ) to select the frequency multiplication factor (PLLMULT ) and to verify the proper locking ( SLOCK ).

U-0

bit 31

bit 23

bit 15

U-0 R-0 R-0

COSC2:0

R-0 U-0

U-0 R/W-x R/W-x R/W-x

R/W-0 R/W-x R/W-x

R/W-x R/W-x R/W-x

R/W-0 R/W-0

SOSCEN OSWEN CF

r-0 SLPEN

SLOCK

r-0 R-0 R/W-0 R/W-0

R/W-0 CLKLOCK

R/W-x R/W-x R/W-x

R-0 U-0

bit 24

bit 16

bit 8 R/W-x R/W-x R/W-x

FRCDIV2:0

PLLMULT2:0

NOSC2:0 PBDIV1:0

SOSCRDY DRMEN

PLLODIV2:0

(97)

Configuration

Registre OSCCON

Input divider : FRCDIV

Effet Bit Config (#pragma)

FRC divis´e par 1 000 FPLLIDIV = DIV 1 FRC divis´e par 2 (d´efaut) 001 FPLLIDIV = DIV 2 FRC divis´e par 3 010 FPLLIDIV = DIV 3 FRC divis´e par 4 011 FPLLIDIV = DIV 4 FRC divis´e par 5 100 FPLLIDIV = DIV 5 FRC divis´e par 6 101 FPLLIDIV = DIV 6 FRC divis´e par 10 110 FPLLIDIV = DIV 10 FRC divis´e par 12 111 FPLLIDIV = DIV 12

(98)

Configuration

Registre OSCCON

Multiplicateur PLL : PLLMULT

Effet Bit Config (#pragma)

Horloge multipli´ee par 15 000 PLLMULT = MUL 15 Horloge multipli´ee par 16 001 PLLMULT = MUL 16 Horloge multipli´ee par 17 010 PLLMULT = MUL 17 Horloge multipli´ee par 18 011 PLLMULT = MUL 18 Horloge multipli´ee par 19 100 PLLMULT = MUL 19 Horloge multipli´ee par 20 101 PLLMULT = MUL 20 Horloge multipli´ee par 21 110 PLLMULT = MUL 21 Horloge multipli´ee par 24 111 PLLMULT = MUL 24

(99)

Configuration

Registre OSCCON

Multiplicateur de sortie : PLLODIV

Effet Bit Config (#pragma)

Sortie PLL divis´ee par 1 000 FPLLODIV = DIV 1 Sortie PLL divis´ee par 2 001 FPLLODIV = DIV 2 Sortie PLL divis´ee par 4 010 FPLLODIV = DIV 4 Sortie PLL divis´ee par 8 011 FPLLODIV = DIV 8 Sortie PLL divis´ee par 16 100 FPLLODIV = DIV 16 Sortie PLL divis´ee par 32 101 FPLLODIV = DIV 32 Sortie PLL divis´ee par 64 110 FPLLODIV = DIV 64 Sortie PLL divis´ee par 256 111 FPLLODIV = DIV 256

(100)

Configuration

Registre OSCCON

S´election d’oscillateur : COSC

Effet Bit Config (#pragma)

FRC 000 FNOSC = FRC

FRC avec PLL 001 FNOSC = FRCPLL

Oscillateur principal (XT, HS ou EC) 010 FNOSC = PRI Oscillateur principal avec PLL 011 FNOSC = PRIPLL Oscillateur secondaire (SOSC) 100 FNOSC = SOSC Oscillateur interne faible puissance (LPRC) 101 FNOSC = LPRC Oscillateur interne rapide divis´e par 16 110 FNOSC = FRCDIV16 Oscillateur interne rapide divis´e par FRCDIV 111 FNOSC = FRCDIV

(101)

Configuration

Registre DEVCFG1

S´election d’oscillateur principal : POSCMD

Effet Bit Config (#pragma)

EC (Horloge externe) 00 POSCMD = EC XT (R´esonateur externe) 01 POSCMD = XT HS (Haute vitesse) 10 POSCMD = HS

esactiv´e 11 POSCMD = OFF

(102)

Configuration

Registre DEVCFG1

Configuration de base :

#pragma c o n f i g POSCMOD=XT, FNOSC=PRIPLL

#pragma c o n f i g FPLLIDIV=DIV 2 , FPLLMUL=MUL 20

#pragma c o n f i g FPLLODIV=DIV 1

On utilise le cristal externe de 8 MHz, divis´e par 2 pour entr´ee au PLL, puis multipli´e par 20 (pour obtenir 80 MHz), puis finalement divis´e par 1.

(103)

GELE5343 Chapitre 4 : Bus et interface

Gabriel Cormier, Ph.D., ing.

Universit´e de Moncton

Hiver 2013

(104)

Introduction

Contenu

1 Introduction

2 GPIB

3 Bus I2C

4 SPI

5 UART

6 SMBus

(105)

GPIB

GPIB

GPIB : General Purpose Interface Bus Standard IEEE-488

Protocole de communication pour instruments de mesure

Initialement appel´e HP-IB (d´evelopp´e par HP, fin des ann´ees 60) Permet la communication entre diff´erents instruments

(106)

GPIB

Permet de brancher jusqu’`a 31 appareil en chaˆıne (th´eorique) mais 20 en pratique.

(107)

GPIB

Dispositifs : rˆ oles

Contrˆoleur : contrˆole les dispositifs. Seul 1 contrˆoleur peut ˆetre actif `a la fois.

Ecouteur (listener) : Peut recevoir des donn´´ ees lorsqu’indiqu´e par le contrˆoleur

Transmetteur (talker) : transmet des donn´ees sur le bus lorsqu’indiqu´e par le contrˆoleur

(108)

GPIB

Pins

Pin Nom Fonction

1 DIO1 Bit Entr´ee/Sortie 2 DIO2 Bit Entr´ee/Sortie 3 DIO3 Bit Entr´ee/Sortie 4 DIO4 Bit Entr´ee/Sortie 5 EOI End-or-Identity 6 DAV Data Valid 7 NRFD Not ready for data 8 NDAC Not data accepted 9 IFC Interface clear

Pin Nom Fonction

13 DIO5 Bit Entr´ee/Sortie 14 DIO6 Bit Entr´ee/Sortie 15 DIO7 Bit Entr´ee/Sortie 16 DIO8 Bit Entr´ee/Sortie 17 REN Remote Enable 18 GND Pour DAV 19 GND Pour NFRD 20 GND Pour NDAC 21 GND Pour IFC

(109)

GPIB

Pins

16 pins pour signaux et 8 pins pour ground : 8 pins entr´ee - sortie

3 pins handshake 5 pins interface

Normalement, low <0.8V et high >2V.

(110)

GPIB

Donn´ ees

DOI1 `a DOI8 :

Permettent de transf´erer les adresses, contrˆole et donn´ees Adresses et contrˆole : format d´efinit dans IEEE-488

Donn´ees : pas d´efinit par le standard ; souvent chaˆınes de caract`eres ASCII.

DOI1 est le LSB

(111)

GPIB

Handshake

Contrˆolent le transfert de messages Permet d’accuser r´eception des donn´ees Garanti la r´eception sans erreurs

NRFD (vient d’un ´ecouteur) : tous les dispositifs doivent ˆetre prˆet avant d’envoyer donn´ees

NDAC (vient d’un ´ecouteur) : pas encore accept´e les donn´ees. Tous les dispositifs doivent remettre `a z´ero avant la prochaine op´eration.

DAV : donn´ees prˆetes `a ˆetre lues

(112)

GPIB

Transmission de donn´ ees

Quand un contrˆoleur ou transmetteur veut transmettre des donn´ees : DAV = high (data not valid)

V´erifier NRFD = low V´erifier NDAC = low

Si tout correct, placer donn´ees sur le bus

(113)

GPIB

Transmission de donn´ ees (suite...)

Les dispositifs qui re¸coivent des donn´ees vont : Relˆacher NRFD

Quand tous ont relˆach´e, NRFD = high

Quand NRFD = high, contrˆoleur applique DAV = low (donn´ees valides)

(114)

GPIB

Transmission de donn´ ees (suite...)

Ensuite, les receveurs vont : NRFD = low (occup´e)

Relˆacher NDAC lorsque les donn´ees sont re¸cues

Quand le dernier relˆache NDAC, le contrˆoleur peut replacer DAV = high pour transmettre le prochain byte.

La vitesse d´epend du dispositif le plus lent.

(115)

GPIB

Gestion d’interface

5 lignes de contrˆole :

ATN (Attention) : Contrˆole indique qu’il va placer une adresse ou byte de contrˆole sur la ligne.

EOI (End or Identify) : Transmetteur devrait l’utiliser pour indiquer la fin de la transmission de donn´ees.

IFC (Interface Clear) : Pour initialisation des dispositifs

REN (Remote Enable) : Seulement pour le contrˆoleur : indique au dispositif d’ignorer le panneau

SRQ (Service Request) : Comme une interruption. Le dispositif indique au contrˆoleur qu’une action est n´ecessaire. Le contrˆoleur

(116)

GPIB

Adresses

Jusqu’`a 15 dispositifs sur un bus

Adresses de 0 `a 30, r´egl´ees sur le dispositif (software ou hardware) Adresses secondaires possibles, de 0 `a 30 aussi

Adresses secondaires d´ependent du dispositif

(117)

GPIB

Transmission de donn´ ees

(118)

GPIB

Programmation

La programmation des dispositifs varie selon le manufacturier Il y a un manuel de programmation pour chaque dispositif Le standard GPIB n’impose pas de mod`ele de programmation Les commandes sont des s´equences de caract`eres

Ex : CH1:VOLTS 1.0E-1 r`egle l’affichage `a 100mV/division sur le canal 1 de l’oscilloscope Tektronics TDS 340

Ex : CH1:VOLTS?demande `a l’oscilloscope quel est l’affichage du canal 1 (r´eponse :1.0E-1)

Ex : MEASure:VOLTage:AC? 20, 0.001Indique `a un multim`etre de mesurer la tension AC, sur une ´echelle de 20V, avec une r´esolution de

(119)

Bus I2C

Bus I

2

C

D´evelopp´e par Phillips

Bus bidirectionnel `a 2 fils : SDA (serial data line) et SCL (serial clock line)

Chaque dispositif sur le bus a une adresse unique

S´erie, 8 bit, 100kbit/s (mode normal) ou 400kbit/s (mode rapide) Filtre de protection sur le dispositif

Capacitance max sur la ligne de 400pF (limite le nombre de dispositifs)

(120)

Bus I2C

Diagramme 174 Day 8

The Exploration

The PIC32MX family offers seven communication peripherals that are designed to assist in all common embedded-control applications. As many as six of them are serial communication peripherals; they transmit and receive a single bit of information at a time. They are:

2 the Universal Asynchronous Receiver and Transmitters (UARTs)

2 the SPI synchronous serial interfaces

2 the I

2

C synchronous serial interfaces

The main difference between a synchronous interface (like the SPI or I

2

C) and an asynchronous one (like the UART) is in the way the timing information is passed from transmitter to receiver. Synchronous communication peripherals need a physical line (a wire) to be dedicated to the clock signal, providing synchronization between the two devices. The device(s) that originates the clock signal is typically referred to as the master , as opposed to the device(s) that synchronizes with it, called the slave(s) .

Synchronous Serial Interfaces

The I

2

C interface (see Figure 8.1 ), for example, uses two wires and therefore two pins of the microcontroller: one for the clock (SCL) and one bidirectional for the data (SDA).

PIC32 I2C interface

I2C Peripheral

Clock (SCL)

Data (SDA)

(Master) (Slave)

Figure 8.1 : I

2

C interface block diagram.

The SPI interface (see Figure 8.2 ) instead separates the data line in two, one for the input

(SDI) and one for the output (SDO), requiring one extra wire but allowing simultaneous

Gabriel Cormier (UdeM) GELE5343 Chapitre 4 Hiver 2013 18 / 42

(121)

Bus I2C

PIC32 : Registre de contrˆ ole I

2

C

I2CxCON :

7 : 0 GCEN STREN ACKDT ACKEN RCEN PEN RSEN SEN

15 : 8 ON FRZ SIDL SCLREL STRICT MA10M DISSLW SMEN

Bit 15/7

Bit 14/6

Bit 13/5

Bit 12/4

Bit 11/3

Bit 10/2

Bit 9/1

Bit 8/0

Les bits 16 `a 31 ne sont pas utilis´es

(122)

Bus I2C

PIC32 : I2CxCON

ON : Activation I2C : 1 = ON, 0 = OFF

FRZ: Debug : 1 = arrˆeter ex´ecution lors de debug, 0 = continuer SIDL : Mode IDLE : 1 = arrˆeter si CPU en mode IDLE, 0 = continuer SCLREL: Contrˆole du SCL : 1 = relˆache horloge, 0 = force ou

maintien horloge `a low

STRICT: Adressage stricte : 1 = activ´e, 0 = d´esactiv´e A10M : Adresses 10bit : 1 = adresses 10bit, 0 = adresses 7bit DISSLW: Slew-rate : 1 = d´esactiv´e, 0 = activ´e

SMEN : Compatibilit´e SMBus : 1 = activ´e, 0 = d´esactiv´e

(123)

Bus I2C

PIC32 : I2CxCON

GCEN : Activation Call Enable : 1 = ON, 0 = OFF

STREN : Horloge modifi´ee ; mode secondaire : 1 = ON, 0 = OFF ACKDT : Acknowledge ; mode primaire : 1 = NACK, 0 = ACK ACKEN : Acknowledge sequence : 1 = envoie bit ACKDT, 0 = OFF RCEN : Receive enable : 1 = activ´e, 0 = d´esactiv´e

PEN: Stop enable : 1 = activ´e, 0 = d´esactiv´e RSEN : Restart enable : 1 = activ´e, 0 = d´esactiv´e SEN: Start enable : 1 = activ´e, 0 = d´esactiv´e

(124)

Bus I2C

Connexion

(125)

Bus I2C

Transfert de bit

Horloge doit ˆetre haute pour avoir des donn´ees valides

(126)

Bus I2C

Transfert de bits

Conditions de d´ebut et d’arrˆet (g´en´er´e par le maˆıtre).

Microcontrˆoleurs doivent ´echantillonner `a 2x l’horloge pour d´etecter la

Références

Documents relatifs

Pour trouver les coordonn´ ees d’un point dans un rep` ere, on ´ ecrit l’´ equation (vectorielle) caract´ eristique on convertit cette ´ equation en syst` eme num´ erique on

On fixe une cat´ egorie C et on prend comme objets les couples (R, M ) d’une monade R sur C et d’un R-module M. Que peut-on prendre comme morphismes pour faire une cat´

Consid´ erons un algorithme de complexit´ e f (n) qui permette de r´ esoudre en une heure les instances de taille X d’un probl` eme sur un ordinateur aujourd’hui.. Alors un

J’observe toutefois (Figure 13.3) ` a la fin du mod` ele la formation d’une seconde paire de zones cisaillantes du cˆ ot´ e retro du mod` ele, ce qui laisse penser que la

Le seuil de satisfaction est le seuil au del` a duquel l’acteur est satisfait alors que la satisfaction est le niveau de satisfaction fi- nale de l’acteur ` a l’issue de la

Perdre ses photos de vacances : ¸ca n’a pas de

Programme des enseignements – Syst` emes d’information et conception d’entrepˆ ots de donn´ ees – Les principes et la d´ emarche du Data Mining (fouille de donn´ ees)

Objectifs : Maˆıtriser les structures de base de l’informatique (tableaux, listes, files, piles) et les op´ erations ´ el´ ementaires sur ces structures et introduction au