-
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 !
|