Vous êtes sur la page 1sur 49

Formation Automatique et

Informatique Industrielle
Master 1 S2
Matière : Systèmes Embarqués et Systèmes Temps Réel SE-
STR
Par : ATOUI Hamza
Plan du cours –partie 1-
• MICROCHIP TECHNOLOGY.
• Les µP et µC de MICROCHIP.
• La série 16Fxxx.
• Le µP MID-RANGE de la série 16Fxxx.
– Architecture interne.
– Fréquence d’horloge, cycle machine et pipeline de MID-
RANGE.
– Modes d’adressage.
– Organisation de l’espace DATA/IO.
MICROCHIP TECHNOLOGY
• MICROCHIP TECHNOLOGY, ou tout
simplement MICROCHIP, est un fabricant de
semi-conducteurs fondé en 1989, à partir
d'une division de General Instrument.
• MICROCHIP produit les microcontrôleurs PIC,
des composants radiofréquences, des
composants de gestion des batteries, des
interfaces, des composants analogiques, etc.
• Source : Wikipédia
Les µP et µC de MICROCHIP
CPU

BASE- DSPIC &


MID- HIGH-
LINE MIPS
RANGE END DSPIC3x
PIC10
PIC16 PIC18 PIC32
PIC12
Pourquoi cette évolution ?
La série 16Fxxx
PIC16F877A 40-pins

PIC16F876A 28-pins

PIC16F84A 18-pins
La série 16Fxxx
• Les différences entre ces µC sont :
– Le nombre de pattes, donc nombre des ports I/O.
– Le nombre de pattes analogiques/Numériques.
– La taille des espaces DATA, CODE et EEPROM.
– Le nombre de périphériques (ADC, UART,
TIMERS…).
• Mais, tous sont équipés par le MID-RANGE
comme microprocesseur (CPU).
Architecture interne
Architecture interne
DATA/IO DAU CODE
STACK ZONE
(8 LEVELS)
MUX RP1 RP0 IR(6:0)
9
9 PCH PCL
9
IRP FSR 5 PC 13

8 bits INTERNAL 7 PCLATH

DATA BUS 8 5 CAU


512 8
8
8Kx14
8 INTCON CCU
BYTE EXU MUX
8
bits
8 DECODE &
8 8 8 CONTROL UNIT
ALU -DCU-
3

WREG STATUS
IR(7:0)
IR 14

MID-RANGE µP
Architecture interne
• EXECUTION UNIT (EXU) : est composée de registre WREG,
l’ALU et le registre STATUS.
• DATA ADDRESSING UNIT (DAU) : est composée de registre FSR
plus 3 bits RP0, RP1 et IRP.
• CODE ADDRESSING UNIT (CAU) : est constituée d’une pile de
8 niveaux (STACK ZONE), le registre compteur ordinal (PC), et
le registre PCLATH.
• COMMAND & CONTROL UNIT (CCU): est formée de registre
d’instruction (IR), de registre d’interruption (INTCON) et
l’unité la plus compliquée dans notre µP (DCU), cette dernière
génère les différents signaux pour exécuter une instruction.
Fréquence d’horloge, cycle machine et
pipeline de MID-RANGE
• La fréquence de l’horloge d’entrée du MID-RANGE est
divisée par 4 pour générer 4 phases sont
(Q1,Q2,Q3,Q4), donc le cycle machine est 4 fois plus
long que la période d’horloge.
Fréquence d’horloge, cycle machine et
pipeline de MID-RANGE
• D’après la figure précédente le MID-RANGE utilise un
pipeline à 2 étages (FETCH/EXECUTION recherche de
l’instruction suivante/exécution de l’instruction en cours).
• Dans l’étage FETCH : le MID-RANGE incrémente le PC à la fin
de Q4.
• Dans l’étage EXECUTION : le MID-RANGE fait 4 phases:
– Q1 : pour décoder d’instruction.
– Q2 : pour lire les opérandes (case mémoire ou constante) s’il
existe.
– Q3 : pour réaliser l’opération demander dans l’instruction.
– Q4 : pour ranger le résultat vers la destination (case mémoire ou
WREG).
Modes d’adressage
• Le MID-RANGE utilise 3 modes d’adressage sont :

ADDRESSING MODES

DATA/IO SPACE ADDRESSING


MODE

IMMEDIATE MODE DIRECT MODE INDIRECT MODE


