Support #494
openGestion timecode
0%
Description
J'ai travaillé sur la gestion manuelle de l'envoi de timecode.
Pour cela on utilise la fonction SpwPlugin0.StarDundeeSendOneTimecode. Parfois, il faut envoyer 2 timecodes de suite pour que la commande
TC_LFR_UPDATE_TIME soit prise en compte, parfois un seul suffit. L'effet de bord est que si les 2 timecodes sont pris en compte, le temps interne de LFR est positionné au temps contenu
dans la TC_LFR_UPDATE_TIME + 1s. Donc cela n'etait pas concluant.
En effet, la TC_LFR_UPDATE_TIME se traduit par l'ecriture du temps dans le registre COARSE TIME LOAD et l'arrivée du timecode va ecrire ce registre dans le registre COARSE TIME. La reception du 2eme
timecode lui, incrementera de 1 ce temps.
--> Conclusion ce n'est pas ce que l'on veut.
En fait je me suis rendue compte que si je resette la carte LFR, je relance le test avec le couple TC_LFR_UPDATE_TIME + 1 timecode = 1, cela
fonctionne systématiquement.
Ma conclusion est donc que la remise à zero du timecode géré par le spw n'est effectuée que sur le reset et que meme si je ferme socexplorer
je conserve la valeur du dernier timecode que j ai envoyé.
Pour valider cette conclusion, j'ai lu la doc grlib.pdf de Gaisler et j'ai été aidé par Alexis.
J'ai donc écrit un petit script qui lit le registre nommé Time register (0x800000514) dans l'onglet GRSPW et qui contient sur 8 bits
- Time control flags (TCTRL) = 2 bits = b7 et b6
- Time counter (TIMECNT) = 6 bits = b5 à b0
Attention, cela correspond à la valeur du dernier timecode valide et non le nbre de timecode valides. Ce registre n'est accessible qu'en lecture et il est à l'adresse
0x800000514
Pour le lire, j ai utilisé la fonction SpwPlugin0.Read
et ma théorie s'est vérifiée, quand on sort de socexplorer , il y a conservation de ce registre.
Conclusion, avant d'envoyer un time code,
1- il faut lire la valeur contenue dans 0x800000514
2- incrementer cette valeur et l envoyer avec SpwPlugin0.StarDundeeSendOneTimecode
Voici donc la séquence à mettre
Lecture du timer counter
loc_time = SpwPlugin0.Read(0x80000514, 1)
timec = loc_time0 & 0xff
print hex(timec)
timecode=int(timec)+2
print timecode
SpwPlugin0.StarDundeeSendOneTimecode (timecode)
Remarque
--------
Comme on ne s interesse pas aux 2 bits de controles, le masque devrait etre 3f au lieu de ff.
En effet les timecodes sont modulo 64.
Je l'ai egalement vérifié si j'ecris SpwPlugin0.StarDundeeSendOneTimecode (255) et que je lis le registre, j obtiens en binaire 00111111 soit 3f
soit 63.
Autre test, j ai envoyé la sequence suivante
py > SpwPlugin0.StarDundeeSendOneTimecode (6)
py > SpwPlugin0.StarDundeeSendOneTimecode (254)
py > SpwPlugin0.StarDundeeSendOneTimecode (255)
--> le registre ne s'est mis à jour que lors de l'envoi de 255 , car 6 n'etait pas valide, 254 pas valide
mais 255 oui car increment de 1/ à la valeur précédente.
Voila ma conclusion.
Par contre, on voit bien que 254 a été conservé puisque 255 a été validé, mais je ne sais pas ou ???
Updated by Veronique bouzid over 9 years ago
J ai joué le script SCRIPT/read_register.py
et voici ce que j'obtiens quand la carte LFR a été resettée
12:55:54.934575,/home/validation/SCRIPT/read_register.py
Conditions initiales
Register Control = 0xb0c
TIMECNT = 0x0
Envoi d un timecode valide
Envoi timecode = 0x1
Register Control = 0xb0c
TIMECNT = 0x1
Envoi d un timecode invalide
Envoi timecode = 0x6
Register Control = 0xb0c
TIMECNT = 0x1
Envoi d un timecode valide
Envoi timecode = 0x7
Register Control = 0xb0c
TIMECNT = 0x7
12:56:04.00128,End(/home/validation/SCRIPT/read_register.py)
tout s'est bien passé.
Maintenant je ressors de Socexplorer et je relance socexplorer,
Conditions initiales
Register Control = 0xb0c
TIMECNT = 0x7
Envoi d un timecode valide
Envoi timecode = 0x8
Register Control = 0xb0c
TIMECNT = 0x7 --> timecode non validé
Envoi d un timecode invalide
Envoi timecode = 0xc
Register Control = 0xb0c
TIMECNT = 0x7
Envoi d un timecode valide
Envoi timecode = 0xd
Register Control = 0xb0c
TIMECNT = 0xd
15:29:07.71,End(/home/validation/SCRIPT/read_register.py)
Cela signifie que mon analyse est incomplete car je ne fonctionne bien que si je pars avec un TIMECNT = 0 donc un reset de LFR.
Updated by Veronique bouzid over 9 years ago
- Status changed from New to Feedback
Alexis va regarder la fonction SendOneTimecode.
Voir le point redmine #497 du projet Socexplorer.