1 /*
2  * Copyright (c) 2006-2022, RT-Thread Development Team
3  * Copyright (c) 2022-2024, Xiaohua Semiconductor Co., Ltd.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  *
7  * Change Logs:
8  * Date           Author       Notes
9  * 2024-02-20     CDT          first version
10  */
11 
12 #ifndef __I2C_CONFIG_H__
13 #define __I2C_CONFIG_H__
14 
15 #include <rtthread.h>
16 #include "irq_config.h"
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #if defined(BSP_USING_I2C1)
23 #ifndef I2C1_CONFIG
24 #define I2C1_CONFIG                                             \
25     {                                                           \
26         .name     = "i2c1",                                     \
27         .Instance = CM_I2C1,                                    \
28         .clock    = FCG1_PERIPH_I2C1,                           \
29         .baudrate = 100000UL,                                   \
30         .timeout  = 10000UL,                                    \
31     }
32 #endif /* I2C1_CONFIG */
33 #endif
34 
35 #if defined(BSP_I2C1_USING_DMA)
36 #ifndef I2C1_TX_DMA_CONFIG
37 #define I2C1_TX_DMA_CONFIG                                      \
38     {                                                           \
39         .Instance       = I2C1_TX_DMA_INSTANCE,                 \
40         .channel        = I2C1_TX_DMA_CHANNEL,                  \
41         .clock          = I2C1_TX_DMA_CLOCK,                    \
42         .trigger_select = I2C1_TX_DMA_TRIG_SELECT,              \
43         .trigger_event  = EVT_SRC_I2C1_TEI,                     \
44         .flag           = I2C1_TX_DMA_TRANS_FLAG,               \
45         .irq_config     =                                       \
46         {                                                       \
47             .irq_num    = I2C1_TX_DMA_IRQn,                     \
48             .irq_prio   = I2C1_TX_DMA_INT_PRIO,                 \
49             .int_src    = I2C1_TX_DMA_INT_SRC,                  \
50         },                                                      \
51     }
52 #endif /* I2C1_TX_DMA_CONFIG */
53 
54 #ifndef I2C1_RX_DMA_CONFIG
55 #define I2C1_RX_DMA_CONFIG                                      \
56     {                                                           \
57         .Instance       = I2C1_RX_DMA_INSTANCE,                 \
58         .channel        = I2C1_RX_DMA_CHANNEL,                  \
59         .clock          = I2C1_RX_DMA_CLOCK,                    \
60         .trigger_select = I2C1_RX_DMA_TRIG_SELECT,              \
61         .trigger_event  = EVT_SRC_I2C1_RXI,                     \
62         .flag           = I2C1_RX_DMA_TRANS_FLAG,               \
63         .irq_config     =                                       \
64         {                                                       \
65             .irq_num    = I2C1_RX_DMA_IRQn,                     \
66             .irq_prio   = I2C1_RX_DMA_INT_PRIO,                 \
67             .int_src    = I2C1_RX_DMA_INT_SRC,                  \
68         },                                                      \
69     }
70 #endif /* I2C1_RX_DMA_CONFIG */
71 #endif /* BSP_I2C1_USING_DMA */
72 
73 #if defined(BSP_USING_I2C2)
74 #ifndef I2C2_CONFIG
75 #define I2C2_CONFIG                                             \
76     {                                                           \
77         .name     = "i2c2",                                     \
78         .Instance = CM_I2C2,                                    \
79         .clock    = FCG1_PERIPH_I2C2,                           \
80         .baudrate = 100000UL,                                   \
81         .timeout  = 10000UL,                                    \
82     }
83 #endif /* I2C2_CONFIG */
84 
85 #if defined(BSP_I2C2_USING_DMA)
86 #ifndef I2C2_TX_DMA_CONFIG
87 #define I2C2_TX_DMA_CONFIG                                      \
88     {                                                           \
89         .Instance       = I2C2_TX_DMA_INSTANCE,                 \
90         .channel        = I2C2_TX_DMA_CHANNEL,                  \
91         .clock          = I2C2_TX_DMA_CLOCK,                    \
92         .trigger_select = I2C2_TX_DMA_TRIG_SELECT,              \
93         .trigger_event  = EVT_SRC_I2C2_TEI,                     \
94         .flag           = I2C2_TX_DMA_TRANS_FLAG,               \
95         .irq_config     =                                       \
96         {                                                       \
97             .irq_num    = I2C2_TX_DMA_IRQn,                     \
98             .irq_prio   = I2C2_TX_DMA_INT_PRIO,                 \
99             .int_src    = I2C2_TX_DMA_INT_SRC,                  \
100         },                                                      \
101     }
102 #endif /* I2C2_TX_DMA_CONFIG */
103 
104 #ifndef I2C2_RX_DMA_CONFIG
105 #define I2C2_RX_DMA_CONFIG                                      \
106     {                                                           \
107         .Instance       = I2C2_RX_DMA_INSTANCE,                 \
108         .channel        = I2C2_RX_DMA_CHANNEL,                  \
109         .clock          = I2C2_RX_DMA_CLOCK,                    \
110         .trigger_select = I2C2_RX_DMA_TRIG_SELECT,              \
111         .trigger_event  = EVT_SRC_I2C2_RXI,                     \
112         .flag           = I2C2_RX_DMA_TRANS_FLAG,               \
113         .irq_config     =                                       \
114         {                                                       \
115             .irq_num    = I2C2_RX_DMA_IRQn,                     \
116             .irq_prio   = I2C2_RX_DMA_INT_PRIO,                 \
117             .int_src    = I2C2_RX_DMA_INT_SRC,                  \
118         },                                                      \
119     }
120 #endif /* I2C2_RX_DMA_CONFIG */
121 #endif /* BSP_I2C2_USING_DMA */
122 #endif
123 
124 #if defined(BSP_USING_I2C3)
125 #ifndef I2C3_CONFIG
126 #define I2C3_CONFIG                                             \
127     {                                                           \
128         .name     = "i2c3",                                     \
129         .Instance = CM_I2C3,                                    \
130         .clock    = FCG1_PERIPH_I2C3,                           \
131         .baudrate = 100000UL,                                   \
132         .timeout  = 10000UL,                                    \
133     }
134 #endif /* I2C3_CONFIG */
135 
136 #if defined(BSP_I2C3_USING_DMA)
137 #ifndef I2C3_TX_DMA_CONFIG
138 #define I2C3_TX_DMA_CONFIG                                      \
139     {                                                           \
140         .Instance       = I2C3_TX_DMA_INSTANCE,                 \
141         .channel        = I2C3_TX_DMA_CHANNEL,                  \
142         .clock          = I2C3_TX_DMA_CLOCK,                    \
143         .trigger_select = I2C3_TX_DMA_TRIG_SELECT,              \
144         .trigger_event  = EVT_SRC_I2C3_TEI,                     \
145         .flag           = I2C3_TX_DMA_TRANS_FLAG,               \
146         .irq_config     =                                       \
147         {                                                       \
148             .irq_num    = I2C3_TX_DMA_IRQn,                     \
149             .irq_prio   = I2C3_TX_DMA_INT_PRIO,                 \
150             .int_src    = I2C3_TX_DMA_INT_SRC,                  \
151         },                                                      \
152     }
153 #endif /* I2C3_TX_DMA_CONFIG */
154 
155 #ifndef I2C3_RX_DMA_CONFIG
156 #define I2C3_RX_DMA_CONFIG                                      \
157     {                                                           \
158         .Instance       = I2C3_RX_DMA_INSTANCE,                 \
159         .channel        = I2C3_RX_DMA_CHANNEL,                  \
160         .clock          = I2C3_RX_DMA_CLOCK,                    \
161         .trigger_select = I2C3_RX_DMA_TRIG_SELECT,              \
162         .trigger_event  = EVT_SRC_I2C3_RXI,                     \
163         .flag           = I2C3_RX_DMA_TRANS_FLAG,               \
164         .irq_config     =                                       \
165         {                                                       \
166             .irq_num    = I2C3_RX_DMA_IRQn,                     \
167             .irq_prio   = I2C3_RX_DMA_INT_PRIO,                 \
168             .int_src    = I2C3_RX_DMA_INT_SRC,                  \
169         },                                                      \
170     }
171 #endif /* I2C3_RX_DMA_CONFIG */
172 #endif /* BSP_I2C3_USING_DMA */
173 #endif
174 
175 #if defined(BSP_USING_I2C4)
176 #ifndef I2C4_CONFIG
177 #define I2C4_CONFIG                                             \
178     {                                                           \
179         .name     = "i2c4",                                     \
180         .Instance = CM_I2C4,                                    \
181         .clock    = FCG1_PERIPH_I2C4,                           \
182         .baudrate = 100000UL,                                   \
183         .timeout  = 10000UL,                                    \
184     }
185 #endif /* I2C4_CONFIG */
186 
187 #if defined(BSP_I2C4_USING_DMA)
188 #ifndef I2C4_TX_DMA_CONFIG
189 #define I2C4_TX_DMA_CONFIG                                      \
190     {                                                           \
191         .Instance       = I2C4_TX_DMA_INSTANCE,                 \
192         .channel        = I2C4_TX_DMA_CHANNEL,                  \
193         .clock          = I2C4_TX_DMA_CLOCK,                    \
194         .trigger_select = I2C4_TX_DMA_TRIG_SELECT,              \
195         .trigger_event  = EVT_SRC_I2C4_TEI,                     \
196         .flag           = I2C4_TX_DMA_TRANS_FLAG,               \
197         .irq_config     =                                       \
198         {                                                       \
199             .irq_num    = I2C4_TX_DMA_IRQn,                     \
200             .irq_prio   = I2C4_TX_DMA_INT_PRIO,                 \
201             .int_src    = I2C4_TX_DMA_INT_SRC,                  \
202         },                                                      \
203     }
204 #endif /* I2C4_TX_DMA_CONFIG */
205 
206 #ifndef I2C4_RX_DMA_CONFIG
207 #define I2C4_RX_DMA_CONFIG                                      \
208     {                                                           \
209         .Instance       = I2C4_RX_DMA_INSTANCE,                 \
210         .channel        = I2C4_RX_DMA_CHANNEL,                  \
211         .clock          = I2C4_RX_DMA_CLOCK,                    \
212         .trigger_select = I2C4_RX_DMA_TRIG_SELECT,              \
213         .trigger_event  = EVT_SRC_I2C4_RXI,                     \
214         .flag           = I2C4_RX_DMA_TRANS_FLAG,               \
215         .irq_config     =                                       \
216         {                                                       \
217             .irq_num    = I2C4_RX_DMA_IRQn,                     \
218             .irq_prio   = I2C4_RX_DMA_INT_PRIO,                 \
219             .int_src    = I2C4_RX_DMA_INT_SRC,                  \
220         },                                                      \
221     }
222 #endif /* I2C4_RX_DMA_CONFIG */
223 #endif /* BSP_I2C4_USING_DMA */
224 #endif
225 
226 #if defined(BSP_USING_I2C5)
227 #ifndef I2C5_CONFIG
228 #define I2C5_CONFIG                                             \
229     {                                                           \
230         .name     = "i2c5",                                     \
231         .Instance = CM_I2C5,                                    \
232         .clock    = FCG1_PERIPH_I2C5,                           \
233         .baudrate = 100000UL,                                   \
234         .timeout  = 10000UL,                                    \
235     }
236 #endif /* I2C5_CONFIG */
237 
238 #if defined(BSP_I2C5_USING_DMA)
239 #ifndef I2C5_TX_DMA_CONFIG
240 #define I2C5_TX_DMA_CONFIG                                      \
241     {                                                           \
242         .Instance       = I2C5_TX_DMA_INSTANCE,                 \
243         .channel        = I2C5_TX_DMA_CHANNEL,                  \
244         .clock          = I2C5_TX_DMA_CLOCK,                    \
245         .trigger_select = I2C5_TX_DMA_TRIG_SELECT,              \
246         .trigger_event  = EVT_SRC_I2C5_TEI,                     \
247         .flag           = I2C5_TX_DMA_TRANS_FLAG,               \
248         .irq_config     =                                       \
249         {                                                       \
250             .irq_num    = I2C5_TX_DMA_IRQn,                     \
251             .irq_prio   = I2C5_TX_DMA_INT_PRIO,                 \
252             .int_src    = I2C5_TX_DMA_INT_SRC,                  \
253         },                                                      \
254     }
255 #endif /* I2C5_TX_DMA_CONFIG */
256 
257 #ifndef I2C5_RX_DMA_CONFIG
258 #define I2C5_RX_DMA_CONFIG                                      \
259     {                                                           \
260         .Instance       = I2C5_RX_DMA_INSTANCE,                 \
261         .channel        = I2C5_RX_DMA_CHANNEL,                  \
262         .clock          = I2C5_RX_DMA_CLOCK,                    \
263         .trigger_select = I2C5_RX_DMA_TRIG_SELECT,              \
264         .trigger_event  = EVT_SRC_I2C5_RXI,                     \
265         .flag           = I2C5_RX_DMA_TRANS_FLAG,               \
266         .irq_config     =                                       \
267         {                                                       \
268             .irq_num    = I2C5_RX_DMA_IRQn,                     \
269             .irq_prio   = I2C5_RX_DMA_INT_PRIO,                 \
270             .int_src    = I2C5_RX_DMA_INT_SRC,                  \
271         },                                                      \
272     }
273 #endif /* I2C5_RX_DMA_CONFIG */
274 #endif /* BSP_I2C5_USING_DMA */
275 #endif
276 
277 #if defined(BSP_USING_I2C6)
278 #ifndef I2C6_CONFIG
279 #define I2C6_CONFIG                                             \
280     {                                                           \
281         .name     = "i2c6",                                     \
282         .Instance = CM_I2C6,                                    \
283         .clock    = FCG1_PERIPH_I2C6,                           \
284         .baudrate = 100000UL,                                   \
285         .timeout  = 10000UL,                                    \
286     }
287 #endif /* I2C6_CONFIG */
288 
289 #if defined(BSP_I2C6_USING_DMA)
290 #ifndef I2C6_TX_DMA_CONFIG
291 #define I2C6_TX_DMA_CONFIG                                      \
292     {                                                           \
293         .Instance       = I2C6_TX_DMA_INSTANCE,                 \
294         .channel        = I2C6_TX_DMA_CHANNEL,                  \
295         .clock          = I2C6_TX_DMA_CLOCK,                    \
296         .trigger_select = I2C6_TX_DMA_TRIG_SELECT,              \
297         .trigger_event  = EVT_SRC_I2C6_TEI,                     \
298         .flag           = I2C6_TX_DMA_TRANS_FLAG,               \
299         .irq_config     =                                       \
300         {                                                       \
301             .irq_num    = I2C6_TX_DMA_IRQn,                     \
302             .irq_prio   = I2C6_TX_DMA_INT_PRIO,                 \
303             .int_src    = I2C6_TX_DMA_INT_SRC,                  \
304         },                                                      \
305     }
306 #endif /* I2C6_TX_DMA_CONFIG */
307 
308 #ifndef I2C6_RX_DMA_CONFIG
309 #define I2C6_RX_DMA_CONFIG                                      \
310     {                                                           \
311         .Instance       = I2C6_RX_DMA_INSTANCE,                 \
312         .channel        = I2C6_RX_DMA_CHANNEL,                  \
313         .clock          = I2C6_RX_DMA_CLOCK,                    \
314         .trigger_select = I2C6_RX_DMA_TRIG_SELECT,              \
315         .trigger_event  = EVT_SRC_I2C6_RXI,                     \
316         .flag           = I2C6_RX_DMA_TRANS_FLAG,               \
317         .irq_config     =                                       \
318         {                                                       \
319             .irq_num    = I2C6_RX_DMA_IRQn,                     \
320             .irq_prio   = I2C6_RX_DMA_INT_PRIO,                 \
321             .int_src    = I2C6_RX_DMA_INT_SRC,                  \
322         },                                                      \
323     }
324 #endif /* I2C6_RX_DMA_CONFIG */
325 #endif /* BSP_I2C6_USING_DMA */
326 #endif
327 
328 #ifdef __cplusplus
329 }
330 #endif
331 
332 #endif
333