Forum: FPGA, VHDL & Co. I2C- Implomentieren aus EDK-IP-Catalog


von Neuling (Gast)


Lesenswert?

Hallo zusammen

Ich habe ein Spartan 3E Starter Kit und möchte gerne den I2C-Controller 
implementieren. (aus dem EDK IP-Catalog  -OPB IIC Bus Interface 
(v1.02a)-)
Ich habe ihn soweit auch eingebunden und kann auch das Bitstream 
erstellen. Nur jetzt ist mein Problem, das ich ihn irgendwie nicht 
richtig anspreche bzw. initialisiere.
Ich möchte mein Board als Slave Receiver behandeln, und ankommende Daten 
auf z.B. RS232 ausgeben.
Ich hätte es mir so etwa gedacht...


// Test des I2C - Controllers (v1.02a) ////////////////////////////

#include "xparameters.h"
#include "xgpio.h"
#include "stdio.h"
#include "xstatus.h"

//Adressdefinition/////////////////////////////////////////////////

#define I2CReceive 0x4080010C  // Register für emfangene I2C Daten
#define I2CAddr 0x40800110    // Adressregister
#define I2CControl 0x40800100  // Control Register
#define I2CStatus 0x40800104  // Statusregister
#define RS2 0x40600004    // Sende Register zur RS232

//Hauptprogramm ///////////////////////////////////////////////////

int main(void)
{

//Variablendeklaration ///////////////////////////////////////////

  unsigned long *addrreceive;  // Variable für I2C Empfangsregister
  unsigned long *addraddr;  // Variable für I2C Adressregister
  unsigned long *addrcontr;  // Variable für I2C Controllregister
  unsigned long *addrstatus;  // Variable für I2C Statusregister
  unsigned long *addrrs;  // Variable für RS232 Senderegister

//Pointerdecleration ////////////////////////////////////////////

  addrreceive = (unsigned long*) I2CReceive; // emfangene I2C Daten
  addraddr = (unsigned long*) I2CAddr;        // Slave Adresse
  addrcontr = (unsigned long*) I2CControl;   // Control Register
  addrstatus = (unsigned long*) I2CStatus;   // Statusregister
  addrrs = (unsigned long*) RS2;   // Sende Register zur RS232

*addrcontr = 0x02;  // Reset the Controller und FIFO transmit (0000010)
*addrcontr = 0x03;  // Controller Initialisieren (als Slave)  (0000011)
*addraddr = 0x84;  // Controlleradresse vergeben  entspricht 0x42

while(1)
{
*addrrs = (*addrreceive & 0x7F);// Abfrage des FIFO-Receive-Registers 
(7Bit)
}
return 0;
}



Könnte man das prinzipiell so machen ?
Ich hoffe es kan mir da jemand helfen.
Vielen Dank schonmal...
Viele Grüße

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.