Skip to content

Commit f0bbf3a

Browse files
Apollo3: fix Mbed not booting in release mode
1 parent 0ff573d commit f0bbf3a

File tree

6 files changed

+35
-27
lines changed

6 files changed

+35
-27
lines changed

targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/analogin_api.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,11 @@ static void ap3_config_channel(am_hal_adc_slot_chan_e channel){
110110
ADCSlotConfig.bWindowCompare = false;
111111
ADCSlotConfig.bEnabled = true;
112112

113-
MBED_ASSERT(am_hal_adc_disable(am_adc_handle) == AM_HAL_STATUS_SUCCESS);
113+
MBED_CHECK_AM3_HAL_CALL(am_hal_adc_disable(am_adc_handle));
114114

115-
MBED_ASSERT(am_hal_adc_configure_slot(am_adc_handle, 0, &ADCSlotConfig) == AM_HAL_STATUS_SUCCESS);
115+
MBED_CHECK_AM3_HAL_CALL(am_hal_adc_configure_slot(am_adc_handle, 0, &ADCSlotConfig));
116116

117-
MBED_ASSERT(am_hal_adc_enable(am_adc_handle) == AM_HAL_STATUS_SUCCESS);
117+
MBED_CHECK_AM3_HAL_CALL(am_hal_adc_enable(am_adc_handle));
118118
}
119119

120120
// Read an analog in channel as a 14-bit number
@@ -126,19 +126,19 @@ static uint16_t readAnalogIn(analogin_t *obj)
126126
// Clear any set interrupt flags
127127
uint32_t intStatus;
128128
am_hal_adc_interrupt_status(am_adc_handle, &intStatus, false);
129-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_interrupt_clear(am_adc_handle, intStatus));
129+
MBED_CHECK_AM3_HAL_CALL(am_hal_adc_interrupt_clear(am_adc_handle, intStatus));
130130

131131
// Issue SW trigger
132132
am_hal_adc_sw_trigger(am_adc_handle);
133133

134134
do { // Wait for conversion complete interrupt
135-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_interrupt_status(am_adc_handle, &intStatus, false));
135+
MBED_CHECK_AM3_HAL_CALL(am_hal_adc_interrupt_status(am_adc_handle, &intStatus, false));
136136
} while(!(intStatus & AM_HAL_ADC_INT_CNVCMP));
137-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_interrupt_clear(am_adc_handle, intStatus));
137+
MBED_CHECK_AM3_HAL_CALL(am_hal_adc_interrupt_clear(am_adc_handle, intStatus));
138138

139139
uint32_t numSamplesToRead = 1;
140140
am_hal_adc_sample_t sample;
141-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_adc_samples_read(am_adc_handle, false, NULL, &numSamplesToRead, &sample));
141+
MBED_CHECK_AM3_HAL_CALL(am_hal_adc_samples_read(am_adc_handle, false, NULL, &numSamplesToRead, &sample));
142142

143143
return sample.ui32Sample;
144144
}

targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/device.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,11 @@
3939
#include "objects.h"
4040
#include "extensions.h"
4141
#include "us_ticker_defines.h"
42+
#include "mbed_error.h"
43+
44+
#define MBED_CHECK_AM3_HAL_CALL(call) \
45+
if((call) != AM_HAL_STATUS_SUCCESS) { \
46+
MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_INVALID_OPERATION), "AM3 HAL Call Failed!"); \
47+
}
4248

4349
#endif

targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/gpio_api.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void gpio_mode(gpio_t *obj, PinMode mode)
109109
}
110110

111111

112-
MBED_ASSERT(ap3_hal_gpio_pinconfig_partial((uint32_t)(obj->pad), obj->cfg, pinConfigBools) == AM_HAL_STATUS_SUCCESS);
112+
MBED_CHECK_AM3_HAL_CALL(ap3_hal_gpio_pinconfig_partial((uint32_t)(obj->pad), obj->cfg, pinConfigBools));
113113
}
114114

