Project

General

Profile

Support #494

Updated by Veronique bouzid about 9 years ago

 
 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_time[0] & 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 ??? 

 

Back