IMMEDIAT MODE
• Ce mode fait la manipulation des valeurs
immédiates avec le WREG (transfert,
opération A/L)
– WREG  K (constante sur 8bits)
– WREG  K (op) WREG (op : opération A/L).
– Le format de l’instruction est le suivant:
IMMEDIAT MODE
• L’unité d’exécution devienne comme suit:
INTERNAL DATA BUS

8 8

MUX

ALU IR

3 7 0

Exemple :
WREG STATUS MOVLW 0x50 ; transfert
ADDLW 0x17 ; addition
8
DATA/IO SPACE ADDRESSING MODE
• Ce mode en général fait la manipulation de l’espace DATA/IO avec
le WREG (transfert, opération A/L)
• Ce mode comprend le mode direct et le mode indirect par le
registre FSR.
• Le format de l’instruction pour ces modes est:

• Vous remarquez que l’adresse d’une case mémoire est sur 7 bits, et notre unité
d’adressage DATA/IO du MID-RANGE sortir 9 bits, donc comment faire pour les 2
derniers bits??? (notre instruction présente une limite d’accès de 128 octets seulement )
• Et aussi, on a le même format d’instruction pour les deux modes, donc comment
différencier entre ces deux modes???
DATA/IO SPACE ADDRESSING MODE
• Dans ce mode l’unité d’exécution devienne comme suit:
7
8
0
=
BANK 0 BANK 1 BANK 2 BANK 3
RP RP
1 0 IR(6:0) Address Address Address Address
9 0 0 128 256 384
Direct address

MUX
To To To To
9 127 255 383 511
RP1,0 = 00 RP1,0 = 01 RP1,0 = 10 RP1,0 = 11
1 IRP = 0 IRP = 0 IRP = 1 IRP = 1
IRP FSR
9
Indirect address DATA IN DATA/IO space
8 512 byte
8 IR(7:0)
WREG
8 MUX

ALU
Bit IR(7) « d » STATUS
DATA OUT
8 0 1 8
DATA/IO SPACE ADDRESSING MODE
• D’après la figure précédente :
– Dans le mode d’adressage direct, on peut considérer le
DATA/IO SPACE comme une barrette de RAM à 4 circuits
intégrés, dont chaque circuit a une taille de 128 octets.
– Dans le mode d’adressage indirect, on peut considérer le
DATA/IO SPACE comme une barrette de RAM à 2 circuits
intégrés, dont chaque circuit a une taille de 256 octets.
– Le mécanisme de pointage vers le DATA/IO SPACE est :
IF IR(6:0) = « 0000000 » THEN
MEM ADDRESS  [IRP:FSR]; -INDIRECT-
ELSE
MEM ADDRESS  [RP1:RP0:IR(6:0)]; -DIRECT-
END IF
Exemple

• Transférer le contenu de la case


mémoire d’adresse 250 vers le WREG
par le mode direct et indirect.
Solution de l’exemple
DIRECT MODE INDIRECT MODE

• L’adresse 250 existe • L’adresse 250 existe


dans la BANK1 dans la première partie
• 250  011111010. 256 octets.
• RP(1,0)  01. • 250  011111010
• ADR FILE  1111010. • IRP  0.
• W  MEM(0x7A) • FSR  11111010.
• W  MEM(0x00)
GRAPHE D’ETAT DES MODES D’ADRESSAGES AU
MOMENT DU TRANSFERT DE DONNEES

MOVF FILE,W MOVF FILE,F

MOVLW K
LITERAL WREG FILE

MOVWF FILE
Organisation de l’espace DATA/IO
IRP 0 0 1 1

RP1,0 00 01 10 11
0x000 INDF 0x080 INDF 0x100 INDF 0x180 INDF

0x002 PCL 0x082 PCL 0x102 PCL 0x182 PCL


0x003 STATUS 0x083 STATUS 0x103 STATUS 0x183 STATUS
0x004 FSR 0x084 FSR 0x104 FSR 0x184 FSR

0x00A PCLATH 0x08A PCLATH 0x10A PCLATH 0x18A PCLATH


0x00B INTCON 0x08B INTCON 0x10B INTCON 0x18B INTCON

0x07F 0x0FF 0x17F 0x1FF


BANK 0 BANK 1 BANK 2 BANK 3
Plan du cours –partie 2-
• Présentation du jeu d’instructions de MID-RANGE.
1. Formats des instructions.
2. Table des instructions.
3. Le registre d’état STATUS.
4. L’arbre du HUFFMAN pour le jeu d’instructions.
5. Le registre compteur ordinal PC.
6. Groupes du jeu d’instructions.
• Organisation de la zone CODE et la zone STACK.
• Gestion des interruptions.
Formats des instructions

