|
1 | | -if (NOT PICO_PROGRAM_MAIN_ENTRY) |
2 | | - # User configuration for HyperSerialPico section starts here |
| 1 | +set(OUTPUT_DATA_PINS "16 17 18 19 20 21 22 23") |
3 | 2 |
|
4 | | - # Some boards, such as the first Adafruit revisions, may have trouble booting properly |
5 | | - # due to bad componets used in the design. |
6 | | - # Turn this setting to ON if your rp2040 is not detected after firmware upload and reset |
7 | | - set(BOOT_WORKAROUND OFF) |
| 3 | +set(SECOND_SEGMENT_INDEX 16) # Enable multi-segment, starting at GPIO16 |
8 | 4 |
|
9 | | - # Default output data pin for the non-SPI LED strips (only for sk6812/ws2812b) |
10 | | - set(OUTPUT_DATA_PIN 2) |
11 | | - |
12 | | - # Default output data/clocks pin for the SPI LED strips (only for apa102, not for sk6812/ws2812b) |
13 | | - # only certain pairs of pins are allowed for selected SPI interface (refer to "readme.md") |
14 | | - set(OUTPUT_SPI_DATA_PIN 3) |
15 | | - set(OUTPUT_SPI_CLOCK_PIN 2) |
16 | | - set(OUTPUT_SPI_INTERFACE spi0) |
17 | | - |
18 | | - # Use multi-segment, starting index of second led strip or OFF to disable |
19 | | - set(SECOND_SEGMENT_INDEX OFF) |
20 | | - |
21 | | - # If multi-segment is used and it's reversed, set this option to ON to enable reversing |
22 | | - set(SECOND_SEGMENT_REVERSED OFF) |
23 | | - |
24 | | - # User configuration section ends here |
25 | | - # Usually you don't need to change anything below this section |
26 | | -endif() |
27 | | - |
28 | | -cmake_minimum_required(VERSION 3.13) |
29 | | - |
30 | | -# Disable Pico 'Reset device' |
31 | | -add_definitions ( -DPICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0 ) |
32 | | - |
33 | | -# initialize the SDK based on PICO_SDK_PATH |
34 | | -# note: this must happen before project() |
35 | | -set(PICO_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR}/sdk/pico) |
36 | | -set(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/sdk/freertos) |
37 | | - |
38 | | -include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake) |
39 | | -include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake) |
40 | | - |
41 | | -project(HyperSerialPico C CXX ASM) |
42 | | -set(CMAKE_C_STANDARD 11) |
43 | | -set(CMAKE_CXX_STANDARD 17) |
44 | | - |
45 | | -IF(CMAKE_COMPILER_IS_GNUCC) |
46 | | - string(REGEX REPLACE "(\-O[011123456789])" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") |
47 | | - string(REGEX REPLACE "(\-O[011123456789])" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") |
48 | | - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Og") |
49 | | - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Og") |
50 | | -ENDIF(CMAKE_COMPILER_IS_GNUCC) |
51 | | - |
52 | | -# initialize the Raspberry Pi Pico SDK |
53 | | -pico_sdk_init() |
54 | | - |
55 | | -# generic HyperSerialPico settings |
56 | | -set(HyperSerialPicoCompanionLibs FreeRTOS-Kernel FreeRTOS-Kernel-Heap1 pico_stdlib pico_multicore hardware_pio hardware_dma hardware_spi) |
57 | | -set(HyperSerialPicoCompanionIncludes ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/sdk/config) |
58 | | -file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated) |
59 | | -file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/firmware) |
60 | | - |
61 | | -if(NOT CMAKE_HOST_WIN32) |
62 | | - string(ASCII 27 EscChar) |
63 | | - set(ColorReset "${EscChar}[m") |
64 | | - set(GreenColor "${EscChar}[32m") |
65 | | - set(YellowColor "${EscChar}[33m") |
66 | | -endif() |
67 | | - |
68 | | -if (OVERRIDE_DATA_PIN) |
69 | | - set(OUTPUT_DATA_PIN ${OVERRIDE_DATA_PIN}) |
70 | | - message( STATUS "${YellowColor}Overriding Neopixel Data GPIO: ${OUTPUT_DATA_PIN}${ColorReset}") |
71 | | -endif() |
72 | | - |
73 | | -if (OVERRIDE_SPI_DATA_PIN) |
74 | | - set(OUTPUT_SPI_DATA_PIN ${OVERRIDE_SPI_DATA_PIN}) |
75 | | - message( STATUS "${YellowColor}Overriding SPI Data GPIO: ${OUTPUT_SPI_DATA_PIN}${ColorReset}") |
76 | | -endif() |
77 | | - |
78 | | -if (OVERRIDE_SPI_CLOCK_PIN) |
79 | | - set(OUTPUT_SPI_CLOCK_PIN ${OVERRIDE_SPI_CLOCK_PIN}) |
80 | | - message( STATUS "${YellowColor}Overriding SPI Clock GPIO: ${OUTPUT_SPI_CLOCK_PIN}${ColorReset}") |
81 | | -endif() |
82 | | - |
83 | | -if (OVERRIDE_SPI_INTERFACE) |
84 | | - set(OUTPUT_SPI_INTERFACE ${OVERRIDE_SPI_INTERFACE}) |
85 | | - message( STATUS "${YellowColor}Overriding SPI Interface: ${OUTPUT_SPI_INTERFACE}${ColorReset}") |
86 | | -endif() |
87 | | - |
88 | | -if (OVERRIDE_BOOT_WORKAROUND) |
89 | | - set(BOOT_WORKAROUND ${OVERRIDE_BOOT_WORKAROUND}) |
90 | | - message( STATUS "${YellowColor}Overriding boot workaround: ${BOOT_WORKAROUND}${ColorReset}") |
91 | | -endif() |
92 | | - |
93 | | -message( STATUS "---------------------------") |
94 | | -message( STATUS "Neopixel Data GPIO: ${GreenColor}${OUTPUT_DATA_PIN}${ColorReset}") |
95 | | -message( STATUS "SPI Data GPIO: ${GreenColor}${OUTPUT_SPI_DATA_PIN}${ColorReset}") |
96 | | -message( STATUS "SPI Clock GPIO: ${GreenColor}${OUTPUT_SPI_CLOCK_PIN}${ColorReset}") |
97 | | - |
98 | | -if (OUTPUT_SPI_CHIP_SELECT) |
99 | | - message( STATUS "SPI Select GPIO: ${GreenColor}${OUTPUT_SPI_CHIP_SELECT}${ColorReset}") |
100 | | -endif() |
101 | | - |
102 | | -message( STATUS "SPI Interface: ${GreenColor}${OUTPUT_SPI_INTERFACE}${ColorReset}") |
103 | | -message( STATUS "Boot workaround: ${GreenColor}${BOOT_WORKAROUND}${ColorReset}") |
104 | | -message( STATUS "---------------------------") |
105 | | - |
106 | | -add_compile_options(-ftrack-macro-expansion=0 -fno-diagnostics-show-caret -fdiagnostics-color=auto) |
107 | | - |
108 | | -macro(HyperSerialPicoTarget HyperSerialPicoTargetName) |
109 | | - if (PICO_PROGRAM_MAIN_ENTRY) |
110 | | - add_executable(${HyperSerialPicoTargetName} ${PICO_PROGRAM_MAIN_ENTRY}) |
111 | | - else() |
112 | | - add_executable(${HyperSerialPicoTargetName} ${CMAKE_CURRENT_SOURCE_DIR}/source/main.cpp) |
113 | | - endif() |
114 | | - if (BOOT_WORKAROUND) |
115 | | - target_compile_definitions(${HyperSerialPicoTargetName} PUBLIC -DBOOT_WORKAROUND -DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64) |
116 | | - endif() |
117 | | - target_include_directories(${HyperSerialPicoTargetName} PRIVATE ${HyperSerialPicoCompanionIncludes}) |
118 | | - target_link_libraries(${HyperSerialPicoTargetName} ${HyperSerialPicoCompanionLibs}) |
119 | | - pico_add_extra_outputs(${HyperSerialPicoTargetName}) |
120 | | - pico_enable_stdio_usb(${HyperSerialPicoTargetName} 1) |
121 | | - pico_enable_stdio_uart(${HyperSerialPicoTargetName} 0) |
122 | | - pico_generate_pio_header(${HyperSerialPicoTargetName} ${CMAKE_CURRENT_SOURCE_DIR}/pio/neopixel.pio OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/generated) |
123 | | - pico_generate_pio_header(${HyperSerialPicoTargetName} ${CMAKE_CURRENT_SOURCE_DIR}/pio/neopixel_ws2812b.pio OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/generated) |
124 | | - add_custom_command(TARGET ${HyperSerialPicoTargetName} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${HyperSerialPicoTargetName}.uf2 ${CMAKE_CURRENT_SOURCE_DIR}/firmware) |
125 | | -endmacro() |
126 | | - |
127 | | -# targets for different LED strips |
128 | | -IF(NOT SECOND_SEGMENT_INDEX) |
129 | | - IF(NOT DISABLE_SPI_LEDS) |
130 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_Spi") |
131 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_Spi" PRIVATE -DSPILED_APA102 -DSPI_INTERFACE=${OUTPUT_SPI_INTERFACE} -DDATA_PIN=${OUTPUT_SPI_DATA_PIN} -DCLOCK_PIN=${OUTPUT_SPI_CLOCK_PIN}) |
132 | | - endif() |
133 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Cold") |
134 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Cold" PRIVATE -DNEOPIXEL_RGBW -DCOLD_WHITE -DDATA_PIN=${OUTPUT_DATA_PIN}) |
135 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Neutral") |
136 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Neutral" PRIVATE -DNEOPIXEL_RGBW -DDATA_PIN=${OUTPUT_DATA_PIN}) |
137 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_ws2812") |
138 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_ws2812" PRIVATE -DNEOPIXEL_RGB -DDATA_PIN=${OUTPUT_DATA_PIN}) |
139 | | -ELSE() |
140 | | - IF(NOT SECOND_SEGMENT_REVERSED) |
141 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Cold_multisegment_at_${SECOND_SEGMENT_INDEX}") |
142 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Cold_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DCOLD_WHITE -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX}) |
143 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Neutral_multisegment_at_${SECOND_SEGMENT_INDEX}") |
144 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Neutral_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX}) |
145 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_ws2812_multisegment_at_${SECOND_SEGMENT_INDEX}") |
146 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_ws2812_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGB -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX}) |
147 | | - ELSE() |
148 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Cold_rev_multisegment_at_${SECOND_SEGMENT_INDEX}") |
149 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Cold_rev_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DCOLD_WHITE -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX} -DSECOND_SEGMENT_REVERSED) |
150 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Neutral_rev_multisegment_at_${SECOND_SEGMENT_INDEX}") |
151 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Neutral_rev_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX} -DSECOND_SEGMENT_REVERSED) |
152 | | - HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_ws2812_rev_multisegment_at_${SECOND_SEGMENT_INDEX}") |
153 | | - target_compile_definitions("${CMAKE_PROJECT_NAME}_ws2812_rev_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGB -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX} -DSECOND_SEGMENT_REVERSED) |
154 | | - ENDIF() |
155 | | -ENDIF() |
| 5 | +pico_generate_pio_header(${CMAKE_PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/pio/neopixel_ws2812b_parallel.pio OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/generated) |
0 commit comments