Subversion Repositories NaviCtrl

Rev

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