HF Interface Wrapper
0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
McuSelect.h
Go to the documentation of this file.
1
16
#pragma once
17
18
//==============================================================================
19
// USAGE INSTRUCTIONS - HOW TO SELECT YOUR MCU
20
//==============================================================================
21
/*
22
* STEP 1: Select your target MCU by uncommenting exactly ONE define below
23
* STEP 2: Comment out all other MCU defines (they should have // in front)
24
* STEP 3: Build your project - all platform-specific code will be configured automatically
25
*
26
* EXAMPLES:
27
* - For ESP32-C6: uncomment "#define HF_TARGET_MCU_ESP32C6"
28
* - For ESP32: uncomment "#define HF_TARGET_MCU_ESP32"
29
* - For STM32F4: uncomment "#define HF_TARGET_MCU_STM32F4"
30
*
31
* NOTE: If you get "Multiple target MCUs" error, you have more than one uncommented.
32
* If you get "No target MCU" error, you need to uncomment exactly one.
33
*/
34
35
//==============================================================================
36
// CENTRAL MCU SELECTION - SELECT EXACTLY ONE MCU
37
//==============================================================================
38
// Auto-detect from ESP-IDF build system (CONFIG_IDF_TARGET_*).
39
// If building with ESP-IDF, the correct target is set automatically.
40
// For non-IDF builds, uncomment exactly ONE define below.
41
// Uses #ifndef guards so CMake -D definitions take priority without warnings.
42
43
#if defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(HF_TARGET_MCU_ESP32C6)
44
#define HF_TARGET_MCU_ESP32C6
45
#elif defined(CONFIG_IDF_TARGET_ESP32) && !defined(HF_TARGET_MCU_ESP32)
46
#define HF_TARGET_MCU_ESP32
47
#elif defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(HF_TARGET_MCU_ESP32S2)
48
#define HF_TARGET_MCU_ESP32S2
49
#elif defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(HF_TARGET_MCU_ESP32S3)
50
#define HF_TARGET_MCU_ESP32S3
51
#elif defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(HF_TARGET_MCU_ESP32C3)
52
#define HF_TARGET_MCU_ESP32C3
53
#elif defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(HF_TARGET_MCU_ESP32C2)
54
#define HF_TARGET_MCU_ESP32C2
55
#elif defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(HF_TARGET_MCU_ESP32H2)
56
#define HF_TARGET_MCU_ESP32H2
57
#endif
58
59
// Fallback: if nothing auto-detected and no manual override, leave unset.
60
// The "No MCU Selected" section below will handle the NONE case or error.
61
// NOTE: For ESP-IDF builds, auto-detection above always succeeds.
62
63
// Manual override (uncomment ONE to override auto-detection):
64
// #define HF_TARGET_MCU_ESP32C6 // ESP32-C6 RISC-V MCU
65
// #define HF_TARGET_MCU_ESP32 // ESP32 Classic Xtensa MCU
66
// #define HF_TARGET_MCU_ESP32S2 // ESP32-S2 Xtensa LX7 MCU
67
// #define HF_TARGET_MCU_ESP32S3 // ESP32-S3 Xtensa LX7 MCU
68
// #define HF_TARGET_MCU_ESP32C3 // ESP32-C3 RISC-V MCU
69
// #define HF_TARGET_MCU_ESP32C2 // ESP32-C2 RISC-V MCU
70
// #define HF_TARGET_MCU_ESP32H2 // ESP32-H2 RISC-V MCU
71
// #define HF_TARGET_MCU_STM32F4 // STM32F4 series ARM Cortex-M4
72
// #define HF_TARGET_MCU_STM32H7 // STM32H7 series ARM Cortex-M7
73
// #define HF_TARGET_MCU_RP2040 // Raspberry Pi Pico RP2040
74
// #define HF_TARGET_MCU_NONE // No MCU — software-only / unit-test build
75
76
// Optional thread safety support using RTOS-based mutexes
77
// Uncomment to enable mutex protection in MCU drivers
78
#ifndef HF_THREAD_SAFE
79
#define HF_THREAD_SAFE
// Enable thread safety for SPI, I2C, UART operations
80
#endif
81
82
//==============================================================================
83
// AUTOMATIC PLATFORM CONFIGURATION BASED ON SELECTION
84
//==============================================================================
85
86
// ESP32-C6 Configuration
87
#ifdef HF_TARGET_MCU_ESP32C6
88
#ifndef HF_MCU_ESP32C6
89
#define HF_MCU_ESP32C6
90
#endif
91
#ifndef HF_MCU_FAMILY_ESP32
92
#define HF_MCU_FAMILY_ESP32
93
#endif
94
#define HF_MCU_NAME "ESP32-C6"
95
#define HF_MCU_ARCHITECTURE "RISC-V RV32IMAC"
96
#define HF_MCU_VARIANT_C6
97
98
// ESP32 Classic Configuration
99
#elif defined(HF_TARGET_MCU_ESP32)
100
#ifndef HF_MCU_ESP32
101
#define HF_MCU_ESP32
102
#endif
103
#ifndef HF_MCU_FAMILY_ESP32
104
#define HF_MCU_FAMILY_ESP32
105
#endif
106
#define HF_MCU_NAME "ESP32"
107
#define HF_MCU_ARCHITECTURE "Xtensa LX6"
108
#define HF_MCU_VARIANT_CLASSIC
109
110
// ESP32-S2 Configuration
111
#elif defined(HF_TARGET_MCU_ESP32S2)
112
#ifndef HF_MCU_ESP32S2
113
#define HF_MCU_ESP32S2
114
#endif
115
#ifndef HF_MCU_FAMILY_ESP32
116
#define HF_MCU_FAMILY_ESP32
117
#endif
118
#define HF_MCU_NAME "ESP32-S2"
119
#define HF_MCU_ARCHITECTURE "Xtensa LX7"
120
#define HF_MCU_VARIANT_S2
121
122
// ESP32-S3 Configuration
123
#elif defined(HF_TARGET_MCU_ESP32S3)
124
#ifndef HF_MCU_ESP32S3
125
#define HF_MCU_ESP32S3
126
#endif
127
#ifndef HF_MCU_FAMILY_ESP32
128
#define HF_MCU_FAMILY_ESP32
129
#endif
130
#define HF_MCU_NAME "ESP32-S3"
131
#define HF_MCU_ARCHITECTURE "Xtensa LX7"
132
#define HF_MCU_VARIANT_S3
133
134
// ESP32-C3 Configuration
135
#elif defined(HF_TARGET_MCU_ESP32C3)
136
#ifndef HF_MCU_ESP32C3
137
#define HF_MCU_ESP32C3
138
#endif
139
#ifndef HF_MCU_FAMILY_ESP32
140
#define HF_MCU_FAMILY_ESP32
141
#endif
142
#define HF_MCU_NAME "ESP32-C3"
143
#define HF_MCU_ARCHITECTURE "RISC-V RV32IMC"
144
#define HF_MCU_VARIANT_C3
145
146
// ESP32-C2 Configuration
147
#elif defined(HF_TARGET_MCU_ESP32C2)
148
#ifndef HF_MCU_ESP32C2
149
#define HF_MCU_ESP32C2
150
#endif
151
#ifndef HF_MCU_FAMILY_ESP32
152
#define HF_MCU_FAMILY_ESP32
153
#endif
154
#define HF_MCU_NAME "ESP32-C2"
155
#define HF_MCU_ARCHITECTURE "RISC-V RV32IMC"
156
#define HF_MCU_VARIANT_C2
157
158
// ESP32-H2 Configuration
159
#elif defined(HF_TARGET_MCU_ESP32H2)
160
#ifndef HF_MCU_ESP32H2
161
#define HF_MCU_ESP32H2
162
#endif
163
#ifndef HF_MCU_FAMILY_ESP32
164
#define HF_MCU_FAMILY_ESP32
165
#endif
166
#define HF_MCU_NAME "ESP32-H2"
167
#define HF_MCU_ARCHITECTURE "RISC-V RV32IMC"
168
#define HF_MCU_VARIANT_H2
169
170
// STM32F4 Configuration — stub implementations in inc/mcu/stm32/
171
#elif defined(HF_TARGET_MCU_STM32F4)
172
#define HF_MCU_STM32F4
173
#define HF_MCU_FAMILY_STM32
174
#define HF_MCU_NAME "STM32F4"
175
#define HF_MCU_ARCHITECTURE "ARM Cortex-M4"
176
#define HF_MCU_VARIANT_F4
177
178
// STM32H7 Configuration — stub implementations in inc/mcu/stm32/
179
#elif defined(HF_TARGET_MCU_STM32H7)
180
#define HF_MCU_STM32H7
181
#define HF_MCU_FAMILY_STM32
182
#define HF_MCU_NAME "STM32H7"
183
#define HF_MCU_ARCHITECTURE "ARM Cortex-M7"
184
#define HF_MCU_VARIANT_H7
185
186
// RP2040 Configuration — stub implementations (future)
187
#elif defined(HF_TARGET_MCU_RP2040)
188
#define HF_MCU_RP2040
189
#define HF_MCU_FAMILY_RP2040
190
#define HF_MCU_NAME "RP2040"
191
#define HF_MCU_ARCHITECTURE "ARM Cortex-M0+"
192
193
// NONE Configuration — software-only / unit-test / host build
194
#elif defined(HF_TARGET_MCU_NONE)
195
#define HF_MCU_NONE
196
#define HF_MCU_FAMILY_NONE
197
#define HF_MCU_NAME "None (software-only)"
198
#define HF_MCU_ARCHITECTURE "Host"
199
200
// No MCU Selected - Error
201
#else
202
#error "No MCU selected! Define HF_TARGET_MCU_* via CMake or uncomment one in McuSelect.h"
203
#endif
204
205
//==============================================================================
206
// PLATFORM VALIDATION - ENSURE ONLY ONE TARGET IS SELECTED
207
//==============================================================================
208
209
// Count the number of selected target MCUs (portable version)
210
#if defined(HF_TARGET_MCU_ESP32C6) + defined(HF_TARGET_MCU_ESP32) + \
211
defined(HF_TARGET_MCU_ESP32S2) + defined(HF_TARGET_MCU_ESP32S3) + \
212
defined(HF_TARGET_MCU_ESP32C3) + defined(HF_TARGET_MCU_ESP32C2) + \
213
defined(HF_TARGET_MCU_ESP32H2) + defined(HF_TARGET_MCU_STM32F4) + \
214
defined(HF_TARGET_MCU_STM32H7) + defined(HF_TARGET_MCU_RP2040) + \
215
defined(HF_TARGET_MCU_NONE) > \
216
1
217
#error \
218
"Multiple target MCUs are selected. Please define exactly ONE HF_TARGET_MCU_* macro."
219
#elif !defined(HF_TARGET_MCU_ESP32C6) && !defined(HF_TARGET_MCU_ESP32) && \
220
!defined(HF_TARGET_MCU_ESP32S2) && !defined(HF_TARGET_MCU_ESP32S3) && \
221
!defined(HF_TARGET_MCU_ESP32C3) && !defined(HF_TARGET_MCU_ESP32C2) && \
222
!defined(HF_TARGET_MCU_ESP32H2) && !defined(HF_TARGET_MCU_STM32F4) && \
223
!defined(HF_TARGET_MCU_STM32H7) && !defined(HF_TARGET_MCU_RP2040) && \
224
!defined(HF_TARGET_MCU_NONE)
225
#error \
226
"No target MCU is selected. Define exactly ONE HF_TARGET_MCU_* macro via CMake -D or McuSelect.h"
227
#endif
228
229
// Validate that the selected MCU has a corresponding platform family defined
230
#if !defined(HF_MCU_FAMILY_ESP32) && !defined(HF_MCU_FAMILY_STM32) && \
231
!defined(HF_MCU_FAMILY_RP2040) && !defined(HF_MCU_FAMILY_NONE)
232
#error "No MCU family is defined. This indicates an error in McuSelect.h configuration."
233
#endif
234
235
//==============================================================================
236
// MCU CAPABILITY DEFINITIONS
237
//==============================================================================
238
239
// ESP32-C6 Specific Capabilities (Primary Target)
240
#ifdef HF_MCU_ESP32C6
241
// GPIO capabilities
242
#define HF_MCU_HAS_GPIO 1
243
#define HF_MCU_GPIO_MAX_PINS 31
// ESP32-C6 has 31 GPIO pins (0-30)
244
#define HF_MCU_GPIO_HAS_PULLUP 1
245
#define HF_MCU_GPIO_HAS_PULLDOWN 1
246
#define HF_MCU_GPIO_HAS_INTERRUPTS 1
247
248
// ESP32-C6 Advanced GPIO Hardware Constants (ESP-IDF v5.5+)
249
#define HF_MCU_GPIO_PIN_COUNT 31
250
#define HF_MCU_GPIO_MAX_PIN_NUMBER 30
251
#define HF_MCU_GPIO_RTC_PIN_COUNT 8
252
#define HF_MCU_GPIO_LP_IO_PIN_COUNT 8
253
#define HF_MCU_GPIO_ADC_PIN_COUNT 7
254
#define HF_MCU_GPIO_FLEX_FILTER_COUNT 8
255
#define HF_MCU_GPIO_TOUCH_PIN_COUNT 0
256
#define HF_MCU_GPIO_DAC_PIN_COUNT 0
257
#define HF_MCU_GPIO_ETM_CHANNEL_COUNT 50
258
#define HF_MCU_GPIO_ETM_EVENT_COUNT_MAX 100
259
#define HF_MCU_GPIO_ETM_TASK_COUNT_MAX 100
260
261
// ESP32-C6 Clock frequencies for glitch filter timing calculations
262
#define HF_MCU_GPIO_APB_CLK_FREQ_HZ 80000000UL
263
#define HF_MCU_GPIO_RC_FAST_CLK_FREQ_HZ 17500000UL
264
#define HF_MCU_GPIO_XTAL_CLK_FREQ_HZ 40000000UL
265
266
// ESP32-C6 GPIO timing limits and characteristics
267
#define HF_MCU_GPIO_MAX_TOGGLE_FREQ_HZ 40000000UL
268
#define HF_MCU_GPIO_MIN_GLITCH_FILTER_NS 25UL
269
#define HF_MCU_GPIO_MAX_GLITCH_FILTER_NS 1000000UL
270
271
// ESP32-C6 GPIO Feature Support Flags
272
#define HF_MCU_GPIO_HAS_GLITCH_FILTER 1
273
#define HF_MCU_GPIO_HAS_RTC_GPIO 1
274
#define HF_MCU_GPIO_HAS_LP_IO 1
275
#define HF_MCU_GPIO_HAS_ETM 1
276
#define HF_MCU_GPIO_HAS_HOLD_FUNCTION 1
277
#define HF_MCU_GPIO_HAS_SLEEP_CONFIG 1
278
#define HF_MCU_GPIO_HAS_WAKEUP_CONFIG 1
279
#define HF_MCU_GPIO_HAS_DRIVE_STRENGTH 1
280
281
// ADC capabilities (ESP32-C6 specific)
282
#define HF_MCU_HAS_ADC 1
283
#define HF_MCU_ADC_MAX_CHANNELS 7
// ESP32-C6 has 7 ADC channels (0-6)
284
#define HF_MCU_ADC_MAX_RESOLUTION 12
285
#define HF_MCU_ADC_HAS_ATTENUATION 1
286
#define HF_MCU_ADC_NUM_UNITS 1
// ESP32-C6 has only ADC1
287
288
// I2C capabilities
289
#define HF_MCU_HAS_I2C 1
290
#define HF_MCU_I2C_MAX_PORTS 1
// ESP32-C6 has 1 I2C port
291
#define HF_MCU_I2C_MAX_FREQ_HZ 1000000
292
#define HF_MCU_I2C_HAS_SLAVE_MODE 1
293
294
// SPI capabilities
295
#define HF_MCU_HAS_SPI 1
296
#define HF_MCU_SPI_MAX_HOSTS 2
// ESP32-C6 has SPI2 and SPI3
297
#define HF_MCU_SPI_MAX_FREQ_HZ 60000000
298
#define HF_MCU_SPI_HAS_DMA 1
299
300
// UART capabilities
301
#define HF_MCU_HAS_UART 1
302
#define HF_MCU_UART_MAX_PORTS 2
// ESP32-C6 has UART0 and UART1
303
#define HF_MCU_UART_MAX_BAUDRATE 5000000
304
#define HF_MCU_UART_HAS_FLOW_CONTROL 1
305
306
// CAN capabilities (TWAI)
307
#define HF_MCU_HAS_CAN 1
308
#define HF_MCU_CAN_MAX_CONTROLLERS 2
309
#define HF_MCU_CAN_HAS_LISTEN_ONLY 1
310
#define HF_MCU_CAN_HAS_SELF_TEST 1
311
#define HF_MCU_CAN_PROTOCOL "TWAI"
312
313
// PWM capabilities (LEDC)
314
#define HF_MCU_HAS_PWM 1
315
#define HF_MCU_PWM_MAX_CHANNELS 6
// ESP32-C6 has 6 LEDC channels
316
#define HF_MCU_PWM_MAX_FREQ_HZ 40000000
317
#define HF_MCU_PWM_MAX_RESOLUTION 14
// ESP32-C6 max is 14-bit
318
319
// RMT capabilities (not PIO)
320
#define HF_MCU_HAS_PIO 0
321
#define HF_MCU_HAS_RMT 1
322
#define HF_MCU_RMT_MAX_CHANNELS 4
// ESP32-C6 has 4 RMT channels
323
324
// ESP32 Classic Capabilities (Secondary Support)
325
#elif defined(HF_MCU_ESP32)
326
// GPIO capabilities
327
#define HF_MCU_HAS_GPIO 1
328
#define HF_MCU_GPIO_MAX_PINS 40
// ESP32 has 40 GPIO pins
329
#define HF_MCU_GPIO_HAS_PULLUP 1
330
#define HF_MCU_GPIO_HAS_PULLDOWN 1
331
#define HF_MCU_GPIO_HAS_INTERRUPTS 1
332
333
// ESP32 Classic Advanced GPIO Hardware Constants
334
#define HF_MCU_GPIO_PIN_COUNT 40
335
#define HF_MCU_GPIO_MAX_PIN_NUMBER 39
336
#define HF_MCU_GPIO_RTC_PIN_COUNT 18
337
#define HF_MCU_GPIO_LP_IO_PIN_COUNT 0
338
#define HF_MCU_GPIO_ADC_PIN_COUNT 18
339
#define HF_MCU_GPIO_FLEX_FILTER_COUNT 0
340
#define HF_MCU_GPIO_TOUCH_PIN_COUNT 10
341
#define HF_MCU_GPIO_DAC_PIN_COUNT 2
342
#define HF_MCU_GPIO_ETM_CHANNEL_COUNT 0
343
#define HF_MCU_GPIO_ETM_EVENT_COUNT_MAX 0
344
#define HF_MCU_GPIO_ETM_TASK_COUNT_MAX 0
345
346
#define HF_MCU_GPIO_APB_CLK_FREQ_HZ 80000000UL
347
#define HF_MCU_GPIO_RC_FAST_CLK_FREQ_HZ 8500000UL
348
#define HF_MCU_GPIO_XTAL_CLK_FREQ_HZ 40000000UL
349
#define HF_MCU_GPIO_MAX_TOGGLE_FREQ_HZ 40000000UL
350
#define HF_MCU_GPIO_MIN_GLITCH_FILTER_NS 0UL
351
#define HF_MCU_GPIO_MAX_GLITCH_FILTER_NS 0UL
352
353
#define HF_MCU_GPIO_HAS_GLITCH_FILTER 0
354
#define HF_MCU_GPIO_HAS_RTC_GPIO 1
355
#define HF_MCU_GPIO_HAS_LP_IO 0
356
#define HF_MCU_GPIO_HAS_ETM 0
357
#define HF_MCU_GPIO_HAS_HOLD_FUNCTION 1
358
#define HF_MCU_GPIO_HAS_SLEEP_CONFIG 1
359
#define HF_MCU_GPIO_HAS_WAKEUP_CONFIG 1
360
#define HF_MCU_GPIO_HAS_DRIVE_STRENGTH 1
361
362
// ADC capabilities
363
#define HF_MCU_HAS_ADC 1
364
#define HF_MCU_ADC_MAX_CHANNELS 18
365
#define HF_MCU_ADC_MAX_RESOLUTION 12
366
#define HF_MCU_ADC_HAS_ATTENUATION 1
367
#define HF_MCU_ADC_NUM_UNITS 2
368
369
// I2C capabilities
370
#define HF_MCU_HAS_I2C 1
371
#define HF_MCU_I2C_MAX_PORTS 2
372
#define HF_MCU_I2C_MAX_FREQ_HZ 1000000
373
#define HF_MCU_I2C_HAS_SLAVE_MODE 1
374
375
// SPI capabilities
376
#define HF_MCU_HAS_SPI 1
377
#define HF_MCU_SPI_MAX_HOSTS 3
378
#define HF_MCU_SPI_MAX_FREQ_HZ 80000000
379
#define HF_MCU_SPI_HAS_DMA 1
380
381
// UART capabilities
382
#define HF_MCU_HAS_UART 1
383
#define HF_MCU_UART_MAX_PORTS 3
384
#define HF_MCU_UART_MAX_BAUDRATE 5000000
385
#define HF_MCU_UART_HAS_FLOW_CONTROL 1
386
387
// CAN capabilities
388
#define HF_MCU_HAS_CAN 1
389
#define HF_MCU_CAN_MAX_CONTROLLERS 1
390
#define HF_MCU_CAN_HAS_LISTEN_ONLY 1
391
#define HF_MCU_CAN_HAS_SELF_TEST 1
392
#define HF_MCU_CAN_PROTOCOL "CAN"
393
394
// PWM capabilities
395
#define HF_MCU_HAS_PWM 1
396
#define HF_MCU_PWM_MAX_CHANNELS 16
397
#define HF_MCU_PWM_MAX_FREQ_HZ 40000000
398
#define HF_MCU_PWM_MAX_RESOLUTION 20
399
400
// RMT capabilities
401
#define HF_MCU_HAS_PIO 0
402
#define HF_MCU_HAS_RMT 1
403
#define HF_MCU_RMT_MAX_CHANNELS 8
404
405
// ESP32-S3 Capabilities
406
#elif defined(HF_MCU_ESP32S3)
407
#define HF_MCU_HAS_GPIO 1
408
#define HF_MCU_GPIO_MAX_PINS 49
409
#define HF_MCU_GPIO_HAS_PULLUP 1
410
#define HF_MCU_GPIO_HAS_PULLDOWN 1
411
#define HF_MCU_GPIO_HAS_INTERRUPTS 1
412
413
#define HF_MCU_GPIO_PIN_COUNT 49
414
#define HF_MCU_GPIO_MAX_PIN_NUMBER 48
415
#define HF_MCU_GPIO_RTC_PIN_COUNT 22
416
#define HF_MCU_GPIO_LP_IO_PIN_COUNT 0
417
#define HF_MCU_GPIO_ADC_PIN_COUNT 20
418
#define HF_MCU_GPIO_FLEX_FILTER_COUNT 8
419
#define HF_MCU_GPIO_TOUCH_PIN_COUNT 14
420
#define HF_MCU_GPIO_DAC_PIN_COUNT 0
421
#define HF_MCU_GPIO_ETM_CHANNEL_COUNT 50
422
#define HF_MCU_GPIO_ETM_EVENT_COUNT_MAX 100
423
#define HF_MCU_GPIO_ETM_TASK_COUNT_MAX 100
424
425
#define HF_MCU_GPIO_APB_CLK_FREQ_HZ 80000000UL
426
#define HF_MCU_GPIO_RC_FAST_CLK_FREQ_HZ 17500000UL
427
#define HF_MCU_GPIO_XTAL_CLK_FREQ_HZ 40000000UL
428
#define HF_MCU_GPIO_MAX_TOGGLE_FREQ_HZ 40000000UL
429
#define HF_MCU_GPIO_MIN_GLITCH_FILTER_NS 25UL
430
#define HF_MCU_GPIO_MAX_GLITCH_FILTER_NS 1000000UL
431
432
#define HF_MCU_GPIO_HAS_GLITCH_FILTER 1
433
#define HF_MCU_GPIO_HAS_RTC_GPIO 1
434
#define HF_MCU_GPIO_HAS_LP_IO 0
435
#define HF_MCU_GPIO_HAS_ETM 1
436
#define HF_MCU_GPIO_HAS_HOLD_FUNCTION 1
437
#define HF_MCU_GPIO_HAS_SLEEP_CONFIG 1
438
#define HF_MCU_GPIO_HAS_WAKEUP_CONFIG 1
439
#define HF_MCU_GPIO_HAS_DRIVE_STRENGTH 1
440
441
#define HF_MCU_HAS_ADC 1
442
#define HF_MCU_ADC_MAX_CHANNELS 20
443
#define HF_MCU_ADC_MAX_RESOLUTION 12
444
#define HF_MCU_ADC_HAS_ATTENUATION 1
445
#define HF_MCU_ADC_NUM_UNITS 2
446
447
#define HF_MCU_HAS_I2C 1
448
#define HF_MCU_I2C_MAX_PORTS 2
449
#define HF_MCU_I2C_MAX_FREQ_HZ 1000000
450
#define HF_MCU_I2C_HAS_SLAVE_MODE 1
451
452
#define HF_MCU_HAS_SPI 1
453
#define HF_MCU_SPI_MAX_HOSTS 3
454
#define HF_MCU_SPI_MAX_FREQ_HZ 80000000
455
#define HF_MCU_SPI_HAS_DMA 1
456
457
#define HF_MCU_HAS_UART 1
458
#define HF_MCU_UART_MAX_PORTS 3
459
#define HF_MCU_UART_MAX_BAUDRATE 5000000
460
#define HF_MCU_UART_HAS_FLOW_CONTROL 1
461
462
#define HF_MCU_HAS_CAN 1
463
#define HF_MCU_CAN_MAX_CONTROLLERS 1
464
#define HF_MCU_CAN_HAS_LISTEN_ONLY 1
465
#define HF_MCU_CAN_HAS_SELF_TEST 1
466
#define HF_MCU_CAN_PROTOCOL "TWAI"
467
468
#define HF_MCU_HAS_PWM 1
469
#define HF_MCU_PWM_MAX_CHANNELS 8
470
#define HF_MCU_PWM_MAX_FREQ_HZ 40000000
471
#define HF_MCU_PWM_MAX_RESOLUTION 14
472
473
#define HF_MCU_HAS_PIO 0
474
#define HF_MCU_HAS_RMT 1
475
#define HF_MCU_RMT_MAX_CHANNELS 8
476
477
// ESP32-S2 Capabilities
478
#elif defined(HF_MCU_ESP32S2)
479
#define HF_MCU_HAS_GPIO 1
480
#define HF_MCU_GPIO_MAX_PINS 47
481
#define HF_MCU_GPIO_HAS_PULLUP 1
482
#define HF_MCU_GPIO_HAS_PULLDOWN 1
483
#define HF_MCU_GPIO_HAS_INTERRUPTS 1
484
485
#define HF_MCU_GPIO_PIN_COUNT 47
486
#define HF_MCU_GPIO_MAX_PIN_NUMBER 46
487
#define HF_MCU_GPIO_RTC_PIN_COUNT 22
488
#define HF_MCU_GPIO_LP_IO_PIN_COUNT 0
489
#define HF_MCU_GPIO_ADC_PIN_COUNT 20
490
#define HF_MCU_GPIO_FLEX_FILTER_COUNT 0
491
#define HF_MCU_GPIO_TOUCH_PIN_COUNT 14
492
#define HF_MCU_GPIO_DAC_PIN_COUNT 2
493
#define HF_MCU_GPIO_ETM_CHANNEL_COUNT 0
494
#define HF_MCU_GPIO_ETM_EVENT_COUNT_MAX 0
495
#define HF_MCU_GPIO_ETM_TASK_COUNT_MAX 0
496
497
#define HF_MCU_GPIO_APB_CLK_FREQ_HZ 80000000UL
498
#define HF_MCU_GPIO_RC_FAST_CLK_FREQ_HZ 8500000UL
499
#define HF_MCU_GPIO_XTAL_CLK_FREQ_HZ 40000000UL
500
#define HF_MCU_GPIO_MAX_TOGGLE_FREQ_HZ 40000000UL
501
#define HF_MCU_GPIO_MIN_GLITCH_FILTER_NS 0UL
502
#define HF_MCU_GPIO_MAX_GLITCH_FILTER_NS 0UL
503
504
#define HF_MCU_GPIO_HAS_GLITCH_FILTER 0
505
#define HF_MCU_GPIO_HAS_RTC_GPIO 1
506
#define HF_MCU_GPIO_HAS_LP_IO 0
507
#define HF_MCU_GPIO_HAS_ETM 0
508
#define HF_MCU_GPIO_HAS_HOLD_FUNCTION 1
509
#define HF_MCU_GPIO_HAS_SLEEP_CONFIG 1
510
#define HF_MCU_GPIO_HAS_WAKEUP_CONFIG 1
511
#define HF_MCU_GPIO_HAS_DRIVE_STRENGTH 1
512
513
#define HF_MCU_HAS_ADC 1
514
#define HF_MCU_ADC_MAX_CHANNELS 20
515
#define HF_MCU_ADC_MAX_RESOLUTION 13
516
#define HF_MCU_ADC_HAS_ATTENUATION 1
517
#define HF_MCU_ADC_NUM_UNITS 2
518
519
#define HF_MCU_HAS_I2C 1
520
#define HF_MCU_I2C_MAX_PORTS 2
521
#define HF_MCU_I2C_MAX_FREQ_HZ 1000000
522
#define HF_MCU_I2C_HAS_SLAVE_MODE 1
523
524
#define HF_MCU_HAS_SPI 1
525
#define HF_MCU_SPI_MAX_HOSTS 3
526
#define HF_MCU_SPI_MAX_FREQ_HZ 80000000
527
#define HF_MCU_SPI_HAS_DMA 1
528
529
#define HF_MCU_HAS_UART 1
530
#define HF_MCU_UART_MAX_PORTS 2
531
#define HF_MCU_UART_MAX_BAUDRATE 5000000
532
#define HF_MCU_UART_HAS_FLOW_CONTROL 1
533
534
#define HF_MCU_HAS_CAN 1
535
#define HF_MCU_CAN_MAX_CONTROLLERS 1
536
#define HF_MCU_CAN_HAS_LISTEN_ONLY 1
537
#define HF_MCU_CAN_HAS_SELF_TEST 1
538
#define HF_MCU_CAN_PROTOCOL "TWAI"
539
540
#define HF_MCU_HAS_PWM 1
541
#define HF_MCU_PWM_MAX_CHANNELS 8
542
#define HF_MCU_PWM_MAX_FREQ_HZ 40000000
543
#define HF_MCU_PWM_MAX_RESOLUTION 14
544
545
#define HF_MCU_HAS_PIO 0
546
#define HF_MCU_HAS_RMT 1
547
#define HF_MCU_RMT_MAX_CHANNELS 4
548
549
// ESP32-C3 Capabilities
550
#elif defined(HF_MCU_ESP32C3)
551
#define HF_MCU_HAS_GPIO 1
552
#define HF_MCU_GPIO_MAX_PINS 22
553
#define HF_MCU_GPIO_HAS_PULLUP 1
554
#define HF_MCU_GPIO_HAS_PULLDOWN 1
555
#define HF_MCU_GPIO_HAS_INTERRUPTS 1
556
557
#define HF_MCU_GPIO_PIN_COUNT 22
558
#define HF_MCU_GPIO_MAX_PIN_NUMBER 21
559
#define HF_MCU_GPIO_RTC_PIN_COUNT 6
560
#define HF_MCU_GPIO_LP_IO_PIN_COUNT 0
561
#define HF_MCU_GPIO_ADC_PIN_COUNT 6
562
#define HF_MCU_GPIO_FLEX_FILTER_COUNT 8
563
#define HF_MCU_GPIO_TOUCH_PIN_COUNT 0
564
#define HF_MCU_GPIO_DAC_PIN_COUNT 0
565
#define HF_MCU_GPIO_ETM_CHANNEL_COUNT 0
566
#define HF_MCU_GPIO_ETM_EVENT_COUNT_MAX 0
567
#define HF_MCU_GPIO_ETM_TASK_COUNT_MAX 0
568
569
#define HF_MCU_GPIO_APB_CLK_FREQ_HZ 80000000UL
570
#define HF_MCU_GPIO_RC_FAST_CLK_FREQ_HZ 17500000UL
571
#define HF_MCU_GPIO_XTAL_CLK_FREQ_HZ 40000000UL
572
#define HF_MCU_GPIO_MAX_TOGGLE_FREQ_HZ 40000000UL
573
#define HF_MCU_GPIO_MIN_GLITCH_FILTER_NS 25UL
574
#define HF_MCU_GPIO_MAX_GLITCH_FILTER_NS 1000000UL
575
576
#define HF_MCU_GPIO_HAS_GLITCH_FILTER 1
577
#define HF_MCU_GPIO_HAS_RTC_GPIO 1
578
#define HF_MCU_GPIO_HAS_LP_IO 0
579
#define HF_MCU_GPIO_HAS_ETM 0
580
#define HF_MCU_GPIO_HAS_HOLD_FUNCTION 1
581
#define HF_MCU_GPIO_HAS_SLEEP_CONFIG 1
582
#define HF_MCU_GPIO_HAS_WAKEUP_CONFIG 1
583
#define HF_MCU_GPIO_HAS_DRIVE_STRENGTH 1
584
585
#define HF_MCU_HAS_ADC 1
586
#define HF_MCU_ADC_MAX_CHANNELS 6
587
#define HF_MCU_ADC_MAX_RESOLUTION 12
588
#define HF_MCU_ADC_HAS_ATTENUATION 1
589
#define HF_MCU_ADC_NUM_UNITS 2
590
591
#define HF_MCU_HAS_I2C 1
592
#define HF_MCU_I2C_MAX_PORTS 1
593
#define HF_MCU_I2C_MAX_FREQ_HZ 1000000
594
#define HF_MCU_I2C_HAS_SLAVE_MODE 1
595
596
#define HF_MCU_HAS_SPI 1
597
#define HF_MCU_SPI_MAX_HOSTS 2
598
#define HF_MCU_SPI_MAX_FREQ_HZ 60000000
599
#define HF_MCU_SPI_HAS_DMA 1
600
601
#define HF_MCU_HAS_UART 1
602
#define HF_MCU_UART_MAX_PORTS 2
603
#define HF_MCU_UART_MAX_BAUDRATE 5000000
604
#define HF_MCU_UART_HAS_FLOW_CONTROL 1
605
606
#define HF_MCU_HAS_CAN 1
607
#define HF_MCU_CAN_MAX_CONTROLLERS 1
608
#define HF_MCU_CAN_HAS_LISTEN_ONLY 1
609
#define HF_MCU_CAN_HAS_SELF_TEST 1
610
#define HF_MCU_CAN_PROTOCOL "TWAI"
611
612
#define HF_MCU_HAS_PWM 1
613
#define HF_MCU_PWM_MAX_CHANNELS 6
614
#define HF_MCU_PWM_MAX_FREQ_HZ 40000000
615
#define HF_MCU_PWM_MAX_RESOLUTION 14
616
617
#define HF_MCU_HAS_PIO 0
618
#define HF_MCU_HAS_RMT 1
619
#define HF_MCU_RMT_MAX_CHANNELS 4
620
621
// ESP32-C2 Capabilities
622
#elif defined(HF_MCU_ESP32C2)
623
#define HF_MCU_HAS_GPIO 1
624
#define HF_MCU_GPIO_MAX_PINS 21
625
#define HF_MCU_GPIO_HAS_PULLUP 1
626
#define HF_MCU_GPIO_HAS_PULLDOWN 1
627
#define HF_MCU_GPIO_HAS_INTERRUPTS 1
628
629
#define HF_MCU_GPIO_PIN_COUNT 21
630
#define HF_MCU_GPIO_MAX_PIN_NUMBER 20
631
#define HF_MCU_GPIO_RTC_PIN_COUNT 5
632
#define HF_MCU_GPIO_LP_IO_PIN_COUNT 0
633
#define HF_MCU_GPIO_ADC_PIN_COUNT 5
634
#define HF_MCU_GPIO_FLEX_FILTER_COUNT 0
635
#define HF_MCU_GPIO_TOUCH_PIN_COUNT 0
636
#define HF_MCU_GPIO_DAC_PIN_COUNT 0
637
#define HF_MCU_GPIO_ETM_CHANNEL_COUNT 0
638
#define HF_MCU_GPIO_ETM_EVENT_COUNT_MAX 0
639
#define HF_MCU_GPIO_ETM_TASK_COUNT_MAX 0
640
641
#define HF_MCU_GPIO_APB_CLK_FREQ_HZ 40000000UL
642
#define HF_MCU_GPIO_RC_FAST_CLK_FREQ_HZ 17500000UL
643
#define HF_MCU_GPIO_XTAL_CLK_FREQ_HZ 40000000UL
644
#define HF_MCU_GPIO_MAX_TOGGLE_FREQ_HZ 20000000UL
645
#define HF_MCU_GPIO_MIN_GLITCH_FILTER_NS 0UL
646
#define HF_MCU_GPIO_MAX_GLITCH_FILTER_NS 0UL
647
648
#define HF_MCU_GPIO_HAS_GLITCH_FILTER 0
649
#define HF_MCU_GPIO_HAS_RTC_GPIO 1
650
#define HF_MCU_GPIO_HAS_LP_IO 0
651
#define HF_MCU_GPIO_HAS_ETM 0
652
#define HF_MCU_GPIO_HAS_HOLD_FUNCTION 1
653
#define HF_MCU_GPIO_HAS_SLEEP_CONFIG 1
654
#define HF_MCU_GPIO_HAS_WAKEUP_CONFIG 1
655
#define HF_MCU_GPIO_HAS_DRIVE_STRENGTH 1
656
657
#define HF_MCU_HAS_ADC 1
658
#define HF_MCU_ADC_MAX_CHANNELS 5
659
#define HF_MCU_ADC_MAX_RESOLUTION 12
660
#define HF_MCU_ADC_HAS_ATTENUATION 1
661
#define HF_MCU_ADC_NUM_UNITS 1
662
663
#define HF_MCU_HAS_I2C 1
664
#define HF_MCU_I2C_MAX_PORTS 1
665
#define HF_MCU_I2C_MAX_FREQ_HZ 1000000
666
#define HF_MCU_I2C_HAS_SLAVE_MODE 1
667
668
#define HF_MCU_HAS_SPI 1
669
#define HF_MCU_SPI_MAX_HOSTS 2
670
#define HF_MCU_SPI_MAX_FREQ_HZ 60000000
671
#define HF_MCU_SPI_HAS_DMA 1
672
673
#define HF_MCU_HAS_UART 1
674
#define HF_MCU_UART_MAX_PORTS 2
675
#define HF_MCU_UART_MAX_BAUDRATE 5000000
676
#define HF_MCU_UART_HAS_FLOW_CONTROL 1
677
678
#define HF_MCU_HAS_CAN 0
679
#define HF_MCU_CAN_MAX_CONTROLLERS 0
680
#define HF_MCU_CAN_HAS_LISTEN_ONLY 0
681
#define HF_MCU_CAN_HAS_SELF_TEST 0
682
#define HF_MCU_CAN_PROTOCOL "NONE"
683
684
#define HF_MCU_HAS_PWM 1
685
#define HF_MCU_PWM_MAX_CHANNELS 6
686
#define HF_MCU_PWM_MAX_FREQ_HZ 40000000
687
#define HF_MCU_PWM_MAX_RESOLUTION 14
688
689
#define HF_MCU_HAS_PIO 0
690
#define HF_MCU_HAS_RMT 0
691
#define HF_MCU_RMT_MAX_CHANNELS 0
692
693
// ESP32-H2 Capabilities
694
#elif defined(HF_MCU_ESP32H2)
695
#define HF_MCU_HAS_GPIO 1
696
#define HF_MCU_GPIO_MAX_PINS 28
697
#define HF_MCU_GPIO_HAS_PULLUP 1
698
#define HF_MCU_GPIO_HAS_PULLDOWN 1
699
#define HF_MCU_GPIO_HAS_INTERRUPTS 1
700
701
#define HF_MCU_GPIO_PIN_COUNT 28
702
#define HF_MCU_GPIO_MAX_PIN_NUMBER 27
703
#define HF_MCU_GPIO_RTC_PIN_COUNT 8
704
#define HF_MCU_GPIO_LP_IO_PIN_COUNT 8
705
#define HF_MCU_GPIO_ADC_PIN_COUNT 5
706
#define HF_MCU_GPIO_FLEX_FILTER_COUNT 8
707
#define HF_MCU_GPIO_TOUCH_PIN_COUNT 0
708
#define HF_MCU_GPIO_DAC_PIN_COUNT 0
709
#define HF_MCU_GPIO_ETM_CHANNEL_COUNT 50
710
#define HF_MCU_GPIO_ETM_EVENT_COUNT_MAX 100
711
#define HF_MCU_GPIO_ETM_TASK_COUNT_MAX 100
712
713
#define HF_MCU_GPIO_APB_CLK_FREQ_HZ 32000000UL
714
#define HF_MCU_GPIO_RC_FAST_CLK_FREQ_HZ 17500000UL
715
#define HF_MCU_GPIO_XTAL_CLK_FREQ_HZ 32000000UL
716
#define HF_MCU_GPIO_MAX_TOGGLE_FREQ_HZ 16000000UL
717
#define HF_MCU_GPIO_MIN_GLITCH_FILTER_NS 25UL
718
#define HF_MCU_GPIO_MAX_GLITCH_FILTER_NS 1000000UL
719
720
#define HF_MCU_GPIO_HAS_GLITCH_FILTER 1
721
#define HF_MCU_GPIO_HAS_RTC_GPIO 1
722
#define HF_MCU_GPIO_HAS_LP_IO 1
723
#define HF_MCU_GPIO_HAS_ETM 1
724
#define HF_MCU_GPIO_HAS_HOLD_FUNCTION 1
725
#define HF_MCU_GPIO_HAS_SLEEP_CONFIG 1
726
#define HF_MCU_GPIO_HAS_WAKEUP_CONFIG 1
727
#define HF_MCU_GPIO_HAS_DRIVE_STRENGTH 1
728
729
#define HF_MCU_HAS_ADC 1
730
#define HF_MCU_ADC_MAX_CHANNELS 5
731
#define HF_MCU_ADC_MAX_RESOLUTION 12
732
#define HF_MCU_ADC_HAS_ATTENUATION 1
733
#define HF_MCU_ADC_NUM_UNITS 1
734
735
#define HF_MCU_HAS_I2C 1
736
#define HF_MCU_I2C_MAX_PORTS 2
737
#define HF_MCU_I2C_MAX_FREQ_HZ 1000000
738
#define HF_MCU_I2C_HAS_SLAVE_MODE 1
739
740
#define HF_MCU_HAS_SPI 1
741
#define HF_MCU_SPI_MAX_HOSTS 2
742
#define HF_MCU_SPI_MAX_FREQ_HZ 60000000
743
#define HF_MCU_SPI_HAS_DMA 1
744
745
#define HF_MCU_HAS_UART 1
746
#define HF_MCU_UART_MAX_PORTS 2
747
#define HF_MCU_UART_MAX_BAUDRATE 5000000
748
#define HF_MCU_UART_HAS_FLOW_CONTROL 1
749
750
#define HF_MCU_HAS_CAN 0
751
#define HF_MCU_CAN_MAX_CONTROLLERS 0
752
#define HF_MCU_CAN_HAS_LISTEN_ONLY 0
753
#define HF_MCU_CAN_HAS_SELF_TEST 0
754
#define HF_MCU_CAN_PROTOCOL "NONE"
755
756
#define HF_MCU_HAS_PWM 1
757
#define HF_MCU_PWM_MAX_CHANNELS 6
758
#define HF_MCU_PWM_MAX_FREQ_HZ 40000000
759
#define HF_MCU_PWM_MAX_RESOLUTION 14
760
761
#define HF_MCU_HAS_PIO 0
762
#define HF_MCU_HAS_RMT 1
763
#define HF_MCU_RMT_MAX_CHANNELS 4
764
765
#endif
766
767
//==============================================================================
768
// MCU CONFIGURATION CONSTANTS
769
//==============================================================================
770
771
// ESP32-C6 Configuration Constants
772
#ifdef HF_MCU_ESP32C6
773
// Default timeout values
774
#define HF_MCU_DEFAULT_TIMEOUT_MS 1000
775
#define HF_MCU_I2C_TIMEOUT_MS 500
// Reduced for faster response
776
#define HF_MCU_SPI_TIMEOUT_MS 1000
777
#define HF_MCU_UART_TIMEOUT_MS 1000
778
#define HF_MCU_CAN_TIMEOUT_MS 500
779
780
// Buffer sizes (optimized for ESP32-C6)
781
#define HF_MCU_UART_RX_BUFFER_SIZE 512
// Increased for motor control
782
#define HF_MCU_UART_TX_BUFFER_SIZE 256
783
#define HF_MCU_I2C_BUFFER_SIZE 64
// Reduced for ESP32-C6
784
#define HF_MCU_SPI_BUFFER_SIZE 256
785
#define HF_MCU_CAN_RX_QUEUE_SIZE 16
// Optimized for ESP32-C6
786
#define HF_MCU_CAN_TX_QUEUE_SIZE 16
787
788
// Stack sizes for tasks (optimized for RISC-V)
789
#define HF_MCU_TASK_STACK_SIZE 3072
// Reduced for RISC-V efficiency
790
#define HF_MCU_TASK_PRIORITY 5
791
792
// ADC specific constants
793
#define HF_MCU_ADC_DEFAULT_VREF 1100
// mV, ESP32-C6 default
794
#define HF_MCU_ADC_MAX_VOLTAGE 3300
// mV, with 11dB attenuation
795
796
// ESP32 Classic Configuration Constants
797
#elif defined(HF_MCU_ESP32)
798
// Default timeout values
799
#define HF_MCU_DEFAULT_TIMEOUT_MS 1000
800
#define HF_MCU_I2C_TIMEOUT_MS 1000
801
#define HF_MCU_SPI_TIMEOUT_MS 1000
802
#define HF_MCU_UART_TIMEOUT_MS 1000
803
#define HF_MCU_CAN_TIMEOUT_MS 1000
804
805
// Buffer sizes
806
#define HF_MCU_UART_RX_BUFFER_SIZE 256
807
#define HF_MCU_UART_TX_BUFFER_SIZE 256
808
#define HF_MCU_I2C_BUFFER_SIZE 128
809
#define HF_MCU_SPI_BUFFER_SIZE 256
810
#define HF_MCU_CAN_RX_QUEUE_SIZE 32
811
#define HF_MCU_CAN_TX_QUEUE_SIZE 32
812
813
// Stack sizes for tasks
814
#define HF_MCU_TASK_STACK_SIZE 4096
815
#define HF_MCU_TASK_PRIORITY 5
816
817
// ADC specific constants
818
#define HF_MCU_ADC_DEFAULT_VREF 1100
// mV
819
#define HF_MCU_ADC_MAX_VOLTAGE 3900
// mV, with 11dB attenuation
820
821
// ESP32-S3 / S2 / C3 / C2 / H2 Configuration Constants (shared defaults)
822
#elif defined(HF_MCU_ESP32S3) || defined(HF_MCU_ESP32S2) || defined(HF_MCU_ESP32C3) || \
823
defined(HF_MCU_ESP32C2) || defined(HF_MCU_ESP32H2)
824
#define HF_MCU_DEFAULT_TIMEOUT_MS 1000
825
#define HF_MCU_I2C_TIMEOUT_MS 500
826
#define HF_MCU_SPI_TIMEOUT_MS 1000
827
#define HF_MCU_UART_TIMEOUT_MS 1000
828
#define HF_MCU_CAN_TIMEOUT_MS 500
829
830
#define HF_MCU_UART_RX_BUFFER_SIZE 512
831
#define HF_MCU_UART_TX_BUFFER_SIZE 256
832
#define HF_MCU_I2C_BUFFER_SIZE 64
833
#define HF_MCU_SPI_BUFFER_SIZE 256
834
#define HF_MCU_CAN_RX_QUEUE_SIZE 16
835
#define HF_MCU_CAN_TX_QUEUE_SIZE 16
836
837
#if defined(HF_MCU_ESP32S3) || defined(HF_MCU_ESP32S2)
838
#define HF_MCU_TASK_STACK_SIZE 4096
// Xtensa
839
#else
840
#define HF_MCU_TASK_STACK_SIZE 3072
// RISC-V
841
#endif
842
#define HF_MCU_TASK_PRIORITY 5
843
844
#define HF_MCU_ADC_DEFAULT_VREF 1100
845
#define HF_MCU_ADC_MAX_VOLTAGE 3300
846
#endif
847
848
//==============================================================================
849
// END OF MCU SELECT HEADER
850
//==============================================================================
inc
utils
McuSelect.h
Generated by
1.10.0