La Tini Board 390 -> Le bus I2C
Connection du bus I²C à la Tini Board
La connexion du bus I²C à la Tini Board requiert certaines précautions à prendre.
Notamment celui de s’assurer de la version de la Socket et de la Tini (68 pins ou 72 pins).
Le contrôle de ce bus s’effectue à l’aide d’une classe nommée I²CPort permettant les opérations de lecture et d’écriture selon une vitesse et adresse prédéfinies.
Dans cette classe, figurent les sorties utilisées pour SDA et SCL:
- P5.0 pour SCL
- P5.1 pour SDA
Après lecture des schémas électroniques, il s’avère que la sortie P5.0 s’appelle CTX et est connecté à la pin 10 de la Tini, la sortie P5.1 s’appelle CRX et est connectée à la pin 11 de la Tini.
Ecriture d’un programme de test
Afin de tester la présence des signaux sur les ports, l’écriture d’un programme de test peut s’avérer fort utile.
A la suite de nombreux essais, il s’est avéré que le composant LM76 (thermomètre) répond, mais ne peut donner une température valide.
Il s'agit là d'un problème de compatibilité de protocole comme expliqué dans le chapitre 3.3.3.
Afin de parer à ce problème de taille, il existe la possibilité d'écrire et d'intégrer des classes native Java spécifique au processeur DS80C390.
Ecriture d'un driver natif Java
Les différents programmes et packages fournis dans le JavaKit de Dallas nous permettent d'écrire des classes de type native.
Cependant il est nécessaire d'avoir de solides bases en assembleur afin de réaliser une telle opération.
Je m'appliquerai donc ici à décrire les parties critiques faisant la spécificité de la Tini Board.
Afin de prendre en compte l'utilisation d'une bibliothèque native par Java, il va falloir la déclarer et importer les méthodes de celle-ci afin de les rendre utilisables.
Voici les fichiers sources :
Partie Java
Il s'agit là de l'opération la moins complexe et pouvant être comparer à l'utilisation d'un fichier entête dans le monde du C/C++.
public class PortI2C
{
public static native boolean readWithOutAck(byte tempo,byte adresse,byte[] valeur); public static native boolean readWithAck(byte tempo,byte adresse,byte[] valeur); public static native boolean write(byte tempo,byte adresse,byte[] valeur); public static native boolean isExist(byte tempo,byte adresse); }
Cependant il reste une opération à effectuer afin de rendre opérationnel ces méthodes car il ne s'agit là que d'un "masque" pour utiliser la librairie.
L'opération restante consiste à importer la librairie assemblée avant utilisation de ces méthodes :
System.loadLibrary("portI2C.tlib");
Partie assembleur
Sans aller trop loin dans la description de l'écriture d'un driver, voici les contraintes permettant l'assemblage de ce fichier.
Le fichier doit porter l'extension .A51 et utiliser le jeu d'instruction du langage mnémonique de l'assembleur 80c51.
Afin d'utiliser les constantes et macros fort utiles de la Tini, il faut importer celles-ci en début de fichier :
$include(tini.inc) $include(ds80c390.inc) $include(tinimacro.inc) $include(apiequ.inc)
La bibliothèque doit comporter une méthode d'initialisation qui sera appelée lors du chargement de la bibliothèque. Cette fonction d'initialisation est obligatoire et au minimum doit comporter ce code :
PortI2C_Init: clr a; ret;
La syntaxe des méthodes est très importante car elle permet de faire le lien avec l'entête java. C'est ainsi que l'on retrouve les méthodes décrites dans l'entête sous la forme :
Native_readWithOutAck:
mov a,#0h ;Efface l'accumulateur lcall NatLib_LoadPrimitive ;Demande du premier paramètre - tempo - byte
mov R0_B0,R0;
On place le tempo dans le registre R0 de la bank0
Dans l'exemple ci-dessus, il est également présenté la manière utilisée pour charger une variable, le registre 'a' devant apporter l'indication de la variable à utiliser.
L'assemblage
Une fois le code écrit, il faut assembler le pseudo code mnémonique en langage machine spécifique au processeur 80c51.
Pour ce faire, il faut d'abord traiter le code écrit de manière à ce que chaque espace entre chaque mot soit bien conforme à une norme qui sera utilisée par l'assembleur, il s'agit là d'une opération de 'Parse'.
<TINI>\native\bin\win32\macro portI2C.a51
Le fichier produit comporte l'extension .mpp et peut être utilisé en lecture pour effectuer un debugage simple.
L'opération suivante consiste à assembler ce fichier en effectuant une traduction littérale entre le pseudo code mnémonique et l'équivalence en code machine.
<TINI>\native\bin\win32\a390 -l portI2C.mpp
Le fichier produit qui est un code exploitable directement par le processeur et porte l'extension .tlib.
Ce fichier sera ensuite lié aux autres lors de la conversion des .class en .tini
java -classpath ..\bin\tini.jar;%classpath% TINIConvertor -n bin\portI²C.tlib -f bin -o bin\I2C.tini -d ..\bin\tini.db








