Bonjour à tous. Je suis en ce moment sur un projet qui est pratiquement terminé, mais je me suis cogné à un problème que j'ai pas réussis à régler encore.
Alors, voilà je vous expose la situation.
Je travail avec un microprocesseur 80c552. Je veux utiliser le INT0 qui va entrer dans une routine d'interruption quand je vais appuyer sur un bouton rouge d'urgence qui est connecté à la broche INT0.
Quand j'appuis sur le bouton, il entre bien dans ma routine d'interruption, mais le problème est que dans cette même routine, je fais appel à une fonction qui lis en permanence un clavier matriciel et cette lecture se fait avec le protocole de communication I2c qui utilise à son tour une routine d'interruption I2C. Donc si je résume, quand j'Appuis sur le bouton d'urgence, le programme entre en interruption INT0 qui dans la même fonction fait appel à une fonction utilisant les interruptions I2c.
Je sais pas si c'est possible de faire une interruption dans une interruption, mais mon problème vient du fait que mon programme principale lit en continue la clavier matriciel donc utilise en permanence les interruptions I2c et que quand la routine d'interruption INT0 est appelé, le programme est interrompu et donc les deux lignes SCL et SDA demeure à 0. Donc quand mon interruption INT0 appel la fonction de lecture du clavier, qui utilise elle aussi l'i2c, la communication ne s'effectue pas car les lignes SCL et SDA sont basse.
Est ce qu'il y aurait un moyen d'envoyer un stop bit afin de fermer la communication i2c avant d'entrer dans la routine d'interruption INT0?
Merci d'avance
Carleric
Partager