696 | | ||**IE **||Interrupt Enable ||0 = toutes les interruptions sont masquées\\1 = interruptions non-masquées mais elles peuvent l'être avec IM[7:0]|| |
697 | | ||**EXL **||Exception Level ||0 = aucun effet sur le processeur\\1 = le processeur vient d'entrer dans le noyau et donc le processeur est en mode ''kernel'' interruptions massquées|| |
698 | | ||**ERL **||Error Level ||1 = une exception est survennue quand EXL == 1, c'est une erreur fatale || |
699 | | ||**UM **||User Mode ||0 = mode d'exécution ''kernel''\\1 = mode d'exécution ''user''|| |
700 | | ||**IM![7:0] **||Masques individuels || pour les six lignes d’interruption matérielles (bits IM![7:2])\\et pour les 2 interruptions logicielles (bits IM![1:0]) |
701 | | |
702 | | - Quelques remarques |
703 | | - Le processeur a le droit d’accéder aux ressources protégées (registres du coprocessor 0(`c0`), |
704 | | et aux adresses mémoires >= `0x80000000) si et seulement si le bit UM vaut 0, |
705 | | ou si l’un des deux bits ERL et EXL vaut 1. |
706 | | - Les interruptions sont autorisées si et seulement si le bit IE vaut 1, |
707 | | et si les deux bits ERL et EXL valent 00, et si le bit correspondant de IM vaut 1. |
708 | | - Les trois types d’évènements qui déclenchent le branchement au GIET |
709 | | (interruptions, exceptions et appels système) forcent le bit EXL à 1, |
| 696 | ||**`IE `**||Interrupt Enable ||0 = toutes les interruptions sont masquées\\1 = interruptions non-masquées mais elles peuvent l'être avec `IM[7:0]`|| |
| 697 | ||**`EXL `**||Exception Level ||0 = aucun effet sur le processeur\\1 = le processeur vient d'entrer dans le noyau\\et donc le processeur est en mode ''kernel'' et interruptions massquées|| |
| 698 | ||**`ERL `**||Error Level ||1 = après le signal reset ou certaines erreurs de la mémoire || |
| 699 | ||**`UM `**||User Mode ||0 = mode d'exécution ''kernel''\\1 = mode d'exécution ''user''|| |
| 700 | ||**`IM![7:0]`**||Masques individuels || pour les six lignes d’interruption matérielles (bits `IM[7:2]`)\\et pour les 2 interruptions logicielles (bits `IM[1:0]`) |
| 701 | |
| 702 | - Quelques remarques : |
| 703 | - Le processeur a le droit d’accéder aux ressources protégées (registres du coprocessor 0 `c0`), |
| 704 | et aux adresses mémoires >= `0x80000000`) si et seulement si le bit `UM` vaut `0`, |
| 705 | ou si l’un des deux bits `ERL` et `EXL` vaut `1`. |
| 706 | - Les interruptions sont autorisées si et seulement si le bit `IE` vaut `1`, |
| 707 | et si les deux bits `ERL` et `EXL` valent `00`, et si le bit correspondant de `IM` vaut `1`. |
| 708 | - Les trois types d’événements qui déclenchent le branchement au noyau: |
| 709 | (interruptions, exceptions et appels système) forcent le bit `EXL` à `1`, |
713 | | - L’instruction ERET force le bit EXL à 0. |
714 | | |
715 | | Lors de l’activation du RESET : |
716 | | |
717 | | - SR contient donc la valeur 0x0004. |
718 | | - Pour exécuter un programme utilisateur en mode protégé, avec interruptions activées, |
719 | | il doit contenir la valeur 0xFF11. |
720 | | - Le code de boot doit écrire la valeur 0xFF13 dans SR et l’adresse du programme utilisateur |
721 | | dans EPC avant d’appeler l’instruction ERET. |
722 | | |
723 | | |
724 | | |
725 | | === 7) Gestion du registre de cause CR |
726 | | |
727 | | |
728 | | Le registre CR contient trois champs. Les 4 bits du champ XCODE(3:0) définissent la cause de l'appel au GIET. Les 6 bits du champ IRQ(5:0) représentent l'état des lignes d'interruption externes au moment de l'appel au GIET. Les 2 bits SWI(1:0) représentent les requêtes d'interruption logicielle. |
| 713 | - L’instruction `eret` force le bit `EXL` à `0`. |
| 714 | |
| 715 | -Lors de l’activation du RESET : |
| 716 | - `c0_sr` contient donc la valeur `0x0004` (`0b0000000000000100`). |
| 717 | - Pour exécuter un programme utilisateur en mode protégé, avec interruptions activées, |
| 718 | il doit contenir la valeur `0xFF11`. |
| 719 | - Le noyau doit écrire la valeur `0xFF13` dans `c0_sr` et l’adresse de la première fonction du programme utilisateur dans `c0_epc` avant d’appeler l’instruction `eret`. |
| 720 | |
| 721 | |
| 722 | |
| 723 | === 7) Gestion du registre de cause `c0_cause` |
| 724 | |
| 725 | |
| 726 | Le registre `c0_cause` contient trois champs. Les 4 bits du champ `XCODE[3:0]` définissent la cause de l'appel au GIET. Les 6 bits du champ IRQ(5:0) représentent l'état des lignes d'interruption externes au moment de l'appel au GIET. Les 2 bits SWI(1:0) représentent les requêtes d'interruption logicielle. |