diff --git a/.github/workflows/greentea_cmake.yml b/.github/workflows/greentea_cmake.yml index 42c67eb2deb..2ffe9827b28 100644 --- a/.github/workflows/greentea_cmake.yml +++ b/.github/workflows/greentea_cmake.yml @@ -63,6 +63,8 @@ jobs: profile: full - target: DISCO_L562QE profile: full + - target: NUCLEO_U083RC + profile: baremetal - target: B_U585I_IOT02A profile: full - target: NUCLEO_WB55RG diff --git a/platform/include/platform/mbed_assert.h b/platform/include/platform/mbed_assert.h index 34ee1587d0e..884f6a871ea 100644 --- a/platform/include/platform/mbed_assert.h +++ b/platform/include/platform/mbed_assert.h @@ -50,7 +50,8 @@ MBED_NORETURN void mbed_assert_internal(const char *expr, const char *file, int * Declare runtime assertions: results in runtime error if condition is false * * @note - * Use of MBED_ASSERT is limited to Debug and Develop builds. + * Use of MBED_ASSERT is limited to Debug and Develop builds. Code inside an MBED_ASSERT block + * will not be executed at all in Release builds. * * @code * diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/analogin_api.c b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/analogin_api.c index df123d7d4f2..a929d8613b1 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/analogin_api.c +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/analogin_api.c @@ -110,11 +110,11 @@ static void ap3_config_channel(am_hal_adc_slot_chan_e channel){ ADCSlotConfig.bWindowCompare = false; ADCSlotConfig.bEnabled = true; - MBED_ASSERT(am_hal_adc_disable(am_adc_handle) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_adc_disable(am_adc_handle)); - MBED_ASSERT(am_hal_adc_configure_slot(am_adc_handle, 0, &ADCSlotConfig) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_adc_configure_slot(am_adc_handle, 0, &ADCSlotConfig)); - MBED_ASSERT(am_hal_adc_enable(am_adc_handle) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_adc_enable(am_adc_handle)); } // Read an analog in channel as a 14-bit number @@ -126,19 +126,19 @@ static uint16_t readAnalogIn(analogin_t *obj) // Clear any set interrupt flags uint32_t intStatus; am_hal_adc_interrupt_status(am_adc_handle, &intStatus, false); - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_interrupt_clear(am_adc_handle, intStatus)); + MBED_CHECK_AM_HAL_CALL(am_hal_adc_interrupt_clear(am_adc_handle, intStatus)); // Issue SW trigger am_hal_adc_sw_trigger(am_adc_handle); do { // Wait for conversion complete interrupt - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_interrupt_status(am_adc_handle, &intStatus, false)); + MBED_CHECK_AM_HAL_CALL(am_hal_adc_interrupt_status(am_adc_handle, &intStatus, false)); } while(!(intStatus & AM_HAL_ADC_INT_CNVCMP)); - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_interrupt_clear(am_adc_handle, intStatus)); + MBED_CHECK_AM_HAL_CALL(am_hal_adc_interrupt_clear(am_adc_handle, intStatus)); uint32_t numSamplesToRead = 1; am_hal_adc_sample_t sample; - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_samples_read(am_adc_handle, false, NULL, &numSamplesToRead, &sample)); + MBED_CHECK_AM_HAL_CALL(am_hal_adc_samples_read(am_adc_handle, false, NULL, &numSamplesToRead, &sample)); return sample.ui32Sample; } diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/gpio_api.c b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/gpio_api.c index a51dce94d8c..bd01dfe53af 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/gpio_api.c +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/gpio_api.c @@ -109,7 +109,7 @@ void gpio_mode(gpio_t *obj, PinMode mode) } - MBED_ASSERT(ap3_hal_gpio_pinconfig_partial((uint32_t)(obj->pad), obj->cfg, pinConfigBools) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(ap3_hal_gpio_pinconfig_partial((uint32_t)(obj->pad), obj->cfg, pinConfigBools)); } /** Set the pin direction diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/iom_api.c b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/iom_api.c index bb86f37a15c..c507b6e6aef 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/iom_api.c +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/iom_api.c @@ -32,10 +32,10 @@ void iom_init(iom_t *obj) iom_deinit(obj); } - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_initialize(obj->iom.inst, &obj->iom.handle)); - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_WAKE, false)); - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_configure(obj->iom.handle, &obj->iom.cfg)); - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_enable(obj->iom.handle)); + MBED_CHECK_AM_HAL_CALL(am_hal_iom_initialize(obj->iom.inst, &obj->iom.handle)); + MBED_CHECK_AM_HAL_CALL(am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_WAKE, false)); + MBED_CHECK_AM_HAL_CALL(am_hal_iom_configure(obj->iom.handle, &obj->iom.cfg)); + MBED_CHECK_AM_HAL_CALL(am_hal_iom_enable(obj->iom.handle)); // this merely configures the internal peripheral - the desired pins still need to be configured } @@ -48,9 +48,9 @@ void iom_deinit(iom_t *obj) return; } - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_disable(obj->iom.handle)); - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_DEEPSLEEP, false)); - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_uninitialize(obj->iom.handle)); + MBED_CHECK_AM_HAL_CALL(am_hal_iom_disable(obj->iom.handle)); + MBED_CHECK_AM_HAL_CALL(am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_DEEPSLEEP, false)); + MBED_CHECK_AM_HAL_CALL(am_hal_iom_uninitialize(obj->iom.handle)); obj->iom.handle = NULL; } diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/objects.h b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/objects.h index 916548ff26e..a5f9bea2a1c 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/objects.h +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/objects.h @@ -30,4 +30,12 @@ #include "objects_adc.h" #include "objects_pwm.h" +#include "mbed_error.h" + +// Macro to check the result of calling am am_hal function and trigger an error if it fails +#define MBED_CHECK_AM_HAL_CALL(call) \ + if((call) != AM_HAL_STATUS_SUCCESS) { \ + MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_INVALID_OPERATION), "AM HAL Call Failed!"); \ + } + #endif diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/pinmap.c b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/pinmap.c index cbbbd640e0c..04a9dd243c4 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/pinmap.c +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/pinmap.c @@ -27,13 +27,14 @@ #include "mbed_critical.h" #include "extensions.h" #include "am_mcu_apollo.h" +#include "objects.h" void pin_config(PinName pin, am_hal_gpio_pincfg_t pincfg) { if (pin == (PinName)NC) { return; } - MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_gpio_pinconfig(pin, pincfg)); + MBED_CHECK_AM_HAL_CALL(am_hal_gpio_pinconfig(pin, pincfg)); } void pinmap_config(PinName pin, const PinMap *map) diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/serial_api.c b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/serial_api.c index 5a771e910a4..7d2bccc3378 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/serial_api.c +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/serial_api.c @@ -147,9 +147,9 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) obj->serial.uart_control->cfg.ui32FifoLevels = AM_HAL_UART_RX_FIFO_1_8; // start UART instance - MBED_ASSERT(am_hal_uart_initialize(uart, &(obj->serial.uart_control->handle)) == AM_HAL_STATUS_SUCCESS); - MBED_ASSERT(am_hal_uart_power_control(obj->serial.uart_control->handle, AM_HAL_SYSCTRL_WAKE, false) == AM_HAL_STATUS_SUCCESS); - MBED_ASSERT(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_initialize(uart, &(obj->serial.uart_control->handle))); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_power_control(obj->serial.uart_control->handle, AM_HAL_SYSCTRL_WAKE, false)); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false)); // set default format serial_format(obj, 8, ParityNone, 1); @@ -165,7 +165,7 @@ void serial_free(serial_t *obj) void serial_baud(serial_t *obj, int baudrate) { obj->serial.uart_control->cfg.ui32BaudRate = (uint32_t)baudrate; - MBED_ASSERT(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false)); } void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) @@ -222,7 +222,7 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b obj->serial.uart_control->cfg.ui32DataBits = (uint32_t)am_hal_data_bits; obj->serial.uart_control->cfg.ui32Parity = (uint32_t)am_hal_parity; obj->serial.uart_control->cfg.ui32StopBits = (uint32_t)am_hal_stop_bits; - MBED_ASSERT(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false)); } void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) @@ -237,10 +237,10 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) if (enable) { switch (irq) { case RxIrq: - MBED_ASSERT(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX)); break; case TxIrq: - MBED_ASSERT(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP)); break; default: break; @@ -251,10 +251,10 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) } else { // disable switch (irq) { case RxIrq: - MBED_ASSERT(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX)); break; case TxIrq: - MBED_ASSERT(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP)); break; default: break; @@ -377,8 +377,8 @@ static inline void uart_irq(uint32_t instance) // check flags uint32_t status = 0x00; - MBED_ASSERT(am_hal_uart_interrupt_status_get(handle, &status, true) == AM_HAL_STATUS_SUCCESS); - MBED_ASSERT(am_hal_uart_interrupt_clear(handle, status) == AM_HAL_STATUS_SUCCESS); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_interrupt_status_get(handle, &status, true)); + MBED_CHECK_AM_HAL_CALL(am_hal_uart_interrupt_clear(handle, status)); if (ap3_uart_control[instance].serial_irq_id != 0) { if (status & AM_HAL_UART_INT_TXCMP) { // for transmit complete diff --git a/targets/TARGET_STM/stm_dma_utils.c b/targets/TARGET_STM/stm_dma_utils.c index 204656ab968..68a4f4f1a35 100644 --- a/targets/TARGET_STM/stm_dma_utils.c +++ b/targets/TARGET_STM/stm_dma_utils.c @@ -1226,10 +1226,10 @@ void DMA1_Ch4_5_DMAMUX1_OVR_IRQHandler(void) void DMA1_Channel2_3_IRQHandler(void) { - if(stmDMAHandles[0][1] != NULL) { + if(stmDMAHandles[0][1].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[0][1].hdma); } - if(stmDMAHandles[0][2] != NULL) { + if(stmDMAHandles[0][2].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[0][2].hdma); } } @@ -1237,31 +1237,31 @@ void DMA1_Channel2_3_IRQHandler(void) #ifdef DMA2 void DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX_OVR_IRQHandler(void) { - if(stmDMAHandles[0][3] != NULL) { + if(stmDMAHandles[0][3].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[0][3].hdma); } - if(stmDMAHandles[0][4] != NULL) { + if(stmDMAHandles[0][4].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[0][4].hdma); } - if(stmDMAHandles[0][5] != NULL) { + if(stmDMAHandles[0][5].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[0][5].hdma); } - if(stmDMAHandles[0][6] != NULL) { + if(stmDMAHandles[0][6].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[0][6].hdma); } - if(stmDMAHandles[1][0] != NULL) { + if(stmDMAHandles[1][0].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[1][0].hdma); } - if(stmDMAHandles[1][1] != NULL) { + if(stmDMAHandles[1][1].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[1][1].hdma); } - if(stmDMAHandles[1][2] != NULL) { + if(stmDMAHandles[1][2].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[1][2].hdma); } - if(stmDMAHandles[1][3] != NULL) { + if(stmDMAHandles[1][3].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[1][3].hdma); } - if(stmDMAHandles[1][4] != NULL) { + if(stmDMAHandles[1][4].hdma != NULL) { HAL_DMA_IRQHandler(stmDMAHandles[1][4].hdma); } }