Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Microcontroleurs I
Pile et Ports d’Entrées-Sorties
Pierre Corbineau
IESE3 S5
2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
La Pile (Stack)
I La pile est une zone mémoire quelconque située dans laRAM dont l’accès est facilité par les instructions push etpop
I Cette zone mémoire est de type LIFO (Last In, First Out)I Le pointeur de pile SP (r13) contient l’adresse du dernier
élément écrit dans la pileI L’écriture d’une donnée dans la pile décrémente le pointeur
de pile et écrit la donnée à cette nouvelle adresse (fulldescending stack)
I Lors d’un reset, le processeur écrit dans SP la valeursituée à l’adresse 0x00000000. Dans notre cas, la pilecommence à l’adresse 0x20020000, en haut de la SRAM.
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Instruction de piles : push
L’instruction push
I Syntaxe : push reglistI reglist est une liste de registres à stocker sur la pile.
Z Ceux-ci seront rangés sur la pile du plus grand au pluspetit, c’est-à-dire que le registre au numéro le plus grandoccupera l’adresse la plus haute.
I L’adresse la plus haute correspond à SP−4 (SP estd’abord décrémenté avant de mettre sur la pile le premierregistre)
I Equivalence avec une instruction connue :push {rt}↔ str rt,[sp,#-4]!
Z [sp,#-4]!↔ Pré-décrémentation de SP de 4
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Instruction de pile : push (exemples)
L’instruction push
Exemple 1 :I push {r1,r5}↔ push {r5} ; push {r1}
I Valeur de SP suite à l’instruction : SP−8
Exemple 2 :
I push {r0,r3-r5}↔ Adresse SP−16 SP−12 SP−8 SP−4Registrestocké r0 r3 r4 r5
I Valeur de SP suite à l’instruction : SP−16
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Instruction de pile : pop
L’instruction pop
I Syntaxe : pop reglistI reglist est une liste de registres à charger à partir de la
pile.Z Les valeurs seront chargées dans les registres en
commençant par les plus petits, c’est-à-dire qu’on chargeradans le registre au numéro le plus la donnée à l’adresse laplus basse.
I L’adresse la plus basse correspond à SP (Après avoirdépilé la valeur, SP est ensuite incrémenté de 4)
I Equivalence avec une instruction connue : pop {rt}↔ldr rt,[sp],#4
Z [sp],#4↔ Post-incrémentation de SP de 4
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Instruction de pile : pop (exemples)
Exemple 1 :I pop {r1,r5}↔ pop {r1} ; pop {r5}
I Valeur de SP suite à l’instruction : SP+8
Exemple 2 :
I push {r0,r3-r5}↔ Adresse SP+0 SP+4 SP+8 SP+12Registrechargé r0 r3 r4 r5
I Valeur de SP suite à l’instruction : SP+16
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Utilisations de la pile
1. Stocker facilement des données quand on est à cours deregistres :Z pas besoin de se préoccuper de l’adresse de stockage
2. Sauvegarder un contexte lors de l’appel d’une fonction :I Tous les registres (incluant l’adresse de retour) sont
empilés avant l’appel de la fonction.I La fonction est exécutée en utilisant les registres dont elle a
besoin.I Lors du retour au programme principal, on recharge dans
les registres les valeurs qu’ils avaient avant l’appel à lafonction.
I On restaure aussi l’adresse de retour qui est l’adresse del’instruction suivante en la dépilant dans PC.
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Du bon usage de la pile
I Ne pas lire/modifier des adresses :I en dessous (strictement) de SP (sommet de pile)I ni au dessus (strictement) de la base de la pile
Exemple Dans le cas de la carte utilisée en TP, la RAM (et la pile)finissent à l’adresse 0x20020000. Ne pas chercher à stockerquelque chose aux adresses supérieures
I Modifier et dépiler uniquement les valeurs empilées dansle même bloc de codeI pile = stockage pour les variables locales
I Toujours dépiler dans l’ordre inverse d’empilementpush {r1}; push {r3} . . . pop {r3}; pop {r1}
Z L’utilisation de l’écriture en liste de registres le réaliseautomatiquement : push {r1,r3} . . . pop {r1,r3}
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Autres usages de la pile
1. Dépiler des valeurs devenues inutilesZ Ajuster simplement la valeur de SP
Exemple push {r1,r5} . . . add sp,sp,#8
2. Lire/modifier les éléments de la pile sans dépiler ceux-ciExemple
ldr r0,[sp,#12] /∗ Lire le 4ème élément de la pile ∗/ldr r1,[sp,#8] /∗ Lire le 3ème élément de la pile ∗/add r0,r0,r1 /∗ Additionner les deux ∗/str r0,[sp,#8] /∗ Modifier le 3ème élément de la pile ∗/
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Intermède. . .
mov r1,#gammamov r0,#betapush{r0,r1}mov r0,#alphapush{r0}mul r1,r0,r0lsl r1,#2str r1,[sp,#8]add sp,sp,#4pop{r1}mul r1,r1,r1pop{r0}sub r0,r1,r0/∗ valeur finale de r0 ?? ∗/
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Ports d’Entrées-SortiesLes périphériques General Purpose Inputs/Outputs (GPIOdevices)
I Pour interagir avec le monde extérieur, le microcontrôleur a8 ports d’entrées-sorties, numérotés de A à H.
I Chaque port a 16 pattes physiques associées.I On paramètre/utilise ces ports en programmant des
registres de configuration décrits dans le manueld’utilisation du microcontrôleur
I Toutes les pattes ne sont pas disponibles :I Pattes physiques absentes sur ce modèle/boitier
(STM32F446RE)I Pattes utilisées pour le fonctionnement de la carte Nucleo
I Communication sérieI Communication sonde JTAG (programmation/debug)I Oscillateurs externesI . . .
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Ports d’Entrées-Sorties : pattes disponibles
Pattes (Pins) accessibles sur la carte de développementutilisée en TP :
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Fonctions supportées par les GPIOs
I Patte en entrée logiqueI Le GPIO permet de lire directement l’état haut/bas de la
patteI Patte en sortie logique
I Le GPIO permet de contrôler directement l’état haut/bas dela patte
I Patte en fonction alternative (entrée/sortie logiqueindirecte)I Pas de contrôle direct de la patte par le GPIOI L’état logique de la patte est contrôlé/lu par un périphérique
à travers le GPIO (ex : USART,I2C,SPI,TIM)I Patte en entrée/sortie analogique (indirecte)
I Pas de contrôle direct de la patte par le GPIOI Un périphérique ADC (entrée) ou DAC (sortie) lit/contrôle le
potentiel (état analogique) de la patte physique
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Utilisation des GPIOs : autorisation de l’horloge
Avant toute communication avec un périphérique :Z il faut envoyer un signal d’horloge vers ce périphérique
RCC Reset and Clock Control (périphérique)RCC_AHB1ENR[0:7] contient les bits d’autorisation d’horloge
pour activer indépendamment chacun des 8GPIOs.
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Utilisation des GPIOs : autorisation de l’horloge
Exercice Comment autoriser l’horloge sur les ports A et Dsans modifier les autres configurations?
Solution Algorithme (opération) En Assembleur
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Utilisation des GPIOs : configuration du portChacune des 16 pattes de chaque port peut être configuréeindépendamment à l’aide de 5 registres de configuration.I GPIOx_MODER tous les modes
Z choix du mode de la patteb 2 bits par patte (4 modes)
I GPIOx_OTYPER sortie ou fct. alternativeZ type de sortie (push/pull ou collecteur ouvert)b 1 bit par patte (2 modes)
I GPIOx_OSPEEDR sortie ou fct. alternativeZ vitesse de sortie du port (latence)b 2 bits par patte (4 vitesses)
I GPIOx_PUPDR entréeZ résistances de tirage (haut/bas/aucune)b 2 bits par patte (3 modes)
I GPIOx_AFRL + GPIO_AFRH fct. alternativeZ Choix de la fonction (périphérique) reliée à la patteb 4 bits par patte (16 fonctions)
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Utilisation des GPIOs : diagramme et modes
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Utilisation des GPIOs : Choix du modeChaque patte de chaque port peut utiliser un modeindépendamment des autres pattes.
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode entrée logique
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode entrée logique : utilisation
Configuration en mode entrée de la patte Pxy du port Px :I GPIOx_MODERy[1 :0] = 00
b pour PA5 : GPIOA_MODER[11 :10] = 00
Lecture de l’état de la patte Pxy dans le bit GPIOx_IDRyb pour PA5 : état = GPIOA_IDR[5]
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Résistances de tirage (1/4)
Grâce à GPIO_IDR, on peut détecter si on impose un « 1 »(VDD) ou un « 0 » (GND) sur une patte du microcontrôleur.
Z Peut-on détecter si l’interrupteur SW0 est ouvert ou fermé?
I Interrupteur fermé? VPA5 = VDD → GPIOA_IDR[5]=1I Interrupteur ouvert ? VPA5 = ?→ pas sûr . . .
I Problème de la « patte en l’air »
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Résistances de tirage (2/4)
Solution : une résistance de tirage vers le bas (pull-down)
I Interrupteur fermé? VPA5 = VDD → GPIOA_IDR[5]=1I Interrupteur ouvert ? VPA5 ≈ GND→ GPIOA_IDR[5]=0
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Résistances de tirage 3/4
On peut aussi utiliser le montage inverse :Z résistance de tirage vers le haut (pull-up)
I Interrupteur fermé? VPA5 = GND→ GPIOA_IDR[5]=0I Interrupteur ouvert ? VPA5 ≈ VDD → GPIOA_IDR[5]=1
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Résistances de tirage 4/4Chaque patte est équippée de deux résistances de tirage quipeuvent être activées en programmant GPIOx_PUPDR.
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode sortie logique
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode sortie logique : utilisation
Configuration en mode entrée de la patte Pxy du port Px :I GPIOx_MODERy[1 :0] = 01
b pour PA5 : GPIOA_MODER[11 :10] = 01
Contrôle de l’état de la patte Pxy par le bit GPIOx_ODRyb pour PA5 : GPIOA_ODR[5] = état souhaité
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode de sortie : push/pull ou collecteur ouvert
En sortie, chaque patte peut fonctionner selon deux modesdifférents.
GPIO_OTYPER=0 Mode Push/Pull P-MOS et N-MOS activés
GPIO_OTYPER=1 Mode Collecteur ouvert N-MOS seulement
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode de sortie : push/pull ou collecteur ouvert
En sortie, chaque patte peut fonctionner selon deux modesdifférents.
GPIO_OTYPER=0 Mode Push/Pull P-MOS et N-MOS activés
GPIO_ODR=0 Le transistor N-MOS force la patte aupotentiel GND (Pull)
GPIO_ODR=1 Le transistor P-MOS force la patte aupotentiel VDD (Push)I Mode utilisé pour piloter une LED
GPIO_OTYPER=1 Mode Collecteur ouvert N-MOS seulement
GPIO_ODR=0 Le transistor N-MOS force la patte aupotentiel GND (Pull)
GPIO_ODR=1 La patte est en haute impédance (high-Z) etsubit le potentiel extérieurI Mode utilisé avec une résistance Pull-up
interne ou externe
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Exemple : bouton poussoir (1/2)
Objectif : stocker dans r0 l’état d’unbouton poussoir connecté sur l’entréePD0 du STM32.
I Activation de l’horloge sur le port D
ldr r0,=RCC /∗ r0 <- adresse de base du périphérique RCC ∗/ldr r1,[r0, #0x30 ] /∗ r1 <- valeur située à l’offset 0x30 de RCC ∗/orr r1,r1,#(1<<3) /∗ Applique le masque ∗/str r1,[r0, #0x30 ] /∗ Ecrit r1 dans RCC_AHB1ENR ∗/
I Mise de la patte 0 en entrée (GPIOD_MODER0[1:0]=00)
ldr r0,=GPIOD /∗ r0 <- adresse de base du périphérique GPIOD ∗/ldr r1,[r0, #0x0 ] /∗ r1 <- valeur située à l’offset 0x0 de GPIOD ∗/ldr r2,=0xFFFFFFFC /∗ Charge dans r2 le masque ∗/and r1,r1,r2 /∗ Applique le masque ∗/str r1,[r0, #0x0 ] /∗ Ecrit r1 dans GPIOD_MODER∗/
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Exemple : bouton poussoir (2/2)
Objectif : stocker dans r0 l’état d’unbouton poussoir connecté sur l’entréePD0 du STM32.
I Branchement de la résistance de pull-down(GPIOD_PUPDR0[1:0]=01)
ldr r1,[r0, #0x0C ] /∗ r1 <- valeur située à l’offset 0x0C de GPIOD ∗/mov r2,#1 /∗ Ecriture de (01) 1 dans r2 ∗/bfi r1,r2,#0,#2 /∗ Remplace à partir du bit 0 ... ∗/
/∗ ... les 2 premiers bits de r1 par ceux de r2 ∗/str r1,[r0, #0x0C ] /∗ Ecrit r1 dans GPIOD_PUPDR∗/
I Lecture de l’état de PD0 (dans GPIOD_IDR)
ldr r1,[r0, #0x10 ] /∗ r1 <- valeur située à l’offset 0x10 de GPIOD ∗/and r1,r1,#1 /∗ On ne garde que le 1er bit (masquage) ∗/mov r0,r1 /∗ Recopie du résultat dans r0 ∗/
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode fonction alternative
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020
Utilisation de la Pile Les Ports d’Entrées-Sorties Entrée logique Sortie logique Exemple Autres modes
Mode analogique
Microcontroleurs I — P. Corbineau Cours 3 IESE3 S5 — 2019–2020