summaryrefslogtreecommitdiff
path: root/bsp/Vango/v85xxp/libraries/VangoV85xxP_standard_peripheral/Include/lib_i2c.h
blob: 280e36ba963856cde6a3a2758008fc80073fcc38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/**
  ******************************************************************************
  * @file    lib_i2c.h 
  * @author  Application Team
  * @version V1.1.0
  * @date    2019-10-28
  * @brief   IIC library.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
#ifndef __LIB_I2C_H
#define __LIB_I2C_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "target.h"
   
typedef struct
{
  uint32_t SlaveAddr;
  uint32_t GeneralCallAck;
  uint32_t AssertAcknowledge;
  uint32_t ClockSource;
} I2C_InitType;

/**************  Bits definition for I2C_CTRL register       ******************/
#define I2C_CTRL_CR_0                 (0x0U << I2C_CTRL_CR0_Pos)                /*!< 0x0000000 */
#define I2C_CTRL_CR_1                 (0x1U << I2C_CTRL_CR0_Pos)                /*!< 0x0000001 */
#define I2C_CTRL_CR_2                 (0x2U << I2C_CTRL_CR0_Pos)                /*!< 0x0000002 */
#define I2C_CTRL_CR_3                 (0x3U << I2C_CTRL_CR0_Pos)                /*!< 0x0000003 */
#define I2C_CTRL_CR_4                 (0x80U << I2C_CTRL_CR0_Pos)               /*!< 0x0000080 */
#define I2C_CTRL_CR_5                 (0x81U << I2C_CTRL_CR0_Pos)               /*!< 0x0000081 */
#define I2C_CTRL_CR_6                 (0x82U << I2C_CTRL_CR0_Pos)               /*!< 0x0000082 */
#define I2C_CTRL_CR_7                 (0x83U << I2C_CTRL_CR0_Pos)               /*!< 0x0000083 */
                                  
/**************  Bits definition for I2C_STS register        ******************/
#define I2C_STS_STS_0x00              (0x0U << I2C_STS_STS_Pos)                /*!< 0x0000000 */
#define I2C_STS_STS_0x08              (0x1U << I2C_STS_STS_Pos)                /*!< 0x0000008 */
#define I2C_STS_STS_0x10              (0x2U << I2C_STS_STS_Pos)                /*!< 0x0000010 */
#define I2C_STS_STS_0x18              (0x3U << I2C_STS_STS_Pos)                /*!< 0x0000018 */
#define I2C_STS_STS_0x20              (0x4U << I2C_STS_STS_Pos)                /*!< 0x0000020 */
#define I2C_STS_STS_0x28              (0x5U << I2C_STS_STS_Pos)                /*!< 0x0000028 */
#define I2C_STS_STS_0x30              (0x6U << I2C_STS_STS_Pos)                /*!< 0x0000030 */
#define I2C_STS_STS_0x38              (0x7U << I2C_STS_STS_Pos)                /*!< 0x0000038 */
#define I2C_STS_STS_0x40              (0x8U << I2C_STS_STS_Pos)                /*!< 0x0000040 */
#define I2C_STS_STS_0x48              (0x9U << I2C_STS_STS_Pos)                /*!< 0x0000048 */
#define I2C_STS_STS_0x50              (0xAU << I2C_STS_STS_Pos)                /*!< 0x0000050 */
#define I2C_STS_STS_0x58              (0xBU << I2C_STS_STS_Pos)                /*!< 0x0000058 */
#define I2C_STS_STS_0x60              (0xCU << I2C_STS_STS_Pos)                /*!< 0x0000060 */
#define I2C_STS_STS_0x68              (0xDU << I2C_STS_STS_Pos)                /*!< 0x0000068 */
#define I2C_STS_STS_0x70              (0xEU << I2C_STS_STS_Pos)                /*!< 0x0000070 */
#define I2C_STS_STS_0x78              (0xFU << I2C_STS_STS_Pos)                /*!< 0x0000078 */
#define I2C_STS_STS_0x80              (0x10U << I2C_STS_STS_Pos)               /*!< 0x0000080 */
#define I2C_STS_STS_0x88              (0x11U << I2C_STS_STS_Pos)               /*!< 0x0000088 */
#define I2C_STS_STS_0x90              (0x12U << I2C_STS_STS_Pos)               /*!< 0x0000090 */
#define I2C_STS_STS_0x98              (0x13U << I2C_STS_STS_Pos)               /*!< 0x0000098 */
#define I2C_STS_STS_0xA0              (0x14U << I2C_STS_STS_Pos)               /*!< 0x00000A0 */
#define I2C_STS_STS_0xA8              (0x15U << I2C_STS_STS_Pos)               /*!< 0x00000A8 */
#define I2C_STS_STS_0xB0              (0x16U << I2C_STS_STS_Pos)               /*!< 0x00000B0 */
#define I2C_STS_STS_0xB8              (0x17U << I2C_STS_STS_Pos)               /*!< 0x00000B8 */
#define I2C_STS_STS_0xC0              (0x18U << I2C_STS_STS_Pos)               /*!< 0x00000C0 */
#define I2C_STS_STS_0xC8              (0x19U << I2C_STS_STS_Pos)               /*!< 0x00000C8 */
#define I2C_STS_STS_0xF8              (0x1FU << I2C_STS_STS_Pos)               /*!< 0x00000F8 */

