Changes between Version 24 and Version 25 of Archi-1-TP11


Ignore:
Timestamp:
Dec 11, 2021, 10:45:52 AM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP11

    v24 v25  
    3939[[Image(htdocs:img/device_registers.png,nolink,height=180)]]
    4040
    41 Les IRQ (Interrupt !ReQuest)s sont des signaux électriques à 2 états (ON/OFF ou !Actif/Inactif ou encore !Levé/Baissé). Les IRQ sont levés par les contrôleurs de périphériques pour prévenir d'un événement (fin de commande, arrivée d'une donnée, etc.). Les IRQs provoquent l'exécution d'ISR (Interrupt Service Routine) par le noyau. Les ISR sont des fonctions qui reçoivent en argument un identifiant du contrôleur de périphérique qui a levé l'IRQ. Une ISR doit faire deux choses, (1) accéder aux registres du contrôleur de périphérique concerné pour faire ce que le périphérique demande et (2) acquitter l'IRQ, c'est-à-dire demander au contrôleur de périphérique de baisser/désactiver son IRQ (puisque celle-ci a été traitée).
     41Les IRQ (Interrupt !ReQuest)s sont des signaux électriques à 2 états (ON/OFF ou !Actif/Inactif ou encore !Levé/Baissé). Les IRQ sont levés par les contrôleurs de périphériques pour prévenir d'un événement (fin de commande, arrivée d'une donnée, etc.). Les IRQs provoquent l'exécution d'ISR (Interrupt Service Routine) par le noyau. Les ISR sont des fonctions qui reçoivent en argument un identifiant du contrôleur de périphérique qui a levé l'IRQ. Une ISR doit faire deux choses, (1) accéder aux registres du contrôleur de périphérique concerné pour faire ce que le périphérique demande et (2) acquitter l'IRQ, c'est-à-dire demander au contrôleur de périphérique de baisser/désactiver son IRQ (puisque celle-ci a été traitée). La demande d'acquittement est spécifique à chaque contrôleur de périphérique. Pour le TTY, il faut lire le registre `TTY_READ`. Pour le TIMER, il faut écrire dans le registre `TIMER_RSTIRQ`.
    4242
    4343Les IRQ sont des signaux d'état qui doivent rester levés/activés tant qu'ils n'ont pas été acquittés par une ISR. Quand une IRQ se lève, la conséquence est que le programme en cours d'exécution sur le processeur recevant l'IRQ est interrompu et qu'il est dérouté vers le noyau pour que ce dernier exécute l'ISR prévue pour l'IRQ. Notez que ce n'est pas le processeur qui est interrompu, c'est bien le programme, car le processeur est seulement dérouté vers le noyau, mais il continue à travailler.
     
    8585{{{#!protected ------------------------------------------------------------------------------------
    8686''
    87   * __tty_regs_map   = 0xd0200000 ;
    88   * __icu_regs_map   = 0xd2200000 ;
    89   * __timer_regs_map = 0xd3200000 ;
    90   * Ces adresses sont définies dans le ldscript du kernel `kernel.ld`
     87  * `__tty_regs_map`   = `0xd0200000` ;
     88  * `__icu_regs_map`   = `0xd2200000` ;
     89  * `__timer_regs_map` = `0xd3200000` ;
     90  * Ces adresses sont définies dans le ldscript du kernel `kernel.ld`, elles doivent être déclarées `extern` dans les codes C qui les utilisent.
    9191''
    9292}}}
     
    9494{{{#!protected ------------------------------------------------------------------------------------
    9595''
    96   * Interrupt ReQuest ou, en français, requête d'interruption
     96  * Interrupt !ReQuest ou, en français, requête d'interruption
    9797''
    9898}}}
     
    169169''
    170170}}}
    171 1. Que signifie acquitter une IRQ et qui le demande à qui ?
    172 {{{#!protected ------------------------------------------------------------------------------------
    173 ''
    174   * Cela signifie baisser ou désactiver le signal IRQ et c'est l'ISR qui fait cette demande au contrôleur de périphérique concerné.
     1711. Que signifie acquitter une IRQ et qui le demande à qui ? Comment demande-t-on l'acquittement ?
     172{{{#!protected ------------------------------------------------------------------------------------
     173''
     174  * Cela signifie demander au contrôleur de périphérique concerné de baisser (désactiver) le signal IRQ. C'est l'ISR qui fait cette demande en accédant aux registres du contrôleur de périphérique. Chaque périphérique a sa propre méthode d'acquittement (il faut lire la documentation), pour le TTY, l'acquittement est fait en lisant le registre TTY_READ, pour le TIMER, l'acquittement est fait en écrivant n'importe quelle valeur dans le registre TIMER_RSTIRQ.
    175175''
    176176}}}