2009-05-20 4 views
4

Ok, à l'école, nous développons un système d'exploitation. Mon projet a été de développer un pilote de disque dur ATA. Je pensais que ma routine de service d'interruption fonctionnait très bien quand mon professeur a fait remarquer que je n'envoyais que des commandes de fin d'interruption au PIC esclave, et pas au maître aussi. Mon problème est que chaque fois que j'envoie la fin d'interruption au PIC maître, cela provoque une triple erreur qui provoque alors le redémarrage de mon système. Maintenant j'ai un/commenté un tas de lignes et il semble que chaque fois que la fonction pour envoyer la fin d'interruption au PIC maître est laissé dans le code, je reçois le triple défaut.Pourquoi une fin d'interruption pour le PIC maître provoque-t-elle une triple erreur (redémarrage)?

Maintenant, je suis tout à fait sûr de ce qui suit:

  1. les interruptions sont désactivées à l'entrée de mon ISR
  2. J'envoie correctement la fin de interruption octet (testé classe)
  3. Je ne suis pas Reconnaissant la même interruption

Cela a causé une frustration massive, donc j'espère que quelqu'un peut me donner quelques conseils sans avoir besoin de voir notre code.

Merci!

+2

Ancien article mais l'auteur est peut-être encore en vie? Que diriez-vous d'un code? – Earlz

Répondre

0

Je ne peux que deviner cela. Voici quelques choses à vérifier.

  • La DI est-elle en dehors de la limite de votre segment?
  • L'EOI est-il sur une page en lecture seule?
  • Votre gestionnaire d'interruption est-il au niveau de privilège correct pour accéder à l'EOI?
  • Utilisez-vous le registre de segment approprié?

L'un de ces éléments pourrait provoquer une erreur. Cela peut provoquer une double ou triple erreur si les tables des descripteurs sont corrompues ou mal configurées pour commencer.

Questions connexes