Nous avons 3 modèles de cartes MVME162LX:
- un MC68LC040 cadencé à 25 MHz microprocesseur 32 bits avec 8Kb de cache et une unité de gestion de la mémoire MMU (le MC68LC040 est une version ( low cost) du MC68040 qui ne possède pas d'unité de calculs flottants FPU);
- 4 Moctects ou 16 Moctets de mémoire dynamique ;
- 1 Moctets de mémoire FLASH ;
- 128 Kbytes de mémoire statique sauvegardée par une batterie ;
- 8 Kbytes de mémoire non volatile pour le calendrier, l'horloge et la configuration de la carte: le TIMEKEEPER M48T08 ;
- 4 supports de 32 broches pour PROMs, 2 supports sont occupés
:
l'un contient le chargeur/debugger 162Bug Motorola,
l'autre le XRAY debugger de MicroTec ;
- deux contrôleurs pour 4 lignes synchrone/asynchrone : deux Zilog Z85230 ;
- un contrôleur ETHERNET : l'Intel 82596CA ;
- un contrôleur SCSI : le NCA 53C710 ;
- un contrôleur mémoire (le MCChip un asic), qui entre autres fonctions, offre : 4 timers 32bits programmables ; gére les interruptions provenant des contrôleurs d'entrées/sorties.
- un contrôleur (le VMEchip2, un asic) pour le bus VME Maître/Esclave
jusqu'a 64 bits de données et 32 lignes d'adresses.
Mapping mémoire
Le Z85230 comporte deux canaux: le canal A et le canal B. Chaque canal comporte deux registres qui sont "mappés" par le MCchip dans l'espace d'adressage de la carte: il s'agit des registres Port Control Register et Port Data Register.
Les adresses sont les suivantes :
Premier contrôleur
Register | Port Control | Port Data |
canal A
canal B
|
FFF45001 |
FFF45007
FFF45003 |
Register | Port Control | Port Data |
canal A
canal B
|
FFF45805
FFF45801 |
FFF45807
FFF45803 |
Offset |
|
|
|
|
$00 |
|
|
|
Base Register |
$04 |
|
|||
$08 |
|
|||
$0C |
|
|||
$10 |
|
|||
$14 |
Count Register |
Clock Adjust |
Control |
Control |
$18 |
Interrupt Control |
Interrupt Control |
Interrupt Control |
Interrupt Control |
$1C |
Error Interrupt Control |
Control |
Control |
Control |
$20 |
Register |
Register |
||
$24 |
Size |
Options |
Size |
|
$28 |
Status |
|
Interrupt Control |
Interrupt Control |
$2C |
Status |
Inputs |
Version |
Control |
$30 |
|
|||
$34 |
|
|||
$38 |
|
|||
$3C |
|
|||
$40 |
|
Time Control |
Time Control |
Interrupt Control |
$44 |
|
|
Watchdog |
|
$48 |
DRAM Control |
(reserved) |
Select MPU Status |
|
$4C |
|
Registre ID et le registre de Révision
|
|
|
|
|
|
|
|
|
|
|
|
||||||
OPÉRATION |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FAST Bit de contrôle de la vitesse pour mémoire BBRAM. Ne jamais modifier de bit !
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Les 4 autres bits IV0-IV3 sont utilisés pour encoder l'origine
de l'interruption comme le montre le tableau suivant:
Source de l'Interruption |
|
Priorité |
|
|
|
|
|
inférieure |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Note1: Le controleur Z85230 possede un registre de vecteur d'interruption qui n'a rien a voir avec celui du MCchip. Lors d'une reconnaisance d'interruption, le vecteur renvoyer est celui contenu dans le registe de vecteur du Z85230 et non celui du MCchip. De plus comme la carte possede deux Z85230, le premier est prioritaire sur le second.
Programmer les Timers
Le MCchip possède 4 timers programmables.Les registres Tick Timer Counter
Ce sont des registres de 32 bits qui sont incrémentes chaque fois qu'apparaît un Tick d'horloge si le timer correspondent est activé.
Les opérations permises sont la lecture et l'écriture. Un RESET ne modifie pas les bits de ces registres. Quand vous programmez un timer pour générer une interruption périodique, le Tick Timer Counter devra être mis 'a zéro par logiciel. Sinon l'apparition de la première interruption ne serra pas déterminée: soit au plus-tard dans 71,6 minutes !Les registres Tick Compare
Ce sont des registres de 32 bits. les opérations permises sont la lecture et l'écriture. Un RESET remet a zéro les bits de ces registres. La valeur du Tick Timer Counter est compare au Tick Compare. Lorsqu'ils sont égaux, une interruption est envoyer vers le bus local et le counter d'overflow est incremente. Si le mode clear on compare est valide, le Tick Timer Counter est remis à zéro.Le Registre Prescaler Clock Adjust Register
Ce registre de 8 bits permet de programmer la fréquence d'apparition des Ticks des 4 timers suivant l'équation suivante:Tick clock MHz = processor clock MHz / (256 - precaler value)
Remarque: la valeur $FF n'est pas permise, la fréquence maximum pour les Ticks timers est donc la fréquences du processeur divise par deux. Par exemple si l'on veut un Tick `a 1 MHz, l'équation devient:
Prescaler value = 256 - (processor clock / Tick Clock)
Prescaler value = 256 - 25MHz
Prescaler value = $E7
Les registres de contrôle des timers
Chaque timer a un registre de contrôle:
|
OV3 |
OVF2 |
OVF1 |
OVF0 |
|
COVF |
|
|
OPÉRATION |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CEN quand ce bit vaut 1, le registre de comptage est incrémente tous les Ticks (le timer fonctionne); quand ce bit vaut 0, le registre de comptage n'est pas incrémenté (le timer est arrête).
COC quand ce bit vaut 1, le registre de comptage est remis a zéro quand il atteint la valeur du registre de comparaison ; si ce bit vaut 0, le registre de comptage continue à être incrémenté après avoir atteint la valeur du registre de comparaison.
COVF le compteur d'overflow est remis a 0 chaque fois que l'on écrit un 1 dans ce bit.
OVFL Ces bits constituent le compteur d'overflow. Il est incrémenté chaque fois ou le timer génère une interruption.Les registre de contrôle d'interruption des Timers
|
|
|
|
IEN |
ICLR |
IL2 |
|
|
OPÉRATION |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IL2 - IL0 Ces 3 bits code le niveau d'interruption compatible avec la famille 680000. Le niveau 0 ne génère pas d'interruption.
ICLR Écrire un 1 dans ce bit met 'a 0 le bit INT.
IEN La mise 'a 1 de ce bit, valide les interruptions. Sa mise a 0 invalide les interruptions.
INT Quand ce bit vaut 1, c'est qu'une interruption à été généré. Ce bit passe 'a 0 en écrivant un 1 dans le bit ICLR.
ABORT Switch Interrupt Control Register $FFF42043;b
La table suivante decrit le role des bits du registre de controle du poussoir ABORT:
BIT 7 6 5 4 3 2 1 0 NOM ABS INT IEN ICLR IL2 IL1 IL0 OPÉRATION R R R R/W C R/W R/W R/W RESET 0 0 PL 0 PL 0 PL 0 PL 0 PL 0 PL 0 PL ABS Etat du poussoir ABORT: Il vaut 1 lorque le poussoir est presse, 0 s'il n'est pas presse.
INT Ce bit vaut 1 lorsqu'une interruption a ete genere par le poussoir ABORT.
IEN Il faut mettre a 1 ce bit pour activer l'interruption du poussoir ABORT.
ICLR Il faut ecrire 1 dans ce bit pour acquitter l'interruption du poussoir ABORT (raz du bit INT).
IL2-IL0 Ces 3 bits codent le niveau d'interruption provoque par le poussoir ABORT. Le niveau 0 ne genere pas d'interruption.Lors de la reconnaissance d'interruption du poussoir ABORT, le vecteur renvoyer est par defaut celui place par le moniteur 162bug soit la valeur $50 + $E = $5E (Registre de base des vecteurs d'interruptions).
Le VMEchip2
Le VMEchip2 est un ASIC qui permet d'interfacer le bus interne de la carte MVME162LX avec le bus externe VME. Donc de pouvoir communiquer avec toutes autres cartes présentes sur le bus VME du rack. Il possède 36 registres de 32 bits. Heureusement nous allons utiliser un cas particulier et simple de sa programmation. Le chapitre 2 du manuel MVME162 Embedded Controller Programmer's Guide d''etaille les moindres bits de ce circuit disponible en 5205.
Nous allons donc aborder le cas de figure type des TP IN201. Il s'agit de communiquer (lire/ecrire) via le VMEbus entre une carte maître MVME162lx et une carte esclave d'entrée/sortie (qui permet le contrôle/commande des robots Fischers):