Asservissement-Positionnement

DSP TMS320VC31


Présentation
DSP TMS320VC31
Carte d'évaluation TI DSP Starter Kit
Carte d'Extension - Asservissement Positionnement
Soft

Usine à gaz - Utilisation
Usine à gaz - Historique


Introduction

La présentation du DSP est axée sur les points qui vont être utiles pour l'application. Elle ne saurait en AUCUN CAS se substituer aux documentations de T.I.

Documentations

Site web TI : www.ti.com
Ressource principale (datasheet complète de la famille TMS320VC3x) : TMS320C3x User guide.pdf
Spécificités du C31 : tms320c31.pdf
Carte d'évaluation : DSP Starter Kit User Guide.pdf
Documentation compilateur : Optimizing C Compiler User Guide.pdf

Et tout le contenu de ce répertoire

Présentation générale

Un DSP est un processeur ... spécialisé. Ici, le côté spécialisé ne nous interesse pas trop et on se limitera (pour cette application) à une définition :

Un DSP est un processeur, qui permet d'effectuer des calculs très rapidement.

Le côté "spécialisé" est volontairement laissé de côté. On va par contre s'interesser au côté processeur.
Le TMS320VC31 a une architecture complètement 32 bits, cela implique :

  • Il possède un bus de données sur 32 bits
  • Il travaille avec des données de 32 bits, et UNIQUEMENT avec des données de 32 bits (char MaVariable , MaVariable est une variable 32 bits)

Par convention tout signal complémenté sera noté avec un _ , ex : _Reset == Reset Barre, Reset actif à l'état bas.

Voilà, ce qu'il faut retenir du DSP pour cette application. Celà peut sembler simple mais ...
Le signal _RESET à 0 met le DSP en reset (une majorité des pattes est en high Z, voir la datasheet, pour plus de détails). A la sortie du reset, le DSP va démarrer (booter). C'est un des points les plus importants, vu ensuite.
Les signaux A0-A22, forment le bus d'@=adresses.
Les signaux D0-D31, forment le bus de données, en entrées ou en sortie selon _R/W

  • à 0, c'est une lecture : bus de données en entrée.
  • à 1, c'est une écriture : bus de données en sortie.

Les signaux _INT0/_INT3, sont 4 interruptions (externes) distinctes. Elle sont actives à l'état bas.
Le signal _STROBE, indique que l'@ sur le bus d'@ est valide.
Le signal _RDY, indique au DSP que l'entrée/sortie est terminée (détaillé plus loin).

L'horloge est à 50MHz sur la carte d'évaluation. Un cycle d'instruction(cycle H1)est réalisé en 2 cycles d'horloge. Donc en 40ns.


Mapping mémoire

Toutes les instructions du DSP agissent soient sur :

  • des registres internes (non détaillés ici)
  • des @ mémoire.

Tout ce qui n'est pas dans un registre est dans une case mémoire.
En fonction de l'@
de cette case, le DSP va soit aller chercher dans sa mémoire interne, soit faire une demande sur son bus externe, soit configurer un périphérique, etc, etc. La répartition des adresses == que trouve-t-on à cette adresse, s'apelle le mapping mémoire.



Mapping mémoire standard du TMS320VC31 en mode Microcomputer/Boot-Loader.

On remarque que ce mapping n'est valable que pour le mode Microcomputer/Boot-Loader. Ce mode de fonctionnement est déterminé par l'état de la patte MCBL/_MP. Pour l'application on utilise le mode MicroComputer/Boot-Loader. On va donc se limiter à cette description (Note : dans l'autre mode (Microprocessor), le mapping mémoire est différent, c'est à dire qu'à une même adresse on ne trouve pas la même chose selon le mode ...)

Les adresses sont notées en hexa, de 000000h à FFFFFFh soit une plage de 24 bits.
On peut donc lire que

  • entre 1000h et 7FFFFFh, et entre FFF000h et FFFFFFh il s'agit d'accès externes donc sur le bus d'@ et de données.
  • entre 809800h et 809FC1h, se situe la RAM interne, il n'y a donc pas d'accès externes sur cette adresse. Cette RAM fait 2KMots-63 Mots. 1 Mot contient 32 bit (ie : architecture 32 bits). 2KMots == 2048 adresses différentes = 8 Koctets.
  • entre 809FC1h et 809FFFh, se situe la table des vecteurs d'interruption. Quand une interruption survient et qu'elle est autorisée, l'execution du programme se poursuit à l'@ correspondante qui est stockée dans cette table.
  • entre 808000h et 8097FFh, se situent les 'registres' de configuration des périphériques. Ce mapping est détaillé ici


Mappage des périphériques.

Les accès externes

Lors d'un accès externe (cf au dessus), le DSP va avoir un comportement qui va dépendre du registre Primary Bus Control (cf image juste au dessus, @ 808064h) .
Note : dans le code, il est fait référence à l'adresse 808664h (gloups). A priori, cette adresse correspond bien au même registre.


Bits de configuration du Primary Bus Control register

 

Lors d'un accès externe en écriture, le DSP va :

  • mettre les pattes du bus @ à l'@ demandée.
  • mettre les pattes du bus de données à la valeur de la donnée.
  • mettre le signal _R/W à 1 (indique qu'il s'agit d'une écriture)
  • mettre le signal _STROBE à 0 (indique que tout est prêt, la logique externe va donc réagir -- l'élément externe qui va reconnaitre cette adresse va récupérer la donnée présente sur le bus)
  • A ce point, l'élément externe va mettre un certain temps à réagir (temps d'accès). Le DSP va donc DEVOIR attendre, avant de continuer.
    Cette attente est configurée par WTCNT et SWW présentés au dessus.
    • SW : 00, le DSP va attendre jusqu'à ce que le signal _RDY soit mis à 0
    • SW : 01, le DSP va attendre WTCNT wait-state. Un wait state== un cycle d'instruction, ici 40ns
    • SW : 10, le DSP va attendre WTNCT wait-state OU que _RDY passe à 0
    • SW : 11, le DSP va attendre WTCNT wait-state ET que _RDY passe à 0

Le Boot

Au démarrage que se passe-t-il ? (mode Microcomputer/Boot-Loader).
Le DSP execute un code interne situé en ROM, (cette ROM fait d'ailleurs partie de la mémoire comme le reste : @ 0h à 1000h, cf mapping).
Ce code ATTEND d'avoir une des pattes d'IT (_INT0/_INT3) qui passe à 0.
En fonction de la patte d'IT qui va passer à 0, le DSP va commencer un BootLoad du code

  • si _INT0 est à 0 : à l'@1000h
  • si _INT1 est à 0 : à l'@400000h
  • si _INT2 est à 0 : à l'@FFF000h
  • si _INT3 est à 0 : par la liaison série synchrone

C'est à dire que le DSP va faire un accès à l'@ de base (fonction de la patte _INTx activée, cf au-dessus). Ces 3 adresses (cf mapping), sont des @ déclenchant un accès externe.
Le DSP peut effectuer le bootload == téléchargement du code sur 8 bits, 16 bits ou 32 bits. C'est à dire que si il effectue le téléchargement en 8 bits, il va lire 4 fois 8 bits et mettre ça dans un mot de 32 bits. Le bootload permet donc de charger le code de l'utilisateur en mémoire. (puis ensuite de l'exécuter).
Cf doc pour plus de détail sur le protocole de 'téléchargement'.

Au démarrage, les accès externes sont configuré en mode : signal _RDY à 0 ET 7 wait-state écoulés.
Dans tous les cas au démarrage, il faut que l'état des IT soit maitrisé,connu et SUR !