51Fermer53
ZerosquareLe 26/02/2022 à 02:07
DEATH (./50) :
Ok je viens de relire les documentations techniques de la Jaguar et du TDA pour me remémorer un peu tout ça et effectivement c'est bien un DAC qui reçoit les données en série à la fréquence de i2s.
La seule chose que je n'ai pas vérifier c'est quand sont envoyé les données via TX quand L_DAC et R_DAC sont chargés (1 seule fois lorsque la donnée est chargée ? Continuellement en boucle, et dans ce cas y a t il un buffer pour éviter l'écrasement de l'envoi en cours alors qu'une autre donnée est chargée...)

S'il n'y a pas possibilité d'écrasement d'une donnée en cours d'envoi au DAC, alors il est tout à fait faisable d'utiliser JPIT à la fréquence qu'on veut, de mettre i2s à la fréquence max
Comme expliqué plus haut, c'est en boucle, que tu écrives ou pas dans les registres audio : la valeur des 2 registres audio est copiée dans des registres internes une fois tous les 32 cycles d'horloge I²S, et envoyée bit-à-bit au DAC.

DEATH (./50) :
(si je ne me trompe pas ça doit faire du 13,3Mbit, soit plus de 415Khz en 16bits stéréo, ça va, on est large)
DEATH (./51) :
D'après la documentation du TDA sa fréquence max est de 18,4Mbits donc la Jaguar (13,3Mbit) est bien en dessous de la limite niveau bitrate. Il ne faut pas compter en Khz par rapport au bitrate effectivement.
Le TDA1545A a une limite de 384 kHz pour la word clock (qui a la même fréquence que la fréquence d'échantillonnage). Visiblement ça continue à marcher quand même à 415 kHz, mais rien ne le garantit.

DEATH (./50) :
Je dirai même qu'utiliser l'interruption i2s, pour envoyer les échantillons à la même fréquence que i2s (/16/2) ça ne sert à rien, ça ne fait pas mieux. Je me demande même si c'est pas là que justement on peu potentiellement avoir de la distorsion. Là encore tout dépend comment les données sont envoyées sur TX (continuellement en boucle, 1 seule fois quand le registre est chargé , etc.)
Ben non justement. L'interruption I²S est déclenchée juste après que les valeurs des registres audio aient été copiées, du coup ton code d'interruption a la garantie d'avoir une période d'interruption entière pour changer ces registres avant qu'ils soient lus à nouveau.

Si tu utilises une interruption timer tu n'as pas cette garantie, du coup la lecture peut arriver avant que tu aies eu le temps de réécrire les registres, ou pire en plein milieu (entre l'écriture du registre "gauche" et celle du registre "droite"). Et si tu utilises une fréquence de timer différente de celle de l'I²S et/ou que ton code n'a pas un nombre de cycles constant, alors tu auras un délai imprévisible entre le moment où tes échantillons devraient être joués et le moment où ils le seront réellement (du jitter), ce qui n'est pas bon du tout pour la qualité audio.

DEATH (./50) :
L'avantage de JPIT c'est qu'il permet une plus grande précision, un plus large choix de fréquence.
Mais ça ne change pas la fréquence d'échantillonnage réelle du DAC. Si les deux fréquences ne sont pas identiques, ça revient à rééchantillonner à la volée en dupliquant ou en sautant des échantillons, ce qui est la pire méthode possible du point de vue qualité.

Vraiment, je comprends pas pourquoi tu tiens autant à ton timer, tu te compliques la vie pour rien grin

DEATH (./50) :
Y a t il un endroit qui explique quand et comment les données sont transmises au DAC via TX ?
La doc officielle ne donne pas beaucoup de détails. Les sources d'infos sont la doc du DAC (et les autres documents qui expliquent comment fonctionnent le standard I²S), et les netlists de Jerry (mais c'est prise de tête à décortiquer).