summaryrefslogtreecommitdiffstats
path: root/source/Concept/Framework/atmega128io.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/Concept/Framework/atmega128io.h')
-rw-r--r--source/Concept/Framework/atmega128io.h95
1 files changed, 94 insertions, 1 deletions
diff --git a/source/Concept/Framework/atmega128io.h b/source/Concept/Framework/atmega128io.h
index ed526ae..a3384a4 100644
--- a/source/Concept/Framework/atmega128io.h
+++ b/source/Concept/Framework/atmega128io.h
@@ -178,6 +178,99 @@ extern void uart1_puts_p(const char *s );
/** @brief Macro to automatically put a string constant into program memory */
#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
-/**@}*/
+/**@}*/
+
+/////////////////////////////////////////////////////
+/////////////////////////////////////////////////////
+// TWI-Driver
+
+ /*!
+ Struktur Definition
+ tx_type ist eine Datenstruktur um den TWI Treiber anzusprechen
+ und behinhaltet folgende Informationen:
+ Slave Adresse + Datenrichtung
+ Anzahl der zu uebertragendenden Bytes (Senden oder Empfangen)
+ Pointer auf den Sende- oder Empfangspuffer
+ */
+ typedef struct
+ {
+ uint8 slave_adr; /*!< Slave Adresse and W/R byte */
+ uint8 size; /*!< Anzahl der Bytes, die gesendet oder empfagen werden sollen */
+ uint8 *data_ptr; /*!< Pointer zum Sende und Empfangs Puffer */
+ }tx_type;
+
+/*!
+ * Hier wird der eigentliche TWI-Treiber angesprochen
+ * @param *data_pack Container mit den Daten fuer den Treiber
+ * @return Resultat der Aktion
+ */
+ extern uint8 Send_to_TWI(tx_type *data_pack);
+/*!
+ * Sende ein Byte
+ * @param data das zu uebertragende Byte
+ */
+ extern uint8 Send_byte(uint8 data);
+/*!
+ * Empfange ein Byte
+ * @param *rx_ptr Container f�r die Daten
+ * @param last_byte Flag ob noch Daten erwartet werden
+ * @return Resultat der Aktion
+ */
+ extern uint8 Get_byte(uint8 *rx_ptr, uint8 last_byte);
+/*!
+ * Sende Start Sequence
+ * @return Resultat der Aktion
+ */
+ extern uint8 Send_start(void);
+/*!
+ * Sende Slave Adresse
+ * @param adr die gewuenschte Adresse
+ * @return Resultat der Aktion
+ */
+ extern uint8 Send_adr(uint8 adr);
+/*!
+ * Sende Stop Sequence
+ */
+ extern void Send_stop(void);
+/*!
+ * Warte auf TWI interrupt
+ */
+ extern void Wait_TWI_int(void);
+
+/*!
+ * TWI Bus initialsieren
+ * @return Resultat der Aktion
+ */
+ extern int8 Init_TWI(void);
+/*!
+ * TWI Bus schliesen
+ * @return Resultat der Aktion
+ */
+ extern int8 Close_TWI(void);
+
+ #define W 0 /*!< Daten Transfer Richtung Schreiben */
+ #define R 1 /*!< Daten Transfer Richtung Lesen */
+ #define OWN_ADR 60 /*!< Die eigene Slave Adresse */
+ #define SUCCESS 0xFF /*!< Status Code alles OK */
+
+ /*!
+ TWI Stautus Register Definitionen
+ */
+
+ /*!< Genereller Master Statuscode */
+ #define START 0x08 /*!< START wurde uebertragen */
+ #define REP_START 0x10 /*!< Wiederholter START wurde uebertragen */
+ /*!< Master Sender Statuscode */
+ #define MTX_ADR_ACK 0x18 /*!< SLA+W wurde uebertragen und ACK empfangen */
+ #define MTX_ADR_NACK 0x20 /*!< SLA+W wurde uebertragen und NACK empfangen */
+ #define MTX_DATA_ACK 0x28 /*!< Datenbyte wurde uebertragen und ACK empfangen */
+ #define MTX_DATA_NACK 0x30 /*!< Datenbyte wurde uebertragen und NACK empfangen */
+ #define MTX_ARB_LOST 0x38 /*!< Schlichtung verloren in SLA+W oder Datenbytes */
+ /*!< Master Empfaenger Statuscode */
+ #define MRX_ARB_LOST 0x38 /*!< Schlichtung verloren in SLA+R oder NACK bit */
+ #define MRX_ADR_ACK 0x40 /*!< SLA+R wurde uebertragen und ACK empfangen */
+ #define MRX_ADR_NACK 0x48 /*!< SLA+R wurde uebertragen und NACK empfangen */
+ #define MRX_DATA_ACK 0x50 /*!< Datenbyte wurde empfangen und ACK gesendet */
+ #define MRX_DATA_NACK 0x58 /*!< Datenbyte wurde empfangen und NACK gesendet */
#endif