From 1b25cf0ed144f28ee663e86bb4052f660918674b Mon Sep 17 00:00:00 2001 From: graham sanderson Date: Thu, 1 Apr 2021 16:43:50 -0500 Subject: [PATCH 1/5] set version for release --- pico_sdk_version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pico_sdk_version.cmake b/pico_sdk_version.cmake index 9f2aa61..db48268 100644 --- a/pico_sdk_version.cmake +++ b/pico_sdk_version.cmake @@ -9,7 +9,7 @@ set(PICO_SDK_VERSION_MINOR 1) set(PICO_SDK_VERSION_REVISION 1) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base # PICO_CONFIG: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base -set(PICO_SDK_VERSION_PRE_RELEASE_ID develop) +#set(PICO_SDK_VERSION_PRE_RELEASE_ID develop) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_STRING, SDK version, type=string, group=pico_base # PICO_CONFIG: PICO_SDK_VERSION_STRING, SDK version, type=string, group=pico_base From c6f87c7d625d5de1ba3b2977d32cc85cab99f094 Mon Sep 17 00:00:00 2001 From: graham sanderson Date: Tue, 6 Apr 2021 11:09:32 -0500 Subject: [PATCH 2/5] set version to 1.1.2 --- pico_sdk_version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pico_sdk_version.cmake b/pico_sdk_version.cmake index db48268..6481637 100644 --- a/pico_sdk_version.cmake +++ b/pico_sdk_version.cmake @@ -6,7 +6,7 @@ set(PICO_SDK_VERSION_MAJOR 1) set(PICO_SDK_VERSION_MINOR 1) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base # PICO_CONFIG: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base -set(PICO_SDK_VERSION_REVISION 1) +set(PICO_SDK_VERSION_REVISION 2) # PICO_BUILD_DEFINE: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base # PICO_CONFIG: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base #set(PICO_SDK_VERSION_PRE_RELEASE_ID develop) From d974a3b0e914c4e691d839214d56ace6ea39906e Mon Sep 17 00:00:00 2001 From: graham sanderson Date: Tue, 6 Apr 2021 11:48:42 -0500 Subject: [PATCH 3/5] boot_stage2: cleanup and correctness fixes --- src/rp2_common/boot_stage2/CMakeLists.txt | 19 ++--- .../boot_stage2/compile_time_choice.S | 16 +---- .../boot_stage2/include/boot_stage2/config.h | 72 +++++++++++++++---- .../pico_standard_link/binary_info.c | 5 +- 4 files changed, 76 insertions(+), 36 deletions(-) diff --git a/src/rp2_common/boot_stage2/CMakeLists.txt b/src/rp2_common/boot_stage2/CMakeLists.txt index 99adf40..73c3e3e 100644 --- a/src/rp2_common/boot_stage2/CMakeLists.txt +++ b/src/rp2_common/boot_stage2/CMakeLists.txt @@ -1,10 +1,13 @@ -# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2_FILE, Default stage2 file to use unless overridden by pico_set_boot_stage2 on the TARGET; this setting is useful when explicitly setting the default build from a per board CMake file, group=build -# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2, Simpler alternative to specifying PICO_DEFAULT_BOOT_STAGE2_FILE where the file is src/boards/{PICO_DEFAULT_BOOT_STAGE2_FILE}.S, default=compile_time_choice, group=build +# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2_FILE, Default boot stage 2 file to use unless overridden by pico_set_boot_stage2 on the TARGET; this setting is useful when explicitly setting the default build from a per board CMake file, group=build +# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2, Simpler alternative to specifying PICO_DEFAULT_BOOT_STAGE2_FILE where the file is src/rp2_common/boot_stage2/{PICO_DEFAULT_BOOT_STAGE2}.S, default=compile_time_choice, group=build + if (DEFINED ENV{PICO_DEFAULT_BOOT_STAGE2_FILE}) set(PICO_DEFAULT_BOOT_STAGE2_FILE $ENV{PICO_DEFAULT_BOOT_STAGE2_FILE}) message("Using PICO_DEFAULT_BOOT_STAGE2_FILE from environment ('${PICO_DEFAULT_BOOT_STAGE2_FILE}')") +elif (PICO_DEFAULT_BOOT_STAGE2_FILE) + # explicitly set, so cache it + set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_DEFAULT_BOOT_STAGE2_FILE}" CACHE STRING "boot stage 2 source file" FORCE) endif() -set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_DEFAULT_BOOT_STAGE2_FILE}" CACHE STRING "boot_stage2 source file" FORCE) set(PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME compile_time_choice) # local var if (NOT PICO_DEFAULT_BOOT_STAGE2_FILE) @@ -15,12 +18,12 @@ if (NOT PICO_DEFAULT_BOOT_STAGE2_FILE) if (NOT DEFINED PICO_DEFAULT_BOOT_STAGE2) set(PICO_DEFAULT_BOOT_STAGE2 ${PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME}) endif() - set(PICO_DEFAULT_BOOT_STAGE2 "${PICO_DEFAULT_BOOT_STAGE2}" CACHE STRING "boot_stage2 short name" FORCE) + set(PICO_DEFAULT_BOOT_STAGE2 "${PICO_DEFAULT_BOOT_STAGE2}" CACHE STRING "boot stage 2 short name" FORCE) set(PICO_DEFAULT_BOOT_STAGE2_FILE "${CMAKE_CURRENT_LIST_DIR}/${PICO_DEFAULT_BOOT_STAGE2}.S") endif() if (NOT EXISTS ${PICO_DEFAULT_BOOT_STAGE2_FILE}) - message(FATAL_ERROR "Specified boot_stage2 source '${PICO_DEFAULT_BOOT_STAGE2_FILE}' does not exist.") + message(FATAL_ERROR "Specified boot stage 2 source '${PICO_DEFAULT_BOOT_STAGE2_FILE}' does not exist.") endif() # needed by function below @@ -52,7 +55,7 @@ function(pico_define_boot_stage2 NAME SOURCES) pico_add_dis_output(${NAME}) pico_add_map_output(${NAME}) - + set(ORIGINAL_BIN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.bin) set(PADDED_CHECKSUMMED_ASM ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_padded_checksummed.S) @@ -60,7 +63,7 @@ function(pico_define_boot_stage2 NAME SOURCES) add_custom_target(${NAME}_bin DEPENDS ${ORIGINAL_BIN}) add_custom_command(OUTPUT ${ORIGINAL_BIN} DEPENDS ${NAME} COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${ORIGINAL_BIN}) - + add_custom_target(${NAME}_padded_checksummed_asm DEPENDS ${PADDED_CHECKSUMMED_ASM}) add_custom_command(OUTPUT ${PADDED_CHECKSUMMED_ASM} DEPENDS ${ORIGINAL_BIN} COMMAND ${Python3_EXECUTABLE} ${PICO_BOOT_STAGE2_DIR}/pad_checksum -s 0xffffffff ${ORIGINAL_BIN} ${PADDED_CHECKSUMMED_ASM} @@ -89,7 +92,7 @@ macro(pico_set_boot_stage2 TARGET NAME) if ("EXECUTABLE" STREQUAL "${target_type}") set_target_properties(${TARGET} PROPERTIES PICO_TARGET_BOOT_STAGE2 "${NAME}") else() - message(FATAL_ERROR "boot stage2 implementation must be set on executable not library") + message(FATAL_ERROR "boot stage 2 implementation must be set on executable not library") endif() endmacro() diff --git a/src/rp2_common/boot_stage2/compile_time_choice.S b/src/rp2_common/boot_stage2/compile_time_choice.S index cacb9aa..5aa2b96 100644 --- a/src/rp2_common/boot_stage2/compile_time_choice.S +++ b/src/rp2_common/boot_stage2/compile_time_choice.S @@ -11,19 +11,9 @@ #include "boot_stage2/config.h" #ifdef PICO_BUILD_BOOT_STAGE2_NAME - // boot stage2 is configured by cmake, so use the name specified there + // boot stage 2 is configured by cmake, so use the name specified there #error PICO_BUILD_BOOT_STAGE2_NAME should not be defined for compile_time_choice builds #else - // boot stage2 is selected by board configu header, so we have to do some work - #if PICO_BOOT_STAGE2_CHOOSE_IS25LP080 - #include "boot2_is25lp080.S" - #elif PICO_BOOT_STAGE2_CHOOSE_W25Q080 - #include "boot2_w28q080.S" - #elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL - #include "boot2_w25x10cl.S" - #elif PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H - #include "boot2_generic_03h.S" - #else - #error unknown boot stage2 choice - #endif + // boot stage 2 is selected by board config header, and PICO_BOOT_STAGE2_ASM is set in boot_stage2/config.h + #include PICO_BOOT_STAGE2_ASM #endif diff --git a/src/rp2_common/boot_stage2/include/boot_stage2/config.h b/src/rp2_common/boot_stage2/include/boot_stage2/config.h index f6fdb9f..a8179b9 100644 --- a/src/rp2_common/boot_stage2/include/boot_stage2/config.h +++ b/src/rp2_common/boot_stage2/include/boot_stage2/config.h @@ -9,30 +9,74 @@ // NOTE THIS HEADER IS INCLUDED FROM ASSEMBLY +#include "pico/config.h" + // PICO_CONFIG: PICO_BUILD_BOOT_STAGE2_NAME, The name of the boot stage 2 if selected by the build, group=boot_stage2 -// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_IS25LP080, Select boot2_is25lp080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2 -// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25Q080, Select boot2_w28q080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2 -// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25X10CL, Select boot2_is25lp080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2 -// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H, Select boot2_generic_03h as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=true, group=boot_stage2 +#ifdef PICO_BUILD_BOOT_STAGE2_NAME + #define _BOOT_STAGE2_SELECTED +#else + // check that multiple boot stage 2 options haven't been set... + +// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_IS25LP080, Select boot2_is25lp080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2 +#ifndef PICO_BOOT_STAGE2_CHOOSE_IS25LP080 + #define PICO_BOOT_STAGE2_CHOOSE_IS25LP080 0 +#elif PICO_BOOT_STAGE2_CHOOSE_IS25LP080 + #ifdef _BOOT_STAGE2_SELECTED + #error multiple boot stage 2 options chosen + #endif + #define _BOOT_STAGE2_SELECTED +#endif +// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25Q080, Select boot2_w25q080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2 +#ifndef PICO_BOOT_STAGE2_CHOOSE_W25Q080 + #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 0 +#elif PICO_BOOT_STAGE2_CHOOSE_W25Q080 + #ifdef _BOOT_STAGE2_SELECTED + #error multiple boot stage 2 options chosen + #endif + #define _BOOT_STAGE2_SELECTED +#endif +// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25X10CL, Select boot2_w25x10cl as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2 +#ifndef PICO_BOOT_STAGE2_CHOOSE_W25X10CL + #define PICO_BOOT_STAGE2_CHOOSE_W25X10CL 0 +#elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL + #ifdef _BOOT_STAGE2_SELECTED + #error multiple boot stage 2 options chosen + #endif + #define _BOOT_STAGE2_SELECTED +#endif +// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H, Select boot2_generic_03h as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=1, group=boot_stage2 +#if defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) && PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H + #ifdef _BOOT_STAGE2_SELECTED + #error multiple boot stage 2 options chosen + #endif + #define _BOOT_STAGE2_SELECTED +#endif + +#endif // PICO_BUILD_BOOT_STAGE2_NAME #ifdef PICO_BUILD_BOOT_STAGE2_NAME - // boot stage2 is configured by cmake, so use the name specified there + // boot stage 2 is configured by cmake, so use the name specified there #define PICO_BOOT_STAGE2_NAME PICO_BUILD_BOOT_STAGE2_NAME #else - // boot stage2 is selected by board configu header, so we have to do some work - // NOTE: this switch is mirrored in compile_time_choice.S + // boot stage 2 is selected by board config header, so we have to do some work #if PICO_BOOT_STAGE2_CHOOSE_IS25LP080 - #define PICO_BOOT_STAGE2_NAME "boot2_is25lp080" + #define _BOOT_STAGE2 boot2_is25lp080 #elif PICO_BOOT_STAGE2_CHOOSE_W25Q080 - #define PICO_BOOT_STAGE2_NAME "boot2_w28q080" + #define _BOOT_STAGE2 boot2_w25q080 #elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL - #define PICO_BOOT_STAGE2_NAME "boot2_w25x10cl" - #elif PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H || !defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) + #define _BOOT_STAGE2 boot2_w25x10cl + #elif !defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) || PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H #undef PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H #define PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H 1 - #define PICO_BOOT_STAGE2_NAME "boot2_generic_03h" + #define _BOOT_STAGE2 boot2_generic_03h #else - #error no bootstage2 is defined by PICO_BOOT_STAGE2_CHOOSE_ macro + #error no boot stage 2 is defined by PICO_BOOT_STAGE2_CHOOSE_ macro #endif + // we can't include cdefs in assembly, so define our own, but avoid conflict with real ones for c inclusion + #define _PICO__STRING(x) #x + #define _PICO__XSTRING(x) _PICO__STRING(x) + #define _PICO__CONCAT1(x, y) x ## y + #define PICO_BOOT_STAGE2_NAME _PICO__XSTRING(_BOOT_STAGE2) + #define PICO_BOOT_STAGE2_ASM _PICO__XSTRING(_PICO__CONCAT1(_BOOT_STAGE2,.S)) +#endif #endif -#endif \ No newline at end of file diff --git a/src/rp2_common/pico_standard_link/binary_info.c b/src/rp2_common/pico_standard_link/binary_info.c index bde2027..aa67ac4 100644 --- a/src/rp2_common/pico_standard_link/binary_info.c +++ b/src/rp2_common/pico_standard_link/binary_info.c @@ -6,7 +6,10 @@ #if !PICO_NO_BINARY_INFO && !PICO_NO_PROGRAM_INFO #include "pico/binary_info.h" + +#if !PICO_NO_FLASH #include "boot_stage2/config.h" +#endif // Note we put at most 4 pieces of binary info in the reset section because that's how much spare space we had // (picked the most common ones)... if there is a link failure because of .reset section overflow then move @@ -89,4 +92,4 @@ bi_decl(bi_program_build_attribute("All optimization disabled")) #endif #endif -#endif \ No newline at end of file +#endif From 0911393fe2a81d1c96a7336f7cfd328f1d290d2b Mon Sep 17 00:00:00 2001 From: Lyle Cheatham <66628590+Lyle-Alloy@users.noreply.github.com> Date: Tue, 6 Apr 2021 17:41:57 -0400 Subject: [PATCH 4/5] Changed the parameter check to avoid tripping -Werror on spin locks (#307) This prevents a comparison between a signed and an unsigned number which will create a warning tripping -Werror. Also added a check for the alignment of the spin lock structure --- src/rp2_common/hardware_sync/include/hardware/sync.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/rp2_common/hardware_sync/include/hardware/sync.h b/src/rp2_common/hardware_sync/include/hardware/sync.h index 3131375..b206346 100644 --- a/src/rp2_common/hardware_sync/include/hardware/sync.h +++ b/src/rp2_common/hardware_sync/include/hardware/sync.h @@ -204,9 +204,10 @@ inline static spin_lock_t *spin_lock_instance(uint lock_num) { * \return The Spinlock ID */ inline static uint spin_lock_get_num(spin_lock_t *lock) { - int lock_num = lock - (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET); - invalid_params_if(SYNC, lock_num < 0 || lock_num >= NUM_SPIN_LOCKS); - return (uint) lock_num; + invalid_params_if(SYNC, (uint) lock < SIO_BASE + SIO_SPINLOCK0_OFFSET || + (uint) lock >= NUM_SPIN_LOCKS * sizeof(spin_lock_t) + SIO_BASE + SIO_SPINLOCK0_OFFSET || + ((uint) lock - SIO_BASE + SIO_SPINLOCK0_OFFSET) % sizeof(spin_lock_t) != 0); + return (uint) (lock - (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET)); } /*! \brief Acquire a spin lock without disabling interrupts (hence unsafe) From 92f948c123d46ce69753a1b4e1f2eaee6403b168 Mon Sep 17 00:00:00 2001 From: Graham Sanderson Date: Tue, 6 Apr 2021 20:50:26 -0500 Subject: [PATCH 5/5] Make kitchen_sink check param assertions, and include all headers - fix sign-compare warnings (#316) --- src/rp2_common/hardware_dma/dma.c | 5 ++- src/rp2_common/hardware_gpio/gpio.c | 2 +- .../hardware_pio/include/hardware/pio.h | 4 +- .../hardware_pwm/include/hardware/pwm.h | 18 ++++++--- test/kitchen_sink/CMakeLists.txt | 3 +- test/kitchen_sink/kitchen_sink.c | 40 +++++++++++++++---- 6 files changed, 53 insertions(+), 19 deletions(-) diff --git a/src/rp2_common/hardware_dma/dma.c b/src/rp2_common/hardware_dma/dma.c index c912e7f..d648bfb 100644 --- a/src/rp2_common/hardware_dma/dma.c +++ b/src/rp2_common/hardware_dma/dma.c @@ -60,9 +60,10 @@ void print_dma_ctrl(dma_channel_hw_t *channel) { ctrl & DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_BITS ? 1 : 0, ctrl & DMA_CH0_CTRL_TRIG_EN_BITS ? 1 : 0); } +#endif -void check_dma_channel_param_impl(uint channel) { +#if PARAM_ASSERTIONS_ENABLED(DMA) +void check_dma_channel_param_impl(uint __unused channel) { valid_params_if(DMA, channel < NUM_DMA_CHANNELS); } - #endif diff --git a/src/rp2_common/hardware_gpio/gpio.c b/src/rp2_common/hardware_gpio/gpio.c index b6335d0..a9b953b 100644 --- a/src/rp2_common/hardware_gpio/gpio.c +++ b/src/rp2_common/hardware_gpio/gpio.c @@ -27,7 +27,7 @@ int gpio_get_pad(uint gpio) { // This also clears the input/output/irq override bits. void gpio_set_function(uint gpio, enum gpio_function fn) { invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS); - invalid_params_if(GPIO, fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB & ~IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS); + invalid_params_if(GPIO, ((uint32_t)fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB) & ~IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS); // Set input enable on, output disable off hw_write_masked(&padsbank0_hw->io[gpio], PADS_BANK0_GPIO0_IE_BITS, diff --git a/src/rp2_common/hardware_pio/include/hardware/pio.h b/src/rp2_common/hardware_pio/include/hardware/pio.h index 36194b8..1fc00f1 100644 --- a/src/rp2_common/hardware_pio/include/hardware/pio.h +++ b/src/rp2_common/hardware_pio/include/hardware/pio.h @@ -320,7 +320,7 @@ static inline void sm_config_set_out_shift(pio_sm_config *c, bool shift_right, b * \param join Specifies the join type. \see enum pio_fifo_join */ static inline void sm_config_set_fifo_join(pio_sm_config *c, enum pio_fifo_join join) { - valid_params_if(PIO, join >= PIO_FIFO_JOIN_NONE && join <= PIO_FIFO_JOIN_RX); + valid_params_if(PIO, join == PIO_FIFO_JOIN_NONE || join == PIO_FIFO_JOIN_TX || join == PIO_FIFO_JOIN_RX); c->shiftctrl = (c->shiftctrl & (uint)~(PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS | PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS)) | (((uint)join) << PIO_SM0_SHIFTCTRL_FJOIN_TX_LSB); } @@ -350,7 +350,7 @@ static inline void sm_config_set_out_special(pio_sm_config *c, bool sticky, bool * \param status_n parameter for the mov status operation (currently a bit count) */ static inline void sm_config_set_mov_status(pio_sm_config *c, enum pio_mov_status_type status_sel, uint status_n) { - valid_params_if(PIO, status_sel >= STATUS_TX_LESSTHAN && status_sel <= STATUS_RX_LESSTHAN); + valid_params_if(PIO, status_sel == STATUS_TX_LESSTHAN || status_sel == STATUS_RX_LESSTHAN); c->execctrl = (c->execctrl & ~(PIO_SM0_EXECCTRL_STATUS_SEL_BITS | PIO_SM0_EXECCTRL_STATUS_N_BITS)) | ((((uint)status_sel) << PIO_SM0_EXECCTRL_STATUS_SEL_LSB) & PIO_SM0_EXECCTRL_STATUS_SEL_BITS) diff --git a/src/rp2_common/hardware_pwm/include/hardware/pwm.h b/src/rp2_common/hardware_pwm/include/hardware/pwm.h index 768dae5..e071b72 100644 --- a/src/rp2_common/hardware_pwm/include/hardware/pwm.h +++ b/src/rp2_common/hardware_pwm/include/hardware/pwm.h @@ -47,10 +47,10 @@ extern "C" { */ enum pwm_clkdiv_mode { - PWM_DIV_FREE_RUNNING, ///< Free-running counting at rate dictated by fractional divider - PWM_DIV_B_HIGH, ///< Fractional divider is gated by the PWM B pin - PWM_DIV_B_RISING, ///< Fractional divider advances with each rising edge of the PWM B pin - PWM_DIV_B_FALLING ///< Fractional divider advances with each falling edge of the PWM B pin + PWM_DIV_FREE_RUNNING = 0, ///< Free-running counting at rate dictated by fractional divider + PWM_DIV_B_HIGH = 1, ///< Fractional divider is gated by the PWM B pin + PWM_DIV_B_RISING = 2, ///< Fractional divider advances with each rising edge of the PWM B pin + PWM_DIV_B_FALLING = 3 ///< Fractional divider advances with each falling edge of the PWM B pin }; enum pwm_chan @@ -144,7 +144,10 @@ static inline void pwm_config_set_clkdiv_int(pwm_config *c, uint div) { * high level, rising edge or falling edge of the B pin input. */ static inline void pwm_config_set_clkdiv_mode(pwm_config *c, enum pwm_clkdiv_mode mode) { - valid_params_if(PWM, mode >= PWM_DIV_FREE_RUNNING && mode <= PWM_DIV_B_FALLING); + valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING || + mode == PWM_DIV_B_RISING || + mode == PWM_DIV_B_HIGH || + mode == PWM_DIV_B_FALLING); c->csr = (c->csr & ~PWM_CH0_CSR_DIVMODE_BITS) | (((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB); } @@ -414,7 +417,10 @@ static inline void pwm_set_output_polarity(uint slice_num, bool a, bool b) { */ static inline void pwm_set_clkdiv_mode(uint slice_num, enum pwm_clkdiv_mode mode) { check_slice_num_param(slice_num); - valid_params_if(PWM, mode >= PWM_DIV_FREE_RUNNING && mode <= PWM_DIV_B_FALLING); + valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING || + mode == PWM_DIV_B_RISING || + mode == PWM_DIV_B_HIGH || + mode == PWM_DIV_B_FALLING); hw_write_masked(&pwm_hw->slice[slice_num].csr, ((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB, PWM_CH0_CSR_DIVMODE_BITS); } diff --git a/test/kitchen_sink/CMakeLists.txt b/test/kitchen_sink/CMakeLists.txt index 2976f76..a0bfe1a 100644 --- a/test/kitchen_sink/CMakeLists.txt +++ b/test/kitchen_sink/CMakeLists.txt @@ -66,6 +66,7 @@ target_compile_options(kitchen_sink_options INTERFACE -Wfloat-equal -Wmissing-format-attribute -Wconversion + -Wsign-compare $<$:-Wstrict-prototypes> -Wno-inline @@ -85,7 +86,7 @@ target_compile_options(kitchen_sink_options INTERFACE ) target_compile_definitions(kitchen_sink_libs INTERFACE - NDEBUG + PARAM_ASSERTIONS_ENABLE_ALL=1 # want to check all the assertions for compilation warnings PICO_AUDIO_DMA_IRQ=1 ) diff --git a/test/kitchen_sink/kitchen_sink.c b/test/kitchen_sink/kitchen_sink.c index 033df3d..3fc7b53 100644 --- a/test/kitchen_sink/kitchen_sink.c +++ b/test/kitchen_sink/kitchen_sink.c @@ -5,18 +5,44 @@ */ #include -#include "pico/stdlib.h" -#include "pico/time.h" +// Include all headers to check for compiler warnings +#include "hardware/adc.h" +#include "hardware/claim.h" +#include "hardware/clocks.h" +#include "hardware/divider.h" #include "hardware/dma.h" -#include "pico/bit_ops.h" +#include "hardware/flash.h" +#include "hardware/gpio.h" #include "hardware/i2c.h" -#include "hardware/pwm.h" -#include "hardware/pio.h" +#include "hardware/interp.h" #include "hardware/irq.h" +#include "hardware/pio.h" +#include "hardware/pll.h" +#include "hardware/pwm.h" +#include "hardware/resets.h" +#include "hardware/rtc.h" +#include "hardware/spi.h" +#include "hardware/sync.h" #include "hardware/timer.h" -#include "pico/divider.h" -#include "pico/critical_section.h" +#include "hardware/uart.h" +#include "hardware/vreg.h" +#include "hardware/watchdog.h" +#include "hardware/xosc.h" #include "pico/binary_info.h" +#include "pico/bit_ops.h" +#include "pico/bootrom.h" +#include "pico/divider.h" +#include "pico/double.h" +#include "pico/fix/rp2040_usb_device_enumeration.h" +#include "pico/float.h" +#include "pico/int64_ops.h" +#include "pico/malloc.h" +#include "pico/multicore.h" +#include "pico/printf.h" +#include "pico/stdlib.h" +#include "pico/sync.h" +#include "pico/time.h" +#include "pico/unique_id.h" bi_decl(bi_block_device( BINARY_INFO_MAKE_TAG('K', 'S'),