Accueil > Nouvelles > Contenu

FT_Hal_I2C.cpp

May 06, 2019

/ * Ce fichier contient des informations relatives à i2c * /

/ * Standard inclus * /

#include "FT_Platform.h"

#include "..WireWire.h"

#if 0

#include "FT_DataTypes.h"

#include "FT_Gpu.h"

#ifdef ARDUINO_PLATFORM

#include

#include

#include

#include

#include

#fin si

#fin si

#include "FT_Hal_I2C.h"


ft_int16_t hal_rtc_i2c_init ()

{

Wire.begin ();

ft_delay (100);

retourne 0;

}


/ * api pour lire n octets de addr * /

ft_int16_t hal_rtc_i2c_read (adresse ft_uint8_t, tampon ft_uint8_t *, longueur ft_uint16_t)

{

ft_uint16_t i;

compte court = 0;

ft_uint8_t writeResult = 0;

tandis que (longueur> 28)

{

hal_rtc_i2c_read (addr, buffer, 28);

tampon + = 28;

addr + = 28;

longueur - = 28;

}


Wire.beginTransmission (0x6f); // transmettre au périphérique (0x23)

/ * adresse octets pour rtc vont de 00 à 0xff * /

Wire.write (addr); // envoie un octet de valeur


/ * met fin à la transmission mais ne libère pas le bus - l'utilisation est une lecture aléatoire des données, cas d'utilisation à partir de rtc * /

writeResult = Wire.endTransmission (false); // maintenez le bus pour lire les données suivantes

if (0! = writeResult)

{

return -1; // cas d'erreur

}

Wire.requestFrom (0x6f, longueur); // demande la longueur en octets au périphérique esclave et met fin à la transmission après cela

pour (i = 0; i

{

/ * besoin de considérer timout ici * /

while (0 == Wire.available ()); // appel bloquant - au moins un octet doit être disponible

tampon [i] = Wire.read ();

}

retourne 0;

}

/ * API pour écrire des données dans un emplacement particulier * /

ft_int16_t hal_rtc_i2c_write (adresse ft_uint8_t, tampon ft_uint8_t *, longueur ft_uint16_t)

{

ft_uint16_t i;

octet writeResult = 0;

si (0 == longueur)

{

return -1;

}

/ * pour lire le bit inférieur doit être mis à 1 et pour écriture mis à 0 * /

Wire.beginTransmission (0x6f);


/ * adresse octets pour rtc vont de 00 à 0xff * /

Wire.write (addr); // envoie un octet de valeur

/ * vérifier pour chaque octet * /

pour (i = 0; i

{

Wire.write (* buffer ++); // envoie les données à l'esclave

}


/ * termine la transmission par le bit d'arrêt * /

writeResult = Wire.endTransmission (); // termine la transmission en définissant le bit d'arrêt

if (0! = writeResult)

{

retourne writeResult;

}

retourne 0;

}

/ * Rien d'autre que cela * /