Encore une
autre limite!!!
Le MID-RANGE est un
CPU RISC a 35
instructions.

La plus par des


instructions fait un seul
cycle machine.

Table des instructions


Arbre du HUFFMAN pour le jeu d’instruction du MID-RANGE
IR(13:12) 11
GRP3
GRP0 IR(11:8)
GRP2
00 GRP1 111X
IR(11:8) 01 10 ADDLW
1101
1111 IR(11:10) IR(11) SUBLW
INCFSZ 1010
1110 11 XORLW
SWAPF BTFSS 1 1001
1101 10 GOTO ANDLW
RLF BTFSC 0 1000
01 CALL IORLW
1100 01XX
RRF BSF RETLW
1011 00 00XX
DECFSZ BCF MOVLW
1010
INCF
1001
COMF 1001
1000 RETFIE
MOVF 1000
0111 RETURN
ADDWF 0100
0110 CLRWDT
XORWF 0011
0101 SLEEP
ANDWF 0000
0100 NOP
IORWF
0011 1 0XX0 IR(3:0)
DECF CLRF
0010 0 1XXX
SUBWF CLRW MOVWF
0001 IR(7)
0000 IR(7:4)
Désassemblage par l’arbre du HUFFMAN
• Utiliser l’arbre du HUFFMAN et le tableau des
instructions pour désassembler le code machine
suivant d’un CPU MID-RANGE.
HOME WORK
• Désassembler le code machine suivant:
Le registre compteur ordinal PC
Le registre compteur ordinal PC
• Le registre PCL au moment de lecture:
Adresse mnémonique
101h MOVF PCL, W
102h MOVWF X

• Quelle est la valeur chargée dans X ???


• Le registre PCL au moment d’écriture:
Adresse mnémonique
100h MOVLW 10h
101h MOVWF PCLATH
102h MOVLW 03h
103h MOVWF PCL

• Qu’est ce qui se passe après l’exécution de ce


code ?????
Groupes de jeu d’instructions
• D’après le tableau de diaporama -4-, le jeu l’instructions de MID-RANGE
se divise en 3 groupes sont:
– Instructions orientées FILE.
– Instructions orientées BIT.
– Instructions de contrôle et manipulation des valeurs immédiates.
• Mais, selon la fonction, on a 5 groupes sont:
– Instructions de transfert : MOVLW, MOVF et MOVWF.
– Instructions orientées BIT : BCF, BSF, BTFSC et BTFSS.
– Instructions arithmétiques : ADDLW, ADDWF, SUBLW, SUBWF, INCF, DECF,
INCFSZ, DECFSZ, CLRF et CLRW.
– Instructions logiques : ANDLW, ANDWF, IORLW, IORWF, XORLW, XORWF, COMF,
RLF, RRF et SWAPF.
– Instructions de Contrôle : GOTO, CALL, RETURN, RETLW, RETFIE, NOP, SLEEP et
CLRWDT.
Quizz

• Dans la littérature, on trouve d’autres instructions de décalage et de


rotation:
• Décalage logique/arithmétique à gauche (fig1).
• Décalage logique à droite (fig2).
• Décalage arithmétique à droite (fig3).
• Rotation à gauche sans carry (fig4).
• Rotation à droite sans carry (fig5).
• Réaliser les opérations suivantes par le jeu d’instructions du MID-
RANGE.
Quizz
• Écrire un programme qui fait le saut vers
l’adresse code 0x1700 par :
– Un saut statique.
– Un saut dynamique (programmable).
Astuces
• Comment forcer un ou plusieurs bits à 1 ?
• Comment Masquer un ou plusieurs bits à 0 ?
• Comment Inverser (basculer) un ou plusieurs
bits ?
Astuces

X
1/X
1/0

X
X/0
1/0

1/0
X/ X
Astuces
• Pour forcer un bit ou plusieurs à 1, on fait un
OR avec un 1.
• Pour Masquer un bit ou plusieurs à 0, on fait
un AND avec un 0.
• Pour inverser un bit ou plusieurs, on fait un
XOR avec un 1.
Astuces
• Exemple: Forcer les bits [b0, b1] à 1, masquer
les bits [b2, b4, b6] à 0, et inverser les bits [b3,
b5, b7] de registre WREG.

7 6 5 4 3 2 1 0

WREG X X X X X X X X Before

Comment faire ???


7 6 5 4 3 2 1 0

WREG X\ 0 X\ 0 X\ 0 1 1 After
Organisation de la zone CODE,STACK

