Les interruptions Notation Votre note est : 4 sur 10 Vos réponses Question 1 Le

Les interruptions Notation Votre note est : 4 sur 10 Vos réponses Question 1 Le programme suivant : #include <stm32f10x_lib.h> #include <math.h> void S2appuye(void) { if (S2presse) { if (!((GPIOA->IDR & 0x0001) == 0 )) { S2presse = 0; Tempo(500000); } } else { if (((GPIOA->IDR & 0x0001) == 0 )) { // S2 est appuye S2presse = 1; Tempo(500000); } } } int main(void) { int sum; int vector[10000], coef[10000], prod[10000]; { while(1) { if (S2appuye()) { sum = 0; for (i = 0; i < 10000; i++) sum += abs(vector[i]); } for(i=0,i<10000;i++) prod[i] = sum*coef[i]; } } permet au système : Votre réponse était une scrutation périodique de l'état de S2 ? Question 2 Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur... 1 of 8 1/7/2021, 12:15 AM Une interruption c'est : Votre réponse était La réaction à un événement synchrone dont l'apparition est identifiée dans la séquence des instructions du programme en cours d'exécution. Question 3 Lors de l'exécution d'une routine de service d'interruption, il faut au préalable Votre réponse était que le processeur sauvegarde le compteur de programme, le registre d'état et les registres de passage des paramètres Question 4 Qu'est que la table des vecteurs d'interruption dans le STM32 Votre réponse était Une table qui indique l'état des interruptions Question 5 L'instruction : NVIC->ISER[0] = (1<<28); réalise Votre réponse était Une autorisation des interruptions provenant du Timer2 Question 6 si le registre BASEPRI contient la valeur 128 quelle interruption peut être servie Votre réponse était Une interruption ayant une priorité de 128 Question 7 Quels sont les niveaux d'autorisation des interruptions du STM32 ? Votre réponse était Un niveau local et un niveau périphériques Question 8 Si la valeur du registre LR est égale à 0xFFFFFFF9 et que le STM32 est en train d'exécuter une routine de service d'interruption. Une fois cette routine exécutée, si il n'y a pas de nouvelle demande d'interruption en attente, le programme qui reprendra son cours sera exécuté Votre réponse était en mode utilisateur Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur... 2 of 8 1/7/2021, 12:15 AM Question 9 La pile lors de l'exécution d'une routine de service d'interruption sert à Votre réponse était Sauvegarder la valeur du compteur de programme, la valeur du registre d'état et la valeur des registres de passage des paramètres avant de dérouter le compteur de programme vers la routine d'interruption. Question 10 Il existe deux types d'interruptions Votre réponse était les exceptions systèmes induisant une remise à zéro du système et les interruptions externes provoquées par des périphériques. Correction Question 1 Le programme suivant : #include <stm32f10x_lib.h> #include <math.h> void S2appuye(void) { if (S2presse) { if (!((GPIOA->IDR & 0x0001) == 0 )) { S2presse = 0; Tempo(500000); } } else { if (((GPIOA->IDR & 0x0001) == 0 )) { // S2 est appuye S2presse = 1; Tempo(500000); } } } int main(void) { int sum; int vector[10000], coef[10000], prod[10000]; { while(1) { if (S2appuye()) { sum = 0; for (i = 0; i < 10000; i++) sum += abs(vector[i]); } for(i=0,i<10000;i++) Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur... 3 of 8 1/7/2021, 12:15 AM prod[i] = sum*coef[i]; } } permet au système : Bonne réponse La bonne réponse était une scrutation périodique de l'état de S2 ? Question 2 Une interruption c'est : Mauvaise réponse La bonne réponse était une rupture de l'exécution séquentielle d'un programme sans connaissance à priori de l'apparition de l'événement qui cause cette rupture. Question 3 Lors de l'exécution d'une routine de service d'interruption, il faut au préalable Bonne réponse La bonne réponse était que le processeur sauvegarde le compteur de programme, le registre d'état et les registres de passage des paramètres Question 4 Qu'est que la table des vecteurs d'interruption dans le STM32 Mauvaise réponse La bonne réponse était Une table qui indique les adresses des routines de service des interruptions. Question 5 L'instruction : NVIC->ISER[0] = (1<<28); réalise Bonne réponse La bonne réponse était Une autorisation des interruptions provenant du Timer2 Question 6 si le registre BASEPRI contient la valeur 128 quelle interruption peut être servie Mauvaise réponse La bonne réponse était Une interruption ayant une priorité de 8 Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur... 4 of 8 1/7/2021, 12:15 AM Question 7 Quels sont les niveaux d'autorisation des interruptions du STM32 ? Mauvaise réponse La bonne réponse était Un niveau global, un niveau périphériques et un niveau local lié aux fonction du périphérique Question 8 Si la valeur du registre LR est égale à 0xFFFFFFF9 et que le STM32 est en train d'exécuter une routine de service d'interruption. Une fois cette routine exécutée, si il n'y a pas de nouvelle demande d'interruption en attente, le programme qui reprendra son cours sera exécuté Mauvaise réponse La bonne réponse était en mode superviseur Question 9 La pile lors de l'exécution d'une routine de service d'interruption sert à Bonne réponse La bonne réponse était Sauvegarder la valeur du compteur de programme, la valeur du registre d'état et la valeur des registres de passage des paramètres avant de dérouter le compteur de programme vers la routine d'interruption. Question 10 Il existe deux types d'interruptions Mauvaise réponse La bonne réponse était les exceptions systèmes provoquées par dysfonctionnement du système et les interruptions externes provoquées par des périphériques. Chaque source d'interruption possède son propre vecteur d'interruption Explication Question1 Le programme suivant : #include <stm32f10x_lib.h> #include <math.h> void S2appuye(void) { if (S2presse) { if (!((GPIOA->IDR & 0x0001) == 0 )) { S2presse = 0; Tempo(500000); Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur... 5 of 8 1/7/2021, 12:15 AM } } else { if (((GPIOA->IDR & 0x0001) == 0 )) { // S2 est appuye S2presse = 1; Tempo(500000); } } } int main(void) { int sum; int vector[10000], coef[10000], prod[10000]; { while(1) { if (S2appuye()) { sum = 0; for (i = 0; i < 10000; i++) sum += abs(vector[i]); } for(i=0,i<10000;i++) prod[i] = sum*coef[i]; } } permet au système : Explication : Il s'agit ici d'attente active. Dans le code il est visible que cette méthode n'est pas réactive : il faut attendre que les traitements sur les vecteurs prod et sum soient effectués avant d'aller scruter à nouveau S2, cela prend au minimum 10000 cycles d'horloges (pour le calcul du vecteur prod). Elle n'optimise pas l'utilisation puisque périodiquement la fonction de scrutation de S2 va être appelée même si aucun appui n'est effectif. Ce traitement de scrutation a un coût temporel : une temporisation de 5000 cycles. Durant ce temps aucun autre traitement n'est effectué. Question2 Une interruption c'est : Explication : Cette définition indique tout l'enjeu de la gestion d'une interruption. Les événements qui provoquent une interruption sont dans le cas général asynchrones, il faut donc pouvoir les identifier et dérouter l'exécution séquentielle vers une procédure de traitement de ces événements. L'identification ne peut se faire dans la séquence des instructions du programme et doit être réalisée matériellement. Question3 Lors de l'exécution d'une routine de service d'interruption, il faut au préalable Explication : Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur... 6 of 8 1/7/2021, 12:15 AM Il faut qu'un mécanisme matériel déclenché automatiquement lors de la prise en compte de l'interruption sauvegarde ces informations pour pouvoir ensuite revenir à une exécution normale du programme. Le passage du mode utilisateur au mode superviseur s'effectue de manière automatique, c'est réalisé matériellement. Si FAULTMASK est à 1, toutes les interruption sauf NMI et reset sont invalidées et non prises en compte. Question4 Qu'est que la table des vecteurs d'interruption dans le STM32 Explication : C'est grâce à cette table que la routine de service d'interruption peut-être traité. Lors qu'une interruption intervient, après la sauvegarde du compteur de programme, du registre d'état et des registres de passage des paramètre, cette table est automatique lue. Pour déterminer la bonne adresse le numéro de l'interruption est utilisée en tant qu'indice de cette table. Une fois récupérée de manière automatique, cette adresse est copiée dans le compteur de programme. Question5 L'instruction : NVIC->ISER[0] = (1<<28); réalise Explication : Effectivement, le timer2 est la 28ième source d'interruption Question6 si le registre BASEPRI contient la valeur 128 quelle interruption peut être servie Explication : Le registre BASEPRI interdit toute interruption de niveau indentique au plus faible, donc de valeur de priorité plus haute ou égale à la valeur de ce registre Question7 Quels sont les niveaux d'autorisation des interruptions du STM32 ? Explication : Il y a effectivement 3 niveaux d'autorisations dans le STM32. Il est possible d'interdire ou d'autoriser toutes les interruptions via les registre PRIMASK et FAULTMASK. Il est possible d'interdire ou d'autoriser les interruptions provenant d'un périphériques via les registres NVIC-ISER. Et il est possible en interne des périphériques d'interdire ou d'autoriser les interruptions en fonctions d'événements spécifiques en paramétrant les registres de configuration de ces périphériques. Question8 Si la valeur du registre LR est égale à 0xFFFFFFF9 et que le STM32 est en train Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur... 7 of 8 1/7/2021, 12:15 AM d'exécuter une routine de service d'interruption. Une fois cette routine exécutée, si il n'y a pas de nouvelle demande d'interruption en attente, le programme qui reprendra son cours sera exécuté uploads/s1/ inrerruption.pdf

  • 26
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Jui 02, 2021
  • Catégorie Administration
  • Langue French
  • Taille du fichier 0.3305MB