Ruses
[Home DspBoard]


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