cores: Added mega1280
[simavr] / examples / board_i2ctest / avr_twi_master.h
1 /*****************************************************************************\r
2 *\r
3 * Atmel Corporation\r
4 *\r
5 * File              : TWI_Master.h\r
6 * Compiler          : IAR EWAAVR 2.28a/3.10c\r
7 * Revision          : $Revision: 1.13 $\r
8 * Date              : $Date: 24. mai 2004 11:31:22 $\r
9 * Updated by        : $Author: ltwa $\r
10 *\r
11 * Support mail      : avr@atmel.com\r
12 *\r
13 * Supported devices : All devices with a TWI module can be used.\r
14 *                     The example is written for the ATmega16\r
15 *\r
16 * AppNote           : AVR315 - TWI Master Implementation\r
17 *\r
18 * Description       : Header file for TWI_Master.c\r
19 *                     Include this file in the application.\r
20 *\r
21 ****************************************************************************/\r
22 \r
23 /****************************************************************************\r
24   TWI Status/Control register definitions\r
25 ****************************************************************************/\r
26 //#define TWI_BUFFER_SIZE 4   // Set this to the largest message size that will be sent including address byte.\r
27 \r
28 #define TWI_TWBR            0x0C        // TWI Bit rate Register setting.\r
29                                         // Se Application note for detailed \r
30                                         // information on setting this value.\r
31 // Not used defines!\r
32 //#define TWI_TWPS          0x00        // This driver presumes prescaler = 00\r
33 \r
34 /****************************************************************************\r
35   Global definitions\r
36 ****************************************************************************/\r
37 \r
38 union TWI_statusReg                       // Status byte holding flags.\r
39 {\r
40     unsigned char all;\r
41     struct\r
42     {\r
43         unsigned char lastTransOK:1;      \r
44         unsigned char unusedBits:7;\r
45     };\r
46 };\r
47 \r
48 extern union TWI_statusReg TWI_statusReg;\r
49 \r
50 /****************************************************************************\r
51   Function definitions\r
52 ****************************************************************************/\r
53 void TWI_Master_Initialise( void );\r
54 unsigned char TWI_Transceiver_Busy( void );\r
55 unsigned char TWI_Get_State_Info( void );\r
56 void TWI_Start_Transceiver_With_Data(\r
57                 unsigned char *msg, unsigned char msgSize, unsigned char sendStop );\r
58 void TWI_Start_Transceiver( void );\r
59 unsigned char TWI_Get_Data_From_Transceiver( unsigned char *, unsigned char );\r
60 \r
61 /****************************************************************************\r
62   Bit and byte definitions\r
63 ****************************************************************************/\r
64 #define TWI_READ_BIT  0       // Bit position for R/W bit in "address byte".\r
65 #define TWI_ADR_BITS  1       // Bit position for LSB of the slave address bits in the init byte.\r
66 \r
67 #define TRUE          1\r
68 #define FALSE         0\r
69 \r
70 /****************************************************************************\r
71   TWI State codes\r
72 ****************************************************************************/\r
73 // General TWI Master staus codes                      \r
74 #define TWI_START                  0x08  // START has been transmitted  \r
75 #define TWI_REP_START              0x10  // Repeated START has been transmitted\r
76 #define TWI_ARB_LOST               0x38  // Arbitration lost\r
77 \r
78 // TWI Master Transmitter staus codes                      \r
79 #define TWI_MTX_ADR_ACK            0x18  // SLA+W has been tramsmitted and ACK received\r
80 #define TWI_MTX_ADR_NACK           0x20  // SLA+W has been tramsmitted and NACK received \r
81 #define TWI_MTX_DATA_ACK           0x28  // Data byte has been tramsmitted and ACK received\r
82 #define TWI_MTX_DATA_NACK          0x30  // Data byte has been tramsmitted and NACK received \r
83 \r
84 // TWI Master Receiver staus codes  \r
85 #define TWI_MRX_ADR_ACK            0x40  // SLA+R has been tramsmitted and ACK received\r
86 #define TWI_MRX_ADR_NACK           0x48  // SLA+R has been tramsmitted and NACK received\r
87 #define TWI_MRX_DATA_ACK           0x50  // Data byte has been received and ACK tramsmitted\r
88 #define TWI_MRX_DATA_NACK          0x58  // Data byte has been received and NACK tramsmitted\r
89 \r
90 // TWI Slave Transmitter staus codes\r
91 #define TWI_STX_ADR_ACK            0xA8  // Own SLA+R has been received; ACK has been returned\r
92 #define TWI_STX_ADR_ACK_M_ARB_LOST 0xB0  // Arbitration lost in SLA+R/W as Master; own SLA+R has been received; ACK has been returned\r
93 #define TWI_STX_DATA_ACK           0xB8  // Data byte in TWDR has been transmitted; ACK has been received\r
94 #define TWI_STX_DATA_NACK          0xC0  // Data byte in TWDR has been transmitted; NOT ACK has been received\r
95 #define TWI_STX_DATA_ACK_LAST_BYTE 0xC8  // Last data byte in TWDR has been transmitted (TWEA = �0�); ACK has been received\r
96 \r
97 // TWI Slave Receiver staus codes\r
98 #define TWI_SRX_ADR_ACK            0x60  // Own SLA+W has been received ACK has been returned\r
99 #define TWI_SRX_ADR_ACK_M_ARB_LOST 0x68  // Arbitration lost in SLA+R/W as Master; own SLA+W has been received; ACK has been returned\r
100 #define TWI_SRX_GEN_ACK            0x70  // General call address has been received; ACK has been returned\r
101 #define TWI_SRX_GEN_ACK_M_ARB_LOST 0x78  // Arbitration lost in SLA+R/W as Master; General call address has been received; ACK has been returned\r
102 #define TWI_SRX_ADR_DATA_ACK       0x80  // Previously addressed with own SLA+W; data has been received; ACK has been returned\r
103 #define TWI_SRX_ADR_DATA_NACK      0x88  // Previously addressed with own SLA+W; data has been received; NOT ACK has been returned\r
104 #define TWI_SRX_GEN_DATA_ACK       0x90  // Previously addressed with general call; data has been received; ACK has been returned\r
105 #define TWI_SRX_GEN_DATA_NACK      0x98  // Previously addressed with general call; data has been received; NOT ACK has been returned\r
106 #define TWI_SRX_STOP_RESTART       0xA0  // A STOP condition or repeated START condition has been received while still addressed as Slave\r
107 \r
108 // TWI Miscellaneous status codes\r
109 #define TWI_NO_STATE               0xF8  // No relevant state information available; TWINT = �0�\r
110 #define TWI_BUS_ERROR              0x00  // Bus error due to an illegal START or STOP condition\r
111 \r