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//==============================================================================