• La zone CODE est une mémoire de taille


8k*14bits (les 14 bits présente la taille
d'une instruction).
• La zone STACK (Pile) est une mémoire de
type LIFO (Last In First Out) de 8 niveaux
de 13bits chacun (13 bits présente la taille
du PC).
• Le CPU utilise cette zone pour
Empiler/Dépiler les adresses de retour au
moment d'appel d'un sous-programme ou
un traitement d'une interruption.
• La zone STACK du MID-RANGE reste
toujours inaccessible par l'utilisateur, donc
on n'a pas des instructions pour manipuler
comme le µP 8086 chez Intel (PUSH/POP)
Organisation de la zone CODE
• MICROCHIP appelle un emplacement mémoire dans
la zone CODE par le nom « vecteur », un vecteur
prend une instruction (op-code & opérandes).
• Les deux vecteurs essentiels dans cette zone sont:
– Le vecteur RESET: est le premier vecteur d’adresse
0x0000 (au moment de démarrage/reset le CPU branche
vers cette adresse).
– Le vecteur ISR: est le vecteur d’interruption d’adresse
0x0004 (au moment d’une interruption le CPU branche
vers cette adresse).
Gestion des interruptions
• Le MID-RANGE a une seule entrée de
demande d’interruption masquée par le
bit 7 (GIE GOLOBAL INTERRUPT ENABLE)
de registre INTCON comme indique la
figure suivante : Wake-up if in sleep mode
• La gestion de la ligne IRQ se fait par:
– Si GIE est 1 & IRQ est 1 
IRQ
– Le CPU termine d’exécution de l’instruction Interrupt to CPU
AND
en cours.
– GIE  0 (pour ne pas gêner le traitement
de l’interruption en cours).
GIE
– Sauvegarde l’adresse de retour dans le TOS.
– Saut vers l’adresse 0x0004 (ISR) Bit 7 INTCON
register

La plus par des µC sont entourés par plusieurs périphériques capables de générer des
demandes d’interruption, et le MID-RANGE capable de gérer une seule demande, donc
comment faire pour gérer plusieurs demandes d’interruption???
Solution
• La solution proposée par MICROCHIP est
d’attribuer pour chaque demande d’interruption
un bit « autorisateur » et un autre bit « flag ».
• Le bit autorisateur: on utilise pour
activer/désactiver la demande d’interruption
par ce périphérique.
• Le bit flag: on utilise pour indiquer est-ce que on
a une demande d’interruption ou non? Comme
indique la figure suivante:
Solution
• Après le saut vers le ISR d’adresse 0x0004, on fait le test de
chaque flag ; si la cas, on exécute le ISR correspondant.
• Le premier flag à testé présente la demande de la plus haute
priorité.
• Le dernier flag à testé présente la demande de la plus faible
priorité.
• On appelle cette méthode de gestion par le nom SOFTWARE
POLLING.
Exemple de gestion d’une interruption par le
SIMULATOR du MIDRANGE
• Le code suivant ne fait rien (boucler infiniment
dans la même adresse [il plante]), mais à
chaque demande d’interruption le ISR
incrémente la case mémoire d’offset 0x0C par
rapport à la BANK0.
Exemple de gestion d’une interruption par le
SIMULATOR du MIDRANGE

BEGIN ISR

X0 X  X+1

GIE  1 END ISR

ISR: Interrupt Service Routine

Programme principal
Demande d’interruption
Exemple de gestion d’une interruption par le
SIMULATOR du MIDRANGE

ISR

MAIN
Gestion avancée des interruptions

Save contexte

Load contexte
Gestion avancée des interruptions
• SAVE CONTEXTE : on fait le sauvegarde de
WREG et le STATUS dans la RAM.
• LOAD CONTEXTE : on fait le chargement de
WREG et le STATUS à partir de la RAM.
• le but de SAVE/LOAD CONTEXTE est de ne pas
perturber le bon fonctionnement du
programme interrompu.
Gestion avancée des interruptions
• SAVE CONTEXTE:
MOVWF W_REG
SWAPF W_REG,F
MOVF STATUS,W
MOVWF STATUS_REG

• LOAD CONTEXTE:
MOVF STATUS_REG,W
MOVWF STATUS
SWAPF W_REG,W
Détail de la gestion d’une interruption

BEGIN ISR

SAVE CONTEXTE

YES
FLAG = 1 TRAITEMENT

FLAG  0
NO

LOAD CONTEXTE

END ISR

Vous aimerez peut-être aussi