I2C

I²C Slave

Funktion

Das I²C-Slave-Modul ermöglicht, über den I²C-Bus mit I²C-Mastern zu kommunizieren. Im I2C_S_CTRL Register wird auch der vom Master vorgegebene Betriebsmodus (Lesen/Schreiben) angezeigt. In das Register I2C_S_TXR werden die zu sendenden Daten geschrieben. Empfangene Daten können aus dem I2C_S_RXR-Register gelesen werden. Acknowledge beim Senden und Empfangen wird automatisch gehandhabt. Ist die Übertragung eines Bytes abgeschlossen, kann ein Interrupt generiert werden. Das Interruptsignal wird durch einen Zugriff auf das jewweilige Datenregister zurückgesetzt.

Register

OffsetRegisterFunktionZugriff
0I2C_S_CTRLSteuerrgisterread/write
1I2C_S_TXRDatenregisterread/write
2I2C_S_RXRDatenregisterread

Das Steuerregister I2C_S_CTRL enthält die zur Steuerung der Funktionen des I²C Slave Moduls nötigen Bits. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register kann lesend und schreibend zugegriffen werden.

In das Datenregister I2C_S_TXR wird das zu sendende Datenwort geschrieben und im Register I2C_S_RXR kann das empfangene Datenwort gelesen werden. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register I2C_S_TXR kann lesend und schreibend zugegriffen werden. Das Register I2C_S_RXR kann nur gelesen werden.

I2C_S_CTRLBit NameFunktion
Bit 0: I2C_SL_EN I2C enable: 0 = disable, 1 = enable
Bit 1: I2C_SL_ENI interrupt enable: 0 = disable, 1 = enable
Bit 2: I2C_SL_10BIT_EN Adressierung: 0 = 7 bit, 1 = 10 bit (zur Zeit nur 7 Bit)
Bit 3: I2C_SL_IR_SIGR Interrupt flag read: 0 = nicht gesetzt, 1 = gesetzt - nur lesbar
Bit 4: I2C_SL_IR_SIGW Interrupt flag write: 0 = nicht gesetzt, 1 = gesetzt - nur lesbar
Bit 5: I2C_SL_READ Transfermodus: 0 = write, 1 = read - nur lesbar
Bit 6 bis 15: I2C_SL_ADDR Adresse des I2C Slave Moduls
Bit 16: I2C_SL_DONE Transfer done: 0 = ein Datentransfer ist aktiv, 1 = Datentransfer ist beendet
Bit 17: I2C_SL_RACK_F Acknowledge fail: 0 = kein Fehler erkannt, 1 = kein Acknowledge

i2c_slave.h(external link) mit der Register Struktur.

Konfiguration und Instanziierung


Die Interruptleitung des Moduls muss an den gewünschten Eingang des Interruptkontrollers angeschlossen werden, SDA und SCL müssen an die IO-Ports des Top Level Moduls angeschlossen werden. Diese müssen dann noch den Pins des FPGA zugeordnet werden.



SpartanMC