La carte d'évaluation DSP Starter Kit vendue par T.I. comporte
:
La carte va générer un certain nombre de signaux, qui
vont permettre de découper en espaces dinstincts, l'espace mémoire
du DSP.
Ces signaux serviront pour la carte d'extension. Il sera ainsi possible
de rajouter de la Flash (sur _USER_BOOT), de la Ram
sur _USER_RAM, et des E/S sur _USER_IOR,_USER_IOW.
On remarque aussi qu'une partie de la mémoire interne est
utilisée par un Kernel
Cette interface permet de réaliser une communication entre la
carte et un PC. Elle permet aussi de télécharger du code,
et d'assurer des fonctions de debuggage.
Bootload du Kernel
En se référant à la page
précédente, on voit que le démarrage commence
lorsque le signal _RESET, passe à 1. Il est controlé
par le port //. En l'absence de connexion, le signal est à
1.(donc le DSP n'est pas en reset, cependant un circuit RC
assure une impulsion de reset au démarrage. Cette impulsion
est assez faible, et dans tous les cas, insuffisante lorsqu'une
carte d'extension est présente)
L'action effectuée va ensuite dépendre de l'état
des interruptions (non représentées ici). _INT0,_INT1
et _INT3 sont à 1. Par contre _INT2, est
commandée par le port //. Tant que _INT2, ne
bouge pas le DSP va ATTENDRE, et ne fera strictement RIEN
d'AUTRE
Lorsque le soft de chargement va s'executer (sur le PC), il va mettre
_INT2 à 0. Le DSP va lors commencer le
chargement (à l'@ FFF000h). C'est à dire que
le DSP va effectuer une lecture sur l'@ FFF000h. Etant juste
sorti d'un reset, la fin de la lecture sera déterminé
par la fin des 7 wait states ET le signal _RDY qui passe à
0(cf ici). Justement, le
signal _RDY est généré par le PAL.
Ce signal va aussi varier en fonction de l'@ accédée.
Sur la plage d'adresse FFF000h à FFFFFFh,
il est relié au port // (via 2 bascules qui permettent de synchroniser
ce signal). Le reste du temps il est à 0.
Le DSP va donc attendre que le port // du PC indique
que la lecture est terminée. Ce mécanisme permet de
rendre la communication asynchrone (il y'a blocage du DSP tant
que le PC n'a pas répondu). Ce mécanisme va donc
permettre d'envoyer des paquets de données au DSP. Ces
paquets contiennent une adresse de destination, et des données.
Le DSP va aller écrire les données à l'addresse
de destination.
Dans le cas présenté ici, les données envoyées
ici sont le contenu du code d'un Kernel (Noyau), qui
va être mis dans les 256 derniers mots de RAM
de la mémoire interne. Une fois le dernier paquet envoyé,
l'execution du code commence à l'adresse du premier paquet.
Ici cette adresse correspond au début du Kernel, qui
va donc être executé.
Que fait le Kernel ?
Le Kernel est chargé et en train de s'executer. Il
s'agit d'un programme (dont le source est donné dans la documentation
du Starter Kit) qui s'initialise et ensuite attend (boucle infinie).
Il va réagir à l'interruption _INT2 (qui, donc,
peut être déclenchée par le port //). C'est à
dire que le PC, va pouvoir interrompre le DSP (à
ce moment là il ne fait rien d'autre, donc il va juste interrompre
la boucle infinie), et pouvoir executer des routines qui vont offrir
plusieurs services (détaillés dans la documentation
du Starter Kit). Le PC va transmettre un paquet de données
contenant une opération à effectuer et des données
(toujours de la même façon : le DSP lit l'@ FFF000h
et il attend ensuite la réponse du PC). Les opérations
sont :
- Envoi de données à une adresse (le DSP va
aller écrire ces données à cette adresse)
- Lecture de données à une adresse (le DSP
va lire les données à cette adresse)
- Execution du code (RUN)
- Execution d'un pas (SSTEP)
- Arrêt du code (HALT)
- Lecture de l'état des registres
- etc ...
Ce Kernel permet donc, moyennant l'utilisation des librairies
de fonctions fournies sur le PC d'effectuer de nombreuses taches
de debuggage. Il est possible de lire et écrire n'importe
quelle adresse mémoire, c'est à dire qu'il est possible
de lire et modifier dans la mémoire du DSP,
mais aussi d'atteindre les périphériques branchés
sur le bus du DSP. Il est donc possible de prendre un contrôle
quasiment complet de la carte.
Remarque :
Ce Kernel fonctionne en IT, c'est à dire que le programme
utilisateur continue à s'executer entre temps (à moins
que l'on vienne le stopper). Ce qu'il ne faut pas perdre de vue,
car il va lui aussi faire des accès sur le bus, etc.
Le Kernel est donc chargé et peut faire plein de choses.
La première qui va lui être demandée par le PC
est de charger le code de l'utilisateur (et les données) et
ensuite d'exécuter ce code.
Il est à noter que ce mécanisme a été
prévu pour fonctionner avec l'assembleur fourni avec le
Starter Kit. Cependant, il n'est fourni avec le starter Kit, qu'un
assembleur et pas de compilateur C. C'est donc le compilateur C générique,
vendu par TI qui est utilisé. Jusque là rien ne changeait
(que l'on vienne mettre du code généré par ci
ou ça, du son, du texte, etc). Jusqu'au moment où le
code de l'utilisateur est exéecuté.
Dans le cas de l'assembleur fourni avec la carte, un simple
exécution de la fonction RUN, permet de lancer le code.
Dans le cas du compilateur TI, il est NECESSAIRE de commencer
par un SSTEP PUIS un RUN.
Et ensuite ?
Le programme de l'utilisateur va se dérouler (à moins
qu'il ne se plante). Il est ensuite possible à tout moment
(via le port //) d'interrompre le DSP, de venir lire n'importe quelle
@ , ecrire dedans, etc. Ce qui se révèle extrêmement
pratique pour le debug.
Cette communication
a été par la suite déportée à l'extérieur
de la carte Starter Kit (problème mécanique).
Tous les signaux servant à cette communication sont reportés
sur les connecteurs d'extension, elle a été déportée
sur la carte 'rajoutée' sur la carte d'extension. Cependant
pour que la communication dépaortée puisse fonctionner
une modification a dû être apportée au latch 74HCT245
(en orange sur le schéma), sur la carte Starter Kit. :
sa patte 19 (G : Gate Enable) a été déconnectée
de sa piste et reliée à la patte 20 (+5V), permettant
de le rendre inactif. Il n'est donc PAS POSSIBLE
d'utiliser les 2 communications en même temps. Pour utiliser
la communication de la carte Starter Kit, il faut :
- Désactiver la communication aditionnelle (en retirant la
carte ou en patchant le 74HC245 de la communication aditionnelle),
de la même manière
- Rétablir la connection de la patte 19 du 74HC245
de la carte Starter Kit