dimanche 1 septembre 2013

VPC-32, pourquoi ça ne fonctionnait pas!

Dans la chronique précédente je parlais du casse-tête que j'ai eu avec les interruptions. J'ai trouvé pourquoi ça ne fonctionnait pas. Les PIC32MX1xxx/2xxx n'ont pas de Shadow Register Set. C'est fou le temps qu'on perd lorsqu'on ne prends pas le temps de lire la documentation au complet.

Depuis la dernière chronique j'ai testé le code pour le clavier PS/2 tout semble OK. J'ai aussi complété la table de caractères dans font.h pour les 127 premiers codes ASCII.

Finalement à la fin de ma dernière chronique je mentionnais que l'interruption du coretimer introduisait du bruit dans le signal vidéo. Je mentionnais aussi dans cette même chronique à quel point l'option IPLxSOFT dans la déclaration des ISR introduit un overhead incroyable lorsque l'ISR appelle une sous-routine. Puisque tmr2_isr utilise l'ensemble de registres normal (n'ayant pas de SRS) et que tmr2_isr appelait la fonction DmaChnEnable() le temps de latence était énorme. Ce problème est réglé j'ai simplement remplacé l'appel à la sous-routine DmaChEnable() par une simple affectation au registre DCH0CON. Ce qui a eu pour effet de réduire la latence de tmr2_isr et de faire disparaître le bruit dans le signal vidéo.

DCH0CON |= 128; // remplace DmaChEnable(0);

Je suis prêt maintenant à commencer le travail sur le pilote de périphérique pour la carte SD. Mais avant je dois fabriquer un prototype du VPC-32.

Mise à jour de https://github.com/Picatout/VPC-32.

Aucun commentaire:

Publier un commentaire