# sdk/CMakeLists.txt Драйверы NXP MCUXpresso SDK для MIMXRT1052CVJ5B Vendored: # стабильная версия, не обновляется # # Добавление нового драйвера: см. docs/SDK_DRIVERS.md if(BUILD_TESTS_HOST) return() endif() # ----------------------------------------------------------------------------- # Макрос для создания SDK драйвер-таргетов Использование: add_sdk_driver(ИМЯ # ФАЙЛ_ИСХОДНИКА) Создаёт таргет sdk_ИМЯ с автоматическим подключением # sdk_device # ----------------------------------------------------------------------------- macro(add_sdk_driver DRIVER_NAME DRIVER_SOURCE) add_library(sdk_${DRIVER_NAME} STATIC devices/MIMXRT1052/drivers/${DRIVER_SOURCE}) target_include_directories(sdk_${DRIVER_NAME} PUBLIC devices/MIMXRT1052/drivers) target_link_libraries(sdk_${DRIVER_NAME} PUBLIC sdk_device) endmacro() # ----------------------------------------------------------------------------- # Базовый таргет — нужен всегда, подключается транзитивно через bsp_board # ----------------------------------------------------------------------------- add_library(sdk_device STATIC devices/MIMXRT1052/system_MIMXRT1052.c) target_include_directories( sdk_device PUBLIC devices/MIMXRT1052 devices/MIMXRT1052/drivers devices/MIMXRT1052/periph CMSIS/Core/Include/) target_compile_definitions(sdk_device PUBLIC CPU_MIMXRT1052CVJ5B) # ----------------------------------------------------------------------------- # Утилиты — базовые вещи, нужны большинству драйверов # ----------------------------------------------------------------------------- add_library(sdk_common STATIC devices/MIMXRT1052/drivers/fsl_common.c devices/MIMXRT1052/drivers/fsl_common_arm.c) target_include_directories(sdk_common PUBLIC devices/MIMXRT1052/drivers) target_compile_definitions( sdk_common PUBLIC SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY=600000000U SDK_DELAY_USE_DWT) target_link_libraries(sdk_common PUBLIC sdk_device) add_sdk_driver(clock fsl_clock.c) # clock зависит от common target_link_libraries(sdk_clock PUBLIC sdk_common) # ----------------------------------------------------------------------------- # Драйверы периферии # ----------------------------------------------------------------------------- add_sdk_driver(gpio fsl_gpio.c) add_sdk_driver(lpuart fsl_lpuart.c) add_sdk_driver(flexcan fsl_flexcan.c) add_sdk_driver(usdhc fsl_usdhc.c) add_sdk_driver(lpi2c fsl_lpi2c.c) add_sdk_driver(pwm fsl_pwm.c) add_sdk_driver(adc fsl_adc.c) add_sdk_driver(elcdif fsl_elcdif.c) add_sdk_driver(cache fsl_cache.c) add_sdk_driver(sai fsl_sai.c) add_sdk_driver(sai_edma fsl_sai_edma.c) add_sdk_driver(edma fsl_edma.c) add_sdk_driver(dmamux fsl_dmamux.c) add_sdk_driver(xbara fsl_xbara.c) # Драйверы которые зависят от clock target_link_libraries(sdk_lpuart PUBLIC sdk_clock) target_link_libraries(sdk_flexcan PUBLIC sdk_clock) target_link_libraries(sdk_usdhc PUBLIC sdk_clock) target_link_libraries(sdk_lpi2c PUBLIC sdk_clock) target_link_libraries(sdk_pwm PUBLIC sdk_clock) target_link_libraries(sdk_adc PUBLIC sdk_clock) target_link_libraries(sdk_elcdif PUBLIC sdk_clock) target_link_libraries(sdk_sai PUBLIC sdk_clock) target_link_libraries(sdk_sai_edma PUBLIC sdk_sai sdk_edma) target_link_libraries(sdk_edma PUBLIC sdk_common) target_link_libraries(sdk_xbara PUBLIC sdk_clock) # ----------------------------------------------------------------------------- # SEMC и FlexSPI — инициализируются через DCD и FDCB, драйверы нужны только если # обращаешься к ним явно из кода # ----------------------------------------------------------------------------- add_sdk_driver(semc fsl_semc.c) add_sdk_driver(flexspi fsl_flexspi.c) target_link_libraries(sdk_semc PUBLIC sdk_clock) target_link_libraries(sdk_flexspi PUBLIC sdk_clock) # ----------------------------------------------------------------------------- # USB middleware — ручные таргеты (middleware/usb/, не drivers/) # ----------------------------------------------------------------------------- # --- sdk_osa_bm: OS Abstraction Layer (bare-metal) --- # Объявлен первым — от него зависят USB таргеты через fsl_os_abstraction.h add_library(sdk_osa_bm STATIC components/osa/fsl_os_abstraction_bm.c components/lists/fsl_component_generic_list.c) target_include_directories(sdk_osa_bm PUBLIC components/osa components/lists) target_link_libraries(sdk_osa_bm PUBLIC sdk_device sdk_common sdk_usb_config) target_compile_options(sdk_osa_bm PRIVATE -w) # --- sdk_usb_common: заголовки USB стека --- add_library(sdk_usb_common INTERFACE) target_include_directories(sdk_usb_common SYSTEM INTERFACE middleware/usb/include) # --- sdk_usb_config: application-specific конфиги --- add_library(sdk_usb_config INTERFACE) target_include_directories(sdk_usb_config SYSTEM INTERFACE ${CMAKE_SOURCE_DIR}/bsp/usb_cdc/src) # --- sdk_usb_device_ehci: EHCI контроллер + DCI абстракция --- add_library(sdk_usb_device_ehci STATIC middleware/usb/device/usb_device_dci.c middleware/usb/device/usb_device_ehci.c) target_include_directories(sdk_usb_device_ehci PUBLIC middleware/usb/device) target_link_libraries( sdk_usb_device_ehci PUBLIC sdk_device sdk_common sdk_usb_common sdk_usb_config sdk_osa_bm) target_compile_options(sdk_usb_device_ehci PRIVATE -w) # --- sdk_usb_phy: USB PHY --- add_library(sdk_usb_phy STATIC middleware/usb/phy/usb_phy.c) target_include_directories(sdk_usb_phy PUBLIC middleware/usb/phy) target_link_libraries(sdk_usb_phy PUBLIC sdk_device sdk_common sdk_usb_common sdk_usb_config sdk_osa_bm) target_compile_options(sdk_usb_phy PRIVATE -w) # ============================================================================= # SDMMC middleware — SD-карта через USDHC, non-blocking (interrupt-driven). # # НЕ зависит от ffconf.h → безопасно компилировать один раз как общую # статическую библиотеку. Оба бинарника (firmware_test, tft_app) линкуются к # одному и тому же sdk_sdmmc_sd. # # ============================================================================= add_library( sdk_sdmmc_sd STATIC middleware/sdmmc/sd/fsl_sd.c middleware/sdmmc/common/fsl_sdmmc_common.c middleware/sdmmc/osa/fsl_sdmmc_osa.c middleware/sdmmc/host/usdhc/non_blocking/fsl_sdmmc_host.c) target_include_directories( sdk_sdmmc_sd PUBLIC middleware/sdmmc/sd middleware/sdmmc/common middleware/sdmmc/osa middleware/sdmmc/host/usdhc/non_blocking middleware/sdmmc/host/usdhc) target_link_libraries(sdk_sdmmc_sd PUBLIC sdk_usdhc sdk_osa_bm sdk_cache sdk_common) # Подавляем предупреждения SDK — они нам не принадлежат. target_compile_options(sdk_sdmmc_sd PRIVATE -w) # ============================================================================= # FatFS — только заголовки и переменные с путями к исходникам. # # ff.c и fsl_sd_disk.c НЕ компилируются здесь, потому что оба включают ff.h → # ffconf.h, который разный у firmware_test (bare-metal) и tft_app (FreeRTOS). # Каждый бинарник сам добавляет их в свои sources. # # Использование в CMakeLists.txt бинарника: # target_link_libraries(my_fatfs_target PRIVATE sdk_fatfs_headers) # target_sources(my_fatfs_target PRIVATE ${SDK_FATFS_FF_SRC} # ${SDK_FATFS_SD_DISK_SRC}) # ============================================================================= add_library(sdk_fatfs_headers INTERFACE) target_include_directories( sdk_fatfs_headers INTERFACE middleware/fatfs/source middleware/fatfs/source/fsl_sd_disk) # Транзитивно тащим SDMMC: fsl_sd_disk.c вызывает SD_*() из sdk_sdmmc_sd. target_link_libraries(sdk_fatfs_headers INTERFACE sdk_sdmmc_sd) # Пути к исходникам, которые должны компилироваться per-binary. CACHE INTERNAL — # видны во всём дереве, не переопределяются. set(SDK_FATFS_FF_SRC ${CMAKE_CURRENT_SOURCE_DIR}/middleware/fatfs/source/ff.c CACHE INTERNAL "FatFS: путь к ff.c (компилировать per-binary с нужным ffconf.h)") set(SDK_FATFS_SD_DISK_SRC ${CMAKE_CURRENT_SOURCE_DIR}/middleware/fatfs/source/fsl_sd_disk/fsl_sd_disk.c CACHE INTERNAL "FatFS: путь к fsl_sd_disk.c (компилировать per-binary с нужным ffconf.h)" )