Ruses
- mapping mémoire
The bootloader program requires a small stack space for calls and
returns. Two SRAM locations at 0x809800
and 0x809801 are used for this stack.
- Bootloader
Si le bootloader charge 0, alors il prendra la tailes des
mots à charger pour 0 (considéré comme 8 bits),
puis la config du registre STROBE comme 0 (ça passe : RDY externe
uniquement, 0 wait states , igonré). Il charge la taille du 1er
bloc. =0 => donc jumpe vers l'@ dans AR2. (donné comme
indéfini dans la doc).
- Si il n'y a rien eu avant AR2 = 0, le bootload recommence, donc
recharge ,etc ... peut se détecter si après le bootload
complet, il demande encore qqchose.
- Si il y avait déjà eu qqchose de bootloadé,
si AR2 n'a pas été utilisé, il resaute vers
le debut du programme. C'est détecté car il ne demande
+ rien après. Par contre le soft a rebooté en interne
tout de même. Si AR2 n'est pas utilisé, mettre AR2
à 0, on retombe dans le 1er cas.
- Bootloader-détail
Les faits :
=pas de code dans le DSP - fraichement reseté=
buffer passant => chargement OK (normal), le prog tourne
buffer bloqué => chargement OK (pas normal), le
prog tourne pas (normal)
=code dans le DSP en train de tourner=
buffer passant => chargement OK (normal), le prog tourne
buffer bloqué => chargement pas OK (normal), le
prog tourne (pas normal !)
Bon donc :
=>le bootloader stocke effectivement l'@ vers laquelle il jumpe à la
fin du
bootload dans AR2 (si il ne reçoit aucun paquet il jumpe vers
ce qui était
présent dans le registre AR2)
=>les registres ne sont pas mis à 0 au moment du reset
=>je mesure effectivement 0V ou presque en l'abscence de signaux
sur le bus
de données en entrée
D'où :
Il charge le premier octet (taille du bus). Si il est égal à 0,
c'est
considéré comme 8 bits
Il charge le 2ème (0 dans ts les cas)
Il charge la config de strobe. 0 ça marche, ça fait ready
externe
uniquement.
Il charge la taille du premier bloc : 0
Il arrete et jumpe vers ce qu'il y avait dans AR2.
Là 2 cas :
=>Si le dsp est fraichement resetté, AR2=0, il rejumpe vers
le bootload et
recommence et tourne là dedans. D'où l'absence
d'erreur. Par contre c'est
détectable si a la fin du bootload, il veut encore qqchose (=> rajouté)
=>Si le dsp est en cours d'execution, AR2=ce qu'il y avait avant,
si il a
pas été modifié, @ de démarrage.
d'où il jumpe vers le prog. Donc à ce moment,
le prog tourne mais il
demande plus rien (donc erreur). On peut avantageusement mettre AR2
à 0
quand on ne s'en sert pas, histoire qu'il retombe dans le 1er cas.
- PAGEx, sont en tristate pendant l'application du signal Reset contrairement
à STROBE qui reste correct
- Assembleur <=> C
Possibilité de stocker des float sur 8,16 ou 32 bits. Conversion
en 32 bits pour le calcul ? et en C ?
Lorsqu'on utilise le 'big model'
- perf pas top top (rechargement du ldp)
- Les modules C doivent être déclarés à
utiliser le big modèle
- Les modules ASM aussi ! (-mb ou .bigmodel)
- Lorsqu'on utilise le 'register model' , remarque idem le big
model (avec -mr ou .BIGMODEL pour l'asm)
- Structure
Le stack est préincrémenté (push) et post décrémenté.
Le stack va donc vers les @ coroissante. Un stack vide a son @ la plus
faible. L'@ du stack pointe vers le dernier élément stocké.
Un stack vide pointe sur l'@ précédant le dernier élément
|