Rev 241 | Rev 252 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 241 | Rev 248 | ||
---|---|---|---|
Line 4... | Line 4... | ||
4 | extern volatile u32 I2C1_Timeout; |
4 | extern volatile u32 I2C1_Timeout; |
Line 5... | Line 5... | ||
5 | 5 | ||
6 | // I2C states |
6 | // I2C states |
7 | #define I2C_STATE_UNDEF 0 |
7 | #define I2C_STATE_UNDEF 0 |
- | 8 | #define I2C_STATE_IDLE 1 |
|
8 | #define I2C_STATE_IDLE 1 |
9 | #define I2C_STATE_BUFFBUSY 2 |
9 | #define I2C_STATE_TX_PENDING 2 |
10 | #define I2C_STATE_TX_PENDING 3 |
10 | #define I2C_STATE_TX_PROGRESS 3 |
11 | #define I2C_STATE_TX_PROGRESS 4 |
11 | #define I2C_STATE_RX_PENDING 4 |
12 | #define I2C_STATE_RX_PENDING 5 |
12 | #define I2C_STATE_RX_PROGRESS 5 |
13 | #define I2C_STATE_RX_PROGRESS 6 |
Line 13... | Line 14... | ||
13 | #define I2C_STATE_OFF 6 |
14 | #define I2C_STATE_OFF 7 |
14 | 15 | ||
Line 15... | Line 16... | ||
15 | // current I2C state |
16 | // current I2C state |
Line 16... | Line 17... | ||
16 | extern volatile u8 I2C_State; |
17 | extern volatile u8 I2C_State; |
17 | 18 | ||
18 | #define I2C1_TIMEOUT 500 // 500 ms |
19 | #define I2C1_TIMEOUT 500 // 500 ms |
19 | 20 | ||
20 | // define the sizte of the rx and tx buffer |
21 | // define the size of the rx/tx buffer |
21 | #define I2C_TXBUFFER_LEN 50 |
22 | #define I2C_BUFFER_LEN 150 |
Line 22... | Line 23... | ||
22 | #define I2C_RXBUFFER_LEN 50 |
23 | // transfer buffer should be filled after a successful |
Line 23... | Line 24... | ||
23 | // transfer buffer should be filled before start of transmission only when I2C_State is I2C_STATE_IDLE |
24 | // I2C_LockBuffer(...) and before a start of transmission |
Line 24... | Line 25... | ||
24 | extern volatile u8 I2C_TxBufferSize; |
25 | // initiated by I2C_Transmission(...). |
25 | extern volatile u8 I2C_TxBuffer[]; |
26 | extern volatile u8 I2C_Buffer[]; |
26 | 27 | ||
27 | void I2C1_Init(void); |
28 | void I2C1_Init(void); |
28 | 29 | ||
29 | void I2C1_Deinit(void); |
30 | void I2C1_Deinit(void); |
- | 31 | ||
- | 32 | // the pointer to the rxbuffer handler function |
|
- | 33 | // called by the IRQ routine after all bytes are recieved from slave |
|
30 | 34 | typedef void (*I2C_pRxHandler_t) (u8* pRxBuffer, u8 RxBufferSize); |
|
31 | // the pointer to the rxbuffer handler function |
35 | // Initiate i2c transmission |
- | 36 | // A transmission sends first TxBytes from I2C_Buffer to slave |
|
- | 37 | // and then RxBytes are read from slave to I2C_Buffer |
|
- | 38 | // replacing the byte that have been sent. |
|
- | 39 | // Then the RxHandler function is called to handle the result. |
|
- | 40 | // This function returns imediatly after a start condition. |
|
- | 41 | // returns 1 if a transmission has been started, otherwise 0 |
|
Line 32... | Line 42... | ||
32 | // called by the IRQ routine after all bytes are recieved from slave |
42 | u8 I2C_Transmission(u8 SlaveAddr, u8 TxBytes, I2C_pRxHandler_t pRxHandler, u8 RxBytes); |