www.mikrocontroller.net

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


Autor: Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.