269 | | * Les 4 lignes d'interruption du périphérique TIM seront connectée aux entrées IRQ_IN[3:0] du composant ICU. |
270 | | * Les 4 lignes d'interruption du périphérique DMA seront connectée aux entrées IRQ_IN[7:4] du composant ICU. |
271 | | * Les 4 lignes d'interruption du périphérique TTY seront connectée aux entrées IRQ_IN[11:8] du composant ICU. |
272 | | * La ligne d'interruption du périphérique IOC sera connectée à l'entrée IRQ_IN[12] du composant ICU. |
| 269 | * Les 4 lignes d'interruption IRQ_TIM[3:0] du périphérique TIM seront connectée aux entrées IRQ_IN[3:0] du composant ICU. |
| 270 | * Les 4 lignes d'interruption IRQ_DMA[3:0] du périphérique DMA seront connectée aux entrées IRQ_IN[7:4] du composant ICU. |
| 271 | * Les 4 lignes d'interruption IRQ_TTY[3:0] du périphérique TTY seront connectée aux entrées IRQ_IN[11:8] du composant ICU. |
| 272 | * La ligne d'interruption unique du périphérique IOC sera connectée à l'entrée IRQ_IN[12] du composant ICU. |
317 | | Le code de boot, contenu dans le fichier '''reset.s''', doit supporter des applications logicielles où les 4 processeurs exécutent 4 programmes différents. Les 4 processeurs exécutent le même code de boot (puisqu'ils se branchent à la même adresse 0xBFC00000), mais certaines actions dépendent du processor_id : |
318 | | * les pointeur de pile des quatre processeurs doivent être initialisés à des valeurs différentes puisque chaque processeur travaille dans son propre segment de pile. |
319 | | * chaque processeur doit configurere son propre canal du concentrateur d'interruption ICU. |
320 | | * En sortie du code de boot, chaque processeur se branche à une adresse de base différente, définie dans la table de sauts qui se trouve au début du segment seg_data.. |
321 | | |
322 | | '''Question''': Complétez le code de boot dans le fichier '''reset.s''' pour initialiser la table de sauts. Modifiez le fichier '''seg_ld''' pour définir les adresses de bases des 16 segments. Modifiez le fichier '''config.h''' pour définir le nombre de processeurs. |
| 317 | Le routage des interruptions vers chacun des 4 processeurs est contrôlé par logiciel grâce aux registres de masque du composant ICU: on fera en sorte que le processeur P[i] recoive les interruptions IRQ_TTY[i], IRQ_TIM[i], et IRQ_DMA[i]. L'interruption IRQ_IOC sera routée vers le processeur P[0]. |
| 318 | |
| 319 | Le code de boot, contenu dans le fichier '''reset.s''', doit supporter des applications logicielles où les 4 processeurs exécutent 4 programmes différents. Les 4 processeurs exécutent le même code de boot (puisqu'ils se branchent à la même adresse 0xBFC00000), mais certaines actions dépendent du proc_id : |
| 320 | * Chaque processeur initialise son propre pointeur de pile, à une valeur dépendante du proc_id. |
| 321 | * Tous les processeurs initialisent le vecteur d'interruptions. |
| 322 | * Chaque processeur configure le registre de masque de son propre canal du concentrateur d'interruption. |
| 323 | * Chaque processeur initialise son propre registre SR. |
| 324 | * En sortie du code de boot, chaque processeur se branche à une adresse différente dans le code utilisateur, dépendante du proc_id. |
| 325 | |
| 326 | '''Question''': Pourquoi utilise-t-on une technique redondante où les 4 processeurs écrivent les mêmes valeurs dans le vecteur d'interruption? |
| 327 | |
| 328 | '''Question''': Complétez le code de boot dans le fichier '''reset.s'''. Modifiez le fichier '''seg_ld''' pour définir les adresses de bases des 16 segments. Modifiez le fichier '''config.h''' pour définir le nombre de processeurs. |