Project

General

Profile

Actions

Support #494

open

Gestion timecode

Added by Veronique bouzid over 8 years ago. Updated over 8 years ago.

Status:
Feedback
Priority:
Normal
Category:
-
Target version:
-
Start date:
11/09/2015
Due date:
% Done:

0%

Estimated time:
revision:
r0

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 ???

Actions

Also available in: Atom PDF