//GeneralCallAck
#define I2C_GENERALCALLACK_ENABLE   I2C_ADDR_GC
#define I2C_GENERALCALLACK_DISABLE  0
//AssertAcknowledge
#define I2C_ASSERTACKNOWLEDGE_ENABLE    I2C_CTRL_AA
#define I2C_ASSERTACKNOWLEDGE_DISABLE   0
//ClockSource
#define I2C_CLOCKSOURCE_APBD256     I2C_CTRL_CR_0
#define I2C_CLOCKSOURCE_APBD224     I2C_CTRL_CR_1
#define I2C_CLOCKSOURCE_APBD192     I2C_CTRL_CR_2
#define I2C_CLOCKSOURCE_APBD160     I2C_CTRL_CR_3
#define I2C_CLOCKSOURCE_APBD960     I2C_CTRL_CR_4
#define I2C_CLOCKSOURCE_APBD120     I2C_CTRL_CR_5
#define I2C_CLOCKSOURCE_APBD60      I2C_CTRL_CR_6
#define I2C_CLOCKSOURCE_TIM3OFD8    I2C_CTRL_CR_7

#define I2C_CTRL_CR   (0x83)
typedef struct
{
  uint16_t SlaveAddr;
  uint8_t SubAddrType;
  uint32_t PageRange;
  uint32_t SubAddress;
  uint8_t *pBuffer;
  uint32_t Length;
} I2C_WRType;
//SubAddrType
#define I2C_SUBADDR_1BYTE   (1)
#define I2C_SUBADDR_2BYTE   (2)
#define I2C_SUBADDR_OTHER   (3)

//remap
#define I2C_REMAP_ENABLE    (1)
#define I2C_REMAP_DISABLE   (0)

/* Private macros ------------------------------------------------------------*/

#define IS_I2C_GC(__GC__)  (((__GC__) == I2C_GENERALCALLACK_ENABLE) ||\
                            ((__GC__) == I2C_GENERALCALLACK_DISABLE))

#define IS_I2C_AA(__AA__)  (((__AA__) == I2C_ASSERTACKNOWLEDGE_ENABLE) ||\
                            ((__AA__) == I2C_ASSERTACKNOWLEDGE_DISABLE))

#define IS_I2C_CLKSRC(__CLKSRC__)  (((__CLKSRC__) == I2C_CLOCKSOURCE_APBD256) ||\
                                    ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD224) ||\
                                    ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD192) ||\
                                    ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD160) ||\
                                    ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD960) ||\
                                    ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD120) ||\
                                    ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD60)  ||\
                                    ((__CLKSRC__) == I2C_CLOCKSOURCE_TIM3OFD8))

#define I2C_SUBADDR_TYPE(__TYPE__)  (((__TYPE__) == I2C_SUBADDR_1BYTE) ||\
                                     ((__TYPE__) == I2C_SUBADDR_2BYTE) ||\
                                     ((__TYPE__) == I2C_SUBADDR_OTHER))

/****************************** I2C Instances *********************************/
#define IS_I2C_ALL_INSTANCE(INSTANCE) ((INSTANCE) == I2C)


/* Exported Functions ------------------------------------------------------- */
/* I2C Exported Functions Group1: 
                                   (De)Initialization ------------------------*/
void I2C_DeInit(uint32_t remap);
void I2C_StructInit(I2C_InitType *InitStruct);
void I2C_Init(I2C_InitType *InitStruct);
/* I2C Exported Functions Group2: 
                                   Interrupt ---------------------------------*/
void I2C_INTConfig(uint32_t NewState);
uint8_t I2C_GetINTStatus(void);
void I2C_ClearINTStatus(void);
/* I2C Exported Functions Group3: 
                                   Transfer datas ----------------------------*/
uint16_t I2C_MasterReadBytes(I2C_WRType *InitStruct);
uint16_t I2C_MasterWriteBytes(I2C_WRType *InitStruct);
/* I2C Exported Functions Group4: 
                                   MISC Configuration ------------------------*/
void I2C_Cmd(uint32_t NewState);

/* I2C Exported Functions Group5: 
                                   Others ------------------------------------*/
void I2C_AssertAcknowledgeConfig(uint32_t NewState);
uint8_t I2C_ReceiveData(void);
void I2C_SendData(uint8_t Dat);
void I2C_GenerateSTART(uint32_t NewState);
void I2C_GenerateSTOP(uint32_t NewState);
uint8_t I2C_GetStatusCode(void);


#ifdef __cplusplus
}
#endif
     
#endif  /* __LIB_I2C_H */

/*********************************** END OF FILE ******************************/