Rev 189 | Rev 248 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 189 | Rev 241 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #ifndef __I2C_H |
1 | #ifndef __I2C_H |
2 | #define __I2C_H |
2 | #define __I2C_H |
Line 3... | Line -... | ||
3 | - | ||
4 | #define I2C_CMD_VERSION 0x01 |
- | |
5 | #define I2C_CMD_READ_MAG 0x02 |
- | |
6 | #define I2C_CMD_READ_HEADING 0x03 |
- | |
7 | #define I2C_CMD_WRITE_CAL 0x04 |
- | |
8 | - | ||
9 | - | ||
10 | typedef struct |
- | |
11 | { |
- | |
12 | u8 Major; |
- | |
13 | u8 Minor; |
- | |
14 | u8 Patch; |
- | |
15 | u8 Compatible; |
- | |
16 | } __attribute__((packed)) I2C_Version_t; |
- | |
17 | - | ||
18 | typedef struct |
- | |
19 | { |
- | |
20 | s16 MagX; |
- | |
21 | s16 MagY; |
- | |
22 | s16 MagZ; |
- | |
23 | } __attribute__((packed)) I2C_Mag_t; |
- | |
24 | - | ||
25 | - | ||
26 | typedef struct |
- | |
27 | { |
- | |
28 | s16 Nick; |
- | |
29 | s16 Roll; |
- | |
30 | } __attribute__((packed)) I2C_WriteAttitude_t; |
- | |
31 | - | ||
32 | - | ||
33 | typedef struct |
- | |
34 | { |
- | |
35 | u8 CalByte; |
- | |
36 | u8 Dummy1; |
- | |
37 | u8 Dummy2; |
- | |
38 | } __attribute__((packed)) I2C_Cal_t; |
- | |
39 | - | ||
40 | typedef struct |
- | |
41 | { |
- | |
42 | s16 Heading; |
- | |
43 | } __attribute__((packed)) I2C_Heading_t; |
- | |
44 | 3 | ||
Line -... | Line 4... | ||
- | 4 | extern volatile u32 I2C1_Timeout; |
|
- | 5 | ||
- | 6 | // I2C states |
|
- | 7 | #define I2C_STATE_UNDEF 0 |
|
- | 8 | #define I2C_STATE_IDLE 1 |
|
- | 9 | #define I2C_STATE_TX_PENDING 2 |
|
- | 10 | #define I2C_STATE_TX_PROGRESS 3 |
|
- | 11 | #define I2C_STATE_RX_PENDING 4 |
|
- | 12 | #define I2C_STATE_RX_PROGRESS 5 |
|
- | 13 | #define I2C_STATE_OFF 6 |
|
45 | extern volatile u32 I2C1_Timeout; |
14 | |
- | 15 | // current I2C state |
|
- | 16 | extern volatile u8 I2C_State; |
|
- | 17 | ||
- | 18 | #define I2C1_TIMEOUT 500 // 500 ms |
|
- | 19 | ||
- | 20 | // define the sizte of the rx and tx buffer |
|
- | 21 | #define I2C_TXBUFFER_LEN 50 |
|
46 | 22 | #define I2C_RXBUFFER_LEN 50 |
|
47 | extern volatile I2C_Heading_t I2C_Heading; |
23 | // transfer buffer should be filled before start of transmission only when I2C_State is I2C_STATE_IDLE |
Line 48... | Line 24... | ||
48 | extern volatile I2C_Mag_t I2C_Mag; |
24 | extern volatile u8 I2C_TxBufferSize; |
- | 25 | extern volatile u8 I2C_TxBuffer[]; |
|
49 | extern volatile I2C_Version_t MK3MAG_Version; |
26 | |
- | 27 | void I2C1_Init(void); |
|
50 | 28 | ||
- | 29 | void I2C1_Deinit(void); |
|
51 | void I2C1_Init(void); |
30 | |
52 | void I2C1_Deinit(void); |
31 | // the pointer to the rxbuffer handler function |
- | 32 | // called by the IRQ routine after all bytes are recieved from slave |
|
- | 33 | typedef void (*I2C_pRxHandler_t) (u8* pRxBuffer, u8 RxBufferSize); |
|
- | 34 | // initiate i2c transmission |
|
- | 35 | // first all bytes from TxBuffer are send to slave |
|
Line 53... | Line 36... | ||
53 | void I2C1_SendCommand(u8 command); |
36 | // and then all bytes are read from slave and the RxHandler function is called |