115115
/** Set the pin direction

targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/iom_api.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include "iom_api.h"
2525
#include "mbed_assert.h"
26+
#include "device.h"
2627

2728
void iom_init(iom_t *obj)
2829
{
@@ -32,10 +33,10 @@ void iom_init(iom_t *obj)
3233
iom_deinit(obj);
3334
}
3435

35-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_initialize(obj->iom.inst, &obj->iom.handle));
36-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_WAKE, false));
37-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_configure(obj->iom.handle, &obj->iom.cfg));
38-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_enable(obj->iom.handle));
36+
MBED_CHECK_AM3_HAL_CALL(am_hal_iom_initialize(obj->iom.inst, &obj->iom.handle));
37+
MBED_CHECK_AM3_HAL_CALL(am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_WAKE, false));
38+
MBED_CHECK_AM3_HAL_CALL(am_hal_iom_configure(obj->iom.handle, &obj->iom.cfg));
39+
MBED_CHECK_AM3_HAL_CALL(am_hal_iom_enable(obj->iom.handle));
3940

4041
// this merely configures the internal peripheral - the desired pins still need to be configured
4142
}
@@ -48,9 +49,9 @@ void iom_deinit(iom_t *obj)
4849
return;
4950
}
5051

51-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_disable(obj->iom.handle));
52-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_DEEPSLEEP, false));
53-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_iom_uninitialize(obj->iom.handle));
52+
MBED_CHECK_AM3_HAL_CALL(am_hal_iom_disable(obj->iom.handle));
53+
MBED_CHECK_AM3_HAL_CALL(am_hal_iom_power_ctrl(obj->iom.handle, AM_HAL_SYSCTRL_DEEPSLEEP, false));
54+
MBED_CHECK_AM3_HAL_CALL(am_hal_iom_uninitialize(obj->iom.handle));
5455

5556
obj->iom.handle = NULL;
5657
}

targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/pinmap.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@
2727
#include "mbed_critical.h"
2828
#include "extensions.h"
2929
#include "am_mcu_apollo.h"
30+
#include "device.h"
3031

3132
void pin_config(PinName pin, am_hal_gpio_pincfg_t pincfg)
3233
{
3334
if (pin == (PinName)NC) {
3435
return;
3536
}
36-
MBED_ASSERT(AM_HAL_STATUS_SUCCESS == am_hal_gpio_pinconfig(pin, pincfg));
37+
MBED_CHECK_AM3_HAL_CALL(am_hal_gpio_pinconfig(pin, pincfg));
3738
}
3839

3940
void pinmap_config(PinName pin, const PinMap *map)

targets/TARGET_Ambiq_Micro/TARGET_Apollo3/device/serial_api.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
147147
obj->serial.uart_control->cfg.ui32FifoLevels = AM_HAL_UART_RX_FIFO_1_8;
148148

149149
// start UART instance
150-
MBED_ASSERT(am_hal_uart_initialize(uart, &(obj->serial.uart_control->handle)) == AM_HAL_STATUS_SUCCESS);
151-
MBED_ASSERT(am_hal_uart_power_control(obj->serial.uart_control->handle, AM_HAL_SYSCTRL_WAKE, false) == AM_HAL_STATUS_SUCCESS);
152-
MBED_ASSERT(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false) == AM_HAL_STATUS_SUCCESS);
150+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_initialize(uart, &(obj->serial.uart_control->handle)));
151+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_power_control(obj->serial.uart_control->handle, AM_HAL_SYSCTRL_WAKE, false));
152+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false));
153153

154154
// set default format
155155
serial_format(obj, 8, ParityNone, 1);
@@ -165,7 +165,7 @@ void serial_free(serial_t *obj)
165165
void serial_baud(serial_t *obj, int baudrate)
166166
{
167167
obj->serial.uart_control->cfg.ui32BaudRate = (uint32_t)baudrate;
168-
MBED_ASSERT(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false) == AM_HAL_STATUS_SUCCESS);
168+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false));
169169
}
170170

171171
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
222222
obj->serial.uart_control->cfg.ui32DataBits = (uint32_t)am_hal_data_bits;
223223
obj->serial.uart_control->cfg.ui32Parity = (uint32_t)am_hal_parity;
224224
obj->serial.uart_control->cfg.ui32StopBits = (uint32_t)am_hal_stop_bits;
225-
MBED_ASSERT(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false) == AM_HAL_STATUS_SUCCESS);
225+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_configure_fifo(obj->serial.uart_control->handle, &(obj->serial.uart_control->cfg), false));
226226
}
227227

228228
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)
237237
if (enable) {
238238
switch (irq) {
239239
case RxIrq:
240-
MBED_ASSERT(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX) == AM_HAL_STATUS_SUCCESS);
240+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX));
241241
break;
242242
case TxIrq:
243-
MBED_ASSERT(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP) == AM_HAL_STATUS_SUCCESS);
243+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_interrupt_enable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP));
244244
break;
245245
default:
246246
break;
@@ -251,10 +251,10 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
251251
} else { // disable
252252
switch (irq) {
253253
case RxIrq:
254-
MBED_ASSERT(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX) == AM_HAL_STATUS_SUCCESS);
254+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_RX));
255255
break;
256256
case TxIrq:
257-
MBED_ASSERT(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP) == AM_HAL_STATUS_SUCCESS);
257+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_interrupt_disable(obj->serial.uart_control->handle, AM_HAL_UART_INT_TXCMP));
258258
break;
259259
default:
260260
break;
@@ -377,8 +377,8 @@ static inline void uart_irq(uint32_t instance)
377377

378378
// check flags
379379
uint32_t status = 0x00;
380-
MBED_ASSERT(am_hal_uart_interrupt_status_get(handle, &status, true) == AM_HAL_STATUS_SUCCESS);
381-
MBED_ASSERT(am_hal_uart_interrupt_clear(handle, status) == AM_HAL_STATUS_SUCCESS);
380+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_interrupt_status_get(handle, &status, true));
381+
MBED_CHECK_AM3_HAL_CALL(am_hal_uart_interrupt_clear(handle, status));
382382

383383
if (ap3_uart_control[instance].serial_irq_id != 0) {
384384
if (status & AM_HAL_UART_INT_TXCMP) { // for transmit complete

0 commit comments

Comments
 (0)