GELE5343 Chapitre 1 :
Introduction aux syst` emes ` a microprocesseurs
Gabriel Cormier, Ph.D., ing.
Universit´e de Moncton
Hiver 2013
Introduction
Contenu
1 Introduction
2 D´efinition
3 March´e
4 Caract´eristiques
5 PIC32
D´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
D´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)
D´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
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
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
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
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$)
March´e
March´ e des microprocesseurs en 2011
0 5000 10000 15000 20000 25000
Marché des microcontrolleurs (M$)
March´e
Langage de programmation des microprocesseurs en 2006
0% 10% 20% 30% 40% 50% 60% 70%
C C++
C#
Java Assembleur Autres
March´e
Langage de programmation des microprocesseurs en 2011
C C++
.NET Java Assembleur Autres
March´e
Croissance pr´ evue du march´ e 2011 – 2016
Communications Automobile Total Industriel Gov./Mil.
Ordinateur Consommateur
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%
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
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.
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
Caract´eristiques
Autres caract´ eristiques
Auto-d´emarrage Horloge de surveillance Coˆut
Fiabilit´e
Consommation de puissance Performance
Design et d´eveloppement
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 ?)
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
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
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.
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.
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
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)
PIC32
GELE5343 Chapitre 2 :
R´ evision de la programmation en C
Gabriel Cormier, Ph.D., ing.
Universit´e de Moncton
Hiver 2013
Introduction
Contenu
1 Introduction
2 Flot de programmation
3 Variables et ´evaluations
4 Boucles
5 Optimisation
6 Compteur
7 Interruptions
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
Flot de programmation
Flot de programmation
Fonctions D´efinitions Programme principal
main() D´eclarations Initialisation des fonctions Commandes de pr´eprocesseur
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.
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)
Variables et ´evaluations
Types de variables
Autres :
float : chiffre `a virgule flottante, 32 bits
long double: chiffre `a virgule flottante `a 64 bits
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
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.
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
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
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
Boucles
Boucles
Trois types principaux de boucles : Boucle for
Boucle while Boucle do- while
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
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.
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.
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
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.
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)
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) ;
Compteur
Compteurs
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
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)
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)
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
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
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
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
Interruptions
Exception
Exception : perturbe le fonctionnement normal du programme Exception
Interruption Reset
Division par 0
Erreur m´emoire
· · ·
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...
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
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
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.
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.
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
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
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.
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 ( ) ;
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
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
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 ) ;
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)
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
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
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 ( ) ;
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)
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)
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
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
GELE5343 Chapitre 3 : M´ emoire
Gabriel Cormier, Ph.D., ing.
Universit´e de Moncton
Hiver 2013
Introduction
Contenu
1 Introduction
2 Chaˆıne
3 Allocation de m´emoire
4 Pointeurs
5 Bus m´emoire
6 Configuration
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).
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 !
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
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
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
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 m´emoire
Table de m´emoire
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
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
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 ++;
Pointeurs
Exemple
Boucle 1 :
Multiplie la valeur deipar la dimension (4 bytes) pour trouver le d´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;
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
D´esactiv´e 11 POSCMD = OFF
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.
GELE5343 Chapitre 4 : Bus et interface
Gabriel Cormier, Ph.D., ing.
Universit´e de Moncton
Hiver 2013
Introduction
Contenu
1 Introduction
2 GPIB
3 Bus I2C
4 SPI
5 UART
6 SMBus
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
GPIB
Permet de brancher jusqu’`a 31 appareil en chaˆıne (th´eorique) mais 20 en pratique.
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
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
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.
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
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
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
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)
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.
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
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
GPIB
Transmission de donn´ ees
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
Bus I2C
Bus I
2C
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)
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
2C synchronous serial interfaces
The main difference between a synchronous interface (like the SPI or I
2C) 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
2C 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
2C 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 / 42Bus I2C
PIC32 : Registre de contrˆ ole I
2C
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
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
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
Bus I2C
Connexion
Bus I2C
Transfert de bit
Horloge doit ˆetre haute pour avoir des donn´ees valides
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