Rev 470 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
41 | ingob | 1 | #ifndef __I2C_H |
2 | #define __I2C_H |
||
1 | ingob | 3 | |
241 | killagreg | 4 | // I2C states |
5 | #define I2C_STATE_UNDEF 0 |
||
6 | #define I2C_STATE_IDLE 1 |
||
248 | killagreg | 7 | #define I2C_STATE_BUFFBUSY 2 |
8 | #define I2C_STATE_TX_PENDING 3 |
||
9 | #define I2C_STATE_TX_PROGRESS 4 |
||
10 | #define I2C_STATE_RX_PENDING 5 |
||
11 | #define I2C_STATE_RX_PROGRESS 6 |
||
12 | #define I2C_STATE_OFF 7 |
||
470 | killagreg | 13 | // I2C Errors |
252 | killagreg | 14 | #define I2C_ERROR_NONE 0 |
15 | #define I2C_ERROR_UNKNOWN 1 |
||
16 | #define I2C_ERROR_NOACK 2 |
||
17 | |||
470 | killagreg | 18 | // the pointer to the rxbuffer handler function |
19 | // called by the IRQ routine after all bytes are recieved from slave |
||
20 | typedef void (*I2C_pRxHandler_t) (u8* pRxBuffer, u8 RxBufferSize); |
||
21 | |||
22 | extern volatile u32 I2C1_Timeout; |
||
241 | killagreg | 23 | // current I2C state |
470 | killagreg | 24 | extern volatile u8 I2C1_State; |
252 | killagreg | 25 | // the last I2C error |
470 | killagreg | 26 | extern volatile u8 I2C1_Error; |
1 | ingob | 27 | |
241 | killagreg | 28 | #define I2C1_TIMEOUT 500 // 500 ms |
1 | ingob | 29 | |
248 | killagreg | 30 | // define the size of the rx/tx buffer |
470 | killagreg | 31 | #define I2C1_BUFFER_LEN 100 |
248 | killagreg | 32 | // transfer buffer should be filled after a successful |
33 | // I2C_LockBuffer(...) and before a start of transmission |
||
34 | // initiated by I2C_Transmission(...). |
||
470 | killagreg | 35 | extern volatile u8 I2C1_Buffer[]; |
41 | ingob | 36 | |
241 | killagreg | 37 | void I2C1_Init(void); |
1 | ingob | 38 | |
241 | killagreg | 39 | void I2C1_Deinit(void); |
41 | ingob | 40 | |
248 | killagreg | 41 | // Initiate i2c transmission |
470 | killagreg | 42 | // A transmission sends first TxBytes from I2C1_Buffer to slave |
43 | // and then RxBytes are read from slave to I2C1_Buffer |
||
248 | killagreg | 44 | // replacing the byte that have been sent. |
45 | // Then the RxHandler function is called to handle the result. |
||
46 | // This function returns imediatly after a start condition. |
||
47 | // returns 1 if a transmission has been started, otherwise 0 |
||
470 | killagreg | 48 | u8 I2C1_Transmission(u8 SlaveAddr, u8 TxBytes, I2C_pRxHandler_t pRxHandler, u8 RxBytes); |
49 | // try to allocate the I2C1_Buffer within the timeout limit |
||
248 | killagreg | 50 | // returns 1 on success |
470 | killagreg | 51 | u8 I2C1_LockBuffer(u32 timeout); |
248 | killagreg | 52 | // wait until transmission progess is finished or timeout |
53 | // returns 1 if no timeout occurs |
||
470 | killagreg | 54 | u8 I2C1_WaitForEndOfTransmission(u32 timeout); |
1 | ingob | 55 | |
41 | ingob | 56 | #endif // I2C_H |
1 | ingob | 57 |