#include <util/twi.h>
#include <avr/interrupt.h>
#include <stdint.h>
Go to the source code of this file.
Defines | |
#define | buffer_size 9 |
Groesse der Buffer in Byte (2..254). | |
Functions | |
void | init_twi_slave (uint8_t adr) |
Initalisierung des TWI-Interface. | |
Variables | |
volatile uint8_t | rxbuffer [buffer_size] |
Der Buffer, in dem die empfangenen Daten gespeichert werden. | |
volatile uint8_t | txbuffer [buffer_size] |
Der Sendebuffer, der vom Master ausgelesen werden kann. |
taken from http://www.roboternetz.de/wissen/index.php/TWI_Slave_mit_avr-gcc
Betrieb eines AVRs mit Hardware-TWI-Schnittstelle als Slave. Zu Beginn muss init_twi_slave mit der gewuenschten Slave-Adresse als Parameter aufgerufen werden. Der Datenaustausch mit dem Master erfolgt ueber die Buffer rxbuffer und txbuffer, auf die von Master und Slave zugegriffen werden kann. rxbuffer und txbuffer sind globale Variablen (Array aus uint8_t). Die Ansteuerung des rxbuffers, in den der Master schreiben kann, erfolgt aehnlich wie bei einem normalen I2C-EEPROM. Man sendet zunaechst die Bufferposition, an die man schreiben will, und dann die Daten. Die Bufferposition wird automatisch hochgezaehlt, sodass man mehrere Datenbytes hintereinander schreiben kann, ohne jedesmal die Bufferadresse zu schreiben. Um den txbuffer vom Master aus zu lesen, uebertraegt man zunaechst in einem Schreibzugriff die gewuenschte Bufferposition und liest dann nach einem repeated start die Daten aus. Die Bufferposition wird automatisch hochgezaehlt, sodass man mehrere Datenbytes hintereinander lesen kann, ohne jedesmal die Bufferposition zu schreiben.
Autor: Uwe Grosse-Wortmann (uwegw) Status: Testphase, keine Garantie fuer ordnungsgemaesse Funktion! letze Aenderungen: 23.03.07 Makros fuer TWCR eingefuegt. Abbruch des Sendens, wenn der TXbuffer komplett gesendet wurde. 24.03.07 verbotene Buffergroessen abgefangen 25.03.07 noetige externe Bibliotheken eingebunden
Abgefangene Fehlbedienung durch den Master:
License: GNU GPL v2 (see License.txt)
Definition in file twislave.h.
#define buffer_size 9 |
void init_twi_slave | ( | uint8_t | adr | ) |
Initalisierung des TWI-Interface.
Muss zu Beginn aufgerufen werden, sowie bei einem Wechsel der Slave Adresse.
adr | gewuenschte Slave-Adresse |
Definition at line 37 of file twislave.c.
References buffer_adr.
Referenced by main().
volatile uint8_t rxbuffer[buffer_size] |
Der Buffer, in dem die empfangenen Daten gespeichert werden.
Der Slave funktioniert aehnlich wie ein normales Speicher-IC [I2C-EEPROM], man sendet die Adresse, an die man schreiben will, dann die Daten, die interne Speicher-Adresse wird dabei automatisch hochgezaehlt.
Definition at line 61 of file twislave.h.
volatile uint8_t txbuffer[buffer_size] |
Der Sendebuffer, der vom Master ausgelesen werden kann.
Definition at line 66 of file twislave.h.
Referenced by ISR().