8
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 la RAM dont l’accès est facilité par les instructions push et pop 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 pile I L’écriture d’une donnée dans la pile décrémente le pointeur de pile et écrit la donnée à cette nouvelle adresse (full descending stack) I Lors d’un reset, le processeur écrit dans SP la valeur située à l’adresse 0x00000000. Dans notre cas, la pile commence à 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 reglist I reglist est une liste de registres à stocker sur la pile. Z Ceux-ci seront rangés sur la pile du plus grand au plus petit, c’est-à-dire que le registre au numéro le plus grand occupera l’adresse la plus haute. I L’adresse la plus haute correspond à SP-4 (SP est d’abord décrémenté avant de mettre sur la pile le premier registre) 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-4 Registre stocké r0 r3 r4 r5 I Valeur de SP suite à l’instruction : SP-16 Microcontroleurs I P. Corbineau Cours 3 IESE3 S5 2019–2020

Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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

Page 2: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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

Page 3: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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

Page 4: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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

Page 5: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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

Page 6: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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

Page 7: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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

Page 8: Microcontroleurs I - Pile et Ports d Entrées-Sorties · I Tous les registres (incluant l’adresse de retour) sont ... I GPIOx_OTYPER sortie ou fct. alternative Z type de sortie

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