Forum: Mikrocontroller und Digitale Elektronik FTDI 2232 I2C und SPI nutzen


von Toni (Gast)


Lesenswert?

Hi Leute,

ich möchte mit dem FT2232 von FTDI eine SPI und eine I2C-Schnittstelle 
auf einem Chip realisieren. Ich verwende dafür die originalen .libs und 
header Dateien. Leider haben die Pappnasen in den headern die Struktur 
"ChannelConfig" in beiden gleich genannt, sodass wenn ich die 
Deklarationen ändere, ich eine Fehlermeldung in Qt bekomme:

Fehler: C2664: 'FT_STATUS I2C_InitChannel(FT_HANDLE,ChannelConfig *)' : 
Konvertierung von Argument 2 von 'ChannelConfig_SPI *' in 'ChannelConfig 
*' nicht m”glich
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die 
Konvertierung erfordert einen reinterpret_cast-Operator oder eine 
Typumwandlung im C- oder Funktionsformat.

Ich nutze den MSVC Compiler in 32 Bit.

Hier noch Codeschnipsel:
Änderung in der libMPSSE_spi.h
1
typedef struct ChannelConfig_SPI_t
2
{
3
  uint32  ClockRate;
4
5
  uint8  LatencyTimer;
6
7
  uint32  configOptions;
8
9
  uint32    Pin;
10
11
  uint16    reserved;
12
}ChannelConfig_SPI;

Hier aus .cpp Datei:
1
    //Werte für MPSSE setzten
2
 ChannelConfig_SPI ChannelConfiguration;
3
 ChannelConfiguration.ClockRate = 300000; /*i.e. 300 KHz*/
4
 ChannelConfiguration.LatencyTimer = 255;
5
 ChannelConfiguration.configOptions = SPI_CONFIG_OPTION_MODE1;
6
 ChannelConfiguration.Pin = 0;
7
8
 ftStatus = I2C_InitChannel(ftHandle, &ChannelConfiguration);

Wie bekomme ich das Problem in den Griff?

von Eric B. (beric)


Lesenswert?

Hm, ich würde dann alles was mit SPI und I2C zu tun hat in 2 separaten 
C(++) Dateien packen damit sich die ChannelConfiguration-Definitionen 
nicht beissen. Exportierte Funktionen und Deklarationen in diesen 2 
Dateien dürfen dann natürlich keine Parameter usw von Typ 
ChannelConfiguration haben.

von Toni (Gast)


Lesenswert?

Super, danke für den Tipp.
Ist zwar blöd, aber funktioniert :)
Gibt´s auch eine Möglichkeit diese Geschichte mit Klassen zu 
Programmieren?

von Eric B. (beric)


Lesenswert?

Nur wenn die Klassen in 2 unterschiedliche Dateien liegen.
Du kannst ja immer nur eine von den 2 FTDI-Headern inkludieren...

von Lattice User (Gast)


Lesenswert?

Toni schrieb:
> Super, danke für den Tipp.
> Ist zwar blöd, aber funktioniert :)
> Gibt´s auch eine Möglichkeit diese Geschichte mit Klassen zu
> Programmieren?

Du kannst es mit Namespaces versuchen
1
namespace I2C {
2
#include "header1.h"
3
};
4
namespace SPI {
5
#include "header2.h"
6
};

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.