Accueil technologie Interrompre l'imbrication

Interrompre l'imbrication



introduction

En fait, il s'agit du « timing » des interruptions de niveau supérieur. Le processeur exécute l'interruption, et il a accepté un autre "urgent" plus urgent et s'est tourné vers lui. Un niveau plus élevé de comportement d'interruption !

Priorité d'interruption

Définition

Une source d'interruption avec une priorité élevée peut interrompre une routine de service d'interruption avec une priorité faible, qui forme un ensemble de routines de service d'interruption. Dans le cas des routines de service d'interruption, ce que l'on appelle une imbrication d'interruption est formée.

Le processus dans lequel le MCU suspend le programme en cours et transfère pour répondre à la demande d'interruption est appelé réponse d'interruption ; afin de permettre au système de répondre et de traiter toutes les interruptions en temps opportun, le matériel La source d'interruption est divisée en plusieurs niveaux, appelés priorité d'interruption.

Priorité de la requête

Il existe deux niveaux de priorité pour les interruptions : la priorité de requête et la priorité d'exécution.

La priorité de la requête est la priorité par défaut de la fiche technique ou du livre (le registre IP n'est pas défini, 00H après la réinitialisation de la mise sous tension) :

Interruption externe 0> Temporisateur/Compteur 0 > Interruption externe 1 > Temporisateur/compteur 1 > Interruption série

ou int0, timer0, int1, timer1, port série ou INT0, T0, INT1, T1, UART

Ou PX0>PT0>PX1>PT1>PS>......

En fait, ce sont tous des niveaux de priorité de requête. Premièrement, la priorité de la requête ne peut pas être modifiée ou définie. Il s'agit d'un problème de file d'attente de priorité d'interruption, qui fait référence à l'ordre dans lequel l'arbitre d'interruption sélectionne quelle source d'interruption est traitée en premier lorsque plusieurs sources d'interruption génèrent des signaux d'interruption en même temps. Cela n'a rien à voir avec l'imbrication des routines de service d'interruption. Lorsque la CPU interroge chaque bit d'indicateur d'interruption, elle interroge en séquence selon l'ordre de priorité des cinq requêtes ci-dessus. Lorsque plusieurs interruptions sont demandées en même temps, il interrogera d'abord le bit d'indicateur d'interruption avec la priorité d'interrogation la plus élevée, mais cela ne signifie pas élevé Le service d'interruption de la priorité d'interrogation peut interrompre le service d'interruption de la priorité d'interrogation basse qui a été et est en cours d'exécution.

Par exemple : lorsque l'interruption du compteur 0 et l'interruption externe 1 (selon la priorité de la requête, interruption du compteur 0 > interruption externe 1) arrivent en même temps, il entrera dans la fonction de service d'interruption du temporisateur 0 ; mais dans une interruption externe Lorsque la fonction de service d'interruption de 1 est en service, aucune interruption ne peut l'interrompre à ce moment, y compris l'interruption externe 0 avec une priorité logique plus élevée que l'interruption du compteur 0.

Priorité d'exécution

La priorité d'exécution de l'interruption est votre réglage du registre IP. Dans le cas de 2 niveaux de priorité, si un bit est à 1, la source d'interruption correspondante est de haute priorité ; s'il est égal à 0, il s'agit d'une priorité faible.

Il existe trois principes concernant la priorité des interruptions :

1. Lorsque la CPU reçoit plusieurs interruptions en même temps, elle répond d'abord à la demande d'interruption avec la priorité la plus élevée ;

2. Le processus d'interruption en cours ne peut pas être interrompu par une nouvelle demande d'interruption de même niveau ou de faible priorité ;

3, le service d'interruption de faible priorité en cours peut être interrompu par une demande d'interruption de haute priorité ;

S'il y a plus d'une demande d'interruption dans la même priorité d'exécution, il y a un problème de file d'attente de priorité d'interruption. La file d'attente des interruptions avec la même priorité d'exécution est formée par la priorité naturelle déterminée par le matériel du système d'interruption. L'ordre de priorité du haut au bas est :

Interruption externe 0> Timing/Comptage 0> Interruption externe 1> Timing/Count 1>Interface série

Par exemple : définissez IP=0x10, c'est-à-dire définissez l'interruption du port série sur la priorité la plus élevée, puis l'interruption du port série peut interrompre toute autre fonction de service d'interruption pour réaliser l'imbrication, et seule l'interruption du port série peut interrompre d'autres fonctions de service interrompues. Si l'interruption du port série n'est pas déclenchée, la priorité logique est toujours maintenue parmi les autres interruptions et elles ne peuvent pas être imbriquées les unes dans les autres.

Interrompre l'imbrication

À propos de l'imbrication d'interruption. On peut dire que lorsqu'une interruption est en cours d'exécution, si le registre de priorité d'interruption IP est défini à l'avance, alors lorsqu'une interruption de priorité plus élevée arrive, une imbrication d'interruption se produira, et s'il n'est pas défini, aucune imbrication ne se produira. ; S'il existe un déclencheur d'interruption de même priorité, il n'est pas en « application continue », mais la position de son drapeau d'interruption correspondante est une certaine position dans le registre IE. Lorsque la CPU a terminé d'exécuter l'interruption en cours, elle suivra la priorité de la requête. Revérifiez chaque bit d'indicateur d'interruption et entrez l'interruption correspondante.

N'oubliez pas que lorsque l'adresse IP n'est pas définie, le MCU fera la queue pour entrer dans le service en fonction de la priorité de la requête (ou de la priorité logique). Si vous souhaitez une réponse prioritaire à une interruption, vous devez définir l'IP et modifier la priorité d'exécution (ou la priorité physique). Il convient de noter que lorsque IP (la priorité d'interruption est la priorité d'interruption, la même chose ci-dessous) est défini, lorsqu'une interruption à faible priorité d'exécution est en cours d'exécution, si une interruption avec une priorité d'exécution élevée est générée, l'appel imbriqué entrera dans la priorité d'exécution élevée. interrompt. Si vous êtes un programme écrit en langage C et utilisez le groupe de registres pendant le service d'interruption, veuillez noter que deux routines de service d'interruption avec des priorités différentes ne doivent pas utiliser le même groupe de registres.

Exemple 1

1 Lorsque chaque interruption est de faible priorité, si le dépassement du temporisateur 0 entre dans l'interruption. Dans le processus de traitement des interruptions, l'interruption externe 0 est également déclenchée, donc l'imbrication d'interruption se produira-t-elle ?

Réponse 1 : dans le cas où l'IP a défini la priorité de l'interruption externe 0 à l'avance, la CPU suspendra le service d'interruption du temporisateur 0, entrera dans la routine de service d'interruption externe 0 et reviendra au temporisateur après l'exécution de la routine de service d'interruption 0 . Sinon, ce ne sera pas le cas.

Exemple 2

2 Si le temporisateur 0 est interrompu, il entre dans la routine de traitement d'interruption. A ce moment, la condition de déclenchement de la condition d'interruption externe 1 est remplie. Comme la priorité naturelle du temporisateur 0 est supérieure à celle de l'interruption externe 1, le gestionnaire d'interruption du temporisateur 0 continue de s'exécuter. Supposons que l'interruption externe 1 est déclenchée pendant l'exécution du gestionnaire d'interruption de minuterie. Si la condition disparaît, après le traitement de l'interruption du temporisateur 0, le programme entrera-t-il toujours dans la routine de traitement de l'interruption externe 1 ?

Réponse 2 : Il entrera définitivement dans l'interruption ; une fois que la condition de déclenchement de l'interruption externe 1 est remplie, l'indicateur d'interruption de l'externe 1 est défini. Même si la condition de déclenchement de l'interruption externe 1 disparaît plus tard, elle ne sera pas effacée. Indicateur d'interruption de bit, donc une fois le traitement d'interruption du temporisateur 0 terminé, le programme entrera toujours dans le gestionnaire d'interruption externe 1 après avoir jugé que l'indicateur d'interruption de l'interruption externe est 1. Le matériel ne sera exécuté que lorsque l'instruction reti est exécutée dans le gestionnaire d'interruption externe 1. Effacer le drapeau d'interruption de l'interruption externe 1 (c'est pourquoi le retour d'interruption utilise l'instruction reti et ne peut pas être remplacé par ret)...

Traitement des interruptions

Le traitement des interruptions est divisé en quatre étapes :

1. Enregistrez la scène du programme interrompu, le but est de revenir à l'endroit interrompu d'origine pour continuer l'exécution une fois l'interruption traitée ;

2 Analysez la source de l'interruption, déterminez la cause de l'interruption et considérez la priorité de l'interruption lorsque plusieurs interruptions sont demandées en même temps ;

3, allez exécuter le programme de traitement correspondant;

4. Restaurez la scène du programme interrompu et continuez à exécuter le programme interrompu.

Effacer l'indicateur d'interruption

Il existe deux façons pour MCU d'effacer l'indicateur d'interruption

L'une consiste à écrire "dans le registre du drapeau d'interruption via le code logiciel" 1" pour terminer l'opération d'effacement du bit de drapeau

Le deuxième type est lorsque le MCU répond à l'interruption et exécute le programme de service d'interruption (c'est-à-dire que le pointeur du compteur de programme saute à la zone de code de programme de service d'interruption). Le matériel effectue automatiquement l'opération de réinitialisation.

Caractéristiques des interruptions à plusieurs niveaux

1. Si un système a des interruptions de niveau n, il existe n déclencheurs de demande d'interruption dans le MCU, qui sont collectivement appelés registres de demande d'interruption ; Il y a n bascules de masque d'interruption correspondantes, appelées collectivement registres de masque d'interruption. Contrairement aux interruptions à un seul niveau, dans les interruptions à plusieurs niveaux, le contenu du registre de masque d'interruption est une scène de programme très importante. Par conséquent, lors de la réponse à des interruptions, il est nécessaire de sauvegarder le contenu du registre de masque d'interruption et de définir un nouvel état de masque d'interruption. Généralement, après avoir répondu à un certain niveau d'interruption, il est nécessaire de définir "1" (fermer) le déclencheur de masque d'interruption de ce niveau et la priorité inférieure à ce niveau, et de définir "0" (ouvrir) l'interruption de niveau supérieur déclencheur de masque. Pour obtenir une imbrication d'interruption normale.

2. Chaque niveau de l'interruption à plusieurs niveaux ne peut avoir qu'une seule source d'interruption ou plusieurs sources d'interruption. L'imbrication d'interruption peut être réalisée entre des interruptions à plusieurs niveaux, mais les interruptions avec différentes sources d'interruption au même niveau ne peuvent pas être imbriquées. Il doit être traité après le traitement d'une interruption, puis répondre et traiter d'autres sources d'interruption du même niveau.

Cet article provient du réseau, ne représente pas la position de cette station. Veuillez indiquer l'origine de la réimpression
HAUT