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
Offset | Register | Funktion | Zugriff |
0 | I2C_S_CTRL | Steuerrgister | read/write |
1 | I2C_S_TXR | Datenregister | read/write |
2 | I2C_S_RXR | Datenregister | read |
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_CTRL | Bit Name | Funktion | |
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 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.