35Fermer37
ZerosquareLe 25/02/2022 à 03:48
Non, pour autant que je me souvienne, ça ne fonctionne pas comme ça :
- les échantillons sont envoyés au DAC bit-à-bit avec la période déterminée par la valeur de SCLK, quelle que soit la fréquence à laquelle tu écris dans LTXD et RTXD (ou même si tu n'y écris jamais d'ailleurs). Par conséquent c'est SCLK qui détermine la fréquence d'échantillonnage.
- WSEN de SMODE n'est pas un diviseur, c'est ce qui détermine si le signal de synchro gauche/droite est généré ou pas (le DAC en a besoin, donc ça ne marche pas si on le désactive)
- RISING, FALLING et EVERYWORD de SMODE ne sont pas vraiment des diviseurs non plus, ça détermine à quel moment(s) l'interruption I²S est déclenchée (quand l'état des compteurs internes correspond à la condition correspondante)

Bref aucun intérêt d'utiliser un timer plutôt que l'interruption I²S pour faire du son : au mieux ça n'apporte rien (et ça utilise un timer qui pourrait servir à autre chose), au pire ça apporte des ennuis (déphasage imprévisible si la période est la même que celle de SCLK, rééchantillonnage crade sinon). Si Super Burnout le fait effectivement, je ne vois vraiment pas pourquoi.

J'ai essayé de vérifier dans les netlists pour en avoir le cœur net (c'est dans I2S.NET) mais le code est assez spaghettique, et c'est difficilement lisible sans avoir la correspondance en tête entre le nom des blocs et leur fonction logique. C'est le genre de trucs à analyser à tête reposée (ou à sous-traiter à SCPCD tongue)