Bonjour à tous,
J'ai un montage avec un PIC 18F2550, qui tourne sur son oscillateur interne (8MHz), sur ce montage, j'ai une pin de debug (que j'inverse sur chaque IT d'un Timer par exemple).
Dans mon programme, j'ai configuré le Timer0 pour avoir une IT toutes les 1mS ... ça marche impec
J'ai aussi utilisé le Timer2 pour avoir une IT toutes les 100uS.
Tout cela fonctionnait impec :
- j'ai testé mon Timer0 via ma pin de debug : OK
- j'ai testé mon Timer2 via la même pin : OK
Ensuite, j'ai tout mis ensemble : le Timer0 dans l'interruption basses et Timer2 dans l’interruption hautes ... et là, c'est le drame
Mon Timer2 est devenu très instable !!!
( je visualise mon timer2 via ma pin de debug ... )
La période du Timer2 va de 95uS à 125uS !!!
NB : il n'y a qu'une seule interruption haute : Timer2 (tout le reste est dans l'IT basse)
NB' : j'ai testé la priorités des vecteurs IT : j'ai mis un while(1) dans l'IT basse pour voir si l'IT haute claquait bien : RAS !
NB'' : Évidement, j'ai verifié que ma pin de DEBUG n'est pas modifiée ailleurs que dans l'IT du Timer2 ...
Comme ça à l'instinct, je me dis que c'est un souci dans mes IT, genre la sauvegarde de contexte qui influe sur la latence de mon IT (latence 0 si on est déjà dans l'IT basse) ... et en même temps, 30uS c'est beaucoup, non ?
Indice : quand je "bloque" dans mon IT basse en mettant un while(1) dedans, mon IT haute reste instable ... ?!
... et pourtant, si je désactive Timer0, Timer2 redevient parfaitement stable !!!
Si vous avez un avis là dessus, une idée (même pas forcement une géniale), je suis preneur ...
Merci d'avance
@+
-----