1

hello,

dans LSP j'utilise les registres de la bank 1 comme 'stock' avec juste des movefa et moveta. le programme principal ne fait rien, il boucle sur lui même.

or là je me suis lancé sur une autre approche, avec une interruption timer 1 qui donne le tempo du replay a 50 Hz et le programme principal qui alimente les registres utilisés par l'interruption I2S
et j'ai la très forte impression que mon interruption I2S met la grouille dans mes registres bank 1

est ce quelque chose de connu sur le DSP , ou sur le GPU ?
avatar

2

Mon code audio utilise les 32 registres de la banque 0 et les 32 registres de la banque 1, et j'ai jamais eu de soucis de ce genre. Par contre je n'utilise que l'interruption I²S, aucune autre.

Tu es sûr que ce n'est pas un conflit entre tes deux interruptions plutôt ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

je ne pense pas, mon interruption timer 1 ne fait que de modifier une valeur en ram centrale, un flag
et là j'ai vraiment des comportements étranges
mon I2S est à 35 KHz, et fonctionne purement en registres bank 0, aucune lecture de valeurs en ram
et mon code centrale se comporte de façon très erratique, des cmpq/cmp qui passe quand ils ne devraient pas, un compteur qui s'emballe à fond
avatar

4

Tu as essayé sur différents émulateurs pour voir si ça le fait aussi ? Tu es sûr que ce n'est pas ta Jaguar qui est malade ? grin
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

ca le fait sur phoenix normal, phoenix debug, bigpemu et ma jaguar

je reprendrai le problème en essayant de fabriquer un poc du souci, i2S + timer 1 + dsp main
avatar

6

Il n'y a aucun problèmes de gestion entre les 2 banks. smile
Les regs 30 & 31 de la bank0 sont modifiés avant l'entrée dans la ISR, mais sinon rien d'autres n'est modifié.

Si problème il y a, c'est un bug software et non hardware tongue

Ça peut provenir de différentes raisons possibles (erreur dans la gestion des switch de bank, erreur dans la gestion des interruptions, erreur dans le return...), mais difficile à dire sans regarder le code. sad
avatar

7

Oui, si ça le fait aussi sur émulateur, ça laisse supposer un bug "franc" dans ton code (et pas juste une subtilité du hardware réel). L'avantage c'est que c'est plus facile à déboguer smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

8

c'est ce que je me dis aussi mais c'est vraiment très bizarre.
des que j'ajoute un imult par zéro , dans mon code de timer I2S, ca me fout en l'air mon code sur la bank 1

si je fais un imult par 1 ou 100 ou -1 ça passe

y a un bug connu avec imult * 0 ????

en fait c'est quand le résultat est = 0 a priori.
1*0
0*1
0*0
=> KO

----
ça semble lié au flags de conditions
dans le code principal dsp je fais un cmpq pour continuer et il continue meme quand la condition n'est pas remplie
avatar

9

en fait ce qui me met dedans c'est que je suis trop habitué aux flags dans un registre
sur dsp il faut lire le D_FLAGS dès l'arrivée dans l'interruption
avatar

10

oui, effectivement il faut sauvegarder les flags dès que possible (vu qu'ils ne sont pas poussé dans la stack comme le fait d'autres processeurs) pour qu'ils ne soient pas modifiés par l'ISR et pouvoir les restaurer avant de retourner dans le traitement nominal.
smile
avatar