- 2 – Initialisation de certains registres
Certains registres doivent impérativement être initialisés avant d’exécuter la boucle sans fin dans laquelle est mise à jour l’état de la Led :
- Lignes 281-283 du listing, les 2 registres Pointeur de Pile W15 et le registre de test de la pile SPLIM (0x20) sont initialisés pour permettre l’utilisation de 2 plages d’adresses : la 1ère [0x800…0x8FF] pour une zone de travail de 256 mots et la seconde [0x900…0x9FF] pour la stack de 256 mots gérée par le registre W15.
- Ligne 285, le bit CLKDIV<PLLEN> doit être positionné à 1 car c’est ce mode de génération de l’horloge système qui a été configuré dans CW2. Lignes 292-294, une boucle d’une durée forfaite de 150 µS (paramètre TLOCK) est déroulée pour attendre que la PLL soit lockée avant de poursuivre l’exécution.
- Ligne 297, le registre AD1PCFG est entièrement initialisé à 0xFFFF car aucune fonction analogique n’est utilisée dans le programme; toutes les entrées / sorties sont du type digitale.
- Ligne 300, le bit 15 du registre TRISB (initialisé au Reset à 0xEFBF) est remis à 0 car la Led est connectée sur la pin RB15, toutes les autres pins étant configurées en entrée et en particulier RB5 à laquelle est connectée le bouton poussoir.
- Ligne 303, le bit CNPU2<CN27PUE> est positionné à 1 pour bénéficier de la résistance de rappel (pull-up) aux +3 Volts sur l’entrée RB5 qui est connectée au bouton poussoir (vu du programme nous avons la logique suivante : 0 pour un appui et 1 pour un relâcher du bouton poussoir).
- 3 – La routine de temporisation de 10 mS
Le but de cette routine est de réaliser sans l’utilisation de Timer une attente de 10 mS exactement (hors appel depuis d’autres parties du code). Pour cela il faut exécuter 160000 cycles d’une durée de 62.5 nS chacun et qui se répartissent comme 160000 = 1 + ((4 * 39999) – 1) + 1 + 1 + 2 en application de la spécification PIC24F Family Reference Manual (CPU) avec les précisions suivantes :
- Ligne 394du listing, le registre W9 varie entre les valeurs 39997 et -1 fournissant bien 39999 boucles de 4 cycles car à la ligne 396, l’instruction de branchement bra NZ,wait_for_10mS_more s’exécute en 2 cycles sauf pour la dernière boucle (origine du -1 dans la formule de calcul).
- Lignes 398 et 399, deux instructions nop permettent de compléter à 160000 cycles.
- 4 – La routine de mise sur voie de garage
Le but de cette routine est d’éviter de continuer sur une erreur grave qui, dans la plupart des cas, n’est pas récupérable. Dans un autre programme Hello World !, nous montrerons la manière de provoquer, voire de récupérer l’erreur sauf pour « Oscillateur en défaut » qui est difficile à mettre en œuvre. De plus, nous montrerons par la même qu’il est fortement conseillé d’implémenter le traitement correspondant dans le cas de programmes plus complexes même si ce traitement ne fait que constater … qu’il y a eu une erreur.