Brevet FR2775370A1 — publié le 19990827

PROCEDE DE GESTION D'INTERRUPTIONS DANS UN MICROPROCESSEUR La présente invention concerne un procédé amélioré de gestion des interruptions dans un microprocesseur. Le mécanisme des interruptions est une technique très utilisée pour signaler un événement à un microprocesseur. Lorsqu'une interruption est reçue par ce dernier, il interrompt l'exécution du programme en cours, sauvegarde la valeur du compteur d'instructions dans une pile puis exécute une routine de traitement correspondant à cette interruption. Après ce traitement, le programme reprend son exécution à partir de la valeur sauvegardée dans la pile comme si rien ne s'était passé. Le microprocesseur comporte de manière classique plusieurs entrées d'interruptions, ce qui lui permet de recevoir plusieurs interruptions à la fois. Il existe un ordre de priorité entre ces différentes interruptions. De cette façon, lors de l'arrivée simultanée de deux interruptions, l'interruption de priorité hiérarchiquement la plus élevée est traitée en premier. L'ordre de priorité des interruptions est généralement établi par des circuits matériels (circuits hardware) dans un contrôleur d'interruptions du microprocesseur. Par ailleurs, certaines de ces interruptions sont masquables, c'est-à-dire que le microprocesseur peut être rendu insensible à ces interruptions. De manière classique, la gestion des interruptions au niveau du microprocesseur peut s'effectuer selon deux modes. Dans un premier mode, communément appelé "concurrent mode" en langage technique, l'exécution d'une routine d'interruption ne peut être interrompue par l'arrivée d'une nouvelle interruption même prioritaire. La nouvelle interruption est alors mise en attente. Seule une interruption non masquable est en mesure d'interrompre l'exécution d'une routine d'interruption en cours. Pendant ce mode, le microprocesseur est rendu insensible à l'arrivée de toute nouvelle interruption, excepté les interruptions non masquables. Pour se faire, pendant ce mode, le bit de masquage (souvent appelé bit I) contenu dans un registre d'état du microprocesseur est mis à 1 dès qu'une interruption est reçu par le microprocesseur et reste à 1 pendant le traitement de cette interruption. Cette mise à 1 est effectuée par hardware. En l'absence d'interruption, ce bit est à 0. Par ailleurs, si le microprocesseur reçoit une interruption non masquable pendant le traitement d'une interruption (masquable), cette dernière est traitée immédiatement par le microprocesseur sans tenir compte de ce bit, et le contenu du compteur d'instructions et du registre d'état est sauvegardé dans la pile comme pour une interruption classique. Ce mode est le mode de fonctionnement par défaut du microprocesseur et est appelé ci-après mode A. On peut noter également que le registre d'état du microprocesseur comporte, en plus du bit de masquage, des drapeaux sur l'état du microprocesseur. Ce registre comporte notamment le drapeau C qui est mis à un lorsque la retenue dépasse le bit de poids fort des opérandes lors d'une addition, le drapeau Z mis à un si le résultat de l'opération est nul, et le drapeau N mis à un lorsque le résultat est négatif. Dans un second mode de fonctionnement, appelé communément "nested mode" en langage technique, l'arrivée d'une interruption de priorité plus élevée que celle en cours interrompt le traitement de cette dernière. Son traitement n'est repris qu'après le traitement de l'interruption prioritaire. Ce mode permet d'imbriquer les interruptions et est appelé ci- après mode B. Pour mettre en oeuvre ce mode, il est généralement prévu, après la mise à 1 du bit de masquage par hardware suite à la réception d'une interruption, de le remettre à 0 par une intervention logicielle. La gestion des interruptions pendant ce mode se déroule de la manière suivante: - pendant l'exécution du programme principal, le bit de masquage est à 0 et le microprocesseur est alors dans un état lui permettant de traiter toute interruption éventuelle dès sa réception; - lorsqu'une interruption IT1 est reçue par le microprocesseur, le contenu du compteur d'instructions et du registre d'état du microprocesseur est sauvegardé dans la pile; le bit de masquage est mis à 1 par hardware; le compteur d'instructions est chargé avec le vecteur d'interruption correspondant à l'interruption IT1; la routine correspondant à l'interruption IT1 est alors exécutée; pour que les interruptions prioritaires à venir soient traitées immédiatement, le bit de masquage est remis à 0 par une action logicielle; - si une seconde interruption IT2 de priorité plus élevée apparaît sur les entrées d'interruptions du microprocesseur pendant le traitement de l'interruption IT1, le contenu du compteur d'instructions et celui du registre d'état sont sauvegardés dans la pile; le compteur d'instructions est chargé avec le vecteur d'interruption correspondant à l'interruption IT2; la routine correspondant à l'interruption IT2 est exécutée; une fois cette routine achevée, la dernière valeur de la pile est restaurée; l'exécution de la routine de l'interruption IT1 est poursuivie jusqu'à son terme; puis, la pile est de nouveau restaurée et l'exécution du programme principal est poursuivi. Il existe également des microprocesseurs dans lesquels l'ordre de priorité est double, c'est-à-dire qu'en plus des circuits pour définir un ordre de priorité matériel fixe, le contrôleur d'interruptions peut comporter des moyens pour modifier de manière logicielle cet ordre de priorité. Dans la suite de la description, une priorité matérielle s'entendra d'une priorité réalisée par des circuits (hardware) et une priorité logicielle s'entendra d'une priorité réalisée par un programme. Le fonctionnement de ce type de microprocesseur est le suivant: si le microprocesseur reçoit une interruption, on compare dans un premier temps son niveau de priorité logicielle avec celui de l'interruption ou du programme en cours; si le niveau de priorité logicielle de la nouvelle interruption est plus élevé, la routine d'interruption ou le programme en cours est interrompu, c'est-à-dire que le bit de masquage du microprocesseur est mis à 0 pour que l'interruption prioritaire soit traitée immédiatement; sinon, la nouvelle interruption est mise en attente; ainsi, pour que le microprocesseur fonctionne en mode A, il suffit que l'ensemble des interruptions aient le même niveau de priorité logicielle; si tel n'est pas le cas, le microprocesseur fonctionne en mode B. Le mode de fonctionnement de ce type de microprocesseur est par conséquent imposé par la priorité logicielle. Ce type de microprocesseur convient tout particulièrement lorsque le fonctionnement du microprocesseur doit être personnalisé pour les besoins d'une application. Cependant, ces microprocesseurs, avec ou sans priorité logicielle, nécessite une étape logicielle de mise à zéro du bit de masquage, après sa mise à un par hardware, pour fonctionner en mode B. Un but de l'invention est de diminuer le nombre des opérations à effectuer pour faire fonctionner le microprocesseur en mode B (mode imbriqué). En particulier, l'invention cherche à supprimer l'étape logicielle consistant à mettre le bit de masquage à zéro, et cela afin de diminuer le temps nécessaire à la gestion des interruptions en mode B. Aussi, l'invention a pour objet un procédé de gestion d'interruptions dans un microprocesseur, lesdites interruptions ayant un ordre de priorité double, logicielle d'une part et matérielle d'autre part, le microprocesseur fonctionnant selon deux modes, un premier mode pendant lequel l'exécution d'une routine d'interruption ne peut être interrompue par l'arrivée d'une nouvelle interruption même prioritaire sauf si cette dernière est non masquable, un second mode pendant lequel l'exécution d'une routine d'interruption est interrompue par l'arrivée d'une interruption prioritaire, le mode de fonctionnement du microprocesseur étant conditionné par le niveau de priorité logicielle des interruptions, caractérisé en ce qu'au moment de l'exécution d'une interruption, son niveau de priorité logicielle est chargé dans le registre d'état du microprocesseur. Cette opération de chargement remplace la double opération de mise à un du bit de masquage par hardware et de sa mise à zéro par une action logicielle et cette opération est effectuée de manière automatique par des circuits matériels (hardware). L'exécution d'une routine d'interruption en cours est interrompue par l'arrivée d'une nouvelle interruption lorsque le niveau de priorité de logicielle de cette dernière est supérieure à celui de l'interruption en cours. Ainsi, la priorité logicielle modifie l'ordre des priorités matérielles et indique au microprocesseur s'il doit ou non interrompre l'exécution de l'interruption en cours. Pour faire fonctionner le microprocesseur en mode A, il suffit de prévoir un même niveau de priorité logicielle pour chaque interruption. Le niveau de priorité logicielle attribué à chaque interruption est codé sur n bits et ces bits, qui sont à charger dans le registre d'état du microprocesseur, sont contenus de préférence dans n registres distincts. D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description détaillée qui suit et qui est faite en référence aux dessins annexés dans lesquels: - la figure 1 est un organigramme de la gestion des interruptions selon l'invention; - la figure 2 est un diagramme schématique du séquencement selon le mode A d'une suite d'interruptions donnée à titre d'exemple; et - la figure 3 est un diagramme schématique du séquencement selon le mode B de la suite d'interruptions de la figure 2. Selon l'invention, au moment de l'exécution d'une interruption, son niveau de priorité logicielle est chargé dans le registre d'état du microprocesseur. Suivant leur nombre, les niveaux de priorité logicielle sont codés sur un ou plusieurs bits. Dans la suite de la description, le procédé, donné en exemple et illustré aux figures 2 et 3, comporte quatre niveaux de priorité logicielle, chaque niveau étant codé sur deux bits, Il et I0. Les niveaux de priorité logicielle sont définis dans le tableau suivant: priorité logicielle Il I 0 niveau 0 (prog. principal) 1 0 niveau 1 0 1 niveau 2 0 0 niveau 3 1 1 Selon l'invention, au moment de l'exécution d'une interruption, les bits IO et Il correspondants sont chargés par hardware dans le registre d'état du microprocesseur. Les bits à charger dans le registre d'état sont fournis par deux registres R0 et Ri: le registre R0 fournit le bit I0 et le registre R1 fournit le bit Il. Dans l'exemple qui suit, les registres R0 et Ri sont des registres 16 bits, chaque bit se rapportant à une interruption particulière. interruption IT15 IT14 IT13 IT0 Registre RO 1 1 I1_13 Il_0 Registre Ri 1 1 I0_13 I0_0 Le bit I0 est de préférence chargé dans l'emplacement du registre d'état réservé au bit de masquage (bit I) et le bit Il est chargé dans un emplacement non utilisé du registre (cet emplacement mémorise généralement un "1"). Ainsi, le niveau de priorité logicielle le plus bas est 10 et le niveau de priorité logicielle le plus élevé est 11 de manière à conserver une compatibilité avec le mécanisme de fonctionnement des microprocesseurs existants. Pendant le déroulement du programme principal, les bits Il et I0 mémorisés dans le registre d'état valent respectivement 1 et 0 (niveau de priorité logicielle le plus bas). Ainsi, lorsqu'un signal d'interruption apparait sur les entrées d'interruption du microprocesseur, ce dernier interrompt l'exécution du programme principal et traite l'interruption. L'organigramme du traitement des interruptions selon l'invention est présenté à la figure 1. La gestion des interruptions s'effectue de la manière suivante: à chaque fois que le niveau de priorité logicielle de la nouvelle interruption est supérieur à celui de l'interruption en cours ou que la nouvelle interruption est une interruption non masquable, la routine d'interruption en cours est interrompue et le contenu du compteur d'instructions et du registre d'état du microprocesseur est sauvegardé dans la pile. Le compteur d'instructions et le registre d'état sont ensuite chargés respectivement avec le vecteur d'interruption et le niveau de priorité logicielle de la nouvelle interruption. La routine de la nouvelle interruption est alors exécutée. Tant que le microprocesseur ne reçoit pas de nouvelles requêtes d'interruption, celui-ci exécute les instructions de la routine d'interruption. Ce rebouclage permanent pour détecter l'arrivée de nouvelles interruptions est symbolisé sur la figure 1 par la lettre A. Si le microprocesseur reçoit des interruptions de même niveau de priorité logicielle ou de niveau inférieur, il les met en attente. Dès que la routine de l'interruption en cours est terminée (détection de l'instruction de fin d'interruption), le microprocesseur restaure le contenu de la pile dans le compteur d'instructions et le registre d'état. Si une interruption en attente a un niveau de priorité logicielle plus élevé que celui de l'interruption restaurée, cette dernière est de nouveau sauvegardée dans la pile (rebouclage par A) et l'interruption en attente est exécutée. Si plusieurs interruptions de même priorité logicielle sont en attente ou arrivent simultanément sur les entrées du microprocesseur, l'interruption ayant le niveau de priorité matérielle le plus élevé sera traitée en premier. Selon l'invention, le niveau de priorité logicielle des interruptions est sauvegardée dans la pile du contrôleur d'interruptions. Les interruptions sont alors identifiables (par groupes de niveau de priorité) au niveau de la pile. Des manipulations pour inverser des éléments de la pile sont alors rendues possibles. Pour que le microprocesseur fonctionne selon le mode A, il suffit de fixer un même niveau de priorité logicielle pour toutes les interruptions. La figure 2 illustre ce mode de fonctionnement du microprocesseur. Le niveau de priorité logicielle choisi pour ce mode est 11. La valeur du bit I0 étant 1, le chargement de ce bit dans le registre d'état est alors équivalent à une mise à un du bit de masquage du registre. La valeur du bit Il est prise égale à 1 de manière à ne pas modifier la valeur du bit correspondant du registre d'état. Le fonctionnement du microprocesseur est déclenchée par une interruption, communément appelé RESET, dont l'exécution s'achève lorsque le microprocesseur est éteint. Cette interruption possède le niveau de priorité matérielle le plus élevé, c'est pourquoi il est nécessaire de charger dans le registre d'état le niveau 10 pour que l'exécution de l'interruption RESET puisse être suspendue par les autres interruptions. La figure 2 fait intervenir six interruptions mentionnées ci-après dans l'ordre croissant de leur niveau de priorité matérielle:IT4, IT3, IT2, IT1, IT0 et NMI. L'interruption NMI désigne une interruption non masquable. Le niveau de priorité logicielle attribué à ces interruptions est 11. Pendant l'exécution du programme principal, le niveau de priorité logicielle passe 11 à 10 pour que les interruptions IT4, IT3, IT2, IT1, IT0 et NMI soient traitées. Les interruptions arrivent sur les entrées d'interruptions du microprocesseur dans l'ordre suivant: IT2, IT1, IT4, IT3, NMI et IT0. Ces interruptions sont traitées dans l'ordre suivant: l'interruption IT2 suspend l'exécution du programme principal, le contenu du compteur d'instructions et du registre d'état est sauvegardée dans la pile et IT2 est exécutée; pendant son exécution, les interruptions IT1 et IT4 sont mises en attente; à la fin de l'exécution de la routine de l'interruption IT2, la pile est restaurée mais le niveau de priorité logicielle du programme principal étant inférieur à celui de IT1, le contenu du compteur d'instructions et du registre d'état est remis dans la pile; puis, la routine de l'interruption IT1 est exécutée car IT1 a un niveau de priorité matérielle plus élevé que l'interruption IT4; pendant le traitement de IT1, l'interruption IT3 est mise en attente; puis l'interruption non masquable NMI intervient et le traitement de IT1 est suspendu; le contenu du compteur d'instructions et du registre d'état est sauvegardée dans la pile et la routine de NMI est exécutée; IT0 est mise en attente; après l'exécution de la routine de NMI, la pile est restaurée et le traitement de IT1 est poursuivi jusqu'à son terme; puis, la routine des trois interruptions en attente IT0, IT3 et IT4 sont exécutés dans l'ordre décroissant de leur niveau de priorité matérielle; enfin, la pile est restaurée une dernière fois et l'exécution du programme principal peut se poursuivre. La figure 3 illustre le fonctionnement du microprocesseur selon le mode B au travers de la même séquence d'interruptions que la figure précédente. Dans ce mode, les interruptions sont réparties sur trois niveaux de priorité logicielle, le quatrième niveau correspondant au niveau le plus bas étant réservé au programme principal. Plus précisément, le niveau 3 est attribué aux interruptions IT0, IT3, IT4 et NMI, le niveau 2 à l'interruption IT1, le niveau 1 à l'interruption IT2 et le niveau 0 au programme principal. Les interruptions sont traitées dans l'ordre suivant: l'interruption IT2 (niveau 1) suspend l'exécution du programme principal (niveau 0), le contenu du compteur d'instructions et du registre d'état est sauvegardée dans la pile et la routine de IT2 est exécutée; son exécution est interrompue par l'arrivée de IT1 (niveau 2), le contenu du compteur d'instructions et du registre d'état est sauvegardée dans la pile et la routine de IT1 est exécutée; son exécution est interrompue par l'arrivée de IT4 (niveau 3), le contenu du compteur d'instructions et du registre d'état est sauvegardée dans la pile et la routine de IT4 est exécutée; IT3 est mise en attente; le traitement de IT4 est interrompu par l'arrivée de NMI (non masquable), le contenu du compteur d'instructions et du registre d'état est sauvegardée dans la pile et la routine de NMI est exécutée; IT0 est mise en attente; à la fin de l'exécution de la routine de NMI, la pile est restaurée et le traitement de IT4 est poursuivi jusqu'à son terme; l'interruption dont le niveau de priorité logicielle est le plus élevée est alors traitée; il s'agit de IT0 puis de IT3; enfin, les interruptions de la pile, c'est-à-dire IT1 et IT2 sont traitées; la pile est restaurée une dernière fois et l'exécution du programme principal peut se poursuivre. REVENDICATIONS 1. Procédé de gestion d'interruptions dans un microprocesseur, lesdites interruptions ayant un ordre de priorité double, logicielle d'une part et matérielle d'autre part, le microprocesseur fonctionnant selon deux modes, un premier mode pendant lequel l'exécution d'une routine d'interruption ne peut être interrompue par l'arrivée d'une nouvelle interruption même prioritaire sauf si cette dernière est non masquable, un second mode pendant lequel l'exécution d'une routine d'interruption est interrompue par l'arrivée d'une interruption prioritaire, le mode de fonctionnement du microprocesseur étant conditionné par le niveau de priorité logicielle des interruptions, caractérisé en ce qu'au moment de l'exécution d'une interruption, son niveau de priorité logicielle est chargé dans le registre d'état du microprocesseur. 2. Procédé de gestion d'interruptions selon la revendication 1, caractérisé en ce que l'exécution d'une routine d'interruption en cours est interrompue par l'arrivée d'une nouvelle interruption si le niveau de priorité de logicielle de la nouvelle interruption est supérieure à celui de l'interruption en cours. 3. Procédé de gestion d'interruptions selon la revendication 2 caractérisé en ce que, pour que le microprocesseur fonctionne selon le premier mode, un même niveau de priorité logicielle est attribué à chaque interruption. 4. Procédé de gestion d'interruptions selon la revendication 2 ou 3, caractérisé en ce que le niveau de priorité logicielle attribué à chaque interruption est codé sur n bits et en ce que lesdits n bits à charger dans le registre d'état du microprocesseur sont contenus dans n registres distincts. 5. Procédé de gestion d'interruptions selon la revendication 4, caractérisé en ce que le niveau de priorité logicielle est codé sur deux bits et en ce que le niveau de priorité logicielle le plus élevé est 11 et le niveau de priorité logicielle le plus faible est 10. 6. Procédé de gestion d'interruptions selon la revendication 5, caractérisé en ce que, pour que le microprocesseur fonctionne selon le premier mode, le niveau de priorité logicielle attribué aux interruptions est 11.