You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by GitBox <gi...@apache.org> on 2017/11/20 23:41:29 UTC

[GitHub] ccollins476ad closed pull request #667: Apollo2 - Tickless idle and HAL timer implementation

ccollins476ad closed pull request #667: Apollo2 - Tickless idle and HAL timer implementation
URL: https://github.com/apache/mynewt-core/pull/667
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/hw/bsp/apollo2_evb/src/hal_bsp.c b/hw/bsp/apollo2_evb/src/hal_bsp.c
index 9a0688324..c23edbd15 100644
--- a/hw/bsp/apollo2_evb/src/hal_bsp.c
+++ b/hw/bsp/apollo2_evb/src/hal_bsp.c
@@ -122,10 +122,28 @@ hal_bsp_core_dump(int *area_cnt)
 void
 hal_bsp_init(void)
 {
+    struct apollo2_timer_cfg timer_cfg;
     int rc;
 
+    (void) timer_cfg;
     (void) rc;
 
+#if MYNEWT_VAL(TIMER_0_SOURCE)
+    timer_cfg.source = MYNEWT_VAL(TIMER_0_SOURCE);
+    rc = hal_timer_init(0, &timer_cfg);
+    assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1_SOURCE)
+    timer_cfg.source = MYNEWT_VAL(TIMER_1_SOURCE);
+    rc = hal_timer_init(1, &timer_cfg);
+    assert(rc == 0);
+#endif
+
+#if (MYNEWT_VAL(OS_CPUTIME_TIMER_NUM) >= 0)
+    rc = os_cputime_init(MYNEWT_VAL(OS_CPUTIME_FREQ));
+    assert(rc == 0);
+#endif
+
 #if MYNEWT_VAL(UART_0)
     rc = os_dev_create((struct os_dev *) &os_bsp_uart0, "uart0",
             OS_DEV_INIT_PRIMARY, 0, uart_hal_init, (void *) &os_bsp_uart0_cfg);
diff --git a/hw/bsp/apollo2_evb/syscfg.yml b/hw/bsp/apollo2_evb/syscfg.yml
index 73768fd2f..47c5f1b7a 100644
--- a/hw/bsp/apollo2_evb/syscfg.yml
+++ b/hw/bsp/apollo2_evb/syscfg.yml
@@ -39,7 +39,6 @@ syscfg.defs:
         description: 'CTS pin for UART0'
         value: 38
 
-
 syscfg.vals:
     CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
     REBOOT_LOG_FLASH_AREA: FLASH_AREA_REBOOT_LOG
diff --git a/hw/mcu/ambiq/apollo2/include/mcu/cortex_m4.h b/hw/mcu/ambiq/apollo2/include/mcu/cortex_m4.h
index 1d391786b..92c26ccd4 100644
--- a/hw/mcu/ambiq/apollo2/include/mcu/cortex_m4.h
+++ b/hw/mcu/ambiq/apollo2/include/mcu/cortex_m4.h
@@ -28,7 +28,7 @@
 extern "C" {
 #endif
 
-#define OS_TICKS_PER_SEC    (1000)
+#define OS_TICKS_PER_SEC    (128)
 
 #ifdef __cplusplus
 }
diff --git a/hw/mcu/ambiq/apollo2/include/mcu/hal_apollo2.h b/hw/mcu/ambiq/apollo2/include/mcu/hal_apollo2.h
index 5da8c4257..6aa0a5f89 100644
--- a/hw/mcu/ambiq/apollo2/include/mcu/hal_apollo2.h
+++ b/hw/mcu/ambiq/apollo2/include/mcu/hal_apollo2.h
@@ -44,6 +44,16 @@ struct apollo2_spi_cfg {
     uint8_t ss_pin;
 };
 
+#define APOLLO2_TIMER_SOURCE_HFRC       1 /* High-frequency RC oscillator. */
+#define APOLLO2_TIMER_SOURCE_XT         2 /* 32.768 kHz crystal oscillator. */
+#define APOLLO2_TIMER_SOURCE_LFRC       3 /* Low-frequency RC oscillator. */
+#define APOLLO2_TIMER_SOURCE_RTC        4 /* Real time clock. */
+#define APOLLO2_TIMER_SOURCE_HCLK       5 /* Main CPU clock. */
+
+struct apollo2_timer_cfg {
+    uint8_t source;
+};
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/hw/mcu/ambiq/apollo2/src/hal_os_tick.c b/hw/mcu/ambiq/apollo2/src/hal_os_tick.c
index d786d6911..7db55cb60 100644
--- a/hw/mcu/ambiq/apollo2/src/hal_os_tick.c
+++ b/hw/mcu/ambiq/apollo2/src/hal_os_tick.c
@@ -17,31 +17,118 @@
  * under the License.
  */
 
+/**
+ * NOTE: Unlike other MCUs, this one does not use SysTick to implement the
+ * tickless idle state.  The SysTick timer uses HCLK as its source, and HCLK is
+ * gated while this MCU is in deep sleep (e.g., during a `wfi` instruction).
+ *
+ * To enable a wake up from deep sleep, the idle state is instead implemented
+ * using this MCU's system timer (STIMER) with LFRC as the source.
+ */
+
 #include <assert.h>
 #include <os/os.h>
-#include <mcu/system_apollo2.h>
-#include <hal/hal_os_tick.h>
+#include "mcu/system_apollo2.h"
+#include "hal/hal_os_tick.h"
+#include "bsp/cmsis_nvic.h"
+
+#include "am_mcu_apollo.h"
+
+#define APOLLO2_OS_TICK_FREQ    1024 /* Hz */
+#define APOLLO2_OS_TICK_IRQ     STIMER_CMPR0_IRQn
+
+/*** Value of timer when the ISR last executed. */
+static uint32_t apollo2_os_tick_prev;
+
+/*** Number of system ticks per single OS tick. */
+static uint32_t apollo2_os_tick_dur;
+
+static void
+apollo2_os_tick_set_timer(int os_ticks)
+{
+    uint32_t sys_ticks;
+    uint32_t cfg;
+
+    OS_ASSERT_CRITICAL();
+
+    sys_ticks = os_ticks * apollo2_os_tick_dur;
+
+    /* Freeze time, set timer expiry, then unfreeze time. */
+    cfg = am_hal_stimer_config(AM_HAL_STIMER_CFG_FREEZE);
+    am_hal_stimer_compare_delta_set(0, sys_ticks);
+    am_hal_stimer_config(cfg);
+}
+
+static void
+apollo2_os_tick_handler(void)
+{
+    uint32_t cur;
+    int os_ticks;
+    int delta;
+    os_sr_t sr;
+
+    OS_ENTER_CRITICAL(sr);
+
+    /* Calculate elapsed ticks and advance OS time. */
+    cur = am_hal_stimer_counter_get();
+    delta = cur - apollo2_os_tick_prev;
+    os_ticks = delta / apollo2_os_tick_dur;
+    os_time_advance(os_ticks);
+
+    /* Clear timer interrupt. */
+    am_hal_stimer_int_clear(AM_HAL_STIMER_INT_COMPAREA);
+
+    /* Update the time associated with the most recent tick. */
+    apollo2_os_tick_prev += os_ticks * apollo2_os_tick_dur;
+
+    /* Schedule timer to interrupt at the next tick. */
+    apollo2_os_tick_set_timer(1);
+
+    OS_EXIT_CRITICAL(sr);
+}
 
-/*
- * XXX implement tickless mode.
- */
 void
 os_tick_idle(os_time_t ticks)
 {
     OS_ASSERT_CRITICAL();
+
+    /* Since the STIMER only uses relative scheduling, all ticks values are
+     * valid.  There is no need to check for wrap around.
+     */
+
+    /* Only set the timer for nonzero tick values.  For values of 0, just let
+     * the timer expire on the next tick, as scheduled earlier.
+     */
+    if (ticks > 0) {
+        apollo2_os_tick_set_timer(ticks);
+    }
+
     __DSB();
+    __WFI();
+
+    if (ticks > 0) {
+        apollo2_os_tick_handler();
+    }
 }
 
 void
 os_tick_init(uint32_t os_ticks_per_sec, int prio)
 {
-    uint32_t reload_val;
+    /* Reset the timer to 0. */
+    am_hal_stimer_counter_clear();
 
-    reload_val = ((uint64_t) SystemCoreClock / os_ticks_per_sec) - 1;
+    /* The OS tick timer uses:
+     * o The 1024 Hz low-frequency RC oscillator (LFRC)
+     * o The first comparator (COMPAREA)
+     */
+    am_hal_stimer_config(AM_HAL_STIMER_LFRC_1KHZ |
+                         AM_HAL_STIMER_CFG_COMPARE_A_ENABLE);
+    am_hal_stimer_int_enable(AM_HAL_STIMER_INT_COMPAREA);
 
-    SysTick->LOAD = reload_val;
-    SysTick->VAL = 0;
-    SysTick->CTRL = 0x0007;
+    apollo2_os_tick_dur = APOLLO2_OS_TICK_FREQ / os_ticks_per_sec;
 
-    NVIC_SetPriority(SysTick_IRQn, prio);
+    /* Enable the STIMER interrupt in the NVIC. */
+    NVIC_SetPriority(APOLLO2_OS_TICK_IRQ, prio);
+    NVIC_SetVector(APOLLO2_OS_TICK_IRQ, (uint32_t)apollo2_os_tick_handler);
+    NVIC_EnableIRQ(APOLLO2_OS_TICK_IRQ);
 }
diff --git a/hw/mcu/ambiq/apollo2/src/hal_system.c b/hw/mcu/ambiq/apollo2/src/hal_system.c
index b0b0fccf9..22e11e072 100644
--- a/hw/mcu/ambiq/apollo2/src/hal_system.c
+++ b/hw/mcu/ambiq/apollo2/src/hal_system.c
@@ -53,6 +53,5 @@ hal_reset_cause(void)
 int
 hal_debugger_connected(void)
 {
-    /* XXX: Unimplemented. */
-    return 0;
+    return CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk;
 }
diff --git a/hw/mcu/ambiq/apollo2/src/hal_timer.c b/hw/mcu/ambiq/apollo2/src/hal_timer.c
new file mode 100644
index 000000000..230d4ac94
--- /dev/null
+++ b/hw/mcu/ambiq/apollo2/src/hal_timer.c
@@ -0,0 +1,794 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <string.h>
+#include <inttypes.h>
+#include <assert.h>
+
+#include "syscfg/syscfg.h"
+#include "os/os.h"
+#include "bsp/cmsis_nvic.h"
+#include "mcu/hal_apollo2.h"
+#include "hal/hal_timer.h"
+#include "defs/error.h"
+
+#include "am_mcu_apollo.h"
+
+/**
+ * Note: Each "BSP timer" is implemented using two MCU timers:
+ *
+ * 1. Continuous timer - This timer is constantly running.  It provides
+ *    absolute time values, and is used for converting between relative and
+ *    absolute times.  Its output compare registers are never set.
+ *
+ * 2. "Once" timer - This timer is only used for generating interrupts at
+ *    scheduled times.  It is restarted at 0 for each scheduled event, and only
+ *    relative times are used with this timer.
+ *
+ * As with other HAL timer implementations, event expiry values are stored in
+ * absolute tick values.  To set the "once" timer's output compare register,
+ * the code uses the continuous timer to determine the current time, and uses
+ * the result to calculate the relative offset of the scheduled event.  The
+ * relative time then gets written to the "once" timer's output compare
+ * register.
+ *
+ * This scheme introduces some inaccuracy.  Some amount of time invariably
+ * passes after the current time is read and before the output compare register
+ * is written.  This gap in time causes the timer interrupt to occur later than
+ * it should.  This procedure is done in a critical section to minimize error.
+ *
+ * This somewhat convoluted scheme is required due to hardware limitations.
+ * Ideally, each BSP timer would be implemented using a single continuous MCU
+ * timer.  However, the MCU only allows a timer to generate a single interrupt
+ * while it is running.  To schedule a second event, the timer would need to be
+ * stopped, cleared, and started again, which defeats the purpose of a
+ * continuous timer.
+ */
+
+#define APOLLO2_TIMER_ANY_ENABLED   \
+    (MYNEWT_VAL(TIMER_0_SOURCE) || MYNEWT_VAL(TIMER_1_SOURCE))
+
+struct apollo2_timer {
+    TAILQ_HEAD(hal_timer_qhead, hal_timer) hal_timer_q;
+    struct apollo2_timer_cfg cfg;
+    uint32_t freq_hz;       /* Actual frequency. */
+
+    /* Index of continuous timer; measures absolute time. */
+    uint8_t cont_timer_idx;
+
+    /* Index of 'once' timer; used for scheduling interrupts. */
+    uint8_t once_timer_idx;
+};
+
+/**
+ * These lookup tables map frequency values to timer configuration settings.
+ * They are used for selecting a configuration that is closest to the user's
+ * requested frequency.
+ *
+ * Note: These tables must be in ascending order of frequency.
+ */
+struct apollo2_timer_freq_entry {
+    uint32_t freq;
+    uint32_t cfg;
+};
+
+static const struct apollo2_timer_freq_entry apollo2_timer_tbl_hfrc[] = {
+    { 12000,    AM_HAL_CTIMER_HFRC_12KHZ },
+    { 47000,    AM_HAL_CTIMER_HFRC_47KHZ },
+    { 187500,   AM_HAL_CTIMER_HFRC_187_5KHZ },
+    { 3000000,  AM_HAL_CTIMER_HFRC_3MHZ },
+    { 12000000, AM_HAL_CTIMER_HFRC_12MHZ },
+    { 0 },
+};
+
+static const struct apollo2_timer_freq_entry apollo2_timer_tbl_xt[] = {
+    { 256,      AM_HAL_CTIMER_XT_256HZ },
+    { 2048,     AM_HAL_CTIMER_XT_2_048KHZ },
+    { 16384,    AM_HAL_CTIMER_XT_16_384KHZ },
+    { 32768,    AM_HAL_CTIMER_XT_32_768KHZ },
+    { 0 },
+};
+
+static const struct apollo2_timer_freq_entry apollo2_timer_tbl_lfrc[] = {
+    { 1,        AM_HAL_CTIMER_LFRC_1HZ },
+    { 32,       AM_HAL_CTIMER_LFRC_32HZ },
+    { 512,      AM_HAL_CTIMER_LFRC_512HZ },
+    { 1024,     AM_HAL_CTIMER_LFRC_1_16HZ },
+    { 0 },
+};
+
+#if MYNEWT_VAL(TIMER_0_SOURCE)
+static struct apollo2_timer apollo2_timer_0 = {
+    .hal_timer_q = TAILQ_HEAD_INITIALIZER(apollo2_timer_0.hal_timer_q),
+    .cont_timer_idx = 0,
+    .once_timer_idx = 1,
+};
+#endif
+#if MYNEWT_VAL(TIMER_1_SOURCE)
+static struct apollo2_timer apollo2_timer_1 = {
+    .hal_timer_q = TAILQ_HEAD_INITIALIZER(apollo2_timer_1.hal_timer_q),
+    .cont_timer_idx = 2,
+    .once_timer_idx = 3,
+};
+#endif
+
+static struct apollo2_timer *
+apollo2_timer_resolve(int timer_num)
+{
+    switch (timer_num) {
+#if MYNEWT_VAL(TIMER_0_SOURCE)
+        case 0:     return &apollo2_timer_0;
+#endif
+#if MYNEWT_VAL(TIMER_1_SOURCE)
+        case 1:     return &apollo2_timer_1;
+#endif
+        default:    return NULL;
+    }
+}
+
+/**
+ * Retrieves the entry from a lookup table whose frequency value most closely
+ * matches the one specified.
+ */
+static const struct apollo2_timer_freq_entry *
+apollo2_timer_tbl_find(const struct apollo2_timer_freq_entry *table,
+                       uint32_t freq)
+{
+    const struct apollo2_timer_freq_entry *prev;
+    const struct apollo2_timer_freq_entry *cur;
+    uint32_t delta1;
+    uint32_t delta2;
+    int i;
+
+    /* If the requested value is less than all entries in the table, return the
+     * smallest one.
+     */
+    if (table[0].freq >= freq) {
+        return &table[0];
+    }
+
+    /* Find the first entry with a frequency value that is greater than the one
+     * being requested.  Then determine which of it or its predecessor is
+     * closer to the specified value.
+     */
+    for (i = 1; table[i].freq != 0; i++) {
+        cur = &table[i];
+        if (cur->freq >= freq) {
+            prev = cur - 1;
+            delta1 = freq - prev->freq;
+            delta2 = cur->freq - freq;
+
+            if (delta1 <= delta2) {
+                return prev;
+            } else {
+                return cur;
+            }
+        }
+    }
+
+    /* Requested value is greater than all entries in the table; return the
+     * largest.
+     */
+    return table + i - 1;
+}
+
+/**
+ * Calculates the best SDK configuration value for the specified timer.  The
+ * calculated value is called an "SDK configuration value" because it gets
+ * passed to the Apollo2 SDK timer configuration function.  Flags specific to
+ * the continuous or "once" timer are not included in the result; these must be
+ * ORed in, depending on the MCU timer being configured.
+ */
+static int
+apollo2_timer_sdk_cfg(const struct apollo2_timer_cfg *cfg, uint32_t freq_hz,
+                      uint32_t *out_actual_hz, uint32_t *out_cfg)
+{
+    const struct apollo2_timer_freq_entry *entry;
+
+    switch (cfg->source) {
+    case APOLLO2_TIMER_SOURCE_HFRC:
+        entry = apollo2_timer_tbl_find(apollo2_timer_tbl_hfrc, freq_hz);
+        *out_actual_hz = entry->freq;
+        *out_cfg = entry->cfg;
+        break;
+
+    case APOLLO2_TIMER_SOURCE_XT:
+        entry = apollo2_timer_tbl_find(apollo2_timer_tbl_xt, freq_hz);
+        *out_actual_hz = entry->freq;
+        *out_cfg = entry->cfg;
+        break;
+
+    case APOLLO2_TIMER_SOURCE_LFRC:
+        entry = apollo2_timer_tbl_find(apollo2_timer_tbl_lfrc, freq_hz);
+        *out_actual_hz = entry->freq;
+        *out_cfg = entry->cfg;
+        break;
+
+    case APOLLO2_TIMER_SOURCE_RTC:
+        *out_actual_hz = 100;
+        *out_cfg = AM_HAL_CTIMER_RTC_100HZ;
+        break;
+
+    case APOLLO2_TIMER_SOURCE_HCLK:
+        *out_actual_hz = 48000000;
+        *out_cfg = AM_HAL_CTIMER_HCLK;
+        break;
+
+    default:
+        return SYS_EINVAL;
+    }
+
+    return 0;
+}
+
+/**
+ * Calculates the value to write to the specified timer's ISR configuration
+ * register.
+ */ 
+static int
+apollo2_timer_isr_cfg(const struct apollo2_timer *bsp_timer,
+                      uint32_t *out_isr_cfg)
+{
+    switch (bsp_timer->once_timer_idx) {
+#if MYNEWT_VAL(TIMER_0_SOURCE)
+    case 1:
+        *out_isr_cfg = AM_HAL_CTIMER_INT_TIMERA1C0;
+        return 0;
+#endif
+#if MYNEWT_VAL(TIMER_1_SOURCE)
+    case 3:
+        *out_isr_cfg = AM_HAL_CTIMER_INT_TIMERA3C0;
+        return 0;
+#endif
+    default:
+        return SYS_EINVAL;
+    }
+}
+
+/**
+ * Retrieves the current time from the specified timer.
+ */
+static uint32_t
+apollo2_timer_cur_ticks(const struct apollo2_timer *bsp_timer)
+{
+    return am_hal_ctimer_read(bsp_timer->cont_timer_idx, AM_HAL_CTIMER_BOTH);
+}
+
+/**
+ * Configures a BSP timer to generate an interrupt at the speficied relative
+ * time.
+ */
+static void
+apollo2_timer_set_ocmp(const struct apollo2_timer *bsp_timer,
+                       uint32_t ticks_from_now)
+{
+    uint32_t isr_cfg;
+    int rc;
+
+    /* Calculate the ISR flags for the "once" timer. */
+    rc = apollo2_timer_isr_cfg(bsp_timer, &isr_cfg);
+    assert(rc == 0);
+
+    /* Clear any pending interrupt for this timer. */
+    am_hal_ctimer_int_clear(isr_cfg);
+
+    /* Stop and clear the "once" timer. */
+    am_hal_ctimer_stop(bsp_timer->once_timer_idx, AM_HAL_CTIMER_BOTH);
+    am_hal_ctimer_clear(bsp_timer->once_timer_idx, AM_HAL_CTIMER_BOTH);
+
+    /* Schedule an interrupt at the requested relative time. */
+    am_hal_ctimer_period_set(bsp_timer->once_timer_idx, AM_HAL_CTIMER_BOTH,
+                             ticks_from_now, 0);
+
+    /* Enable interrupts for this timer, in case they haven't been enabled
+     * yet.
+     */
+    am_hal_ctimer_int_enable(isr_cfg);
+
+    /* Restart the timer. */
+    am_hal_ctimer_start(bsp_timer->once_timer_idx, AM_HAL_CTIMER_BOTH);
+}
+
+/**
+ * Configures a BSP timer to generate an interrupt at the speficied absolute
+ * time.
+ */
+static void
+apollo2_timer_set_ocmp_at(const struct apollo2_timer *bsp_timer, uint32_t at)
+{
+    uint32_t isr_cfg;
+    uint32_t now;
+    int32_t ticks_from_now;
+    int rc;
+
+    now = apollo2_timer_cur_ticks(bsp_timer);
+    ticks_from_now = at - now;
+    if (ticks_from_now <= 0) {
+        /* Event already occurred. */
+        rc = apollo2_timer_isr_cfg(bsp_timer, &isr_cfg);
+        assert(rc == 0);
+        am_hal_ctimer_int_set(isr_cfg);
+    } else {
+        apollo2_timer_set_ocmp(bsp_timer, ticks_from_now);
+    }
+}
+
+/**
+ * Unsets a scheduled interrupt for the specified BSP timer.
+ */
+static void
+apollo2_timer_clear_ocmp(const struct apollo2_timer *bsp_timer)
+{
+    uint32_t isr_cfg;
+    int rc;
+
+    rc = apollo2_timer_isr_cfg(bsp_timer, &isr_cfg);
+    assert(rc == 0);
+
+    am_hal_ctimer_int_disable(isr_cfg);
+}
+
+#if APOLLO2_TIMER_ANY_ENABLED
+/**
+ * Executes callbacks for all expired timers in a BSP timer's queue.  This
+ * function is called when a timer interrupt is handled.
+ */
+static void
+apollo2_timer_chk_queue(struct apollo2_timer *bsp_timer)
+{
+    struct hal_timer *timer;
+    uint32_t ticks;
+    os_sr_t sr;
+
+    OS_ENTER_CRITICAL(sr);
+
+    /* Remove and process each expired timer in the sorted queue. */
+    while ((timer = TAILQ_FIRST(&bsp_timer->hal_timer_q)) != NULL) {
+        ticks = apollo2_timer_cur_ticks(bsp_timer);
+        if ((int32_t)(ticks - timer->expiry) >= 0) {
+            TAILQ_REMOVE(&bsp_timer->hal_timer_q, timer, link);
+            timer->link.tqe_prev = NULL;
+            timer->cb_func(timer->cb_arg);
+        } else {
+            break;
+        }
+    }
+
+    /* If any timers remain, schedule an interrupt for the timer that expires
+     * next.
+     */
+    if (timer != NULL) {
+        apollo2_timer_set_ocmp_at(bsp_timer, timer->expiry);
+    } else {
+        apollo2_timer_clear_ocmp(bsp_timer);
+    }
+
+    OS_EXIT_CRITICAL(sr);
+}
+#endif
+
+/**
+ * Handles a ctimer interrupt.
+ */
+static void
+apollo2_timer_isr(void)
+{
+    uint32_t status;
+
+    /* Read the ctimer status to determine which timers generated the
+     * interrupt.
+     */
+    status = am_hal_ctimer_int_status_get(true);
+    am_hal_ctimer_int_clear(status);
+
+    /* Service the appropriate timers. */
+#if MYNEWT_VAL(TIMER_0_SOURCE)
+    if (status & (AM_HAL_CTIMER_INT_TIMERA1C0 | AM_HAL_CTIMER_INT_TIMERA1C1)) {
+        apollo2_timer_chk_queue(&apollo2_timer_0);
+    }
+#endif
+#if MYNEWT_VAL(TIMER_1_SOURCE)
+    if (status & (AM_HAL_CTIMER_INT_TIMERA3C0 | AM_HAL_CTIMER_INT_TIMERA3C1)) {
+        apollo2_timer_chk_queue(&apollo2_timer_1);
+    }
+#endif
+}
+
+/**
+ * hal timer init
+ *
+ * Initialize platform specific timer items
+ *
+ * @param timer_num     Timer number to initialize
+ * @param cfg           Pointer to platform specific configuration
+ *
+ * @return int          0: success; error code otherwise
+ */
+int
+hal_timer_init(int timer_num, void *vcfg)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    static int nvic_configured;
+
+    const struct apollo2_timer_cfg *bsp_cfg;
+    struct apollo2_timer *bsp_timer;
+
+    bsp_timer = apollo2_timer_resolve(timer_num);
+    if (bsp_timer == NULL) {
+        return SYS_EINVAL;
+    }
+
+    if (!nvic_configured) {
+        nvic_configured = 1;
+
+        NVIC_SetVector(CTIMER_IRQn, (uint32_t)apollo2_timer_isr);
+        NVIC_SetPriority(CTIMER_IRQn, (1 << __NVIC_PRIO_BITS) - 1);
+        NVIC_ClearPendingIRQ(CTIMER_IRQn);
+        NVIC_EnableIRQ(CTIMER_IRQn);
+    }
+
+    bsp_cfg = vcfg;
+    bsp_timer->cfg = *bsp_cfg;
+
+    return 0;
+}
+
+/**
+ * hal timer config
+ *
+ * Configure a timer to run at the desired frequency. This starts the timer.
+ *
+ * @param timer_num
+ * @param freq_hz
+ *
+ * @return int
+ */
+int
+hal_timer_config(int timer_num, uint32_t freq_hz)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    struct apollo2_timer *bsp_timer;
+    uint32_t cont_cfg;
+    uint32_t once_cfg;
+    uint32_t sdk_cfg;
+    int rc;
+
+    bsp_timer = apollo2_timer_resolve(timer_num);
+    if (bsp_timer == NULL) {
+        return SYS_EINVAL;
+    }
+
+    rc = apollo2_timer_sdk_cfg(&bsp_timer->cfg, freq_hz, &bsp_timer->freq_hz,
+                               &sdk_cfg);
+    if (rc != 0) {
+        return rc;
+    }
+
+    /* Configure the continuous timer. */
+    cont_cfg = sdk_cfg | AM_HAL_CTIMER_FN_CONTINUOUS;
+    am_hal_ctimer_clear(bsp_timer->cont_timer_idx, AM_HAL_CTIMER_BOTH);
+    am_hal_ctimer_config_single(bsp_timer->cont_timer_idx, AM_HAL_CTIMER_BOTH,
+                                cont_cfg);
+
+    /* Configure the "once" timer. */
+    once_cfg = sdk_cfg | AM_HAL_CTIMER_FN_ONCE | AM_HAL_CTIMER_INT_ENABLE;
+    am_hal_ctimer_clear(bsp_timer->once_timer_idx, AM_HAL_CTIMER_BOTH);
+    am_hal_ctimer_config_single(bsp_timer->once_timer_idx, AM_HAL_CTIMER_BOTH,
+                                once_cfg);
+
+    /* Start the continuous timer. */
+    am_hal_ctimer_start(bsp_timer->cont_timer_idx, AM_HAL_CTIMER_BOTH);
+
+    return 0;
+}
+
+/**
+ * hal timer deinit
+ *
+ * De-initialize a HW timer.
+ *
+ * @param timer_num
+ *
+ * @return int
+ */
+int
+hal_timer_deinit(int timer_num)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    struct apollo2_timer *bsp_timer;
+
+    bsp_timer = apollo2_timer_resolve(timer_num);
+    if (bsp_timer == NULL) {
+        return SYS_EINVAL;
+    }
+
+    if (bsp_timer->freq_hz == 0) {
+        /* Timer not enabled. */
+        return SYS_ENODEV;
+    }
+
+    am_hal_ctimer_stop(bsp_timer->cont_timer_idx, AM_HAL_CTIMER_BOTH);
+    am_hal_ctimer_stop(bsp_timer->once_timer_idx, AM_HAL_CTIMER_BOTH);
+    bsp_timer->freq_hz = 0;
+
+    return 0;
+}
+
+/**
+ * hal timer get resolution
+ *
+ * Get the resolution of the timer. This is the timer period, in nanoseconds
+ *
+ * @param timer_num
+ *
+ * @return uint32_t
+ */
+uint32_t
+hal_timer_get_resolution(int timer_num)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return 0;
+#endif
+
+    const struct apollo2_timer *bsp_timer;
+
+    bsp_timer = apollo2_timer_resolve(timer_num);
+    if (bsp_timer == NULL) {
+        return 0;
+    }
+
+    if (bsp_timer->freq_hz == 0) {
+        return 0;
+    }
+
+    return 1000000000 / bsp_timer->freq_hz;
+}
+
+/**
+ * Reads the absolute time from the specified continuous timer.
+ *
+ * @return uint32_t The timer counter register.
+ */
+uint32_t
+hal_timer_read(int timer_num)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    const struct apollo2_timer *bsp_timer;
+
+    bsp_timer = apollo2_timer_resolve(timer_num);
+    if (bsp_timer == NULL) {
+        return 0;
+    }
+
+    if (bsp_timer->freq_hz == 0) {
+        /* Timer not enabled. */
+        return 0;
+    }
+
+    return apollo2_timer_cur_ticks(bsp_timer);
+}
+
+/**
+ * Blocking delay for n ticks
+ *
+ * @return int 0 on success; error code otherwise.
+ */
+int
+hal_timer_delay(int timer_num, uint32_t ticks)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    const struct apollo2_timer *bsp_timer;
+    uint32_t until;
+
+    bsp_timer = apollo2_timer_resolve(timer_num);
+    if (bsp_timer == NULL) {
+        return SYS_EINVAL;
+    }
+
+    until = apollo2_timer_cur_ticks(bsp_timer) + ticks;
+    while ((int32_t)(apollo2_timer_cur_ticks(bsp_timer) - until) <= 0) { }
+
+    return 0;
+}
+
+/**
+ * Initialize the HAL timer structure with the callback and the callback
+ * argument.
+ *
+ * @param cb_func
+ *
+ * @return int
+ */
+int
+hal_timer_set_cb(int timer_num, struct hal_timer *timer, hal_timer_cb cb_func,
+                 void *arg)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    struct apollo2_timer *bsp_timer;
+
+    bsp_timer = apollo2_timer_resolve(timer_num);
+    if (bsp_timer == NULL) {
+        return SYS_EINVAL;
+    }
+
+    timer->cb_func = cb_func;
+    timer->cb_arg = arg;
+    timer->bsp_timer = bsp_timer;
+    timer->link.tqe_prev = NULL;
+
+    return 0;
+}
+
+/**
+ * Start a timer. Timer fires 'ticks' ticks from now.
+ *
+ * @param timer
+ * @param ticks
+ *
+ * @return int
+ */
+int
+hal_timer_start(struct hal_timer *timer, uint32_t ticks)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    const struct apollo2_timer *bsp_timer;
+    uint32_t exp;
+    uint32_t cur;
+    os_sr_t sr;
+    int rc;
+
+    bsp_timer = timer->bsp_timer;
+
+    /* Start a critical section before reading the current time.  Preventing
+     * this task from being interrupted minimizes inaccuracy when converting
+     * from relative to absolute time.
+     */
+    OS_ENTER_CRITICAL(sr);
+
+    cur = apollo2_timer_cur_ticks(bsp_timer);
+    exp = ticks + cur;
+
+    rc = hal_timer_start_at(timer, exp);
+
+    OS_EXIT_CRITICAL(sr);
+
+    return rc;
+}
+
+/**
+ * hal_timer_start_at()
+ *
+ * Start a timer. Timer fires at tick 'tick'.
+ *
+ * @param timer
+ * @param tick
+ *
+ * @return int
+ */
+int
+hal_timer_start_at(struct hal_timer *timer, uint32_t tick)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    struct apollo2_timer *bsp_timer;
+    struct hal_timer *cur;
+    os_sr_t sr;
+
+    bsp_timer = timer->bsp_timer;
+    timer->expiry = tick;
+
+    OS_ENTER_CRITICAL(sr);
+
+    if (TAILQ_EMPTY(&bsp_timer->hal_timer_q)) {
+        TAILQ_INSERT_HEAD(&bsp_timer->hal_timer_q, timer, link);
+    } else {
+        TAILQ_FOREACH(cur, &bsp_timer->hal_timer_q, link) {
+            if ((int32_t)(timer->expiry - cur->expiry) < 0) {
+                TAILQ_INSERT_BEFORE(cur, timer, link);
+                break;
+            }
+        }
+        if (cur == NULL) {
+            TAILQ_INSERT_TAIL(&bsp_timer->hal_timer_q, timer, link);
+        }
+    }
+
+    if (timer == TAILQ_FIRST(&bsp_timer->hal_timer_q)) {
+        apollo2_timer_set_ocmp_at(bsp_timer, tick);
+    }
+
+    OS_EXIT_CRITICAL(sr);
+
+    return 0;
+}
+
+/**
+ * hal_timer_stop()
+ *
+ * Cancels the timer.
+ *
+ * @param timer
+ *
+ * @return int
+ */
+int
+hal_timer_stop(struct hal_timer *timer)
+{
+#if !APOLLO2_TIMER_ANY_ENABLED
+    return SYS_EINVAL;
+#endif
+
+    struct apollo2_timer *bsp_timer;
+    int reset_ocmp;
+    os_sr_t sr;
+
+    /* If timer's prev pointer is null, the timer hasn't been started. */
+    if (timer->link.tqe_prev == NULL) {
+        return 0;
+    }
+
+    bsp_timer = timer->bsp_timer;
+
+    OS_ENTER_CRITICAL(sr);
+
+    if (timer == TAILQ_FIRST(&bsp_timer->hal_timer_q)) {
+        /* If first on queue, we will need to reset OCMP */
+        reset_ocmp = 1;
+    }
+
+    TAILQ_REMOVE(&bsp_timer->hal_timer_q, timer, link);
+    timer->link.tqe_prev = NULL;
+
+    if (reset_ocmp) {
+        timer = TAILQ_FIRST(&bsp_timer->hal_timer_q);
+        if (timer != NULL) {
+            TAILQ_REMOVE(&bsp_timer->hal_timer_q, timer, link);
+            hal_timer_start_at(timer, timer->expiry);
+        } else {
+            apollo2_timer_clear_ocmp(bsp_timer);
+        }
+    }
+
+    OS_EXIT_CRITICAL(sr);
+
+    return 0;
+}
diff --git a/hw/mcu/ambiq/apollo2/syscfg.yml b/hw/mcu/ambiq/apollo2/syscfg.yml
index b4662af02..836d68647 100644
--- a/hw/mcu/ambiq/apollo2/syscfg.yml
+++ b/hw/mcu/ambiq/apollo2/syscfg.yml
@@ -30,73 +30,98 @@ syscfg.defs:
 
     SPI_0_MASTER:
         description: 'SPI 0 master'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_0_SLAVE"
             - "!I2C_0"
     SPI_0_SLAVE:
         description: 'SPI 0 slave'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_0_MASTER"
             - "!I2C_0"
     SPI_1_MASTER:
         description: 'SPI 1 master'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_1_SLAVE"
             - "!I2C_1"
     SPI_1_SLAVE:
         description: 'SPI 1 slave'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_1_MASTER"
             - "!I2C_1"
     SPI_2_MASTER:
         description: 'SPI 2 master'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_2_SLAVE"
             - "!I2C_2"
     SPI_2_SLAVE:
         description: 'SPI 2 slave'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_2_MASTER"
             - "!I2C_2"
     SPI_3_MASTER:
         description: 'SPI 3 master'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_3_SLAVE"
             - "!I2C_3"
     SPI_3_SLAVE:
         description: 'SPI 3 slave'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_3_MASTER"
             - "!I2C_3"
     SPI_4_MASTER:
         description: 'SPI 4 master'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_4_SLAVE"
             - "!I2C_4"
     SPI_4_SLAVE:
         description: 'SPI 4 slave'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_4_MASTER"
             - "!I2C_4"
     SPI_5_MASTER:
         description: 'SPI 5 master'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_5_SLAVE"
             - "!I2C_5"
     SPI_5_SLAVE:
         description: 'SPI 5 slave'
-        value:  0
+        value: 0
         restrictions:
             - "!SPI_5_MASTER"
             - "!I2C_5"
+
+    TIMER_0_SOURCE:
+        description: >
+            Apollo2 CTIMER 0 source.  Valid values are:
+                    [empty-string] (Disable timer)
+                    APOLLO2_TIMER_SOURCE_HFRC
+                    APOLLO2_TIMER_SOURCE_XT
+                    APOLLO2_TIMER_SOURCE_LFRC
+                    APOLLO2_TIMER_SOURCE_RTC
+                    APOLLO2_TIMER_SOURCE_HCLK
+                    APOLLO2_TIMER_SOURCE_TMRPINA
+                    APOLLO2_TIMER_SOURCE_BUCKA
+        value: 'APOLLO2_TIMER_SOURCE_HFRC'
+    TIMER_1_SOURCE:
+        description: >
+            Apollo2 CTIMER 1 source.  Valid values are:
+                    [empty-string] (Disable timer)
+                    APOLLO2_TIMER_SOURCE_HFRC
+                    APOLLO2_TIMER_SOURCE_XT
+                    APOLLO2_TIMER_SOURCE_LFRC
+                    APOLLO2_TIMER_SOURCE_RTC
+                    APOLLO2_TIMER_SOURCE_HCLK
+                    APOLLO2_TIMER_SOURCE_TMRPINA
+                    APOLLO2_TIMER_SOURCE_BUCKA
+        value:
diff --git a/hw/mcu/ambiq/pkg.yml b/hw/mcu/ambiq/pkg.yml
index 38ab9ffd9..ae89b65c0 100644
--- a/hw/mcu/ambiq/pkg.yml
+++ b/hw/mcu/ambiq/pkg.yml
@@ -32,6 +32,9 @@ pkg.src_dirs:
     - "src/ext/AmbiqSuite/mcu/apollo2/"
     - "src/ext/AmbiqSuite/utils/"
 
+pkg.cflags:
+    - '-Wno-enum-compare'
+
 pkg.deps: 
     - hw/hal 
     - hw/cmsis-core 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/Makefile b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/Makefile
index 0843e50d4..41a59e143 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/Makefile
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/Makefile
@@ -31,7 +31,7 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 # 
-# This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+# This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 #
 #******************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/am_mcu_apollo.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/am_mcu_apollo.h
index ed19370af..204e30d34 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/am_mcu_apollo.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/am_mcu_apollo.h
@@ -1,10 +1,15 @@
 //*****************************************************************************
 //
-//! @file am_mcu_apollo.h
+//! @file
 //!
-//! @brief Top Include for Apollo class devices.
+//! @brief Top Include for Apollo2 class devices.
 //!
 //! This file provides all the includes necessary for an apollo device.
+//!
+//! @addtogroup hal Hardware Abstraction Layer (HAL)
+//
+//! @defgroup apollo2hal HAL for Apollo2
+//! @ingroup hal
 //
 //*****************************************************************************
 
@@ -39,7 +44,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_MCU_APOLLO_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/Makefile b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/Makefile
index 230d1f544..6c860f714 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/Makefile
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/Makefile
@@ -31,7 +31,7 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 # 
-# This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+# This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 #
 #******************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.c
index abf7d12f4..e301d6889 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_adc.c
+//  am_hal_adc.c
+//! @file
 //!
 //! @brief Functions for interfacing with the Analog to Digital Converter.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup adc Analog-to-Digital Converter (ADC)
-//! @ingroup hal
+//! @addtogroup adc2 Analog-to-Digital Converter (ADC)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -134,9 +134,9 @@ am_hal_adc_config(am_hal_adc_config_t *psConfig)
         // default calibration values.  These default values should result
         // in worst-case temperature measurements of +-6 degress C.
         //
-        priv_temp_trims.flt.fCalibrationOffset      = 299.5F;
-        priv_temp_trims.flt.fCalibrationTemperature = 1.02809F;
-        priv_temp_trims.flt.fCalibrationVoltage     = -0.004281F;
+        priv_temp_trims.flt.fCalibrationTemperature = AM_HAL_ADC_CALIB_TEMP_DEFAULT;
+        priv_temp_trims.flt.fCalibrationVoltage     = AM_HAL_ADC_CALIB_AMBIENT_DEFAULT;
+        priv_temp_trims.flt.fCalibrationOffset      = AM_HAL_ADC_CALIB_ADC_OFFSET_DEFAULT;
         priv_temp_trims.ui32.bMeasured = false;
     }
     else
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.h
index 2cd0af8e8..44a5168c1 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_adc.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_adc.h
+//  am_hal_adc.h
+//! @file
 //!
 //! @brief Functions for interfacing with the Analog to Digital Converter
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup adc Analog-to-Digital Converter (ADC)
-//! @ingroup hal
+//! @addtogroup adc2 Analog-to-Digital Converter (ADC)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_ADC_H
 #define AM_HAL_ADC_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 //! @name Clock Selection
@@ -231,9 +226,19 @@ extern "C"
 //! @{
 //
 //*****************************************************************************
-#define AM_HAL_ADC_CALIB_AMBIENT_ADDR       (0x50023010)
-#define AM_HAL_ADC_CALIB_TEMP_ADDR          (0x50023014)
+#define AM_HAL_ADC_CALIB_TEMP_ADDR          (0x50023010)
+#define AM_HAL_ADC_CALIB_AMBIENT_ADDR       (0x50023014)
 #define AM_HAL_ADC_CALIB_ADC_OFFSET_ADDR    (0x50023018)
+
+//
+// Default coefficients (used when trims not provided):
+//  TEMP_DEFAULT    = Temperature in deg K (e.g. 299.5 - 273.15 = 26.35)
+//  AMBIENT_DEFAULT = Voltage measurement at default temperature.
+//  OFFSET_DEFAULT  = Default ADC offset at 1v.
+//
+#define AM_HAL_ADC_CALIB_TEMP_DEFAULT       (299.5F)
+#define AM_HAL_ADC_CALIB_AMBIENT_DEFAULT    (1.02809F)
+#define AM_HAL_ADC_CALIB_ADC_OFFSET_DEFAULT (-0.004281F)
 //! @}
 
 //*****************************************************************************
@@ -299,6 +304,11 @@ am_hal_adc_config_t;
     (((value) & AM_REG_ADC_FIFO_COUNT_M) >> AM_REG_ADC_FIFO_COUNT_S)
 //! @}
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.c
index 86a985a7a..4de62f908 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_cachectrl.c
+//  am_hal_cachectrl.c
+//! @file
 //!
 //! @brief Functions for interfacing with the CACHE controller.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup clkgen Clock Generator (CACHE)
-//! @ingroup hal
+//! @addtogroup clkgen2 Clock Generator (CACHE)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.h
index a349f9921..84753b9be 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_cachectrl.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_cachectrl.h
+//  am_hal_cachectrl.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the CACHE controller.
 //
@@ -37,17 +38,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_CACHECTRL_H
 #define AM_HAL_CACHECTRL_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 // Cache configuration structure
@@ -185,6 +181,11 @@ extern const am_hal_cachectrl_config_t am_hal_cachectrl_defaults;
      AM_HAL_CACHECTRL_CACHECFG_DATA_CLKGATE_ENABLE |                          \
      AM_HAL_CACHECTRL_CACHECFG_CONFIG_2WAY_512)
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.c
index 4dfa692ba..2149f02db 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_clkgen.c
+//  am_hal_clkgen.c
+//! @file
 //!
 //! @brief Functions for interfacing with the CLKGEN.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup clkgen Clock Generator (CLKGEN)
-//! @ingroup hal
+//! @addtogroup clkgen2 Clock Generator (CLKGEN)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.h
index 203a2bd1e..4449a7c7e 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_clkgen.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_clkgen.h
+//  am_hal_clkgen.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the CLKGEN.
 //
@@ -37,17 +38,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_CLKGEN_H
 #define AM_HAL_CLKGEN_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 //! @name System Clock max frequency
@@ -177,6 +173,11 @@ extern "C"
         (AM_REG_CLKGEN_UARTEN_UART0EN_##entype <<                               \
          AM_HAL_CLKGEN_UARTEN_UARTENn_S(module))
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.c
index c8c1dbb99..5f3bff8a9 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_ctimer.c
+//  am_hal_ctimer.c
+//! @file
 //!
 //! @brief Functions for interfacing with the Counter/Timer module.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup ctimer Counter/Timer (CTIMER)
-//! @ingroup hal
+//! @addtogroup ctimer2 Counter/Timer (CTIMER)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -68,11 +68,12 @@
 // still pass in the event of a timer rollover.
 //
 //*****************************************************************************
+//! Timer read workaround: Do count values differ by one tick or less.
 #define adjacent(A, B)      (((A) == (B)) || (((A) + 1) == (B)) || ((B) == 0))
 
 //*****************************************************************************
 //
-// Array of function pointers for handling CTimer interrupts.
+//! Array of function pointers for handling CTimer interrupts.
 //
 //*****************************************************************************
 am_hal_ctimer_handler_t am_hal_ctimer_ppfnHandlers[16];
@@ -162,10 +163,93 @@ back2back_reads( uint32_t u32TimerAddr, uint32_t u32Data[])
 
 //*****************************************************************************
 //
-// Forward Declaration.
+//! @brief Check to see if the given CTimer is using the HFRC
+//!
+//! @note Calls to this function should be from inside a critical section.
+//!
+//! @return None.
 //
 //*****************************************************************************
-static bool am_hal_ctimers_use_hfrc(void);
+static bool
+ctimer_source_hfrc(uint32_t ui32CtimerNum)
+{
+    uint32_t *pui32ConfigReg;
+    uint32_t ui32TimerASrc, ui32TimerBSrc;
+
+    //
+    // Find the correct register to write.
+    //
+    pui32ConfigReg = (uint32_t *)(AM_REG_CTIMERn(0) + AM_REG_CTIMER_CTRL0_O +
+                                  (ui32CtimerNum * TIMER_OFFSET));
+
+    //
+    // Determine if this timer is using HFRC as the clock source.
+    // The value we are looking for is HFRC_DIV4 to HFRC_DIV4K.
+    // Get the clock sources and 0-base the extracted value.
+    //
+    ui32TimerASrc = AM_BFX(CTIMER, CTRL0, TMRA0CLK, *pui32ConfigReg) -
+                    AM_ENUMX(CTIMER, CTRL0, TMRA0CLK, HFRC_DIV4);
+    ui32TimerBSrc = AM_BFX(CTIMER, CTRL0, TMRB0CLK, *pui32ConfigReg) -
+                    AM_ENUMX(CTIMER, CTRL0, TMRB0CLK, HFRC_DIV4);
+
+    //
+    // If the source value is 0 to (HFRC_DIV4K - HFRC_DIV4), then it's HFRC.
+    //
+    if ( (ui32TimerASrc <= (AM_ENUMX(CTIMER, CTRL0, TMRA0CLK, HFRC_DIV4K) -
+                            AM_ENUMX(CTIMER, CTRL0, TMRA0CLK, HFRC_DIV4)))  ||
+         (ui32TimerBSrc <= (AM_ENUMX(CTIMER, CTRL0, TMRB0CLK, HFRC_DIV4K) -
+                            AM_ENUMX(CTIMER, CTRL0, TMRB0CLK, HFRC_DIV4))) )
+    {
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+
+} // ctimer_source_hfrc()
+
+//*****************************************************************************
+//
+// @brief Check to see if any of the CTimers or STimer are using the HFRC.
+//
+//  This function should be used to check if the HFRC is being used in order
+//  to correctly establish power related settings.
+//
+//  Note - Calls to this function should be from inside a critical section.
+//
+//! @return None.
+//
+//*****************************************************************************
+static bool
+timers_use_hfrc(void)
+{
+    uint32_t ui32TimerASrc, ui32CtimerNum;
+
+    //
+    // Check STimer to see if it is using HFRC.
+    //
+    ui32TimerASrc = AM_BFR(CTIMER, STCFG, CLKSEL);
+    if ( (ui32TimerASrc == AM_REG_CTIMER_STCFG_CLKSEL_HFRC_DIV16)   ||
+         (ui32TimerASrc == AM_REG_CTIMER_STCFG_CLKSEL_HFRC_DIV256) )
+    {
+        return true;
+    }
+
+    //
+    // Check the CTimers to see if any are using HFRC as their clock source.
+    //
+    for ( ui32CtimerNum = 0; ui32CtimerNum < MAX_CTIMERS; ui32CtimerNum++ )
+    {
+        if ( ctimer_source_hfrc(ui32CtimerNum) )
+        {
+            return true;
+        }
+    }
+
+    return false;
+
+} // timers_use_hfrc()
 
 //*****************************************************************************
 //
@@ -224,8 +308,7 @@ am_hal_ctimer_int_service(uint32_t ui32Status)
             pfnHandler();
         }
     }
-
-}
+} // am_hal_ctimer_int_service()
 
 //*****************************************************************************
 //
@@ -254,10 +337,11 @@ am_hal_ctimer_int_register(uint32_t ui32Interrupt,
                            am_hal_ctimer_handler_t pfnHandler)
 {
     uint32_t intIdx = 0;
+
     //
     // Check to make sure the interrupt number is valid. (Debug builds only)
     //
-    switch(ui32Interrupt)
+    switch (ui32Interrupt)
     {
         case AM_REG_CTIMER_INTEN_CTMRA0C0INT_M:
             intIdx = AM_REG_CTIMER_INTEN_CTMRA0C0INT_S;
@@ -326,8 +410,10 @@ am_hal_ctimer_int_register(uint32_t ui32Interrupt,
         default:
             am_hal_debug_assert_msg(false, "CTimer interrupt number out of range.");
     }
+
     am_hal_ctimer_ppfnHandlers[intIdx] = pfnHandler;
-}
+
+} // am_hal_ctimer_int_register()
 
 //*****************************************************************************
 //
@@ -371,6 +457,11 @@ am_hal_ctimer_config(uint32_t ui32TimerNumber,
     //
     ui32ConfigVal |= psConfig->ui32Link ? AM_HAL_CTIMER_LINK : 0;
 
+    //
+    // Begin critical section while config registers are read and modified.
+    //
+    AM_CRITICAL_BEGIN_ASM
+
     //
     // Find the correct register to write.
     //
@@ -385,7 +476,7 @@ am_hal_ctimer_config(uint32_t ui32TimerNumber,
     //
     // If all of the clock sources are not HRFC disable LDO when sleeping if timers are enabled.
     //
-    if ( am_hal_ctimers_use_hfrc() )
+    if ( timers_use_hfrc() )
     {
         AM_BFW(PWRCTRL, MISCOPT, DIS_LDOLPMODE_TIMERS, 0);
     }
@@ -394,7 +485,12 @@ am_hal_ctimer_config(uint32_t ui32TimerNumber,
         AM_BFW(PWRCTRL, MISCOPT, DIS_LDOLPMODE_TIMERS, 1);
     }
 
-}
+    //
+    // Done with critical section.
+    //
+    AM_CRITICAL_END_ASM
+
+} // am_hal_ctimer_config()
 
 //*****************************************************************************
 //
@@ -406,7 +502,7 @@ am_hal_ctimer_config(uint32_t ui32TimerNumber,
 //! @param ui32TimerSegment specifies which segment of the timer should be
 //! enabled.
 //!
-//! @param ui32Configval specifies the configuration options for the selected
+//! @param ui32ConfigVal specifies the configuration options for the selected
 //! timer.
 //!
 //! This function should be used to perform the initial set-up of the
@@ -481,6 +577,7 @@ am_hal_ctimer_config_single(uint32_t ui32TimerNumber,
     // If we're working with TIMERB, we need to shift our configuration value
     // up by 16 bits.
     //
+
     if ( ui32TimerSegment == AM_HAL_CTIMER_TIMERB )
     {
         ui32ConfigVal = ((ui32ConfigVal & 0xFFFF) << 16);
@@ -505,87 +602,24 @@ am_hal_ctimer_config_single(uint32_t ui32TimerNumber,
     //
     AM_REGVAL(pui32ConfigReg) = ui32WriteVal;
 
-    //
-    // Done with critical section.
-    //
-    AM_CRITICAL_END_ASM
-
     //
     // If all of the clock sources are not HRFC disable LDO when sleeping if timers are enabled.
     //
-    if ( am_hal_ctimers_use_hfrc() )
+    if ( timers_use_hfrc() )
     {
-      AM_BFW(PWRCTRL, MISCOPT, DIS_LDOLPMODE_TIMERS, 0);
+        AM_BFW(PWRCTRL, MISCOPT, DIS_LDOLPMODE_TIMERS, 0);
     }
     else
     {
-      AM_BFW(PWRCTRL, MISCOPT, DIS_LDOLPMODE_TIMERS, 1);
-    }
-
-}
-
-//*****************************************************************************
-//
-//! @brief Check to see if any of the CTimers is using the HFRC
-//!
-//! This function should be used to check if the HFRC is being used in order
-//! to correctly establish power related settings.
-//!
-//! @return None.
-//
-//*****************************************************************************
-static bool
-am_hal_ctimers_use_hfrc(void)
-{
-    uint32_t *pui32ConfigReg;
-    uint32_t ui32TimerASrc;
-    uint32_t ui32TimerBSrc;
-    uint32_t ui32CtimerIndex;
-
-    //
-    // Check STimer to see if it is set to use HFRC
-    //
-    if ( (AM_BFR(CTIMER, STCFG, CLKSEL) == AM_REG_CTIMER_STCFG_CLKSEL_HFRC_DIV16)   ||
-         (AM_BFR(CTIMER, STCFG, CLKSEL) == AM_REG_CTIMER_STCFG_CLKSEL_HFRC_DIV256) )
-    {
-        return true;
+        AM_BFW(PWRCTRL, MISCOPT, DIS_LDOLPMODE_TIMERS, 1);
     }
 
     //
-    //  Check all the CTimers to see if they use HFRC
+    // Done with critical section.
     //
-    for ( ui32CtimerIndex = 0; ui32CtimerIndex < MAX_CTIMERS; ui32CtimerIndex++ )
-    {
-        //
-        // Find the correct register to write.
-        //
-        pui32ConfigReg = (uint32_t *)(AM_REG_CTIMERn(0) + AM_REG_CTIMER_CTRL0_O +
-                                      (ui32CtimerIndex * TIMER_OFFSET));
-
-        //
-        // If clock source is not HRFC, we must disable LDO when sleeping.
-        // The value we are looking for is HFRC_DIV4 to HFRC_DIV4K.
-        // Get the clock sources and 0-base the extracted value.
-        //
-        ui32TimerASrc = AM_BFX(CTIMER, CTRL0, TMRA0CLK, *pui32ConfigReg) -
-                        AM_ENUMX(CTIMER, CTRL0, TMRA0CLK, HFRC_DIV4);
-        ui32TimerBSrc = AM_BFX(CTIMER, CTRL0, TMRB0CLK, *pui32ConfigReg) -
-                        AM_ENUMX(CTIMER, CTRL0, TMRB0CLK, HFRC_DIV4);
-
-        //
-        // If the source value is 0 to (HFRC_DIV4K - HFRC_DIV4), then it's HFRC.
-        //
-        if ( (ui32TimerASrc <= (AM_ENUMX(CTIMER, CTRL0, TMRA0CLK, HFRC_DIV4K) -
-                                AM_ENUMX(CTIMER, CTRL0, TMRA0CLK, HFRC_DIV4)))  ||
-             (ui32TimerBSrc <= (AM_ENUMX(CTIMER, CTRL0, TMRB0CLK, HFRC_DIV4K) -
-                                AM_ENUMX(CTIMER, CTRL0, TMRB0CLK, HFRC_DIV4))) )
-        {
-            return true;
-        }
-    }
+    AM_CRITICAL_END_ASM
 
-    return false;
-}
+} // am_hal_ctimer_config_single()
 
 //*****************************************************************************
 //
@@ -651,7 +685,7 @@ am_hal_ctimer_start(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_start()
 
 //*****************************************************************************
 //
@@ -708,7 +742,7 @@ am_hal_ctimer_stop(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_stop()
 
 //*****************************************************************************
 //
@@ -721,7 +755,7 @@ am_hal_ctimer_stop(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
 //!
 //! This function will stop a free-running counter-timer, reset its value to
 //! zero, and leave the timer disabled. When you would like to restart the
-//! counter, you will need to call am_hal_ctimer_enable().
+//! counter, you will need to call am_hal_ctimer_start().
 //!
 //! The \e ui32TimerSegment parameter allows the caller to individually select
 //! a segment within, such as TIMER0A, TIMER0B, or both.
@@ -762,7 +796,7 @@ am_hal_ctimer_clear(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_clear()
 
 //*****************************************************************************
 //
@@ -790,7 +824,7 @@ uint32_t
 am_hal_ctimer_read(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
 {
     volatile uint32_t ui32Value = 0;
-    uint32_t ui32Values[3] = {0};
+    uint32_t ui32Values[4] = {0,};
     uint32_t ui32TimerAddrTbl[4] =
     {
         REG_CTIMER_BASEADDR + AM_REG_CTIMER_TMR0_O,
@@ -880,7 +914,7 @@ am_hal_ctimer_read(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
     }
 
     return ui32Value;
-}
+} // am_hal_ctimer_read()
 
 //*****************************************************************************
 //
@@ -930,7 +964,7 @@ am_hal_ctimer_pin_enable(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_pin_enable()
 
 //*****************************************************************************
 //
@@ -980,7 +1014,7 @@ am_hal_ctimer_pin_disable(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_pin_disable()
 
 //*****************************************************************************
 //
@@ -990,7 +1024,7 @@ am_hal_ctimer_pin_disable(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment)
 //!
 //! @param ui32TimerSegment specifies which segment of the timer to use.
 //!
-//! @param bInvertOutpt determines whether the output should be inverted. If
+//! @param bInvertOutput determines whether the output should be inverted. If
 //! true, the timer output pin for the selected timer segment will be
 //! inverted.
 //!
@@ -1050,7 +1084,7 @@ am_hal_ctimer_pin_invert(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment,
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_pin_invert()
 
 //*****************************************************************************
 //
@@ -1098,7 +1132,7 @@ am_hal_ctimer_compare_set(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment,
     pui32CmprRegA = (uint32_t *)(AM_REG_CTIMERn(0) +
                                  AM_REG_CTIMER_CMPRA0_O +
                                  (ui32TimerNumber * TIMER_OFFSET));
-    pui32CmprRegB = pui32CmprRegA + CTIMER_CMPR_OFFSET;
+    pui32CmprRegB = pui32CmprRegA + CTIMER_CMPR_OFFSET/4;
 
     //
     // Write the compare register with the selected value.
@@ -1114,7 +1148,6 @@ am_hal_ctimer_compare_set(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment,
         //
         // CMPR reg 1
         // Get the lower 16b (but may not be used if TIMERB).
-        // Mask existing CMPR0 bits, add
         //
         ui32CmprRegA = ( (ui32CmprRegA & AM_REG_CTIMER_CMPRA0_CMPR0A0_M) |
                           AM_REG_CTIMER_CMPRA0_CMPR1A0(ui32Value & 0xFFFF) );
@@ -1162,7 +1195,7 @@ am_hal_ctimer_compare_set(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment,
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_compare_set()
 
 //*****************************************************************************
 //
@@ -1300,7 +1333,7 @@ am_hal_ctimer_period_set(uint32_t ui32TimerNumber, uint32_t ui32TimerSegment,
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_period_set()
 
 //*****************************************************************************
 //
@@ -1328,7 +1361,7 @@ am_hal_ctimer_adc_trigger_enable(void)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_adc_trigger_enable()
 
 //*****************************************************************************
 //
@@ -1356,7 +1389,7 @@ am_hal_ctimer_adc_trigger_disable(void)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_adc_trigger_disable()
 
 //*****************************************************************************
 //
@@ -1410,7 +1443,7 @@ am_hal_ctimer_int_enable(uint32_t ui32Interrupt)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_int_enable()
 
 //*****************************************************************************
 //
@@ -1448,7 +1481,7 @@ am_hal_ctimer_int_enable_get(void)
     // Return enabled interrupts.
     //
     return AM_REGn(CTIMER, 0, INTEN);
-}
+} // am_hal_ctimer_int_enable_get()
 
 //*****************************************************************************
 //
@@ -1499,7 +1532,7 @@ am_hal_ctimer_int_disable(uint32_t ui32Interrupt)
     // Done with critical section.
     //
     AM_CRITICAL_END_ASM
-}
+} // am_hal_ctimer_int_disable()
 
 //*****************************************************************************
 //
@@ -1540,7 +1573,7 @@ am_hal_ctimer_int_clear(uint32_t ui32Interrupt)
     // Disable the interrupt at the module level.
     //
     AM_REGn(CTIMER, 0, INTCLR) = ui32Interrupt;
-}
+} // am_hal_ctimer_int_clear()
 
 //*****************************************************************************
 //
@@ -1581,7 +1614,7 @@ am_hal_ctimer_int_set(uint32_t ui32Interrupt)
     // Set the interrupts.
     //
     AM_REGn(CTIMER, 0, INTSET) = ui32Interrupt;
-}
+} // am_hal_ctimer_int_set()
 
 //*****************************************************************************
 //
@@ -1645,7 +1678,7 @@ am_hal_ctimer_int_status_get(bool bEnabledOnly)
     {
         return AM_REGn(CTIMER, 0, INTSTAT);
     }
-}
+} // am_hal_ctimer_int_status_get()
 
 //*****************************************************************************
 //
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.h
index 1d2ffc820..73ca6b648 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ctimer.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_ctimer.h
+//  am_hal_ctimer.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the CTIMER.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup ctimer Counter/Timer (CTIMER)
-//! @ingroup hal
+//! @addtogroup ctimer2 Counter/Timer (CTIMER)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,16 +42,18 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_CTIMER_H
 #define AM_HAL_CTIMER_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
+//*****************************************************************************
+//
+//! Number of timers
+//
+//*****************************************************************************
+#define AM_HAL_CTIMER_TIMERS_NUM    4
 
 //*****************************************************************************
 //
@@ -107,7 +109,7 @@ extern "C"
 //!
 //! These options are to be used with the \e am_hal_ctimer_config_t structure
 //! used by \e am_hal_ctimer_config
-//!  @{
+//! @{
 //
 //*****************************************************************************
 #define AM_HAL_CTIMER_CLK_PIN               AM_REG_CTIMER_CTRL0_TMRA0CLK(0x0)
@@ -126,6 +128,7 @@ extern "C"
 #define AM_HAL_CTIMER_LFRC_1_16HZ           AM_REG_CTIMER_CTRL0_TMRA0CLK(0xD)
 #define AM_HAL_CTIMER_RTC_100HZ             AM_REG_CTIMER_CTRL0_TMRA0CLK(0xE)
 #define AM_HAL_CTIMER_HCLK                  AM_REG_CTIMER_CTRL0_TMRA0CLK(0xF)
+#define AM_HAL_CTIMER_BUCK                  AM_REG_CTIMER_CTRL0_TMRA0CLK(0x10)
 //! @}
 
 //*****************************************************************************
@@ -200,6 +203,11 @@ am_hal_ctimer_config_t;
 //*****************************************************************************
 typedef void (*am_hal_ctimer_handler_t)(void);
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
@@ -253,7 +261,7 @@ extern void am_hal_ctimer_int_set(uint32_t ui32Interrupt);
 extern void am_hal_ctimer_int_clear(uint32_t ui32Interrupt);
 extern uint32_t am_hal_ctimer_int_status_get(bool bEnabledOnly);
 extern void am_hal_ctimer_int_register(uint32_t ui32Interrupt,
-                         am_hal_ctimer_handler_t pfnHandler);
+                                       am_hal_ctimer_handler_t pfnHandler);
 extern void am_hal_ctimer_int_service(uint32_t ui32Status);
 
 #ifdef __cplusplus
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.c
index 9f87fd79f..128e2a199 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.c
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_debug.c
+//  am_hal_debug.c
+//! @file
 //!
 //! @brief Useful functions for debugging.
 //!
@@ -41,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.h
index da789ada0..7fe55ad1a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_debug.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_debug.h
+//  am_hal_debug.h
+//! @file
 //!
 //! @brief Useful macros for debugging.
 //!
@@ -41,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_DEBUG_H
 #define AM_HAL_DEBUG_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 // Debug assert macros.
@@ -72,6 +68,11 @@ extern "C"
 
 #endif // AM_DEBUG_ASSERT
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function prototypes.
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.c
index 971606eb6..8cc165005 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_flash.c
+//  am_hal_flash.c
+//! @file
 //!
 //! @brief Functions for performing Flash operations.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup flash Flash
-//! @ingroup hal
+//! @addtogroup flash2 Flash
+//! @ingroup apollo2hal
 //!
 //! IMPORTANT: Interrupts are active during execution of all HAL flash
 //! functions. If an interrupt occurs during execution of a flash function
@@ -54,7 +54,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -402,14 +402,19 @@ am_hal_flash_store_ui32(uint32_t ui32Address, uint32_t ui32Data)
 //! Note that the ROM-based function executes at 3 cycles per iteration plus
 //! the regular function call, entry, and exit overhead.
 //! The call and return overhead, including the call to this function, is
-//! somewhere in the neighborhood of 36 cycles.
+//! somewhere in the neighborhood of 14 cycles, or 4.7 iterations.
 //!
 //! Example:
 //! - MCU operating at 48MHz -> 20.83 ns / cycle
 //! - Therefore each iteration (once inside the bootrom function) will consume
 //!   62.5ns.
-//! - The total overhead (assuming 36 cycles) is 750ns.
-//! - If ui32Iterations = 4: 0.750 + (0.0625 * 4) = 1us.
+//! - The total overhead (assuming 14 cycles) is 292ns.
+//! - For ui32Iterations=28: Total delay time = 0.292 + (0.0625 * 28) = 2.04us.
+//!
+//! The FLASH_CYCLES_US(n) macro can be used with am_hal_flash_delay() to
+//! get an approximate microsecond delay.
+//! e.g. For a 2us delay, use:
+//!      am_hal_flash_delay( FLASH_CYCLES_US(2) );
 //!
 //! @note Interrupts are active during execution of this function.  Therefore,
 //! any interrupt taken will affect the delay timing.
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.h
index 4a6a208f5..3ce5c1cc9 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_flash.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_flash.h
+//  am_hal_flash.h
+//! @file
 //!
 //! @brief Functions for performing Flash operations.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup flash Flash
-//! @ingroup hal
+//! @addtogroup flash2 Flash
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_FLASH_H
 #define AM_HAL_FLASH_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 #include <stdint.h>
 #include <stdbool.h>
 
@@ -79,13 +74,30 @@ extern "C"
 #define AM_HAL_FLASH_TOTAL_SIZE             ( AM_HAL_FLASH_INSTANCE_SIZE * 2 )
 #define AM_HAL_FLASH_LARGEST_VALID_ADDR     ( AM_HAL_FLASH_ADDR + AM_HAL_FLASH_TOTAL_SIZE - 1 )
 
+//
 // Convert an absolute flash address to a instance
+//
 #define AM_HAL_FLASH_ADDR2INST(addr)        ( ( addr >> 19 ) & 1 )
+
+//
 // Convert an absolute flash address to a page number relative to the instance
+//
 #define AM_HAL_FLASH_ADDR2PAGE(addr)        ( ( addr >> 13 ) & 0x3F )
+
+//
 // Convert an absolute flash address to an absolute page number
+//
 #define AM_HAL_FLASH_ADDR2ABSPAGE(addr)     ( addr >> 13 )
 
+//
+// Given a number of microseconds, convert to a value representing the number of
+// cycles that will give that delay. This macro is basically taking into account
+// some of the call overhead.
+// e.g. To provide a 2us delay:
+//  am_hal_flash_delay( FLASH_CYCLES_US(2) );
+//
+#define FLASH_CYCLES_US(n)      ((n * (AM_HAL_CLKGEN_FREQ_MAX_MHZ / 3)) - 4)
+
 //
 // Backward compatibility
 //
@@ -206,6 +218,11 @@ extern g_am_hal_flash_t g_am_hal_flash;
 #define AM_HAL_FLASH_INFO_CHUNK2INST(n)     ((n >> 5) & 1
 #define AM_HAL_FLASH_INFO_ADDR2CHUNK(n)     ((n) >> 14)
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // Function prototypes for the helper functions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.c
index b1b3bd83b..2f0760f6c 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.c
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_global.c
+//  am_hal_global.c
+//! @file
 //!
 //! @brief Locate global variables here.
 //!
@@ -42,7 +43,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.h
index 85d0df879..39638cf1b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_global.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_global.h
+//  am_hal_global.h
+//! @file
 //!
 //! @brief Locate all HAL global variables here.
 //!
@@ -41,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_GLOBAL_H
 #define AM_HAL_GLOBAL_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 // Macro definitions
@@ -106,6 +102,11 @@ extern "C"
 //*****************************************************************************
 extern volatile uint32_t g_ui32HALflags;
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.c
index 480ce99a3..eba3f8537 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_gpio.c
+//  am_hal_gpio.c
+//! @file
 //!
 //! @brief Functions for interfacing with the GPIO module
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup gpio GPIO
-//! @ingroup hal
+//! @addtogroup gpio2 GPIO
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.h
index 5f633cd9f..c4d884a41 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_gpio.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_gpio.h
+//  am_hal_gpio.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the GPIO module.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup gpio GPIO
-//! @ingroup hal
+//! @addtogroup gpio2 GPIO
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -119,7 +119,7 @@
 
 //*****************************************************************************
 //
-// Output options
+// Output options (OUTCFG)
 //
 //*****************************************************************************
 #define AM_HAL_GPIO_OUT_DISABLE     ((0x0 << 1) << CFGVAL_GPIOCFG_S)
@@ -127,6 +127,15 @@
 #define AM_HAL_GPIO_OUT_OPENDRAIN   ((0x2 << 1) << CFGVAL_GPIOCFG_S)
 #define AM_HAL_GPIO_OUT_3STATE      ((0x3 << 1) << CFGVAL_GPIOCFG_S)
 
+//*****************************************************************************
+//
+// Special options for IOM0 and IOM4 clocks.
+// For 24MHz operation, a special enable must be selected. The 24MHZ select is
+// selected via bit0 of OUTCFG (which is, in a way,an alias of OUT_PUSHPULL).
+//
+//*****************************************************************************
+#define AM_HAL_GPIO_24MHZ_ENABLE    ((0x1 << 1) << CFGVAL_GPIOCFG_S)
+
 //*****************************************************************************
 //
 // Pad configuration options.
@@ -498,13 +507,13 @@
 //! @return None.
 //
 //*****************************************************************************
-#define am_hal_gpio_int_polarity_bit_set(ui32PinNumber, ui32Polarity)         \
-    if ( (uint32_t)(ui32PinNumber) < AM_HAL_GPIO_MAX_PADS )                   \
+#define am_hal_gpio_int_polarity_bit_set(ui32BitNum, ui32Polarity)            \
+    if ( (uint32_t)(ui32BitNum) < AM_HAL_GPIO_MAX_PADS )                      \
     {                                                                         \
         AM_CRITICAL_BEGIN_ASM                                                 \
                                                                               \
         AM_REGn(GPIO, 0, PADKEY) = AM_REG_GPIO_PADKEY_KEYVAL;                 \
-        AM_HAL_GPIO_POL_W(ui32PinNumber, ui32Polarity);                       \
+        AM_HAL_GPIO_POL_W(ui32BitNum, ui32Polarity);                          \
         AM_REGn(GPIO, 0, PADKEY) = 0;                                         \
                                                                               \
         AM_CRITICAL_END_ASM                                                   \
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.c
index f34ac9238..7c41e4d51 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.c
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_i2c_bit_bang.c
+//  am_hal_i2c_bit_bang.c
+//! @file
 //!
 //! @brief I2C bit bang module.
 //!
@@ -40,7 +41,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.h
index 16d5e6509..71a61014a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_i2c_bit_bang.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_i2c_bit_bang.h
+//  am_hal_i2c_bit_bang.h
+//! @file
 //!
 //! @brief I2C bit bang module.
 //!
@@ -39,17 +40,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_I2C_BIT_BANG_H
 #define AM_HAL_I2C_BIT_BANG_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 // Enumerated return constants
@@ -62,8 +58,14 @@ typedef enum
     AM_HAL_I2C_BIT_BANG_DATA_NAKED,
     AM_HAL_I2C_BIT_BANG_CLOCK_TIMEOUT,
     AM_HAL_I2C_BIT_BANG_DATA_TIMEOUT,
+    AM_HAL_I2C_BIT_BANG_STATUS_MAX,
 }am_hal_i2c_bit_bang_enum_t;
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.c
index 74ab58456..87c54bd8b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.c
@@ -1,14 +1,14 @@
 //*****************************************************************************
 //
-//! @file am_hal_interrupt.c
+//  am_hal_interrupt.c
+//! @file
 //!
 //! @brief Helper functions supporting interrupts and NVIC operation.
 //!
 //! These functions may be used for NVIC-level interrupt configuration.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup interrupt Interrupt (ARM NVIC support functions)
-//! @ingroup hal
+//! @addtogroup interrupt2 Interrupt (ARM NVIC support functions)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -44,7 +44,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -190,7 +190,7 @@ am_hal_interrupt_priority_set(uint32_t ui32Interrupt, uint32_t ui32Priority)
     //
     // OR in the new priority.
     //
-    *pui32PriorityReg |= (ui32Priority << ui32Shift);
+    *pui32PriorityReg = ui32OldPriority | (ui32Priority << ui32Shift);
 }
 
 //*****************************************************************************
@@ -210,7 +210,7 @@ void am_hal_interrupt_pend_set(uint32_t ui32Interrupt)
     //
     // Check to see if the specified interrupt is valid for this MCU
     //
-    if ( ui32Interrupt > 47 )
+    if ( ui32Interrupt > AM_HAL_INTERRUPT_MAX )
     {
         return;
     }
@@ -247,7 +247,7 @@ void am_hal_interrupt_pend_clear(uint32_t ui32Interrupt)
     //
     // Check to see if the specified interrupt is valid for this MCU
     //
-    if ( ui32Interrupt > 47 )
+    if ( ui32Interrupt > AM_HAL_INTERRUPT_MAX )
     {
         return;
     }
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.h
index b29e67bd1..725056871 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_interrupt.h
@@ -1,14 +1,14 @@
 //*****************************************************************************
 //
-//! @file am_hal_interrupt.h
+//  am_hal_interrupt.h
+//! @file
 //!
 //! @brief Helper functions supporting interrupts and NVIC operation.
 //!
 //! These functions may be used for NVIC-level interrupt configuration.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup interrupt Interrupt (ARM NVIC support functions)
-//! @ingroup hal
+//! @addtogroup interrupt2 Interrupt (ARM NVIC support functions)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -44,16 +44,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_INTERRUPT_H
 #define AM_HAL_INTERRUPT_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
 //*****************************************************************************
 //
 //! @name ISR number macros.
@@ -66,6 +62,7 @@ extern "C"
 //
 // Hardware interrupts
 //
+#define AM_HAL_INTERRUPT_MAX                (47)    //AM_HAL_INTERRUPT_SOFTWARE3
 #define AM_HAL_INTERRUPT_RESET              1
 #define AM_HAL_INTERRUPT_NMI                2
 #define AM_HAL_INTERRUPT_HARDFAULT          3
@@ -130,6 +127,10 @@ extern "C"
 //*****************************************************************************
 #define AM_HAL_INTERRUPT_PRIORITY(n)        (((uint32_t)(n) & 0x7) << 5)
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.c
index 39b43f3f0..8393c19fb 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_iom.c
+//  am_hal_iom.c
+//! @file
 //!
 //! @brief Functions for interfacing with the IO Master module
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup iom IO Master (SPI/I2C)
-//! @ingroup hal
+//! @addtogroup iom2 IO Master (SPI/I2C)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,13 +42,14 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
 #include <stdint.h>
 #include <stdbool.h>
 #include "am_mcu_apollo.h"
+#include "am_util_delay.h"
 
 #ifdef __IAR_SYSTEMS_ICC__
 #define AM_INSTR_CLZ(n)                     __CLZ(n)
@@ -94,6 +95,8 @@ internal_am_hal_iom_spi_cmd_construct(uint32_t ui32Operation,
                                       uint32_t ui32ChipSelect,
                                       uint32_t ui32NumBytes,
                                       uint32_t ui32Options);
+static am_hal_iom_status_e
+internal_iom_wait_i2c_scl_hi(uint32_t ui32Module);
 
 //*****************************************************************************
 //
@@ -109,11 +112,6 @@ internal_am_hal_iom_spi_cmd_construct(uint32_t ui32Operation,
 // Global state variables
 //
 //*****************************************************************************
-//
-// Save error status from ISR, particularly for use in I2C queue mode.
-//
-uint32_t g_iom_error_status = 0;
-
 //
 // Define a structure to map CE for IOM4 only.
 //
@@ -132,10 +130,33 @@ const IOMPad_t g_IOMPads[] =
     {5, 47, 6}, {6, 35, 4}, {7, 38, 6}
 };
 
+typedef struct
+{
+  uint8_t       module;         // IOM module
+  uint8_t       pad;            // GPIO Pad
+  uint8_t       funcsel;        // FNCSEL value
+} I2CPad_t;
+
+// Define the mapping between I2C SCL Pads, and FNCSEL values for all IOMs.
+const I2CPad_t g_I2CPads[] =
+{
+    {0, 5, 0},
+    {1, 8, 0},
+    {2, 0, 7},
+    {3, 42, 4},
+    {4, 39, 4},
+    {5, 48, 4},
+    {2, 27, 4},
+};
+
+// Defines for IOM 4 Workaround
 #define WORKAROUND_IOM          4
 #define WORKAROUND_IOM_MOSI_PIN 44
 #define WORKAROUND_IOM_MOSI_CFG AM_HAL_PIN_44_M4MOSI
 
+#define MAX_IOM_BITS            9
+#define IOM_OVERHEAD_FACTOR     2
+
 //*****************************************************************************
 //
 // Non-blocking buffer and buffer-management variables.
@@ -154,10 +175,24 @@ am_hal_iom_nb_buffer;
 //
 // Global State to keep track if there is an ongoing transaction
 //
-volatile bool g_bIomBusy[AM_REG_IOMSTR_NUM_MODULES] = {0};
+volatile bool g_bIomBusy[AM_REG_IOMSTR_NUM_MODULES+1] = {0};
 
 am_hal_iom_nb_buffer g_psIOMBuffers[AM_REG_IOMSTR_NUM_MODULES];
 
+//
+// Save error status from non-blocking calls
+//
+static am_hal_iom_status_e g_iom_error_status[AM_REG_IOMSTR_NUM_MODULES+1];
+
+//*****************************************************************************
+//
+// Computed timeout.
+//
+// The IOM may not always respond to events (e.g., CMDCMP).  This is a
+// timeout value in cycles to be used when waiting on status changes.
+//*****************************************************************************
+uint32_t ui32StatusTimeout[AM_REG_IOMSTR_NUM_MODULES];
+
 //*****************************************************************************
 //
 // Queue management variables.
@@ -179,12 +214,73 @@ am_hal_iom_queue_flush_t am_hal_iom_queue_flush = am_hal_iom_sleeping_queue_flus
 //*****************************************************************************
 am_hal_iom_pwrsave_t am_hal_iom_pwrsave[AM_REG_IOMSTR_NUM_MODULES];
 
+//*****************************************************************************
+//
+// I2C BitBang to IOM error mapping
+//
+//*****************************************************************************
+const am_hal_iom_status_e i2c_bb_errmap[AM_HAL_I2C_BIT_BANG_STATUS_MAX] =
+    {
+        AM_HAL_IOM_SUCCESS, // AM_HAL_I2C_BIT_BANG_SUCCESS,
+        AM_HAL_IOM_ERR_I2C_NAK, // AM_HAL_I2C_BIT_BANG_ADDRESS_NAKED,
+        AM_HAL_IOM_ERR_I2C_NAK, // AM_HAL_I2C_BIT_BANG_DATA_NAKED,
+        AM_HAL_IOM_ERR_TIMEOUT, // AM_HAL_I2C_BIT_BANG_CLOCK_TIMEOUT,
+        AM_HAL_IOM_ERR_TIMEOUT, // AM_HAL_I2C_BIT_BANG_DATA_TIMEOUT,
+    };
 
 //*****************************************************************************
 //
 // Static helper functions
 //
 //*****************************************************************************
+
+//*****************************************************************************
+//
+// Get the error interrupt staus
+//
+//*****************************************************************************
+//
+//! @brief Returns the error status based on interrupt bits
+//!
+//! @param ui32Module - IOM module
+//!        ui32Status - Currently accumulated error status
+//!
+//! The function looks at the supplied interrupt error status bits and the
+//! the current INTSTAT and maps the same to the enum am_hal_iom_status_e.
+//!
+//! @return Returns the appropriate error status in the form of am_hal_iom_status_e
+//!
+//*****************************************************************************
+static am_hal_iom_status_e
+internal_iom_get_int_err(uint32_t ui32Module, uint32_t ui32IntStatus)
+{
+    am_hal_iom_status_e ui32Status = AM_HAL_IOM_SUCCESS;
+    //
+    // Let's accumulate the errors
+    //
+    ui32IntStatus |= am_hal_iom_int_status_get(ui32Module, false);
+
+    if (ui32IntStatus & AM_HAL_IOM_INT_SWERR)
+    {
+        // Error in hardware command issued or illegal access by SW
+        ui32Status = AM_HAL_IOM_ERR_INVALID_OPER;
+    }
+    else if (ui32IntStatus & AM_HAL_IOM_INT_I2CARBERR)
+    {
+        // Loss of I2C multi-master arbitration
+        ui32Status = AM_HAL_IOM_ERR_I2C_ARB;
+    }
+    else if (ui32IntStatus & AM_HAL_IOM_INT_NAK)
+    {
+        // I2C NAK
+        ui32Status = AM_HAL_IOM_ERR_I2C_NAK;
+    }
+    return ui32Status;
+}
+
+//*****************************************************************************
+// onebit()
+//*****************************************************************************
 //
 // A power of 2?
 // Return true if ui32Value has exactly 1 bit set, otherwise false.
@@ -194,6 +290,9 @@ static bool onebit(uint32_t ui32Value)
     return ui32Value  &&  !(ui32Value & (ui32Value - 1));
 }
 
+//*****************************************************************************
+// compute_freq()
+//*****************************************************************************
 //
 // Compute the interface frequency based on the given parameters
 //
@@ -210,9 +309,12 @@ static uint32_t compute_freq(uint32_t ui32HFRCfreqHz,
     return ui32ClkFreq;
 }
 
+//*****************************************************************************
+// iom_calc_gpio()
 //
 // Calculate the IOM4 GPIO to assert.
 //
+//*****************************************************************************
 static uint32_t iom_calc_gpio(uint32_t ui32ChipSelect)
 {
     uint32_t      index;
@@ -276,6 +378,128 @@ isRevB0(void)
     }
 }
 
+//*****************************************************************************
+//
+// Checks to see if this processor is a Rev B2 device.
+//
+// This is needed for the B2 I2C workaround.
+//
+//*****************************************************************************
+static bool
+isRevB2(void)
+{
+    //
+    // Check to make sure the major rev is B and the minor rev is zero.
+    //
+    if ( (AM_REG(MCUCTRL, CHIPREV) & 0xFF) == 
+         (AM_REG_MCUCTRL_CHIPREV_REVMAJ_B | AM_REG_MCUCTRL_CHIPREV_REVMIN_REV2) )
+    {
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+//*****************************************************************************
+//
+// Checks and waits for the SCL line to be high
+// This is to ensure clock hi time specs are not violated in case slave did
+// clock stretching in previous transaction
+//
+//*****************************************************************************
+static am_hal_iom_status_e
+internal_iom_wait_i2c_scl_hi(uint32_t ui32Module)
+{
+    uint32_t ui32IOMGPIO = 0xDEADBEEF;
+    volatile uint32_t *pui32SCLPadreg;
+    uint32_t ui32SCLPadregVal;
+    uint32_t index;
+    uint8_t  ui8PadRegVal;
+    uint8_t  ui8FncSelVal;
+    uint32_t waitStatus;
+
+    // Need to change the SCL pin as a GPIO and poll till it is set to hi
+    // For all the IOM's except for IOM2, there is a single designated pin for SCL
+    // IOM2 has two choices and we need to determine which one
+
+    //
+    // Figure out which GPIO we are using for the SCL
+    //
+    for ( index = 0; index < (sizeof(g_I2CPads) / sizeof(I2CPad_t)); index++ )
+    {
+        //
+        //  Is this for the IOM that we are using?
+        //
+        if ( g_I2CPads[index].module == ui32Module )
+        {
+            //
+            // Get the PAD register value
+            //
+            ui8PadRegVal = ((AM_REGVAL(AM_HAL_GPIO_PADREG(g_I2CPads[index].pad))) &
+                             AM_HAL_GPIO_PADREG_M(g_I2CPads[index].pad)) >>
+                             AM_HAL_GPIO_PADREG_S(g_I2CPads[index].pad);
+
+            //
+            // Get the FNCSEL field value
+            //
+            ui8FncSelVal = (ui8PadRegVal & 0x38) >> 3;
+
+            //
+            // Is the FNCSEL filed for this pad set to the expected value?
+            //
+            if ( ui8FncSelVal == g_I2CPads[index].funcsel )
+            {
+                // This is the GPIO we need to use.
+                ui32IOMGPIO = g_I2CPads[index].pad;
+                break;
+            }
+        }
+    }
+    if (0xDEADBEEF == ui32IOMGPIO)
+    {
+        // SCL has not been configured
+        return AM_HAL_IOM_ERR_INVALID_CFG;
+    }
+
+    //
+    // Save the locations and values of the SCL pin configuration
+    // information.
+    //
+    pui32SCLPadreg = (volatile uint32_t *)AM_HAL_GPIO_PADREG(ui32IOMGPIO);
+    ui32SCLPadregVal = *pui32SCLPadreg;
+    //
+    // Temporarily configure the override pin as an input.
+    //
+    am_hal_gpio_pin_config(ui32IOMGPIO, AM_HAL_PIN_INPUT);
+
+    //
+    // Make sure SCL is high within standard timeout
+    //
+    waitStatus = am_util_wait_status_change(ui32StatusTimeout[ui32Module],
+    		AM_HAL_GPIO_RD_REG(ui32IOMGPIO), AM_HAL_GPIO_RD_M(ui32IOMGPIO),
+    		AM_HAL_GPIO_RD_M(ui32IOMGPIO));
+
+    //
+    // Write the GPIO PADKEY register
+    //
+    AM_REGn(GPIO, 0, PADKEY) = AM_REG_GPIO_PADKEY_KEYVAL;
+    // Revert back the original settings
+    *pui32SCLPadreg = ui32SCLPadregVal;
+    //
+    // Re-lock the GPIO PADKEY register
+    //
+    AM_REGn(GPIO, 0, PADKEY) = 0;
+
+    if (waitStatus != 1)
+    {
+        return AM_HAL_IOM_ERR_TIMEOUT;
+    }
+
+    return AM_HAL_IOM_SUCCESS;
+}
+
 //*****************************************************************************
 //
 //! @brief Returns the proper settings for the CLKCFG register.
@@ -436,6 +660,53 @@ uint64_t iom_get_interface_clock_cfg(uint32_t ui32FreqHz, uint32_t ui32Phase )
 } //iom_get_interface_clock_cfg()
 
 
+//*****************************************************************************
+//
+//! @brief Clock setting for the I2C Clock Stretch Workaround
+//!
+//! This restricts the frequencies that can be used for I2C devices on 
+//!
+//! @param  ui32FreqHz - The desired interface frequency in Hz.
+//!
+//! @return None.
+//
+//*****************************************************************************
+static
+uint64_t iom_get_i2c_workaround_clock_cfg(uint32_t ui32FreqHz)
+{
+  uint32_t      ui32Fsel;
+  
+  // Only allow certain SCL frequencies for clock stretching devices.
+  if (ui32FreqHz != AM_HAL_IOM_800KHZ)
+  {
+    ui32Fsel = 2;
+  }
+  else if (ui32FreqHz != AM_HAL_IOM_400KHZ)
+  {
+    ui32Fsel = 3;
+  }
+  else if (ui32FreqHz != AM_HAL_IOM_200KHZ)
+  {
+    ui32Fsel = 4;
+  }
+  else if (ui32FreqHz != AM_HAL_IOM_100KHZ)
+  {
+    ui32Fsel = 5;
+  }
+  else  // Default is 100KHz.
+  {
+    return 0;
+  }
+  
+  // Return the resulting CLKCFG register settings.
+  return (AM_REG_IOMSTR_CLKCFG_FSEL(ui32Fsel) |
+    AM_REG_IOMSTR_CLKCFG_DIV3(0)              |
+      AM_REG_IOMSTR_CLKCFG_DIVEN(1)           |
+        AM_REG_IOMSTR_CLKCFG_LOWPER(14)       |
+          AM_REG_IOMSTR_CLKCFG_TOTPER(29));
+  
+} // iom_get_i2c_workaround_clock_cfg
+
 //*****************************************************************************
 //
 //! @brief Enable the IOM in the power control block.
@@ -738,22 +1009,40 @@ am_hal_iom_config(uint32_t ui32Module, const am_hal_iom_config_t *psConfig)
 #error AM_ASSERT_INVALID_THRESHOLD must be 0 or 1.
 #endif
 
-    //
-    // An exception occurs in the LOWPER computation when setting an interface
-    //  frequency (such as a divide by 5 frequency) which results in a 60/40
-    //  duty cycle.  The 60% cycle must occur in the appropriate half-period,
-    //  as only one of the half-periods is active, depending on which phase
-    //  is being selected.
-    // If SPHA=0 the low period must be 60%. If SPHA=1 high period must be 60%.
-    // Note that the predetermined frequency parameters use the formula
-    //  lowper = (totper-1)/2, which results in a 60% low period.
-    //
-    ui32ClkCfg = iom_get_interface_clock_cfg(psConfig->ui32ClockFrequency,
-                                             psConfig->bSPHA );
+    // Apply I2C clock stretching workaround if B2 silicon and IOM 1,2,3, or 5
+    if ((0 != ui32Module) & (4 != ui32Module) & (6 != ui32Module) & 
+			isRevB2() & (AM_HAL_IOM_I2CMODE == psConfig->ui32InterfaceMode))
+    {
+      // Set SPHA field to 1 on B2 silicon to enable the feature;
+      AM_REGn(IOMSTR, ui32Module, CFG) |= AM_REG_IOMSTR_CFG_SPHA_M;
+      ui32ClkCfg = iom_get_i2c_workaround_clock_cfg(psConfig->ui32ClockFrequency);
+    }
+    else
+    {      
+      //
+      // An exception occurs in the LOWPER computation when setting an interface
+      //  frequency (such as a divide by 5 frequency) which results in a 60/40
+      //  duty cycle.  The 60% cycle must occur in the appropriate half-period,
+      //  as only one of the half-periods is active, depending on which phase
+      //  is being selected.
+      // If SPHA=0 the low period must be 60%. If SPHA=1 high period must be 60%.
+      // Note that the predetermined frequency parameters use the formula
+      //  lowper = (totper-1)/2, which results in a 60% low period.
+      //
+      ui32ClkCfg = iom_get_interface_clock_cfg(psConfig->ui32ClockFrequency,
+                                               psConfig->bSPHA );
+    }
+    
     if ( ui32ClkCfg )
     {
         AM_REGn(IOMSTR, ui32Module, CLKCFG) = (uint32_t)ui32ClkCfg;
     }
+    
+    //
+    // Compute the status timeout value.
+    //
+    ui32StatusTimeout[ui32Module] = MAX_IOM_BITS * AM_HAL_IOM_MAX_FIFO_SIZE * 
+      IOM_OVERHEAD_FACTOR * (am_hal_clkgen_sysclk_get() / psConfig->ui32ClockFrequency);
 }
 
 //*****************************************************************************
@@ -1056,6 +1345,10 @@ am_hal_iom_workaround_word_write(uint32_t ui32ChipSelect,
             pui32CSPadreg, ui32CSPadregVal,
             ui32DelayTime, ui32ClkCfg,
             ui32LowClkCfg, bRising);
+    //
+    // Re-lock the GPIO PADKEY register
+    //
+    AM_REGn(GPIO, 0, PADKEY) = 0;
 
     //
     // Update the pointer and data counter.
@@ -1231,21 +1524,29 @@ iom_workaround_loop(uint32_t ui32PadRegVal, volatile uint32_t *pui32PadReg,
 //! last word with bytes of any value. The IOM hardware will only read the
 //! first \e ui32NumBytes in the \e pui8Data array.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
                      uint32_t *pui32Data, uint32_t ui32NumBytes,
                      uint32_t ui32Options)
 {
+    am_hal_iom_status_e ui32Status;
     //
     // Validate parameters
     //
-    am_hal_debug_assert_msg(ui32Module < AM_REG_IOMSTR_NUM_MODULES,
-                            "Trying to use an IOM module that doesn't exist.");
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
+    if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
+    {
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     //
     // Check to see if queues have been enabled. If they are, we'll actually
@@ -1256,27 +1557,32 @@ am_hal_iom_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
         //
         // If the queue is on, go ahead and add this transaction to the queue.
         //
-        am_hal_iom_queue_spi_write(ui32Module, ui32ChipSelect, pui32Data,
+        ui32Status = am_hal_iom_queue_spi_write(ui32Module, ui32ChipSelect, pui32Data,
                                    ui32NumBytes, ui32Options, 0);
 
-        //
-        // Wait until the transaction actually clears.
-        //
-        am_hal_iom_queue_flush(ui32Module);
+        if (ui32Status == AM_HAL_IOM_SUCCESS)
+        {
+            //
+            // Wait until the transaction actually clears.
+            //
+            am_hal_iom_queue_flush(ui32Module);
+            // g_iom_error_status gets set in the isr handling
+            ui32Status = g_iom_error_status[ui32Module];
+        }
 
         //
         // At this point, we've completed the transaction, and we can return.
         //
-        return;
     }
     else
     {
         //
         // Otherwise, we'll just do a polled transaction.
         //
-        am_hal_iom_spi_write_nq(ui32Module, ui32ChipSelect, pui32Data,
+        ui32Status = am_hal_iom_spi_write_nq(ui32Module, ui32ChipSelect, pui32Data,
                                 ui32NumBytes, ui32Options);
     }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -1298,26 +1604,38 @@ am_hal_iom_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
 //! into 32-bit words, which are then placed into the \e pui32Data array. Only
 //! the first \e ui32NumBytes bytes in this array will contain valid data.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
                     uint32_t *pui32Data, uint32_t ui32NumBytes,
                     uint32_t ui32Options)
 {
+    am_hal_iom_status_e ui32Status;
     //
     // Validate parameters
     //
-    am_hal_debug_assert_msg(ui32Module < AM_REG_IOMSTR_NUM_MODULES,
-                            "Trying to use an IOM module that doesn't exist.");
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
-
+    if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
+    {
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    // Reset the error status
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 4096, "SPI transfer too big.");
+    if (ui32NumBytes >= 4096)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     //
     // Check to see if queues have been enabled. If they are, we'll actually
@@ -1328,27 +1646,32 @@ am_hal_iom_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
         //
         // If the queue is on, go ahead and add this transaction to the queue.
         //
-        am_hal_iom_queue_spi_read(ui32Module, ui32ChipSelect, pui32Data,
+        ui32Status = am_hal_iom_queue_spi_read(ui32Module, ui32ChipSelect, pui32Data,
                                   ui32NumBytes, ui32Options, 0);
 
-        //
-        // Wait until the transaction actually clears.
-        //
-        am_hal_iom_queue_flush(ui32Module);
+        if (ui32Status == AM_HAL_IOM_SUCCESS)
+        {
+            //
+            // Wait until the transaction actually clears.
+            //
+            am_hal_iom_queue_flush(ui32Module);
+            // g_iom_error_status gets set in the isr handling
+            ui32Status = g_iom_error_status[ui32Module];
+        }
 
         //
         // At this point, we've completed the transaction, and we can return.
         //
-        return;
     }
     else
     {
         //
         // Otherwise, just perform a polled transaction.
         //
-        am_hal_iom_spi_read_nq(ui32Module, ui32ChipSelect, pui32Data,
+        ui32Status = am_hal_iom_spi_read_nq(ui32Module, ui32ChipSelect, pui32Data,
                                ui32NumBytes, ui32Options);
     }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -1372,10 +1695,10 @@ am_hal_iom_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
 //! last word with bytes of any value. The IOM hardware will only read the
 //! first \e ui32NumBytes in the \e pui8Data array.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_spi_write_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
                         uint32_t *pui32Data, uint32_t ui32NumBytes,
                         uint32_t ui32Options)
@@ -1384,33 +1707,47 @@ am_hal_iom_spi_write_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
     uint32_t ui32SpaceInFifo;
     uint32_t ui32IntConfig;
     uint32_t ui32MaxFifoSize;
+    am_hal_iom_status_e ui32Status;
+    uint32_t waitStatus;
 
     //
     // Validate parameters
     //
-    am_hal_debug_assert_msg(ui32Module < AM_REG_IOMSTR_NUM_MODULES,
-                            "Trying to use an IOM module that doesn't exist.");
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
+    if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
+    {
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    //
+    // Wait until the bus is idle
+    //
+    am_hal_iom_poll_complete(ui32Module);
+
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 4096, "SPI transfer too big.");
+    if (ui32NumBytes >= 4096)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     ui32MaxFifoSize = ((0 == AM_BFRn(IOMSTR, ui32Module, CFG, FULLDUP)) ?
                        AM_HAL_IOM_MAX_FIFO_SIZE : AM_HAL_IOM_MAX_FIFO_SIZE / 2);
     //
-    // Wait until any earlier transactions have completed.
-    //
-    am_hal_iom_poll_complete(ui32Module);
-    //
     // Disable interrupts so that we don't get any undesired interrupts.
     //
     ui32IntConfig = AM_REGn(IOMSTR, ui32Module, INTEN);
     AM_REGn(IOMSTR, ui32Module, INTEN) = 0;
-    // Clear CMDCMP status
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
     //
     // If we're on a B0 part, and we're using IOM4, our first byte coule be
@@ -1499,16 +1836,29 @@ am_hal_iom_spi_write_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
     }
 
     //
-    // Make sure CMDCMP was raised,
+    // Make sure CMDCMP was raised with standard timeout
     //
-    while ( !AM_BFRn(IOMSTR, ui32Module, INTSTAT, CMDCMP) );
+    waitStatus = am_util_wait_status_change(ui32StatusTimeout[ui32Module],
+    		AM_REG_IOMSTRn(ui32Module) + AM_REG_IOMSTR_INTSTAT_O,
+    		AM_REG_IOMSTR_INTEN_CMDCMP_M, AM_REG_IOMSTR_INTEN_CMDCMP_M);
+
+    if (waitStatus != 1)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_TIMEOUT;
+    }
+    else
+    {
+        g_iom_error_status[ui32Module] = ui32Status = internal_iom_get_int_err(ui32Module, 0);
+    }
 
     //
-    // Re-enable IOM interrupts. Make sure CMDCMP is cleared
+    // Re-enable IOM interrupts.
     //
-    AM_REGn(IOMSTR, ui32Module, INTCLR) = (ui32IntConfig | AM_REG_IOMSTR_INTSTAT_CMDCMP_M);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
     AM_REGn(IOMSTR, ui32Module, INTEN) = ui32IntConfig;
 
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -1530,10 +1880,10 @@ am_hal_iom_spi_write_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
 //! into 32-bit words, which are then placed into the \e pui32Data array. Only
 //! the first \e ui32NumBytes bytes in this array will contain valid data.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
                        uint32_t *pui32Data, uint32_t ui32NumBytes,
                        uint32_t ui32Options)
@@ -1541,25 +1891,36 @@ am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
     uint32_t ui32BytesInFifo;
     uint32_t ui32IntConfig;
     uint32_t bCmdCmp = false;
+    am_hal_iom_status_e ui32Status;
+    uint32_t waitStatus;
 
     //
     // Validate parameters
     //
-    am_hal_debug_assert_msg(ui32Module < AM_REG_IOMSTR_NUM_MODULES,
-                            "Trying to use an IOM module that doesn't exist.");
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
-
+    if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
+    {
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
     //
-    // Make sure the transfer isn't too long for the hardware to support.
+    // Wait until the bus is idle
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 4096, "SPI transfer too big.");
+    am_hal_iom_poll_complete(ui32Module);
 
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
     //
-    // Wait until the bus is idle, then start the requested READ transfer on
-    // the physical interface.
+    // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_iom_poll_complete(ui32Module);
+    if (ui32NumBytes >= 4096)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     //
     // Disable interrupts so that we don't get any undesired interrupts.
@@ -1571,10 +1932,8 @@ am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
     //
     AM_REGn(IOMSTR, ui32Module, INTEN) = 0;
 
-    //
-    // Clear CMDCMP status
-    //
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
     //
     // If we're on a B0 part, and we're using IOM4, our first byte coule be
@@ -1600,7 +1959,22 @@ am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
         // Wait for the dummy word to go out over the bus.
         //
         // Make sure the command complete has also been raised
-        while ( !AM_BFRn(IOMSTR, ui32Module, INTSTAT, CMDCMP) );
+        waitStatus = am_util_wait_status_change(ui32StatusTimeout[ui32Module],
+    		AM_REG_IOMSTRn(ui32Module) + AM_REG_IOMSTR_INTSTAT_O,
+    		AM_REG_IOMSTR_INTEN_CMDCMP_M, AM_REG_IOMSTR_INTEN_CMDCMP_M);
+        
+        if (waitStatus != 1)
+        {
+            g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_TIMEOUT;
+            //
+            // Re-enable IOM interrupts.
+            //
+            // Clear interrupts
+            AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
+            AM_REGn(IOMSTR, ui32Module, INTEN) = ui32IntConfig;
+            return ui32Status;
+        }
+        
         // Clear CMDCMP status
         AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
     }
@@ -1648,14 +2022,28 @@ am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
     //
     // Make sure CMDCMP was raised,
     //
-    while ( !AM_BFRn(IOMSTR, ui32Module, INTSTAT, CMDCMP) );
+    waitStatus = am_util_wait_status_change(ui32StatusTimeout[ui32Module],
+    		AM_REG_IOMSTRn(ui32Module) + AM_REG_IOMSTR_INTSTAT_O,
+    		AM_REG_IOMSTR_INTEN_CMDCMP_M, AM_REG_IOMSTR_INTEN_CMDCMP_M);
+
+    if (waitStatus != 1)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_TIMEOUT;
+    }
+    else
+    {
+        g_iom_error_status[ui32Module] = ui32Status = internal_iom_get_int_err(ui32Module, 0);
+    }
 
     //
     // Re-enable IOM interrupts. Make sure CMDCMP is cleared
     //
-    AM_REGn(IOMSTR, ui32Module, INTCLR) = (ui32IntConfig | AM_REG_IOMSTR_INTSTAT_CMDCMP_M);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
     AM_REGn(IOMSTR, ui32Module, INTEN) = ui32IntConfig;
 
+    return ui32Status;
+    
 }
 
 //*****************************************************************************
@@ -1688,15 +2076,19 @@ am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
 //! last word with bytes of any value. The IOM hardware will only read the
 //! first \e ui32NumBytes in the \e pui8Data array.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution. Note that
+//! successful execution for non-blocking call only means the transaction was
+//! successfully initiated. The status of the transaction is not known till the
+//! callback is called on completion
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_spi_write_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
                         uint32_t *pui32Data, uint32_t ui32NumBytes,
                         uint32_t ui32Options,
                         am_hal_iom_callback_t pfnCallback)
 {
+    am_hal_iom_status_e ui32Status;
     uint32_t ui32TransferSize;
     uint32_t ui32MaxFifoSize;
 
@@ -1705,24 +2097,32 @@ am_hal_iom_spi_write_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
     //
     if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
     }
+    //
+    // Wait until the bus is idle
+    //
+    am_hal_iom_poll_complete(ui32Module);
 
+    // Reset the error status for non-blocking transfer
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 4096, "SPI transfer too big.");
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
+    if (ui32NumBytes >= 4096)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     ui32MaxFifoSize = ((0 == AM_BFRn(IOMSTR, ui32Module, CFG, FULLDUP)) ?
                       AM_HAL_IOM_MAX_FIFO_SIZE : AM_HAL_IOM_MAX_FIFO_SIZE / 2);
 
-    //
-    // Wait until the bus is idle
-    //
-    am_hal_iom_poll_complete(ui32Module);
-
     //
     // Need to mark IOM busy to avoid another transaction to be scheduled.
     // This is to take care of a race condition in Queue mode, where the IDLE
@@ -1730,10 +2130,8 @@ am_hal_iom_spi_write_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
     //
     g_bIomBusy[ui32Module] = true;
 
-    //
-    // Clear CMDCMP status
-    //
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
     //
     // Check to see if we need to do the workaround.
@@ -1797,6 +2195,7 @@ am_hal_iom_spi_write_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                    ui32NumBytes, ui32Options);
         }
     }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -1826,50 +2225,62 @@ am_hal_iom_spi_write_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
 //! into 32-bit words, which are then placed into the \e pui32Data array. Only
 //! the first \e ui32NumBytes bytes in this array will contain valid data.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution. Note that
+//! successful execution for non-blocking call only means the transaction was
+//! successfully initiated. The status of the transaction is not known till the
+//! callback is called on completion
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_spi_read_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
                        uint32_t *pui32Data, uint32_t ui32NumBytes,
                        uint32_t ui32Options,
                        am_hal_iom_callback_t pfnCallback)
 {
+    am_hal_iom_status_e ui32Status;
     uint32_t ui32IntConfig;
-
+    uint32_t waitStatus;
+    
     //
     // Validate parameters
     //
-    am_hal_debug_assert_msg(ui32Module < AM_REG_IOMSTR_NUM_MODULES,
-                            "Trying to use an IOM module that doesn't exist.");
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
-
+    if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
+    {
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
     //
-    // Make sure the transfer isn't too long for the hardware to support.
+    // Wait until the bus is idle
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 4096, "SPI transfer too big.");
-
+    am_hal_iom_poll_complete(ui32Module);
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
     //
-    // Wait until the bus is idle
+    // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_iom_poll_complete(ui32Module);
+    if (ui32NumBytes >= 4096)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
+
 
     //
     // Need to mark IOM busy to avoid another transaction to be scheduled.
     // This is to take care of a race condition in Queue mode, where the IDLE
     // set is not a guarantee that the CMDCMP has been received
     //
-
     g_bIomBusy[ui32Module] = true;
 
-    //
-    // Clear CMDCMP status
-    //
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
     //
-    // If we're on a B0 part, and we're using IOM4, our first byte coule be
+    // If we're on a B0 part, and we're using IOM4, our first byte could be
     // corrupted, so we need to send a dummy word with chip-select held high to
     // get that first byte out of the way. This is only true for spi reads with
     // OFFSET values.
@@ -1901,7 +2312,15 @@ am_hal_iom_spi_read_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
         // Wait for the dummy word to go out over the bus.
         //
         // Make sure the command complete has also been raised
-        while ( !AM_BFRn(IOMSTR, ui32Module, INTSTAT, CMDCMP) );
+        waitStatus = am_util_wait_status_change(ui32StatusTimeout[ui32Module],
+    		AM_REG_IOMSTRn(ui32Module) + AM_REG_IOMSTR_INTSTAT_O,
+    		AM_REG_IOMSTR_INTEN_CMDCMP_M, AM_REG_IOMSTR_INTEN_CMDCMP_M);
+
+        if (waitStatus != 1)
+        {
+            g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_TIMEOUT;
+            return ui32Status;
+        }
 
         //
         // Re-mark IOM as busy
@@ -1912,7 +2331,7 @@ am_hal_iom_spi_read_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
         //
         // Re-enable IOM interrupts. Make sure CMDCMP is cleared
         //
-        AM_REGn(IOMSTR, 4, INTCLR) = (ui32IntConfig | AM_REG_IOMSTR_INTSTAT_CMDCMP_M);
+        AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
         AM_REGn(IOMSTR, 4, INTEN) = ui32IntConfig;
     }
 
@@ -1930,6 +2349,8 @@ am_hal_iom_spi_read_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
     //
     am_hal_iom_spi_cmd_run(AM_HAL_IOM_READ, ui32Module, ui32ChipSelect,
                            ui32NumBytes, ui32Options);
+    
+    return ui32Status;
 }
 
 static uint32_t
@@ -2024,10 +2445,10 @@ am_hal_iom_spi_cmd_run(uint32_t ui32Operation, uint32_t ui32Module,
 //! last word with bytes of any value. The IOM hardware will only read the
 //! first \e ui32NumBytes in the \e pui32Data array.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_i2c_write_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
                         uint32_t *pui32Data, uint32_t ui32NumBytes,
                         uint32_t ui32Options)
@@ -2036,16 +2457,29 @@ am_hal_iom_i2c_write_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     uint32_t ui32SpaceInFifo;
     uint32_t ui32IntConfig;
     uint32_t ui32MaxFifoSize;
+    am_hal_iom_status_e ui32Status;
+    uint32_t waitStatus;
+    uint32_t i2cBBStatus;
 
     //
     // Validate parameters
     //
     if ( ui32Module > AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    //
+    // Wait until any earlier transactions have completed.
+    //
+    am_hal_iom_poll_complete(ui32Module);
+
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Redirect to the bit-bang interface if the module number matches the
@@ -2055,13 +2489,13 @@ am_hal_iom_i2c_write_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     {
         if ( ui32Options & AM_HAL_IOM_RAW )
         {
-            am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
                                      (uint8_t *)pui32Data, 0, false,
                                      (ui32Options & AM_HAL_IOM_NO_STOP));
         }
         else
         {
-            am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
                                      (uint8_t *)pui32Data,
                                      ((ui32Options & 0xFF00) >> 8),
                                      true,
@@ -2069,34 +2503,32 @@ am_hal_iom_i2c_write_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
         }
 
         //
-        // Return.
+        // Return. convert BB retCode to proper retCode here
         //
-        return;
+        g_iom_error_status[ui32Module] = ui32Status = i2c_bb_errmap[i2cBBStatus];
+        return ui32Status;
     }
 
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 256, "I2C transfer too big.");
+    if (ui32NumBytes >= 256)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     ui32MaxFifoSize = ((0 == AM_BFRn(IOMSTR, ui32Module, CFG, FULLDUP)) ?
                       AM_HAL_IOM_MAX_FIFO_SIZE : AM_HAL_IOM_MAX_FIFO_SIZE / 2);
 
-    //
-    // Wait until any earlier transactions have completed.
-    //
-    am_hal_iom_poll_complete(ui32Module);
-
     //
     // Disable interrupts so that we don't get any undesired interrupts.
     //
     ui32IntConfig = AM_REGn(IOMSTR, ui32Module, INTEN);
     AM_REGn(IOMSTR, ui32Module, INTEN) = 0;
 
-    //
-    // Clear CMDCMP status
-    //
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
     //
     // Figure out how many bytes we can write to the FIFO immediately.
@@ -2109,9 +2541,20 @@ am_hal_iom_i2c_write_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     //
     // Start the write on the bus.
     //
-    am_hal_iom_i2c_cmd_run(AM_HAL_IOM_WRITE, ui32Module, ui32BusAddress,
+    ui32Status = am_hal_iom_i2c_cmd_run(AM_HAL_IOM_WRITE, ui32Module, ui32BusAddress,
                            ui32NumBytes, ui32Options);
 
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = ui32Status;
+        //
+        // Re-enable IOM interrupts.
+        //
+        // Clear interrupts
+        AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
+        AM_REGn(IOMSTR, ui32Module, INTEN) = ui32IntConfig;
+        return ui32Status;
+    }
     //
     // Update the pointer and data counter.
     //
@@ -2160,13 +2603,26 @@ am_hal_iom_i2c_write_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     //
     // Make sure CMDCMP was raised,
     //
-    while ( !AM_BFRn(IOMSTR, ui32Module, INTSTAT, CMDCMP) );
+    waitStatus = am_util_wait_status_change(ui32StatusTimeout[ui32Module],
+    		AM_REG_IOMSTRn(ui32Module) + AM_REG_IOMSTR_INTSTAT_O,
+    		AM_REG_IOMSTR_INTEN_CMDCMP_M, AM_REG_IOMSTR_INTEN_CMDCMP_M);
+
+    if (waitStatus != 1)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_TIMEOUT;
+    }
+    else
+    {
+        g_iom_error_status[ui32Module] = ui32Status = internal_iom_get_int_err(ui32Module, 0);
+    }
 
     //
-    // Re-enable IOM interrupts. Make sure CMDCMP is cleared
+    // Re-enable IOM interrupts.
     //
-    AM_REGn(IOMSTR, ui32Module, INTCLR) = (ui32IntConfig | AM_REG_IOMSTR_INTSTAT_CMDCMP_M);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
     AM_REGn(IOMSTR, ui32Module, INTEN) = ui32IntConfig;
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -2190,10 +2646,10 @@ am_hal_iom_i2c_write_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
 //! into 32-bit words, which are then placed into the \e pui32Data array. Only
 //! the first \e ui32NumBytes bytes in this array will contain valid data.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_i2c_read_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
                        uint32_t *pui32Data, uint32_t ui32NumBytes,
                        uint32_t ui32Options)
@@ -2201,16 +2657,29 @@ am_hal_iom_i2c_read_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     uint32_t ui32BytesInFifo;
     uint32_t ui32IntConfig;
     uint32_t bCmdCmp = false;
+    am_hal_iom_status_e ui32Status;
+    uint32_t waitStatus;
+    uint32_t i2cBBStatus;
 
     //
     // Validate parameters
     //
     if ( ui32Module > AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    //
+    // Wait until the bus is idle
+    //
+    am_hal_iom_poll_complete(ui32Module);
+
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Redirect to the bit-bang interface if the module number matches the
@@ -2220,13 +2689,13 @@ am_hal_iom_i2c_read_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     {
         if ( ui32Options & AM_HAL_IOM_RAW )
         {
-            am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
                                         (uint8_t *)pui32Data, 0, false,
                                         (ui32Options & AM_HAL_IOM_NO_STOP));
         }
         else
         {
-            am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
                                         (uint8_t *)pui32Data,
                                         ((ui32Options & 0xFF00) >> 8),
                                         true,
@@ -2234,20 +2703,20 @@ am_hal_iom_i2c_read_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
         }
 
         //
-        // Return.
+        // Return. convert i2c bb retCode
         //
-        return;
+        g_iom_error_status[ui32Module] = ui32Status = i2c_bb_errmap[i2cBBStatus];
+        return ui32Status;
     }
 
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 256, "I2C transfer too big.");
-
-    //
-    // Wait until the bus is idle
-    //
-    am_hal_iom_poll_complete(ui32Module);
+    if (ui32NumBytes >= 256)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     //
     // Disable interrupts so that we don't get any undesired interrupts.
@@ -2255,14 +2724,24 @@ am_hal_iom_i2c_read_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     ui32IntConfig = AM_REGn(IOMSTR, ui32Module, INTEN);
     AM_REGn(IOMSTR, ui32Module, INTEN) = 0;
 
-    //
-    // Clear CMDCMP status
-    //
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
-    am_hal_iom_i2c_cmd_run(AM_HAL_IOM_READ, ui32Module, ui32BusAddress,
+    ui32Status = am_hal_iom_i2c_cmd_run(AM_HAL_IOM_READ, ui32Module, ui32BusAddress,
                            ui32NumBytes, ui32Options);
 
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = ui32Status;
+        //
+        // Re-enable IOM interrupts.
+        //
+        // Clear interrupts
+        AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
+        AM_REGn(IOMSTR, ui32Module, INTEN) = ui32IntConfig;
+        return ui32Status;
+    }
+
     //
     // Start a loop to catch the Rx data.
     //
@@ -2303,13 +2782,25 @@ am_hal_iom_i2c_read_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
     //
     // Make sure CMDCMP was raised,
     //
-    while ( !AM_BFRn(IOMSTR, ui32Module, INTSTAT, CMDCMP) );
+    waitStatus = am_util_wait_status_change(ui32StatusTimeout[ui32Module],
+    		AM_REG_IOMSTRn(ui32Module) + AM_REG_IOMSTR_INTSTAT_O,
+    		AM_REG_IOMSTR_INTEN_CMDCMP_M, AM_REG_IOMSTR_INTEN_CMDCMP_M);
 
+    if (waitStatus != 1)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_TIMEOUT;
+    }
+    else
+    {
+        g_iom_error_status[ui32Module] = ui32Status = internal_iom_get_int_err(ui32Module, 0);
+    }
     //
-    // Re-enable IOM interrupts. Make sure CMDCMP is cleared
+    // Re-enable IOM interrupts.
     //
-    AM_REGn(IOMSTR, ui32Module, INTCLR) = (ui32IntConfig | AM_REG_IOMSTR_INTSTAT_CMDCMP_M);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
     AM_REGn(IOMSTR, ui32Module, INTEN) = ui32IntConfig;
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -2327,23 +2818,35 @@ am_hal_iom_i2c_read_nq(uint32_t ui32Module, uint32_t ui32BusAddress,
 //! See the "Command Options" section for parameters that may be ORed together
 //! and used in the \b ui32Options parameter.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
                      uint32_t *pui32Data, uint32_t ui32NumBytes,
                      uint32_t ui32Options)
 {
+    am_hal_iom_status_e ui32Status;
+    uint32_t i2cBBStatus;
     //
     // Validate parameters
     //
     if ( ui32Module > AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    //
+    // Wait until the bus is idle
+    //
+    am_hal_iom_poll_complete(ui32Module);
+
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Redirect to the bit-bang interface if the module number matches the
@@ -2353,13 +2856,13 @@ am_hal_iom_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
     {
         if ( ui32Options & AM_HAL_IOM_RAW )
         {
-            am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
                                      (uint8_t *)pui32Data, 0, false,
                                      (ui32Options & AM_HAL_IOM_NO_STOP));
         }
         else
         {
-            am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
                                      (uint8_t *)pui32Data,
                                      ((ui32Options & 0xFF00) >> 8),
                                      true,
@@ -2367,15 +2870,20 @@ am_hal_iom_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
         }
 
         //
-        // Return.
+        // Return. convert i2c bb retCode
         //
-        return;
+        g_iom_error_status[ui32Module] = ui32Status = i2c_bb_errmap[i2cBBStatus];
+        return ui32Status;
     }
 
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 256, "I2C transfer too big.");
+    if (ui32NumBytes >= 256)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     //
     // Check to see if queues have been enabled. If they are, we'll actually
@@ -2386,27 +2894,32 @@ am_hal_iom_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
         //
         // If the queue is on, go ahead and add this transaction to the queue.
         //
-        am_hal_iom_queue_i2c_write(ui32Module, ui32BusAddress, pui32Data,
+        ui32Status = am_hal_iom_queue_i2c_write(ui32Module, ui32BusAddress, pui32Data,
                                    ui32NumBytes, ui32Options, 0);
 
-        //
-        // Wait until the transaction actually clears.
-        //
-        am_hal_iom_queue_flush(ui32Module);
+        if (ui32Status == AM_HAL_IOM_SUCCESS)
+        {
+            //
+            // Wait until the transaction actually clears.
+            //
+            am_hal_iom_queue_flush(ui32Module);
+            // g_iom_error_status gets set in the isr handling
+            ui32Status = g_iom_error_status[ui32Module];
+        }
 
         //
         // At this point, we've completed the transaction, and we can return.
         //
-        return;
     }
     else
     {
         //
         // Otherwise, we'll just do a polled transaction.
         //
-        am_hal_iom_i2c_write_nq(ui32Module, ui32BusAddress, pui32Data,
+        ui32Status = am_hal_iom_i2c_write_nq(ui32Module, ui32BusAddress, pui32Data,
                                 ui32NumBytes, ui32Options);
     }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -2437,23 +2950,35 @@ am_hal_iom_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
 //! into 32-bit words, which are then placed into the \e pui32Data array. Only
 //! the first \e ui32NumBytes bytes in this array will contain valid data.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
                     uint32_t *pui32Data, uint32_t ui32NumBytes,
                     uint32_t ui32Options)
 {
+    am_hal_iom_status_e ui32Status;
+    uint32_t i2cBBStatus;
     //
     // Validate parameters
     //
     if ( ui32Module > AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    //
+    // Wait until the bus is idle
+    //
+    am_hal_iom_poll_complete(ui32Module);
+
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Redirect to the bit-bang interface if the module number matches the
@@ -2463,13 +2988,13 @@ am_hal_iom_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
     {
         if ( ui32Options & AM_HAL_IOM_RAW )
         {
-            am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
                                         (uint8_t *)pui32Data, 0, false,
                                         (ui32Options & AM_HAL_IOM_NO_STOP));
         }
         else
         {
-            am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
                                         (uint8_t *)pui32Data,
                                         ((ui32Options & 0xFF00) >> 8),
                                         true,
@@ -2477,15 +3002,20 @@ am_hal_iom_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
         }
 
         //
-        // Return.
+        // Return. convert i2c bb retCode
         //
-        return;
+        g_iom_error_status[ui32Module] = ui32Status = i2c_bb_errmap[i2cBBStatus];
+        return ui32Status;
     }
 
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 256, "I2C transfer too big.");
+    if (ui32NumBytes >= 256)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     //
     // Check to see if queues have been enabled. If they are, we'll actually
@@ -2496,27 +3026,32 @@ am_hal_iom_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
         //
         // If the queue is on, go ahead and add this transaction to the queue.
         //
-        am_hal_iom_queue_i2c_read(ui32Module, ui32BusAddress, pui32Data,
+        ui32Status = am_hal_iom_queue_i2c_read(ui32Module, ui32BusAddress, pui32Data,
                                   ui32NumBytes, ui32Options, 0);
 
-        //
-        // Wait until the transaction actually clears.
-        //
-        am_hal_iom_queue_flush(ui32Module);
+        if (ui32Status == AM_HAL_IOM_SUCCESS)
+        {
+            //
+            // Wait until the transaction actually clears.
+            //
+            am_hal_iom_queue_flush(ui32Module);
+            // g_iom_error_status gets set in the isr handling
+            ui32Status = g_iom_error_status[ui32Module];
+        }
 
         //
         // At this point, we've completed the transaction, and we can return.
         //
-        return;
     }
     else
     {
         //
         // Otherwise, just perform a polled transaction.
         //
-        am_hal_iom_i2c_read_nq(ui32Module, ui32BusAddress, pui32Data,
+        ui32Status = am_hal_iom_i2c_read_nq(ui32Module, ui32BusAddress, pui32Data,
                                ui32NumBytes, ui32Options);
     }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -2549,27 +3084,42 @@ am_hal_iom_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
 //! last word with bytes of any value. The IOM hardware will only read the
 //! first \e ui32NumBytes in the \e pui32Data array.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution. Note that
+//! successful execution for non-blocking call only means the transaction was
+//! successfully initiated. The status of the transaction is not known till the
+//! callback is called on completion
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_i2c_write_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
                         uint32_t *pui32Data, uint32_t ui32NumBytes,
                         uint32_t ui32Options,
                         am_hal_iom_callback_t pfnCallback)
 {
+    am_hal_iom_status_e ui32Status;
     uint32_t ui32TransferSize;
     uint32_t ui32MaxFifoSize;
+    uint32_t i2cBBStatus;
 
     //
     // Validate parameters
     //
     if ( ui32Module > AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    //
+    // Wait until the bus is idle
+    //
+    am_hal_iom_poll_complete(ui32Module);
+
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Redirect to the bit-bang interface if the module number matches the
@@ -2577,40 +3127,47 @@ am_hal_iom_i2c_write_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
     //
     if ( ui32Module == AM_HAL_IOM_I2CBB_MODULE )
     {
+        // Reset the error status for non-blocking transfer
+        g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
         if ( ui32Options & AM_HAL_IOM_RAW )
         {
-            am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
                                      (uint8_t *)pui32Data, 0, false,
                                      (ui32Options & AM_HAL_IOM_NO_STOP));
         }
         else
         {
-            am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_send(ui32BusAddress << 1, ui32NumBytes,
                                      (uint8_t *)pui32Data,
                                      ((ui32Options & 0xFF00) >> 8),
                                      true,
                                      (ui32Options & AM_HAL_IOM_NO_STOP));
         }
 
+        //
+        // Return. convert i2c bb retCode
+        //
+        g_iom_error_status[ui32Module] = ui32Status = i2c_bb_errmap[i2cBBStatus];
         //
         // The I2C bit-bang interface is actually a blocking transfer, and it
         // doesn't trigger the interrupt handler, so we have to call the
         // callback function manually.
         //
-        if ( pfnCallback )
+        if ((ui32Status == AM_HAL_I2C_BIT_BANG_SUCCESS) && pfnCallback )
         {
             pfnCallback();
         }
-        //
-        // Return.
-        //
-        return;
+        return ui32Status;
     }
 
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 256, "I2C transfer too big.");
+    if (ui32NumBytes >= 256)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
     ui32MaxFifoSize = ((0 == AM_BFRn(IOMSTR, ui32Module, CFG, FULLDUP)) ?
                        AM_HAL_IOM_MAX_FIFO_SIZE : AM_HAL_IOM_MAX_FIFO_SIZE / 2);
@@ -2621,21 +3178,13 @@ am_hal_iom_i2c_write_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
     ui32TransferSize = (ui32NumBytes <= ui32MaxFifoSize ? ui32NumBytes :
                         ui32MaxFifoSize);
 
-    //
-    // Wait until any earlier transactions have completed, and then write our
-    // first word to the fifo.
-    //
-    am_hal_iom_poll_complete(ui32Module);
-
     // Need to mark IOM busy to avoid another transaction to be scheduled.
     // This is to take care of a race condition in Queue mode, where the IDLE
     // set is not a guarantee that the CMDCMP has been received
     g_bIomBusy[ui32Module] = true;
 
-    //
-    // Clear CMDCMP status
-    //
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
     if ( am_hal_iom_fifo_write(ui32Module, pui32Data, ui32TransferSize) > 0 )
     {
@@ -2657,9 +3206,14 @@ am_hal_iom_i2c_write_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
         //
         // Start the write on the bus.
         //
-        am_hal_iom_i2c_cmd_run(AM_HAL_IOM_WRITE, ui32Module, ui32BusAddress,
+        ui32Status = am_hal_iom_i2c_cmd_run(AM_HAL_IOM_WRITE, ui32Module, ui32BusAddress,
                                ui32NumBytes, ui32Options);
+        if (ui32Status != AM_HAL_IOM_SUCCESS)
+        {
+            g_iom_error_status[ui32Module] = ui32Status;
+        }
     }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -2689,24 +3243,39 @@ am_hal_iom_i2c_write_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
 //! into 32-bit words, which are then placed into the \e pui32Data array. Only
 //! the first \e ui32NumBytes bytes in this array will contain valid data.
 //!
-//! @return None.
+//! @return returns AM_HAL_IOM_SUCCESS on successful execution. Note that
+//! successful execution for non-blocking call only means the transaction was
+//! successfully initiated. The status of the transaction is not known till the
+//! callback is called on completion
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_i2c_read_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
                        uint32_t *pui32Data, uint32_t ui32NumBytes,
                        uint32_t ui32Options,
                        am_hal_iom_callback_t pfnCallback)
 {
+    am_hal_iom_status_e ui32Status;
+    uint32_t i2cBBStatus;
     //
     // Validate parameters
     //
     if ( ui32Module > AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    //
+    // Wait until the bus is idle
+    //
+    am_hal_iom_poll_complete(ui32Module);
+
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if (ui32NumBytes == 0)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Redirect to the bit-bang interface if the module number matches the
@@ -2714,58 +3283,57 @@ am_hal_iom_i2c_read_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
     //
     if ( ui32Module == AM_HAL_IOM_I2CBB_MODULE )
     {
+        // Reset the error status for non-blocking transfer
+        g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
         if ( ui32Options & AM_HAL_IOM_RAW )
         {
-            am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
                                         (uint8_t *)pui32Data, 0, false,
                                         (ui32Options & AM_HAL_IOM_NO_STOP));
         }
         else
         {
-            am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
+            i2cBBStatus = am_hal_i2c_bit_bang_receive((ui32BusAddress << 1) | 1, ui32NumBytes,
                                         (uint8_t *)pui32Data,
                                         ((ui32Options & 0xFF00) >> 8),
                                         true,
                                         (ui32Options & AM_HAL_IOM_NO_STOP));
         }
 
+        //
+        // Return. conver i2c bb retCode
+        //
+        g_iom_error_status[ui32Module] = ui32Status = i2c_bb_errmap[i2cBBStatus];
         //
         // The I2C bit-bang interface is actually a blocking transfer, and it
         // doesn't trigger the interrupt handler, so we have to call the
         // callback function manually.
         //
-        if ( pfnCallback )
+        if ((ui32Status == AM_HAL_I2C_BIT_BANG_SUCCESS) && pfnCallback )
         {
             pfnCallback();
         }
 
-        //
-        // Return.
-        //
-        return;
+        return ui32Status;
     }
 
     //
     // Make sure the transfer isn't too long for the hardware to support.
     //
-    am_hal_debug_assert_msg(ui32NumBytes < 256, "I2C transfer too big.");
-
-    //
-    // Wait until the bus is idle
-    //
-    am_hal_iom_poll_complete(ui32Module);
+    if (ui32NumBytes >= 256)
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
+    }
 
-    //
     // Need to mark IOM busy to avoid another transaction to be scheduled.
     // This is to take care of a race condition in Queue mode, where the IDLE
     // set is not a guarantee that the CMDCMP has been received
     //
     g_bIomBusy[ui32Module] = true;
 
-    //
-    // Clear CMDCMP status
-    //
-    AM_BFWn(IOMSTR, ui32Module, INTCLR, CMDCMP, 1);
+    // Clear interrupts
+    AM_REGn(IOMSTR, ui32Module, INTCLR) = AM_HAL_IOM_INT_ALL;
 
     //
     // Prepare the global IOM buffer structure.
@@ -2778,8 +3346,13 @@ am_hal_iom_i2c_read_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
     //
     // Start the read transaction on the bus.
     //
-    am_hal_iom_i2c_cmd_run(AM_HAL_IOM_READ, ui32Module, ui32BusAddress,
+    ui32Status = am_hal_iom_i2c_cmd_run(AM_HAL_IOM_READ, ui32Module, ui32BusAddress,
                            ui32NumBytes, ui32Options);
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        g_iom_error_status[ui32Module] = ui32Status;
+    }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -2794,28 +3367,32 @@ am_hal_iom_i2c_read_nb(uint32_t ui32Module, uint32_t ui32BusAddress,
 //! @param ui32Options - Additional I2C options to apply to this command.
 //!
 //! This function may be used along with am_hal_iom_fifo_write and
-//! am_hal_iom_fifo_read to perform more complex I2C reads and writes. This
-//! function
+//! am_hal_iom_fifo_read to perform more complex I2C reads and writes.
+//! This function has additional logic to make sure SCL is high before a new
+//! transaction is initiated.
 //!
-//! @return None.
+//! @return 0 on success
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_i2c_cmd_run(uint32_t ui32Operation, uint32_t ui32Module,
                        uint32_t ui32BusAddress, uint32_t ui32NumBytes,
                        uint32_t ui32Options)
 {
     uint32_t ui32Command;
+    am_hal_iom_status_e ui32Status = AM_HAL_IOM_SUCCESS;
 
     //
     // Validate parameters
     //
     if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    if (ui32NumBytes == 0)
+    {
+        return AM_HAL_IOM_ERR_INVALID_PARAM;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Start building the command from the operation parameter.
@@ -2840,9 +3417,20 @@ am_hal_iom_i2c_cmd_run(uint32_t ui32Operation, uint32_t ui32Module,
     ui32Command |= (ui32Options & 0x5C00FF00);
 
     //
-    // Write the complete command word to the IOM command register.
+    // Wait for SCL to be high before initiating a new transaction
+    // This is to ensure clock hi time specs are not violated in case slave did
+    // clock stretching in previous transaction
     //
-    AM_REGn(IOMSTR, ui32Module, CMD) = ui32Command;
+    ui32Status = internal_iom_wait_i2c_scl_hi(ui32Module);
+
+    if (ui32Status == AM_HAL_IOM_SUCCESS)
+    {
+        //
+        // Write the complete command word to the IOM command register.
+        //
+        AM_REGn(IOMSTR, ui32Module, CMD) = ui32Command;
+    }
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -3177,35 +3765,20 @@ am_hal_iom_status_get(uint32_t ui32Module)
 //! @param ui32Module IOM instance to check the status of.
 //!
 //! This function returns status indicating whether the IOM has incurred any
-//! errors or not.
-//!
-//! @return 0 if all is well.
-//!         Otherwise error status as a bitmask of:
-//!             AM_HAL_IOM_ERR_INVALID_MODULE
-//!             AM_HAL_IOM_INT_ARB      Another master initiated an operation
-//!                                     simultaenously and the IOM lost.  Or
-//!                                     the IOM started an operation but found
-//!                                     SDA already low.
-//!             AM_HAL_IOM_INT_START    A START from another master detected.
-//!                                     SW must wait for STOP before continuing.
-//!             AM_HAL_IOM_INT_ICMD     Attempt to issue a CMD while another
-//!                                     CMD was already in progress, or issue a
-//!                                     non-zero-len write CMD with empty FIFO.
-//!             AM_HAL_IOM_INT_IACC     Attempt to read the FIFO on a write. Or
-//!                                     an attempt to write the FIFO on a read.
-//!             AM_HAL_IOM_INT_NAK      Expected ACK from slave not received.
-//!             AM_HAL_IOM_INT_FOVFL    Attempt to write the FIFO while full
-//!                                     (FIFOSIZ > 124).
-//!             AM_HAL_IOM_INT_FUNDFL   Attempt to read FIFO when empty (that is
-//!                                     FIFOSIZ < 4).
-//!         Note - see the datasheet text for full explanations of the INT errs.
+//! errors or not for previous operation.
+//! This function can be called when the callback is invoked to determine the
+//! status of the transaction just completed.
+//! This function can also be called after a blocking call, though it would
+//! return the same status as returned from the call itself
+//! This function should not be called for an ongoing transaction, and the
+//! result of such operation is indeterministic
+//!
+//! @return AM_HAL_IOM_SUCCESS if all is well.
 //
 //*****************************************************************************
-uint32_t
+am_hal_iom_status_e
 am_hal_iom_error_status_get(uint32_t ui32Module)
 {
-    uint32_t ui32intstat = 0;
-
     //
     // Validate parameters
     //
@@ -3217,27 +3790,7 @@ am_hal_iom_error_status_get(uint32_t ui32Module)
         return AM_HAL_IOM_ERR_INVALID_MODULE;
     }
 
-    if ( AM_REGn(IOMSTR, ui32Module, STATUS) & AM_REG_IOMSTR_STATUS_ERR_ERROR )
-    {
-        //
-        // The IOM is currently indicating an error condition.
-        // Let's figure out what is going on.
-        //
-        ui32intstat = AM_REGn(IOMSTR, ui32Module, INTSTAT);
-
-        //
-        // Filter out non-error bits.
-        //
-        ui32intstat &=  AM_REG_IOMSTR_INTSTAT_ARB_M     |
-                        AM_REG_IOMSTR_INTSTAT_START_M   |
-                        AM_REG_IOMSTR_INTSTAT_ICMD_M    |
-                        AM_REG_IOMSTR_INTSTAT_IACC_M    |
-                        AM_REG_IOMSTR_INTSTAT_NAK_M     |
-                        AM_REG_IOMSTR_INTSTAT_FOVFL_M   |
-                        AM_REG_IOMSTR_INTSTAT_FUNDFL_M;
-    }
-
-    return ui32intstat;
+    return (g_iom_error_status[ui32Module]);
 }
 
 //*****************************************************************************
@@ -3273,6 +3826,9 @@ am_hal_iom_int_service(uint32_t ui32Module, uint32_t ui32Status)
     //
     psBuffer = &g_psIOMBuffers[ui32Module];
 
+    // Keep accumulating any error indications
+    // This is to account for the case if the error indication comes before CMDCMP
+    g_iom_error_status[ui32Module] |= ui32Status;
     //
     // Figure out what type of interrupt this was.
     //
@@ -3311,6 +3867,7 @@ am_hal_iom_int_service(uint32_t ui32Module, uint32_t ui32Status)
         //
         psBuffer->ui32State = BUFFER_IDLE;
 
+        g_iom_error_status[ui32Module] = internal_iom_get_int_err(ui32Module, g_iom_error_status[ui32Module]);
         //
         // If we have a callback, call it now.
         //
@@ -3528,7 +4085,7 @@ am_hal_iom_queue_length_get(uint32_t ui32Module)
 void
 am_hal_iom_queue_start_next_msg(uint32_t ui32Module)
 {
-  am_hal_iom_queue_entry_t sIOMTransaction = {0};
+    am_hal_iom_queue_entry_t sIOMTransaction = {0};
 
     uint32_t ui32ChipSelect;
     uint32_t *pui32Data;
@@ -3536,6 +4093,7 @@ am_hal_iom_queue_start_next_msg(uint32_t ui32Module)
     uint32_t ui32Options;
     am_hal_iom_callback_t pfnCallback;
 
+    am_hal_iom_status_e ui32Status = AM_HAL_IOM_SUCCESS;
     uint32_t ui32Critical;
 
     //
@@ -3572,22 +4130,22 @@ am_hal_iom_queue_start_next_msg(uint32_t ui32Module)
         switch ( sIOMTransaction.ui32Operation )
         {
             case AM_HAL_IOM_QUEUE_SPI_WRITE:
-                am_hal_iom_spi_write_nb(ui32Module, ui32ChipSelect, pui32Data,
+                ui32Status = am_hal_iom_spi_write_nb(ui32Module, ui32ChipSelect, pui32Data,
                                         ui32NumBytes, ui32Options, pfnCallback);
                 break;
 
             case AM_HAL_IOM_QUEUE_SPI_READ:
-                am_hal_iom_spi_read_nb(ui32Module, ui32ChipSelect, pui32Data,
+                ui32Status = am_hal_iom_spi_read_nb(ui32Module, ui32ChipSelect, pui32Data,
                                        ui32NumBytes, ui32Options, pfnCallback);
                 break;
 
             case AM_HAL_IOM_QUEUE_I2C_WRITE:
-                am_hal_iom_i2c_write_nb(ui32Module, ui32ChipSelect, pui32Data,
+                ui32Status = am_hal_iom_i2c_write_nb(ui32Module, ui32ChipSelect, pui32Data,
                                         ui32NumBytes, ui32Options, pfnCallback);
                 break;
 
             case AM_HAL_IOM_QUEUE_I2C_READ:
-                am_hal_iom_i2c_read_nb(ui32Module, ui32ChipSelect, pui32Data,
+                ui32Status = am_hal_iom_i2c_read_nb(ui32Module, ui32ChipSelect, pui32Data,
                                        ui32NumBytes, ui32Options, pfnCallback);
                 break;
         }
@@ -3597,6 +4155,14 @@ am_hal_iom_queue_start_next_msg(uint32_t ui32Module)
     // Exit the critical section.
     //
     am_hal_interrupt_master_set(ui32Critical);
+    
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        // Preserve the error
+        g_iom_error_status[ui32Module] = ui32Status;
+        // Call the respective callback
+        pfnCallback();
+    }
 }
 
 //*****************************************************************************
@@ -3633,22 +4199,28 @@ am_hal_iom_queue_start_next_msg(uint32_t ui32Module)
 //! first \e ui32NumBytes in the \e pui8Data array.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_queue_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
                            uint32_t *pui32Data, uint32_t ui32NumBytes,
                            uint32_t ui32Options, am_hal_iom_callback_t pfnCallback)
 {
     uint32_t ui32Critical;
+    am_hal_iom_status_e ui32Status;
 
     //
     // Validate parameters
     //
     if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if ( ui32NumBytes == 0 )
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Start a critical section.
@@ -3668,7 +4240,7 @@ am_hal_iom_queue_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
         //
         // Send the packet.
         //
-        am_hal_iom_spi_write_nb(ui32Module, ui32ChipSelect, pui32Data,
+        ui32Status = am_hal_iom_spi_write_nb(ui32Module, ui32ChipSelect, pui32Data,
                                 ui32NumBytes, ui32Options, pfnCallback);
     }
     else
@@ -3694,17 +4266,19 @@ am_hal_iom_queue_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
             //
             // Didn't have enough memory.
             //
-            am_hal_debug_assert_msg(0,
-                                    "The IOM queue is full. Allocate more"
-                                    "memory to the IOM queue, or allow it more"
-                                    "time to empty between transactions.");
+            ui32Status = AM_HAL_IOM_ERR_RESOURCE_ERR;
         }
     }
 
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        g_iom_error_status[ui32Module] = ui32Status;
+    }
     //
     // Exit the critical section.
     //
     am_hal_interrupt_master_set(ui32Critical);
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -3741,22 +4315,28 @@ am_hal_iom_queue_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
 //! first \e ui32NumBytes in the \e pui8Data array.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_queue_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
                           uint32_t *pui32Data, uint32_t ui32NumBytes,
                           uint32_t ui32Options, am_hal_iom_callback_t pfnCallback)
 {
     uint32_t ui32Critical;
+    am_hal_iom_status_e ui32Status;
 
     //
     // Validate parameters
     //
     if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if ( ui32NumBytes == 0 )
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     // Start a critical section.
     //
@@ -3775,7 +4355,7 @@ am_hal_iom_queue_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
         //
         // Send the packet.
         //
-        am_hal_iom_spi_read_nb(ui32Module, ui32ChipSelect, pui32Data,
+        ui32Status = am_hal_iom_spi_read_nb(ui32Module, ui32ChipSelect, pui32Data,
                                ui32NumBytes, ui32Options, pfnCallback);
     }
     else
@@ -3801,17 +4381,19 @@ am_hal_iom_queue_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
             //
             // Didn't have enough memory.
             //
-            am_hal_debug_assert_msg(0,
-                                    "The IOM queue is full. Allocate more"
-                                    "memory to the IOM queue, or allow it more"
-                                    "time to empty between transactions.");
+            ui32Status = AM_HAL_IOM_ERR_RESOURCE_ERR;
         }
     }
 
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        g_iom_error_status[ui32Module] = ui32Status;
+    }
     //
     // Exit the critical section.
     //
     am_hal_interrupt_master_set(ui32Critical);
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -3848,11 +4430,12 @@ am_hal_iom_queue_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
 //! first \e ui32NumBytes in the \e pui8Data array.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_queue_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
                            uint32_t *pui32Data, uint32_t ui32NumBytes,
                            uint32_t ui32Options, am_hal_iom_callback_t pfnCallback)
 {
+    am_hal_iom_status_e ui32Status;
     uint32_t ui32Critical;
 
     //
@@ -3860,10 +4443,15 @@ am_hal_iom_queue_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
     //
     if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if ( ui32NumBytes == 0 )
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Start a critical section.
@@ -3883,7 +4471,7 @@ am_hal_iom_queue_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
         //
         // Send the packet.
         //
-        am_hal_iom_i2c_write_nb(ui32Module, ui32BusAddress, pui32Data,
+        ui32Status = am_hal_iom_i2c_write_nb(ui32Module, ui32BusAddress, pui32Data,
                                 ui32NumBytes, ui32Options, pfnCallback);
     }
     else
@@ -3909,17 +4497,19 @@ am_hal_iom_queue_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
             //
             // Didn't have enough memory.
             //
-            am_hal_debug_assert_msg(0,
-                                    "The IOM queue is full. Allocate more"
-                                    "memory to the IOM queue, or allow it more"
-                                    "time to empty between transactions.");
+            ui32Status = AM_HAL_IOM_ERR_RESOURCE_ERR;
         }
     }
 
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        g_iom_error_status[ui32Module] = ui32Status;
+    }
     //
     // Exit the critical section.
     //
     am_hal_interrupt_master_set(ui32Critical);
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -3956,22 +4546,28 @@ am_hal_iom_queue_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
 //! first \e ui32NumBytes in the \e pui8Data array.
 //
 //*****************************************************************************
-void
+am_hal_iom_status_e
 am_hal_iom_queue_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
                           uint32_t *pui32Data, uint32_t ui32NumBytes,
                           uint32_t ui32Options, am_hal_iom_callback_t pfnCallback)
 {
     uint32_t ui32Critical;
+    am_hal_iom_status_e ui32Status;
 
     //
     // Validate parameters
     //
     if ( ui32Module >= AM_REG_IOMSTR_NUM_MODULES )
     {
-        return;
+        return AM_HAL_IOM_ERR_INVALID_MODULE;
+    }
+    // Reset the error status
+    ui32Status = g_iom_error_status[ui32Module] = AM_HAL_IOM_SUCCESS;
+    if ( ui32NumBytes == 0 )
+    {
+        g_iom_error_status[ui32Module] = ui32Status = AM_HAL_IOM_ERR_INVALID_PARAM;
+        return ui32Status;
     }
-    am_hal_debug_assert_msg(ui32NumBytes > 0,
-                            "Trying to do a 0 byte transaction");
 
     //
     // Start a critical section.
@@ -3991,7 +4587,7 @@ am_hal_iom_queue_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
         //
         // Send the packet.
         //
-        am_hal_iom_i2c_read_nb(ui32Module, ui32BusAddress, pui32Data,
+        ui32Status = am_hal_iom_i2c_read_nb(ui32Module, ui32BusAddress, pui32Data,
                                ui32NumBytes, ui32Options, pfnCallback);
     }
     else
@@ -4017,16 +4613,19 @@ am_hal_iom_queue_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
             //
             // Didn't have enough memory.
             //
-            am_hal_debug_assert_msg(0, "The IOM queue is full. Allocate more"
-                                       "memory to the IOM queue, or allow it more"
-                                       "time to empty between transactions.");
+            ui32Status = AM_HAL_IOM_ERR_RESOURCE_ERR;
         }
     }
 
+    if (ui32Status != AM_HAL_IOM_SUCCESS)
+    {
+        g_iom_error_status[ui32Module] = ui32Status;
+    }
     //
     // Exit the critical section.
     //
     am_hal_interrupt_master_set(ui32Critical);
+    return ui32Status;
 }
 
 //*****************************************************************************
@@ -4129,16 +4728,17 @@ am_hal_iom_sleeping_queue_flush(uint32_t ui32Module)
 //!     ui32Status = am_hal_iom_int_status(0, true);
 //!
 //!     //
+//!     // Clear the interrupts. This should be done before calling service routine
+//!     // as otherwise we may lose re-triggered interrupts
+//!     //
+//!     am_hal_iom_int_clear(ui32Status);
+//!
+//!     //
 //!     // Fill or empty the FIFO, and either continue the current operation or
 //!     // start the next one in the queue. If there was a callback, it will be
 //!     // called here.
 //!     //
 //!     am_hal_iom_queue_service(0, ui32Status);
-//!
-//!     //
-//!     // Clear the interrupts before leaving the ISR.
-//!     //
-//!     am_hal_iom_int_clear(ui32Status);
 //! }
 //! @endcode
 //!
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.h
index 491054951..fdfed1d97 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_iom.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_iom.h
+//  am_hal_iom.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the IO Master module
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup iom IO Master (SPI/I2C)
-//! @ingroup hal
+//! @addtogroup iom2 IO Master (SPI/I2C)
+//! @ingroup apollo2hal
 //! @{
 
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -79,11 +79,13 @@
 #define AM_HAL_IOM_2MHZ      2000000
 #define AM_HAL_IOM_1_5MHZ    1500000
 #define AM_HAL_IOM_1MHZ      1000000
+#define AM_HAL_IOM_800KHZ     800000
 #define AM_HAL_IOM_750KHZ     750000
 #define AM_HAL_IOM_500KHZ     500000
 #define AM_HAL_IOM_400KHZ     400000
 #define AM_HAL_IOM_375KHZ     375000
 #define AM_HAL_IOM_250KHZ     250000
+#define AM_HAL_IOM_200KHZ     200000
 #define AM_HAL_IOM_125KHZ     125000
 #define AM_HAL_IOM_100KHZ     100000
 #define AM_HAL_IOM_50KHZ       50000
@@ -176,32 +178,69 @@
 #define AM_HAL_IOM_INT_FUNDFL               AM_REG_IOMSTR_INTEN_FUNDFL_M
 #define AM_HAL_IOM_INT_THR                  AM_REG_IOMSTR_INTEN_THR_M
 #define AM_HAL_IOM_INT_CMDCMP               AM_REG_IOMSTR_INTEN_CMDCMP_M
+
+#define AM_HAL_IOM_INT_ALL          (   \
+            AM_HAL_IOM_INT_ARB      |   \
+            AM_HAL_IOM_INT_STOP     |   \
+            AM_HAL_IOM_INT_START    |   \
+            AM_HAL_IOM_INT_ICMD     |   \
+            AM_HAL_IOM_INT_IACC     |   \
+            AM_HAL_IOM_INT_WTLEN    |   \
+            AM_HAL_IOM_INT_NAK      |   \
+            AM_HAL_IOM_INT_FOVFL    |   \
+            AM_HAL_IOM_INT_FUNDFL   |   \
+            AM_HAL_IOM_INT_THR      |   \
+            AM_HAL_IOM_INT_CMDCMP)
+
+#define AM_HAL_IOM_INT_SWERR        (   \
+            AM_HAL_IOM_INT_ICMD     |   \
+            AM_HAL_IOM_INT_FOVFL    |   \
+            AM_HAL_IOM_INT_FUNDFL   |   \
+            AM_HAL_IOM_INT_IACC)
+
+#define AM_HAL_IOM_INT_I2CARBERR    (   \
+            AM_HAL_IOM_INT_ARB      |   \
+            AM_HAL_IOM_INT_START    |   \
+            AM_HAL_IOM_INT_STOP)
 //! @}
 
 //*****************************************************************************
 //
-//! @name IOM function errors
-//! @brief Return values for IOM HAL function errors, such as with the function
-//!        am_hal_iom_error_status_get().
+//! @name Software IOM modules
+//! @brief Macro definitions for using the software I2C interface.
+//!
+//! Use this macro as the module number for standard IOM functions to emulate
+//! them using the bit-banged i2c interface.
 //!
 //! @{
 //
 //*****************************************************************************
-#define AM_HAL_IOM_ERR_INVALID_MODULE       (1 << 30)
+#define AM_HAL_IOM_I2CBB_MODULE             AM_REG_IOMSTR_NUM_MODULES
 //! @}
 
 //*****************************************************************************
 //
-//! @name Software IOM modules
-//! @brief Macro definitions for using the software I2C interface.
+//! @name IOM Return Codes
+//! @brief Enum definitions for defining return values for IOM APIs
 //!
-//! Use this macro as the module number for standard IOM functions to emulate
-//! them using the bit-banged i2c interface.
+//! This enum defines possible values for non-void IOM APIs
 //!
 //! @{
 //
 //*****************************************************************************
-#define AM_HAL_IOM_I2CBB_MODULE             AM_REG_IOMSTR_NUM_MODULES
+typedef enum
+{
+    AM_HAL_IOM_SUCCESS = 0,
+    AM_HAL_IOM_ERR_TIMEOUT,
+    AM_HAL_IOM_ERR_INVALID_MODULE,
+    AM_HAL_IOM_ERR_INVALID_PARAM,
+    AM_HAL_IOM_ERR_INVALID_CFG,
+    AM_HAL_IOM_ERR_INVALID_OPER,
+    AM_HAL_IOM_ERR_I2C_NAK,
+    AM_HAL_IOM_ERR_I2C_ARB,
+    AM_HAL_IOM_ERR_RESOURCE_ERR,
+} am_hal_iom_status_e ;
+
 //! @}
 
 //*****************************************************************************
@@ -287,6 +326,7 @@ typedef struct
     //! of entries in the FIFO grows *larger* than this number.
     //
     uint8_t ui8ReadThreshold;
+    
 }
 am_hal_iom_config_t;
 
@@ -403,7 +443,11 @@ am_hal_iom_pwrsave_t;
 //
 //*****************************************************************************
 extern am_hal_iom_pwrsave_t am_hal_iom_pwrsave[AM_REG_IOMSTR_NUM_MODULES];
-extern uint32_t g_iom_error_status;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 
 //*****************************************************************************
 //
@@ -419,23 +463,23 @@ extern void     am_hal_iom_config(uint32_t ui32Module,
 extern uint32_t am_hal_iom_frequency_get(uint32_t ui32Module);
 extern void     am_hal_iom_enable(uint32_t ui32Module);
 extern void     am_hal_iom_disable(uint32_t ui32Module);
-extern void     am_hal_iom_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                      uint32_t *pui32Data, uint32_t ui32NumBytes,
                                      uint32_t ui32Options);
-extern void     am_hal_iom_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                     uint32_t *pui32Data, uint32_t ui32NumBytes,
                                     uint32_t ui32Options);
-extern void     am_hal_iom_spi_write_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_spi_write_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                         uint32_t *pui32Data, uint32_t ui32NumBytes,
                                         uint32_t ui32Options);
-extern void     am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_spi_read_nq(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                        uint32_t *pui32Data, uint32_t ui32NumBytes,
                                        uint32_t ui32Options);
-extern void     am_hal_iom_spi_write_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_spi_write_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                         uint32_t *pui32Data, uint32_t ui32NumBytes,
                                         uint32_t ui32Options,
                                         am_hal_iom_callback_t pfnCallback);
-extern void     am_hal_iom_spi_read_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_spi_read_nb(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                        uint32_t *pui32Data, uint32_t ui32NumBytes,
                                        uint32_t ui32Options,
                                        am_hal_iom_callback_t pfnCallback);
@@ -444,39 +488,39 @@ extern void     am_hal_iom_spi_cmd_run(uint32_t ui32Operation,
                                        uint32_t ui32ChipSelect,
                                        uint32_t ui32NumBytes,
                                        uint32_t ui32Options);
-extern void     am_hal_iom_i2c_write(uint32_t ui32Module,
+extern am_hal_iom_status_e am_hal_iom_i2c_write(uint32_t ui32Module,
                                      uint32_t ui32BusAddress,
                                      uint32_t *pui32Data,
                                      uint32_t ui32NumBytes,
                                      uint32_t ui32Options);
-extern void     am_hal_iom_i2c_read(uint32_t ui32Module,
+extern am_hal_iom_status_e am_hal_iom_i2c_read(uint32_t ui32Module,
                                     uint32_t ui32BusAddress,
                                     uint32_t *pui32Data,
                                     uint32_t ui32NumBytes,
                                     uint32_t ui32Options);
-extern void     am_hal_iom_i2c_write_nq(uint32_t ui32Module,
+extern am_hal_iom_status_e am_hal_iom_i2c_write_nq(uint32_t ui32Module,
                                         uint32_t ui32BusAddress,
                                         uint32_t *pui32Data,
                                         uint32_t ui32NumBytes,
                                         uint32_t ui32Options);
-extern void     am_hal_iom_i2c_read_nq(uint32_t ui32Module,
+extern am_hal_iom_status_e am_hal_iom_i2c_read_nq(uint32_t ui32Module,
                                        uint32_t ui32BusAddress,
                                        uint32_t *pui32Data,
                                        uint32_t ui32NumBytes,
                                        uint32_t ui32Options);
-extern void     am_hal_iom_i2c_write_nb(uint32_t ui32Module,
+extern am_hal_iom_status_e am_hal_iom_i2c_write_nb(uint32_t ui32Module,
                                         uint32_t ui32BusAddress,
                                         uint32_t *pui32Data,
                                         uint32_t ui32NumBytes,
                                         uint32_t ui32Options,
                                         am_hal_iom_callback_t pfnCallback);
-extern void     am_hal_iom_i2c_read_nb(uint32_t ui32Module,
+extern am_hal_iom_status_e am_hal_iom_i2c_read_nb(uint32_t ui32Module,
                                        uint32_t ui32BusAddress,
                                        uint32_t *pui32Data,
                                        uint32_t ui32NumBytes,
                                        uint32_t ui32Options,
                                        am_hal_iom_callback_t pfnCallback);
-extern void     am_hal_iom_i2c_cmd_run(uint32_t ui32Operation,
+extern am_hal_iom_status_e am_hal_iom_i2c_cmd_run(uint32_t ui32Operation,
                                        uint32_t ui32Module,
                                        uint32_t ui32BusAddress,
                                        uint32_t ui32NumBytes,
@@ -484,7 +528,7 @@ extern void     am_hal_iom_i2c_cmd_run(uint32_t ui32Operation,
 extern void     am_hal_iom_command_repeat_set(uint32_t ui32Module,
                                               uint32_t ui32CmdCount);
 extern uint32_t am_hal_iom_status_get(uint32_t ui32Module);
-extern uint32_t am_hal_iom_error_status_get(uint32_t ui32Module);
+extern am_hal_iom_status_e am_hal_iom_error_status_get(uint32_t ui32Module);
 extern uint32_t am_hal_iom_fifo_write(uint32_t ui32Module, uint32_t *pui32Data,
                                       uint32_t ui32NumBytes);
 extern uint32_t am_hal_iom_fifo_read(uint32_t ui32Module, uint32_t *pui32Data,
@@ -504,19 +548,19 @@ extern void     am_hal_iom_queue_init(uint32_t ui32ModuleNum,
                                       uint32_t ui32QueueMemSize);
 extern uint32_t am_hal_iom_queue_length_get(uint32_t ui32Module);
 extern void     am_hal_iom_sleeping_queue_flush(uint32_t ui32Module);
-extern void     am_hal_iom_queue_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_queue_spi_write(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                            uint32_t *pui32Data, uint32_t ui32NumBytes,
                                            uint32_t ui32Options,
                                            am_hal_iom_callback_t pfnCallback);
-extern void     am_hal_iom_queue_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
+extern am_hal_iom_status_e am_hal_iom_queue_spi_read(uint32_t ui32Module, uint32_t ui32ChipSelect,
                                           uint32_t *pui32Data, uint32_t ui32NumBytes,
                                           uint32_t ui32Options,
                                           am_hal_iom_callback_t pfnCallback);
-extern void     am_hal_iom_queue_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
+extern am_hal_iom_status_e am_hal_iom_queue_i2c_write(uint32_t ui32Module, uint32_t ui32BusAddress,
                                            uint32_t *pui32Data, uint32_t ui32NumBytes,
                                            uint32_t ui32Options,
                                            am_hal_iom_callback_t pfnCallback);
-extern void     am_hal_iom_queue_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
+extern am_hal_iom_status_e am_hal_iom_queue_i2c_read(uint32_t ui32Module, uint32_t ui32BusAddress,
                                           uint32_t *pui32Data, uint32_t ui32NumBytes,
                                           uint32_t ui32Options,
                                           am_hal_iom_callback_t pfnCallback);
@@ -548,6 +592,10 @@ void am_iomaster##x##_isr(void)                             \
     am_hal_iom_int_service(x, ui32IntStatus);               \
 }
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif // AM_HAL_IOM_H
 
 //*****************************************************************************
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.c
index bff1ef9cd..5e7889a9f 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_ios.c
+//  am_hal_ios.c
+//! @file
 //!
 //! @brief Functions for interfacing with the IO Slave module
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup ios IO Slave (SPI/I2C)
-//! @ingroup hal
+//! @addtogroup ios2 IO Slave (SPI/I2C)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -103,6 +103,23 @@ uint8_t *g_pui8FIFOPtr = (uint8_t *) REG_IOSLAVE_BASEADDR;
 uint8_t g_ui32HwFifoSize = 0;
 uint32_t g_ui32FifoBaseOffset = 0;
 
+//*****************************************************************************
+//
+// Checks to see if this processor is a Rev B2 device.
+//
+// This is needed to disable SHELBY-1654 workaround.
+//
+//*****************************************************************************
+bool
+isRevB2(void)
+{
+    //
+    // Check to make sure the major rev is B and the minor rev is 2.
+    //
+    return ( (AM_REG(MCUCTRL, CHIPREV) & 0xFF) ==   \
+        (AM_REG_MCUCTRL_CHIPREV_REVMAJ_B | (AM_REG_MCUCTRL_CHIPREV_REVMIN_REV0 + 2)) );
+}
+
 //*****************************************************************************
 //
 //! @brief Enable the IOS in the power control block.
@@ -957,7 +974,10 @@ am_hal_ios_fifo_service(uint32_t ui32Status)
                     }
                 }
             }
-            resync_fifoSize();
+            if (!isRevB2())
+            {
+                resync_fifoSize();
+            }
 
             //
             // Need to retake the FIFO space, after Threshold interrupt has been reenabled
@@ -1041,7 +1061,10 @@ am_hal_ios_fifo_write(uint8_t *pui8Data, uint32_t ui32NumBytes)
             ui32NumBytes -= ui32FIFOSpace;
             pui8Data += ui32FIFOSpace;
         };
-        resync_fifoSize();
+        if (!isRevB2())
+        {
+            resync_fifoSize();
+        }
     }
 
     //
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.h
index 5419bb885..a8fbf85d2 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ios.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_ios.h
+//  am_hal_ios.h
+//! @file
 //!
 //! @brief Functions for interfacing with the IO Slave module
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup ios IO Slave (SPI/I2C)
-//! @ingroup hal
+//! @addtogroup ios2 IO Slave (SPI/I2C)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,16 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_IOS_H
 #define AM_HAL_IOS_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
 
 //*****************************************************************************
 //
@@ -300,6 +296,10 @@ typedef struct
 }
 am_hal_ios_config_t;
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.c
index fb3f25935..44710ec87 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_itm.c
+//  am_hal_itm.c
+//! @file
 //!
 //! @brief Functions for operating the instrumentation trace macrocell
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup itm Instrumentation Trace Macrocell (ITM)
-//! @ingroup hal
+//! @addtogroup itm2 Instrumentation Trace Macrocell (ITM)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.h
index 7d09ae42a..f41923b44 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_itm.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_itm.h
+//  am_hal_itm.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the ARM ITM.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup itm Instrumentation Trace Macrocell (ITM)
-//! @ingroup hal
+//! @addtogroup itm2 Instrumentation Trace Macrocell (ITM)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,18 +42,13 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
 #ifndef AM_HAL_ITM_H
 #define AM_HAL_ITM_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 // Sync Packet Defines
@@ -71,6 +66,11 @@ extern "C"
 #define AM_HAL_ITM_PRINT_NUM_REGS       1
 extern uint32_t am_hal_itm_print_registers[AM_HAL_ITM_PRINT_NUM_REGS];
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.c
index 3f74983dc..9acb416ee 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_mcuctrl.c
+//  am_hal_mcuctrl.c
+//! @file
 //!
 //! @brief Functions for interfacing with the MCUCTRL.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup mcuctrl MCU Control (MCUCTRL)
-//! @ingroup hal
+//! @addtogroup mcuctrl2 MCU Control (MCUCTRL)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.h
index 94b5957aa..c680a6614 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_mcuctrl.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_mcuctrl.h
+//  am_hal_mcuctrl.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the MCUCTRL.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup mcuctrl MCU Control (MCUCTRL)
-//! @ingroup hal
+//! @addtogroup mcuctrl2 MCU Control (MCUCTRL)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_MCUCTRL_H
 #define AM_HAL_MCUCTRL_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //
 // Deprecate the am_hal_mcuctrl_bucks_enable() and disable() functions.
 // This functionality is now handled in pwrctrl.
@@ -188,6 +183,11 @@ typedef struct
 }
 am_hal_mcuctrl_fault_t;
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.c
index 935e7262e..87ea6eb60 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.c
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_otp.c
+//  am_hal_otp.c
+//! @file
 //!
 //! @brief Functions for handling the OTP interface.
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include "am_mcu_apollo.h"
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.h
index 2ac6f4021..540c95af5 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_otp.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_otp.h
+//  am_hal_otp.h
+//! @file
 //!
 //! @brief Functions for handling the OTP interface.
 //
@@ -37,17 +38,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_OTP_H
 #define AM_HAL_OTP_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 // Define some OTP values and macros.
@@ -81,6 +77,11 @@ extern "C"
 #define AM_OTP_SRAM_LOCKOUT_S       (2)
 #define AM_OTP_SRAM_LOCKOUT_M       (0x1 << AM_OTP_SRAM_LOCKOUT_S)
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // Function prototypes
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.c
index 41694e21e..4f5bfc417 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_pdm.c
+//  am_hal_pdm.c
+//! @file
 //!
 //! @brief Functions for interfacing with Pulse Density Modulation (PDM).
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup pdm DMEMS Microphon3 (PDM)
-//! @ingroup hal
+//! @addtogroup pdm2 DMEMS Microphon3 (PDM)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.h
index 702c5436c..70311bb37 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pdm.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_pdm.h
+//  am_hal_pdm.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the PDM module
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup pdm Pulse Density Modulation (PDM) Input Module.
-//! @ingroup hal
+//! @addtogroup pdm2 Pulse Density Modulation (PDM) Input Module.
+//! @ingroup apollo2hal
 //! @{
 
 //*****************************************************************************
@@ -42,13 +42,18 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
 #ifndef AM_HAL_PDM_H
 #define AM_HAL_PDM_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // Macro definitions
@@ -655,6 +660,10 @@ extern void am_hal_pdm_disable(void);
 
 extern uint32_t am_hal_pdm_int_status_get(bool bEnabledOnly);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif // AM_HAL_PDM_H
 
 //*****************************************************************************
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pin.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pin.h
index e80ec8f5a..5a92f9b6a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pin.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pin.h
@@ -1,12 +1,11 @@
 //*****************************************************************************
 //
-//! @file am_hal_pin.h
-//!
+//  am_hal_pin.h
+//! @file
 //! @brief Macros for configuring specific pins.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup pin PIN
-//! @ingroup hal
+//! @addtogroup pin2 PIN definitions for Apollo2.
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +41,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision 1.2.10 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.c
index 1481f0ef7..ba4e0f1be 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_pwrctrl.c
+//  am_hal_pwrctrl.c
+//! @file
 //!
 //! @brief Functions for enabling and disabling power domains.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup pwrctrl Power Control
-//! @ingroup hal
+//! @addtogroup pwrctrl2 Power Control
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -57,21 +57,6 @@
 //*****************************************************************************
 #define ONE_BIT(ui32Value)   (ui32Value  &&  !(ui32Value & (ui32Value - 1)))
 
-//*****************************************************************************
-//
-//  Determine if Apollo2 A revision.
-//
-//  Note - this function is intended to be temporary until Apollo2 revA chips
-//  are no longer relevant.
-//
-//*****************************************************************************
-static bool
-isRevA(void)
-{
-    return AM_BFM(MCUCTRL, CHIPREV, REVMAJ) == AM_REG_MCUCTRL_CHIPREV_REVMAJ_A ?
-            true : false;
-}
-
 //*****************************************************************************
 //
 //  Determine if this is an Apollo2 revision that requires additional handling
@@ -423,7 +408,7 @@ am_hal_pwrctrl_memory_enable(uint32_t ui32MemEn)
 
 //*****************************************************************************
 //
-//! @brief Intialize the core and memory buck converters.
+//! @brief Initialize the core and memory buck converters.
 //!
 //! This function is intended to be used for first time core and memory buck
 //! converters initialization.
@@ -463,8 +448,6 @@ am_hal_pwrctrl_bucks_init(void)
 void
 am_hal_pwrctrl_bucks_enable(void)
 {
-    uint32_t corebuck_trim, membuck_trim, mcuctrl_ldoreg1, mcuctrl_ldoreg3;
-
     //
     // Check to see if the bucks are already on. If so, we can just return.
     //
@@ -474,18 +457,6 @@ am_hal_pwrctrl_bucks_enable(void)
         return;
     }
 
-    if ( isRevA() )
-    {
-        //
-        // 1) Override the buck pwd. This forces the buck to power up.
-        //
-        AM_REG(MCUCTRL, BUCK) = (AM_BFV(MCUCTRL, BUCK, MEMBUCKRST,  1) |
-                                 AM_BFV(MCUCTRL, BUCK, MEMBUCKPWD,  0) |
-                                 AM_BFV(MCUCTRL, BUCK, COREBUCKRST, 1) |
-                                 AM_BFV(MCUCTRL, BUCK, COREBUCKPWD, 0) |
-                                 AM_BFV(MCUCTRL, BUCK, BUCKSWE, 1));
-    }
-
     //
     // Enable BUCK power up
     //
@@ -493,38 +464,13 @@ am_hal_pwrctrl_bucks_enable(void)
     AM_BFW(PWRCTRL, SUPPLYSRC, MEMBUCKEN, 1);
 
     //
-    // Wait until BUCKs are enabled.
+    // Make sure bucks are ready.
     //
     while ( ( AM_REG(PWRCTRL, POWERSTATUS)                      &
               ( AM_REG_PWRCTRL_POWERSTATUS_COREBUCKON_M |
                 AM_REG_PWRCTRL_POWERSTATUS_MEMBUCKON_M ) )  !=
               ( AM_REG_PWRCTRL_POWERSTATUS_COREBUCKON_M |
-                AM_REG_PWRCTRL_POWERSTATUS_MEMBUCKON_M ) ) {};
-
-    if ( isRevA() )
-    {
-        //
-        // 4) Get the trims that need to be programmed for buck
-        //
-        corebuck_trim = AM_REGVAL(BUCK_TRIM_REG_ADDR) & 0x00003FF;
-        membuck_trim  = (AM_REGVAL(BUCK_TRIM_REG_ADDR) & 0x03FF0000) >> 16;
-
-        mcuctrl_ldoreg1 = (AM_REG(MCUCTRL, LDOREG1) & ~AM_REG_MCUCTRL_LDOREG1_TRIMCORELDOR1_M) | (corebuck_trim <<
-                                          AM_REG_MCUCTRL_LDOREG1_TRIMCORELDOR1_S);
-        mcuctrl_ldoreg3 = (AM_REG(MCUCTRL, LDOREG3) & ~AM_REG_MCUCTRL_LDOREG3_TRIMMEMLDOR1_M)  | (membuck_trim <<
-                                          AM_REG_MCUCTRL_LDOREG3_TRIMMEMLDOR1_S);
-
-        //
-        // 5) Remove the sw overrides
-        //
-        AM_BFW(MCUCTRL, BUCK, BUCKSWE, 0);
-
-        //
-        // 6) Program the trims
-        //
-        AM_REG(MCUCTRL, LDOREG1) = mcuctrl_ldoreg1;
-        AM_REG(MCUCTRL, LDOREG3) = mcuctrl_ldoreg3;
-    }
+                AM_REG_PWRCTRL_POWERSTATUS_MEMBUCKON_M ) );
 }
 
 //*****************************************************************************
@@ -548,6 +494,9 @@ am_hal_pwrctrl_bucks_disable(void)
         return;
     }
 
+    //
+    // Handle the special case if only the ADC is powered.
+    //
     if ( isRev_ADC()  &&
          (AM_REG(PWRCTRL, DEVICEEN) == AM_REG_PWRCTRL_DEVICEEN_ADC_EN) )
     {
@@ -558,52 +507,6 @@ am_hal_pwrctrl_bucks_disable(void)
                 (AM_REG_PWRCTRL_SUPPLYSRC_SWITCH_LDO_IN_SLEEP_EN    |
                  AM_REG_PWRCTRL_SUPPLYSRC_MEMBUCKEN_EN);
     }
-    else if ( isRevA() )
-    {
-        uint32_t coreldo_trim, memldo_trim, mcuctrl_ldoreg1, mcuctrl_ldoreg3;
-
-        //
-        // Sequence for BUCK to LDO
-        // 1) get the trims needed for transition
-        //
-        coreldo_trim = AM_REGVAL(LDO_TRIM_REG_ADDR) & 0x000003FF;
-        memldo_trim  = (AM_REGVAL(LDO_TRIM_REG_ADDR) & 0x03FF0000) >> 16;
-
-        mcuctrl_ldoreg1 = (AM_REG(MCUCTRL, LDOREG1) & ~AM_REG_MCUCTRL_LDOREG1_TRIMCORELDOR1_M) | (coreldo_trim << AM_REG_MCUCTRL_LDOREG1_TRIMCORELDOR1_S);
-        mcuctrl_ldoreg3 = (AM_REG(MCUCTRL, LDOREG3) & ~AM_REG_MCUCTRL_LDOREG3_TRIMMEMLDOR1_M)  | (memldo_trim << AM_REG_MCUCTRL_LDOREG3_TRIMMEMLDOR1_S);
-
-        if ( AM_BFR(PWRCTRL, POWERSTATUS, COREBUCKON) )
-        {
-            //
-            // 2) Disable buck
-            //
-            AM_BFW(PWRCTRL, SUPPLYSRC, COREBUCKEN, 0);
-
-            //
-            // 3) Program the LDO trims
-            //
-            AM_REG(MCUCTRL, LDOREG1) = mcuctrl_ldoreg1;
-        }
-
-        if (AM_BFR(PWRCTRL, POWERSTATUS, MEMBUCKON))
-        {
-            //
-            // 4) Disable buck
-            //
-            AM_BFW(PWRCTRL, SUPPLYSRC, MEMBUCKEN, 0);
-
-            //
-            // 5) Program the LDO trims
-            //
-            AM_REG(MCUCTRL, LDOREG3) = mcuctrl_ldoreg3;
-        }
-
-        //
-        // Power them down
-        //
-        AM_BFW(PWRCTRL, SUPPLYSRC, COREBUCKEN, 0);
-        AM_BFW(PWRCTRL, SUPPLYSRC, MEMBUCKEN, 0);
-    }
     else
     {
         //
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.h
index 5cd50985b..4fd8053b8 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_pwrctrl.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_pwrctrl.h
+//  am_hal_pwrctrl.h
+//! @file
 //!
 //! @brief Functions for enabling and disabling power domains.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup pwrctrl Power Control
-//! @ingroup hal
+//! @addtogroup pwrctrl2 Power Control
+//! @ingroup apollo2hal
 //! @{
 
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -319,6 +319,11 @@
 #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_ALL                 \
         AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_256K
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // Function prototypes
@@ -332,6 +337,10 @@ extern void am_hal_pwrctrl_bucks_enable(void);
 extern void am_hal_pwrctrl_bucks_disable(void);
 extern void am_hal_pwrctrl_low_power_init(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif // AM_HAL_PWRCTRL_H
 
 //*****************************************************************************
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.c
index d3acfea1e..d7a91708e 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_queue.c
+//  am_hal_queue.c
+//! @file
 //!
 //! @brief Functions for implementing a queue system.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup Miscellaneous Software Features (MISC)
-//! @ingroup hal
+//! @addtogroup Miscellaneous2 Software Features (MISC)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.h
index bf07131f0..14b2725e5 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_queue.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_queue.h
+//  am_hal_queue.h
+//! @file
 //!
 //! @brief Functions for implementing a queue system.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup Miscellaneous Software Features (MISC)
-//! @ingroup hal
+//! @addtogroup Miscellaneous2 Software Features (MISC)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_QUEUE_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.c
index 8cf9fab6c..d9e91d569 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_reset.c
+//  am_hal_reset.c
+//! @file
 //!
 //! @brief Hardware abstraction layer for the Reset Generator module.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup rstgen Reset Generator (RSTGEN)
-//! @ingroup hal
+//! @addtogroup rstgen2 Reset Generator (RSTGEN)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.h
index ba90df824..0a68f2457 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_reset.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_reset.h
+//  am_hal_reset.h
+//! @file
 //!
 //! @brief Hardware abstraction layer for the Reset Generator module.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup wdt Watchdog Timer (RSTGEN)
-//! @ingroup hal
+//! @addtogroup wdt2 Watchdog Timer (RSTGEN)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_RSTGEN_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.c
index 08d4f30f5..3334f3a17 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_rtc.c
+//  am_hal_rtc.c
+//! @file
 //!
 //! @brief Functions for interfacing with the Real-Time Clock (RTC).
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup rtc Real-Time Clock (RTC)
-//! @ingroup hal
+//! @addtogroup rtc2 Real-Time Clock (RTC)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.h
index bf505b3af..8873736d0 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_rtc.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_rtc.h
+//  am_hal_rtc.h
+//! @file
 //!
 //! @brief Functions for interfacing and accessing the Real-Time Clock (RTC).
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup rtc Real-Time Clock (RTC)
-//! @ingroup hal
+//! @addtogroup rtc2 Real-Time Clock (RTC)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_RTC_H
 #define AM_HAL_RTC_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 //! @name OSC Start and Stop
@@ -149,6 +144,11 @@ typedef struct am_hal_rtc_time_struct
     uint32_t ui32Hundredths;
 }am_hal_rtc_time_t;
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.c
index 14311ed61..8b3ad283f 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_stimer.c
+//  am_hal_stimer.c
+//! @file
 //!
 //! @brief Functions for interfacing with the system timer (STIMER).
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup stimer System Timer (STIMER)
-//! @ingroup hal
+//! @addtogroup stimer2 System Timer (STIMER)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -148,12 +148,18 @@ am_hal_stimer_counter_clear(void)
 void
 am_hal_stimer_compare_delta_set(uint32_t ui32CmprInstance, uint32_t ui32Delta)
 {
+    uint32_t cfgVal;
     if ( ui32CmprInstance > 7 )
     {
         return;
     }
 
+    cfgVal = AM_REG(CTIMER, STCFG);
+    // Disable the compare if already enabled, when setting the new value
+    AM_REG(CTIMER, STCFG) &= ~((AM_HAL_STIMER_CFG_COMPARE_A_ENABLE << ui32CmprInstance));
     AM_REGVAL(AM_REG_STIMER_COMPARE(0, ui32CmprInstance)) = ui32Delta;
+    // Restore Compare Enable bit
+    AM_REG(CTIMER, STCFG) |= cfgVal & (AM_HAL_STIMER_CFG_COMPARE_A_ENABLE << ui32CmprInstance);
 }
 
 //*****************************************************************************
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.h
index 45ad54a8a..6eb81d859 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_stimer.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_stimer.h
+//  am_hal_stimer.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the STIMER.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup stimer Counter/Timer (STIMER)
-//! @ingroup hal
+//! @addtogroup stimer2 Counter/Timer (STIMER)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_STIMER_H
 #define AM_HAL_STIMER_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //
 // Compute address of a given COMPARE or CAPTURE register.
 // Note - For Apollo2, the parameter n should be 0 (as only 1 stimer module
@@ -204,6 +199,11 @@ am_hal_stimer_config_t;
 
 
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.c
index ed16e8d03..23f0da1ce 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_sysctrl.c
+//  am_hal_sysctrl.c
+//! @file
 //!
 //! @brief Functions for interfacing with the M4F system control registers
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup sysctrl System Control (SYSCTRL)
-//! @ingroup hal
+//! @addtogroup sysctrl2 System Control (SYSCTRL)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -52,17 +52,246 @@
 
 //*****************************************************************************
 //
-//  Determine if Apollo2 A revision.
+//  Local macro constants
 //
-//  Note - this function is intended to be temporary until Apollo2 revA chips
-//  are no longer relevant.
+//*****************************************************************************
+//
+// Define ZX workaround values.
+// These values are defined by the factory.
+//
+#define COREZXVALUE         0x07
+#define MEMZXVALUE          0x07
+
+//
+// Define values for g_ui32CoreBuck, which indicates which timer carries
+// the signal for the CORE Buck, and which also implies that the other timer
+// carries the signal for the MEM buck.
+//
+#define COREBUCK_TIMERA     1       // Core buck signal comes in on timer A
+#define COREBUCK_TIMERB     2       // Core buck signal comes in on timer B
+
+//
+// Define the bit values for static function g_buckZX_chk;
+//
+#define CHKBUCKZX_BUCKS     0x01    // The bucks are enabled
+#define CHKBUCKZX_REV       0x02    // This chip rev needs the workaround
+#define CHKBUCKZX_TIMER     0x04    // A valid timer has been allocated
+#define CHKBUCKZX_DEVEN     0x08    // Devices are powered up and enabled
+
+//*****************************************************************************
+//
+//  Prototypes
+//
+//*****************************************************************************
+static void am_hal_sysctrl_buckA_ctimer_isr(void);
+static void am_hal_sysctrl_buckB_ctimer_isr(void);
+
+//*****************************************************************************
+//
+//  Globals
+//
+//*****************************************************************************
+static volatile uint32_t g_ui32BuckTimer = 0;
+static volatile uint32_t g_ui32BuckInputs = 0;
+static volatile bool     g_bBuckRestoreComplete = false;
+static volatile bool     g_bBuckTimed = false;
+static          uint32_t g_ui32SaveCoreBuckZX, g_ui32SaveMemBuckZX;
+static          uint32_t g_buckZX_chk = 0;
+static volatile uint32_t g_ui32CoreBuck;
+
+//
+// Timer configuration for BUCK inputs.
+//
+static const am_hal_ctimer_config_t g_sBuckTimer =
+{
+    // Don't link timers.
+    0,
+
+    // Set up Timer0A.
+    (AM_HAL_CTIMER_FN_ONCE      |
+     AM_HAL_CTIMER_INT_ENABLE   |
+     AM_HAL_CTIMER_BUCK),
+
+    // Set up Timer0B.
+    (AM_HAL_CTIMER_FN_ONCE      |
+     AM_HAL_CTIMER_INT_ENABLE   |
+     AM_HAL_CTIMER_BUCK),
+};
+
+//*****************************************************************************
+//
+// Determine if we need to do the zero cross workaround on this device.
+// Three criteria are used.  All three must be true.
+//  1. Are the bucks enabled?
+//  2. Is the chip rev appropriate for the workaround?
+//  3. Has a timer been allocated to do the workaround?
+//  4. Are certain peripherals powered up?
+//
+// Saves the bitmask to the global g_buckZX_chk.
+// Bitmask bits are defined as: CHKBUCKZX_BUCKS, CHKBUCKZX_REV, CHKBUCKZX_TIMER.
+//
+// Returns true if all criteria are met, false otherwise.
+// g_buckZX_chk can be probed to determine which criteria passed or failed.
 //
 //*****************************************************************************
 static bool
-isRevA(void)
+buckZX_chk(void)
 {
-    return AM_BFM(MCUCTRL, CHIPREV, REVMAJ) == AM_REG_MCUCTRL_CHIPREV_REVMAJ_A ?
-            true : false;
+    uint32_t ui32SupplySrc;
+
+    //
+    // Is this chip rev appropriate to do the workaround?
+    //
+    g_buckZX_chk = AM_BFM(MCUCTRL, CHIPREV, REVMAJ) == AM_REG_MCUCTRL_CHIPREV_REVMAJ_B ?
+                   CHKBUCKZX_REV : 0x0;
+
+    //
+    // Has a timer been configured to handle the workaround?
+    //
+    g_buckZX_chk |= ( g_ui32BuckTimer - 1 ) <= BUCK_TIMER_MAX ?
+                    CHKBUCKZX_TIMER : 0x0;
+
+    //
+    // Are either or both of the bucks actually enabled?
+    //
+    ui32SupplySrc = AM_REG(PWRCTRL, SUPPLYSRC);
+
+    g_buckZX_chk |= (ui32SupplySrc &
+                    (AM_REG_PWRCTRL_SUPPLYSRC_COREBUCKEN_M  |
+                     AM_REG_PWRCTRL_SUPPLYSRC_MEMBUCKEN_M) ) ?
+                     CHKBUCKZX_BUCKS : 0x0;
+
+    //
+    // Finally, if any peripheral is already powered up, we don't need to do the
+    //  ZX workaround because in this case the bucks remain in active mode.
+    //
+    ui32SupplySrc = AM_REG(PWRCTRL, DEVICEEN);
+
+    g_buckZX_chk |= ( ui32SupplySrc &
+            (AM_REG_PWRCTRL_DEVICEEN_PDM_M          |
+             AM_REG_PWRCTRL_DEVICEEN_UART1_M        |
+             AM_REG_PWRCTRL_DEVICEEN_UART0_M        |
+             AM_REG_PWRCTRL_DEVICEEN_IO_MASTER5_M   |
+             AM_REG_PWRCTRL_DEVICEEN_IO_MASTER4_M   |
+             AM_REG_PWRCTRL_DEVICEEN_IO_MASTER3_M   |
+             AM_REG_PWRCTRL_DEVICEEN_IO_MASTER2_M   |
+             AM_REG_PWRCTRL_DEVICEEN_IO_MASTER1_M   |
+             AM_REG_PWRCTRL_DEVICEEN_IO_MASTER0_M   |
+             AM_REG_PWRCTRL_DEVICEEN_IO_SLAVE_M) )      ?
+                0x0 : CHKBUCKZX_DEVEN;
+
+    //
+    // If all 4 criteria were met, we're good to do the workaround.
+    //
+    return ( g_buckZX_chk ==
+             (CHKBUCKZX_BUCKS | CHKBUCKZX_REV |
+              CHKBUCKZX_TIMER | CHKBUCKZX_DEVEN) ) ? true : false;
+}
+
+//*****************************************************************************
+//
+// Set the buck zero cross settings to the values given.
+//
+// ui32Flags, one or more of the following:
+//  SETBUCKZX_USE_PROVIDED_SETTINGS - Use the values provided in the parameters
+//                                    to set the trim value(s).
+//  SETBUCKZX_USE_SAVED_SETTINGS    - Use the values that were previously saved
+//                                    to set the trim value(s).
+//  SETBUCKZX_SAVE_CURR_SETTINGS    - Save the current trim values before
+//                                    setting the new ones.
+//  SETBUCKZX_RESTORE_CORE_ONLY     - Restore the Core trim and save the current
+//                                    value of the core buck trim iff
+//                                    SETBUCKZX_SAVE_CURR_SETTINGS is set.
+//  SETBUCKZX_RESTORE_MEM_ONLY      - Restore the Mem trim and save the current
+//                                    value of the mem buck trim iff
+//                                    SETBUCKZX_SAVE_CURR_SETTINGS is set.
+//  SETBUCKZX_RESTORE_BOTH          - Restore both buck trims and save the
+//                                    current value of both iff
+//                                    SETBUCKZX_SAVE_CURR_SETTINGS is set.
+//
+//*****************************************************************************
+#define SETBUCKZX_USE_PROVIDED_SETTINGS 0x01
+#define SETBUCKZX_USE_SAVED_SETTINGS    0x02
+#define SETBUCKZX_SAVE_CURR_SETTINGS    0x04
+#define SETBUCKZX_RESTORE_CORE_ONLY     0x10
+#define SETBUCKZX_RESTORE_MEM_ONLY      0x20
+#define SETBUCKZX_RESTORE_BOTH          ( SETBUCKZX_RESTORE_CORE_ONLY |     \
+                                          SETBUCKZX_RESTORE_MEM_ONLY )
+static void
+setBuckZX(uint32_t ui32CoreBuckZX, uint32_t ui32MemBuckZX, uint32_t ui32Flags)
+{
+    uint32_t ui32SaveCore, ui32SaveMem, ui32NewCore, ui32NewMem;
+    bool bDoRestore = false;
+
+    //
+    // Begin critical section.
+    //
+    AM_CRITICAL_BEGIN_ASM
+
+    //
+    // Get the current zero cross trim values.
+    //
+    ui32SaveCore = AM_BFR(MCUCTRL, BUCK3, COREBUCKZXTRIM);
+    ui32SaveMem  = AM_BFR(MCUCTRL, BUCK3, MEMBUCKZXTRIM);
+
+    //
+    // Determine which values will be restored.
+    //
+    if ( ui32Flags & SETBUCKZX_USE_SAVED_SETTINGS )
+    {
+        //
+        // Use saved settings
+        //
+        ui32NewCore = g_ui32SaveCoreBuckZX;
+        ui32NewMem  = g_ui32SaveMemBuckZX;
+        bDoRestore = true;
+    }
+    else if ( ui32Flags & SETBUCKZX_USE_PROVIDED_SETTINGS )
+    {
+        //
+        // Use settings provided in the call parameters
+        //
+        ui32NewCore = ui32CoreBuckZX;
+        ui32NewMem  = ui32MemBuckZX;
+        bDoRestore = true;
+    }
+
+    //
+    // Restore the buck Core and Mem trim registers.
+    //
+    if ( bDoRestore )
+    {
+        if ( ui32Flags & SETBUCKZX_RESTORE_CORE_ONLY )
+        {
+            AM_BFW(MCUCTRL, BUCK3, COREBUCKZXTRIM, ui32NewCore);
+        }
+
+        if ( ui32Flags & SETBUCKZX_RESTORE_MEM_ONLY )
+        {
+            AM_BFW(MCUCTRL, BUCK3, MEMBUCKZXTRIM,  ui32NewMem);
+        }
+    }
+
+    if ( ui32Flags & SETBUCKZX_SAVE_CURR_SETTINGS )
+    {
+        //
+        // Save off the zero cross values as read on entry to the function.
+        //
+        if ( ui32Flags & SETBUCKZX_RESTORE_CORE_ONLY )
+        {
+            g_ui32SaveCoreBuckZX = ui32SaveCore;
+        }
+
+        if ( ui32Flags & SETBUCKZX_RESTORE_MEM_ONLY )
+        {
+            g_ui32SaveMemBuckZX  = ui32SaveMem;
+        }
+    }
+
+    //
+    // Done with critical section.
+    //
+    AM_CRITICAL_END_ASM
 }
 
 //*****************************************************************************
@@ -85,7 +314,9 @@ void
 am_hal_sysctrl_sleep(bool bSleepDeep)
 {
     uint32_t ui32Critical;
-    uint32_t ui32CoreBuckEn, ui32MemBuckEn;
+//  uint32_t ui32DebugGpioSleep = g_ui32DebugGpioSleep - 1;
+    bool bBuckZX_chk;
+    volatile uint32_t ui32BuckTimer;
 
     //
     // Disable interrupts and save the previous interrupt state.
@@ -104,19 +335,36 @@ am_hal_sysctrl_sleep(bool bSleepDeep)
         //
         AM_BFW(SYSCTRL, SCR, SLEEPDEEP, 1);
 
-        if (isRevA())
+        //
+        // Check if special buck handling is needed
+        //
+        bBuckZX_chk = buckZX_chk();
+
+        if ( bBuckZX_chk )
         {
+            ui32BuckTimer = g_ui32BuckTimer - 1;
+
             //
-            // Workaround for an issue with RevA buck-converter sleep behavior.
-            // Save the buck enable registers, and then turn them off.
+            // Before going to sleep, clear the buck timers.
+            // This will also handle the case where we're going back to
+            // sleep before the buck sequence has even completed.
             //
-            ui32CoreBuckEn = AM_BFR(PWRCTRL, SUPPLYSRC, COREBUCKEN);
-            ui32MemBuckEn = AM_BFR(PWRCTRL, SUPPLYSRC, MEMBUCKEN);
-            am_hal_mcuctrl_bucks_disable();
-        }
-        else
-        {
-            ui32CoreBuckEn = ui32MemBuckEn = 0;
+            am_hal_ctimer_clear(ui32BuckTimer, AM_HAL_CTIMER_BOTH);
+
+            //
+            // Set CMPR0 of both timerA and timerB to the period value
+            //
+            #define     TIMER_PERIOD_BUCKS  1
+            am_hal_ctimer_period_set(ui32BuckTimer,
+                                     AM_HAL_CTIMER_BOTH,
+                                     TIMER_PERIOD_BUCKS |
+                                     (TIMER_PERIOD_BUCKS << 16),
+                                     0);
+
+            //
+            // Disable bucks before going to sleep.
+            //
+            am_hal_pwrctrl_bucks_disable();
         }
 
         //
@@ -127,17 +375,56 @@ am_hal_sysctrl_sleep(bool bSleepDeep)
         //
         // Return from sleep
         //
-        if (isRevA())
+        if ( bBuckZX_chk )
         {
             //
-            // Workaround for an issue with RevA buck-converter sleep behavior.
-            // If the bucks were on when this function was called, turn them
-            // back on now.
+            // Adjust the core and mem trims
             //
-            if (ui32CoreBuckEn || ui32MemBuckEn)
-            {
-                am_hal_mcuctrl_bucks_enable();
-            }
+            setBuckZX(COREZXVALUE, MEMZXVALUE,
+                      SETBUCKZX_USE_PROVIDED_SETTINGS   |
+                      SETBUCKZX_RESTORE_BOTH );
+
+            //
+            // Delay for 2us before enabling bucks.
+            //
+            am_hal_flash_delay( FLASH_CYCLES_US(2) );
+
+            //
+            // Turn on the bucks
+            //
+            am_hal_pwrctrl_bucks_enable();
+
+            //
+            // Get the actual timer number
+            //
+            ui32BuckTimer = g_ui32BuckTimer - 1;
+
+            //
+            // Initialize the complete flag
+            //
+            g_bBuckRestoreComplete = false;
+
+            //
+            // Initialize the input flags
+            //
+            g_ui32BuckInputs = 0;
+
+            //
+            // Delay for 5us to make sure we're receiving clean buck signals.
+            //
+            am_hal_flash_delay( FLASH_CYCLES_US(5) );
+
+            //
+            // Start timers (set the enable bit, clear the clear bit)
+            //
+            am_hal_ctimer_start(ui32BuckTimer, AM_HAL_CTIMER_BOTH);
+        }
+        else
+        {
+            //
+            // Since we're not doing anything, we're done, so set the done flag.
+            //
+            g_bBuckRestoreComplete = true;
         }
     }
     else
@@ -283,6 +570,275 @@ am_hal_sysctrl_aircr_reset(void)
                              AM_REG_SYSCTRL_AIRCR_SYSRESETREQ(1);
 }
 
+//*****************************************************************************
+//
+//! @brief Buck CTimer ISR initializer.
+//!
+//! @param ui32BuckTimerNumber - Timer number to be used for handling the buck.
+//!                              Must be 0-3.
+//!
+//! If called with an invalid timer (that is, not 0 - 3, or greater than
+//! BUCK_TIMER_MAX), then the workaround will not be enabled.
+//!
+//! Instead, the bucks will be initialized with a value that will avoid the
+//! issues described in the Errata (ERR019).  However, this will cause a
+//! less efficient energy usage condtion.
+//!
+//! @return 0.
+//
+//*****************************************************************************
+uint32_t
+am_hal_sysctrl_buck_ctimer_isr_init(uint32_t ui32BuckTimerNumber)
+{
+    uint32_t ui32RetVal = 0;
+
+    //
+    // Initialize the input flags
+    //
+    g_ui32BuckInputs = 0;
+
+    //
+    // Initialize operation complete flag
+    //
+    g_bBuckRestoreComplete = false;
+
+    //
+    // Initialize to assume there is no valid timer.
+    //
+    g_ui32BuckTimer = 0;
+
+    if ( ui32BuckTimerNumber > BUCK_TIMER_MAX )
+    {
+        if ( ( ui32BuckTimerNumber & 0xFFFF0000 ) ==
+             AM_HAL_SYSCTRL_BUCK_CTIMER_ZX_CONSTANT )
+        {
+            //
+            // The caller is asking for the hard option, which changes the
+            //  settings to the more noise-immune, if less efficient, settings.
+            // While we're at it, go ahead and save off the current settings.
+            //
+            if ( (ui32BuckTimerNumber & 0x0000FFFF) == 0 )
+            {
+                setBuckZX(COREZXVALUE, MEMZXVALUE,
+                          SETBUCKZX_USE_PROVIDED_SETTINGS   |
+                          SETBUCKZX_SAVE_CURR_SETTINGS      |
+                          SETBUCKZX_RESTORE_BOTH );
+            }
+            else
+            {
+                uint32_t ui32Core, ui32Mem;
+
+                //
+                // Use the setting provided in the parameter.
+                //
+                ui32Core = (((ui32BuckTimerNumber & 0x001F) >> 0) - 1) & 0xF;
+                ui32Mem  = (((ui32BuckTimerNumber & 0x1F00) >> 8) - 1) & 0xF;
+
+                setBuckZX(ui32Core, ui32Mem,
+                          SETBUCKZX_USE_PROVIDED_SETTINGS   |
+                          SETBUCKZX_SAVE_CURR_SETTINGS      |
+                          SETBUCKZX_RESTORE_BOTH );
+            }
+        }
+    }
+    else
+    {
+        //
+        // Save off the current trim settings (but don't change any settings).
+        //
+        setBuckZX(0, 0, SETBUCKZX_SAVE_CURR_SETTINGS | SETBUCKZX_RESTORE_BOTH);
+
+        //
+        // The timer number will be maintained as (n + 1).  Therefore, a value
+        // of 0 saved in the global is an invalid timer.  1=timer0, 2=timer1...
+        //
+        g_ui32BuckTimer = ui32BuckTimerNumber + 1;
+
+        //
+        // Register the timer ISRs
+        //
+        am_hal_ctimer_int_register( AM_HAL_CTIMER_INT_TIMERA0C0 <<
+                                    (ui32BuckTimerNumber * 2),
+                                     am_hal_sysctrl_buckA_ctimer_isr );
+
+        am_hal_ctimer_int_register( AM_HAL_CTIMER_INT_TIMERB0C0 <<
+                                    (ui32BuckTimerNumber * 2),
+                                     am_hal_sysctrl_buckB_ctimer_isr );
+
+        //
+        // Determine which timer input (A or B) is core buck and which is mem
+        // buck based on the timer number.
+        //  For CTIMER 0 & 1: Timer A is mem  buck, Timer B is core buck
+        //  For CTIMER 2 & 3: Timer A is core buck, Timer B is mem  buck
+        //
+        if ( (ui32BuckTimerNumber == 0)  ||  (ui32BuckTimerNumber == 1) )
+        {
+            //
+            // Indicate that TimerB is core buck.
+            //
+            g_ui32CoreBuck = COREBUCK_TIMERB;
+        }
+        else
+        {
+            //
+            // Indicate that TimerA is core buck
+            //
+            g_ui32CoreBuck = COREBUCK_TIMERA;
+        }
+
+        //
+        // Clear and configure the timers
+        //
+        am_hal_ctimer_clear(ui32BuckTimerNumber, AM_HAL_CTIMER_BOTH);
+
+        am_hal_ctimer_config(ui32BuckTimerNumber,
+                             (am_hal_ctimer_config_t*)&g_sBuckTimer);
+
+        //
+        // Enable the interrupts for timers A and B
+        //
+        am_hal_ctimer_int_enable( (AM_HAL_CTIMER_INT_TIMERA0C0 |
+                                   AM_HAL_CTIMER_INT_TIMERB0C0 ) <<
+                                   (ui32BuckTimerNumber * 2) );
+
+        //
+        // Enable the timer interrupt in the NVIC.
+        //
+        am_hal_interrupt_enable(AM_HAL_INTERRUPT_CTIMER);
+    }
+
+    return ui32RetVal;
+}
+
+//*****************************************************************************
+//
+// Get buck update complete status.
+//
+//*****************************************************************************
+bool
+am_hal_sysctrl_buck_update_complete(void)
+{
+    return g_bBuckRestoreComplete;
+}
+
+//*****************************************************************************
+//
+// Buck CTIMER ISR (for handling buck switching via TimerA).
+//
+// Note: This handler assumes that the interrupt is cleared in am_ctimer_isr().
+//
+//*****************************************************************************
+static void
+am_hal_sysctrl_buckA_ctimer_isr(void)
+{
+    //
+    // Begin critical section.
+    // Although a relatively long time, the following 2us delay is critically
+    // timed for re-trimming the buck and thus cannot be extended.  Therefore,
+    // we must keep it inside the critical section.
+    //
+    AM_CRITICAL_BEGIN_ASM
+
+    //
+    // Delay for 2us.
+    //
+    am_hal_flash_delay( FLASH_CYCLES_US(2) );
+
+    //
+    // Determine which buck (core or mem) needs to be updated.
+    //
+    if ( g_ui32CoreBuck == COREBUCK_TIMERA )
+    {
+        //
+        // Timer A buck signal is the CORE buck.
+        // Restore the core buck.
+        //
+        setBuckZX(0, 0, SETBUCKZX_RESTORE_CORE_ONLY |
+                        SETBUCKZX_USE_SAVED_SETTINGS );
+    }
+    else
+    {
+        //
+        // Timer A buck signal is the MEM buck.
+        // Restore the mem buck.
+        //
+        setBuckZX(0, 0, SETBUCKZX_RESTORE_MEM_ONLY  |
+                        SETBUCKZX_USE_SAVED_SETTINGS );
+    }
+
+    g_ui32BuckInputs |= 0x1;
+
+    if ( g_ui32BuckInputs == 0x3 )
+    {
+        g_bBuckRestoreComplete = true;
+        g_ui32BuckInputs = 0;
+    }
+
+    //
+    // End critical section.
+    //
+    AM_CRITICAL_END_ASM
+}
+
+//*****************************************************************************
+//
+// Buck CTIMER ISR (for handling buck switching via TimerB).
+//
+// Note: This handler assumes that the interrupt is cleared in am_ctimer_isr().
+//
+//*****************************************************************************
+static void
+am_hal_sysctrl_buckB_ctimer_isr(void)
+{
+    //
+    // Begin critical section.
+    // Although a relatively long time, the following 2us delay is critically
+    // timed for re-trimming the buck and thus cannot be extended.  Therefore,
+    // we must keep it inside the critical section.
+    //
+    AM_CRITICAL_BEGIN_ASM
+
+    //
+    // Delay for 2us.
+    //
+    am_hal_flash_delay( FLASH_CYCLES_US(2) );
+
+    //
+    // Determine which buck (core or mem) needs to be updated.
+    //
+    if ( g_ui32CoreBuck == COREBUCK_TIMERB )
+    {
+        //
+        // Timer B buck signal is the CORE buck.
+        // Restore the core buck.
+        //
+        setBuckZX(0, 0, SETBUCKZX_RESTORE_CORE_ONLY |
+                        SETBUCKZX_USE_SAVED_SETTINGS );
+    }
+    else
+    {
+        //
+        // Timer B buck signal is the MEM buck.
+        // Restore the mem buck.
+        //
+        setBuckZX(0, 0, SETBUCKZX_RESTORE_MEM_ONLY  |
+                        SETBUCKZX_USE_SAVED_SETTINGS );
+    }
+
+    g_ui32BuckInputs |= 0x2;
+
+    if ( g_ui32BuckInputs == 0x3 )
+    {
+        g_bBuckRestoreComplete = true;
+        g_ui32BuckInputs = 0;
+    }
+
+    //
+    // End critical section.
+    //
+    AM_CRITICAL_END_ASM
+}
+
 //*****************************************************************************
 //
 // End Doxygen group.
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.h
index 078432f44..d4b47890a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_sysctrl.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_sysctrl.h
+//! am_hal_sysctrl.h
+//! @file
 //!
 //! @brief Functions for interfacing with the M4F system control registers
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup sysctrl System Control (SYSCTRL)
-//! @ingroup hal
+//! @addtogroup sysctrl2 System Control (SYSCTRL)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,16 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_SYSCTRL_H
 #define AM_HAL_SYSCTRL_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
 
 //*****************************************************************************
 //
@@ -61,17 +57,53 @@ extern "C"
 #define AM_HAL_SYSCTRL_SLEEP_DEEP       true
 #define AM_HAL_SYSCTRL_SLEEP_NORMAL     false
 
+//*****************************************************************************
+//
+// Parameters for am_hal_sysctrl_buck_ctimer_isr_init()
+//
+//*****************************************************************************
+//
+// Define the maximum valid timer number
+//
+#define BUCK_TIMER_MAX                  (AM_HAL_CTIMER_TIMERS_NUM - 1)
+
+//
+// Define the valid timer numbers
+//
+#define AM_HAL_SYSCTRL_BUCK_CTIMER_TIMER0   0
+#define AM_HAL_SYSCTRL_BUCK_CTIMER_TIMER1   1
+#define AM_HAL_SYSCTRL_BUCK_CTIMER_TIMER2   2
+#define AM_HAL_SYSCTRL_BUCK_CTIMER_TIMER3   3
+
+//
+// The following is an invalid timer number. If used, it is the caller telling
+// the HAL to use the "Hard Option", which applies a constant value to the zero
+// cross. The applied value is more noise immune, if less energy efficent.
+//
+#define AM_HAL_SYSCTRL_BUCK_CTIMER_ZX_CONSTANT      0x01000000  // No timer, apply a constant value
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 //*****************************************************************************
 //
 // External function definitions
 //
 //*****************************************************************************
-extern void am_hal_sysctrl_sleep(bool bSleepDeep);
-extern void am_hal_sysctrl_fpu_enable(void);
-extern void am_hal_sysctrl_fpu_disable(void);
-extern void am_hal_sysctrl_fpu_stacking_enable(bool bLazy);
-extern void am_hal_sysctrl_fpu_stacking_disable(void);
-extern void am_hal_sysctrl_aircr_reset(void);
+extern void     am_hal_sysctrl_sleep(bool bSleepDeep);
+extern void     am_hal_sysctrl_fpu_enable(void);
+extern void     am_hal_sysctrl_fpu_disable(void);
+extern void     am_hal_sysctrl_fpu_stacking_enable(bool bLazy);
+extern void     am_hal_sysctrl_fpu_stacking_disable(void);
+extern void     am_hal_sysctrl_aircr_reset(void);
+
+//
+// Apollo2 zero-cross buck/ctimer related functions
+//
+extern uint32_t am_hal_sysctrl_buck_ctimer_isr_init(uint32_t ui32BuckTimerNumber);
+extern bool     am_hal_sysctrl_buck_update_complete(void);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.c
index b56703255..1608a28b4 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_systick.c
+//  am_hal_systick.c
+//! @file
 //!
 //! @brief Functions for interfacing with the SYSTICK
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup systick System Timer (SYSTICK)
-//! @ingroup hal
+//! @addtogroup systick2 System Timer (SYSTICK)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.h
index 668f54b11..cb55559f3 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_systick.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_systick.h
+//  am_hal_systick.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the SYSTICK.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup systick System Timer (SYSTICK)
-//! @ingroup hal
+//! @addtogroup systick2 System Timer (SYSTICK)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_SYSTICK_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.c
index 8f6a00505..c0a443079 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.c
@@ -1,14 +1,14 @@
 //*****************************************************************************
 //
-//! @file am_hal_tpiu.c
+//  am_hal_tpiu.c
+//! @file
 //!
 //! @brief Support functions for the ARM TPIU module
 //!
 //! Provides support functions for configuring the ARM TPIU module
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup tpiu Trace Port Interface Unit (TPIU)
-//! @ingroup hal
+//! @addtogroup tpiu2 Trace Port Interface Unit (TPIU)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -44,7 +44,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.h
index c72db0bb4..3a3b68303 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_tpiu.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_tpiu.h
+//  am_hal_tpiu.h
+//! @file
 //!
 //! @brief Definitions and structures for working with the TPIU.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup tpiu Trace Port Interface Unit (TPIU)
-//! @ingroup hal
+//! @addtogroup tpiu2 Trace Port Interface Unit (TPIU)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_TPIU_H
@@ -50,11 +50,6 @@
 
 #include <stdint.h>
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 // TPIU bit rate defines.
@@ -165,6 +160,11 @@ typedef struct
 }
 am_hal_tpiu_config_t;
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.c
index 542a9ab10..f308d193d 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.c
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_ttp.c
+//  am_hal_ttp.c
+//! @file
 //!
 //! @brief Functions for handling the "two time program" interface.
 //!
@@ -38,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include "am_mcu_apollo.h"
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.h
index 1d6924d0c..98b2acd39 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_ttp.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_hal_ttp.h
+//  am_hal_ttp.h
+//! @file
 //!
 //! @brief Functions for handling the "two time program" interface.
 //!
@@ -38,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_TTP_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.c
index 684fd2a3a..abba8101a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_uart.c
+//  am_hal_uart.c
+//! @file
 //!
 //! @brief Functions for interfacing with the UART.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup uart UART
-//! @ingroup hal
+//! @addtogroup uart2 UART
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.h
index 23f6d99f5..9e74166a7 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_uart.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_uart.h
+//  am_hal_uart.h
+//! @file
 //!
 //! @brief Functions for accessing and configuring the UART.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup uart UART
-//! @ingroup hal
+//! @addtogroup uart2 UART
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_UART_H
 #define AM_HAL_UART_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 //! @name UART Interrupts
@@ -270,6 +265,11 @@ am_hal_uart_pwrsave_t;
 //*****************************************************************************
 extern am_hal_uart_pwrsave_t am_hal_uart_pwrsave[AM_REG_UART_NUM_MODULES];
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.c
index 5f5906c86..45b3df8e8 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_vcomp.c
+//  am_hal_vcomp.c
+//! @file
 //!
 //! @brief Functions for operating the on-chip Voltage Comparator
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup vcomp Voltage Comparator (VCOMP)
-//! @ingroup hal
+//! @addtogroup vcomp2 Voltage Comparator (VCOMP)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.h
index ca3d2cb35..67302b30e 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_vcomp.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_vcomp.h
+//  am_hal_vcomp.h
+//! @file
 //!
 //! @brief Functions for operating the on-chip Voltage Comparator
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup vcomp Voltage Comparator (VCOMP)
-//! @ingroup hal
+//! @addtogroup vcomp2 Voltage Comparator (VCOMP)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,17 +42,12 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_VCOMP_H
 #define AM_HAL_VCOMP_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
 //*****************************************************************************
 //
 //! @name Positive Input Selection
@@ -145,6 +140,11 @@ typedef struct
 }
 am_hal_vcomp_config_t;
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 //*****************************************************************************
 //
 // External function definitions
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.c
index 2937dc89f..2aa9d324f 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.c
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_wdt.c
+//  am_hal_wdt.c
+//! @file
 //!
 //! @brief Hardware abstraction layer for the Watchdog Timer module.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup wdt Watchdog Timer (WDT)
-//! @ingroup hal
+//! @addtogroup wdt2 Watchdog Timer (WDT)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.h
index 6e6d26467..856439a24 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/am_hal_wdt.h
@@ -1,12 +1,12 @@
 //*****************************************************************************
 //
-//! @file am_hal_wdt.h
+//  am_hal_wdt.h
+//! @file
 //!
 //! @brief Hardware abstraction layer for the Watchdog Timer module.
 //!
-//! @addtogroup hal Hardware Abstraction Layer (HAL)
-//! @addtogroup wdt Watchdog Timer (WDT)
-//! @ingroup hal
+//! @addtogroup wdt2 Watchdog Timer (WDT)
+//! @ingroup apollo2hal
 //! @{
 //
 //*****************************************************************************
@@ -42,7 +42,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_HAL_WDT_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.cproject b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.cproject
index 6686302c1..49f6445ec 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.cproject
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.cproject
@@ -1,122 +1,122 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
-	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<cconfiguration id="com.atollic.truestudio.lib.debug.7796040824.4860393155">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.atollic.truestudio.lib.debug.7796040824.4860393155" moduleId="org.eclipse.cdt.core.settings" name="bin">
-				<macros>
-					<stringMacro name="AMBIQ_ROOT" type="VALUE_TEXT" value="${ProjDirPath}/../../../.."/>
-					<stringMacro name="AM_CFLAGS" type="VALUE_TEXT" value="-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops "/>
-				</macros>
-				<externalSettings>
-					<externalSetting>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/am_hal_gcc"/>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/am_hal_gcc/bin"/>
-						<entry flags="RESOLVED" kind="libraryFile" name="am_hal_gcc" srcPrefixMapping="" srcRootPath=""/>
-					</externalSetting>
-				</externalSettings>
-				<extensions>
-					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-				</extensions>
-			</storageModule>
-			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -f" description="AmbiqSuite bin directory for objects, libs, and executables." id="com.atollic.truestudio.lib.debug.7796040824.4860393155" name="bin" parent="com.atollic.truestudio.lib.debug">
-					<folderInfo id="com.atollic.truestudio.lib.debug.7796040824.4860393155." name="/" resourcePath="">
-						<toolChain id="com.atollic.truestudio.lib.debug.toolchain.394601402" name="Atollic ARM Tools" superClass="com.atollic.truestudio.lib.debug.toolchain">
-							<option id="com.atollic.truestudio.toolchain_options.mcu.1354743296" name="Microcontroller" superClass="com.atollic.truestudio.toolchain_options.mcu" useByScannerDiscovery="false" value="Cortex-M4" valueType="string"/>
-							<option id="com.atollic.truestudio.toolchain_options.vendor.2144693964" name="Vendor name" superClass="com.atollic.truestudio.toolchain_options.vendor" useByScannerDiscovery="false" value="ARM" valueType="string"/>
-							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.atollic.truestudio.lib.debug.toolchain.platform.533176131" isAbstract="false" name="Debug platform" superClass="com.atollic.truestudio.lib.debug.toolchain.platform"/>
-							<builder buildPath="${workspace_loc:/am_hal}/Debug" customBuilderProperties="toolChainpathString=/opt/Atollic_TrueSTUDIO_for_ARM_7.1.2/ARMTools/bin|toolChainpathType=1|com.atollic.truestudio.common_options.target.vendor=ARM|com.atollic.truestudio.common_options.target.mcu=Cortex-M4|" id="com.atollic.truestudio.mbs.builder1.842338050" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.atollic.truestudio.mbs.builder1"/>
-							<tool commandLinePattern="${COMMAND} ${FLAGS} ${AM_CFLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="com.atollic.truestudio.lib.debug.toolchain.as.1948149624" name="Assembler" superClass="com.atollic.truestudio.lib.debug.toolchain.as">
-								<option id="com.atollic.truestudio.common_options.target.mcpu.593896695" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" useByScannerDiscovery="false" value="Cortex-M4" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.endianess.1066485747" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess" useByScannerDiscovery="false"/>
-								<option id="com.atollic.truestudio.common_options.target.instr_set.345702985" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.fpu.2000439272" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu" useByScannerDiscovery="false"/>
-								<option id="com.atollic.truestudio.common_options.target.fpucore.1646013442" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.interwork.497377956" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork" useByScannerDiscovery="false"/>
-								<inputType id="com.atollic.truestudio.as.input.867900926" name="Input" superClass="com.atollic.truestudio.as.input"/>
-							</tool>
-							<tool commandLinePattern="${COMMAND} ${INPUTS} ${FLAGS} ${AM_CFLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT}" id="com.atollic.truestudio.lib.debug.toolchain.gcc.334071979" name="C Compiler" superClass="com.atollic.truestudio.lib.debug.toolchain.gcc">
-								<option id="com.atollic.truestudio.common_options.target.mcpu.838046259" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" useByScannerDiscovery="false" value="Cortex-M4" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.endianess.1818215375" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess" useByScannerDiscovery="false"/>
-								<option id="com.atollic.truestudio.common_options.target.instr_set.1777197316" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.fpu.170192335" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu" useByScannerDiscovery="false"/>
-								<option id="com.atollic.truestudio.common_options.target.fpucore.1457365135" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.gcc.optimization.prep_garbage.1688320403" name="Prepare dead code removal " superClass="com.atollic.truestudio.gcc.optimization.prep_garbage" useByScannerDiscovery="false" value="true" valueType="boolean"/>
-								<option id="com.atollic.truestudio.gcc.optimization.prep_data.622389316" name="Prepare dead data removal" superClass="com.atollic.truestudio.gcc.optimization.prep_data" useByScannerDiscovery="false" value="true" valueType="boolean"/>
-								<option id="com.atollic.truestudio.common_options.target.interwork.1678943818" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork" useByScannerDiscovery="false"/>
-								<option id="com.atollic.truestudio.gcc.cstandard.827476387" name="C standard" superClass="com.atollic.truestudio.gcc.cstandard" useByScannerDiscovery="false" value="com.atollic.truestudio.gcc.cstandard.c99" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.gcc.misc.stackusage.4203574732" name="Generate per function stack usage information" superClass="com.atollic.truestudio.gcc.misc.stackusage" useByScannerDiscovery="false" value="false" valueType="boolean"/>
-								<option id="com.atollic.truestudio.gcc.symbols.defined.288842290" name="Defined symbols" superClass="com.atollic.truestudio.gcc.symbols.defined" useByScannerDiscovery="false" valueType="definedSymbols">
-									<listOptionValue builtIn="false" value="AM_DEBUG_ASSERT"/>
-									<listOptionValue builtIn="false" value="AM_ASSERT_INVALID_THRESHOLD=0"/>
-									<listOptionValue builtIn="false" value="AM_PART_APOLLO2"/>
-								</option>
-								<option id="com.atollic.truestudio.gcc.directories.select.2143287876" name="Include path" superClass="com.atollic.truestudio.gcc.directories.select" useByScannerDiscovery="false" valueType="includePath">
-									<listOptionValue builtIn="false" value="&quot;${AMBIQ_ROOT}/mcu/apollo2&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;${AMBIQ_ROOT}/utils&quot;"/>
-								</option>
-								<option id="com.atollic.truestudio.lib.debug.toolchain.gcc.optimization.level.835363915" name="Optimization Level" superClass="com.atollic.truestudio.lib.debug.toolchain.gcc.optimization.level" useByScannerDiscovery="false" value="com.atollic.truestudio.gcc.optimization.level.03" valueType="enumerated"/>
-								<inputType id="com.atollic.truestudio.gcc.input.1533629434" superClass="com.atollic.truestudio.gcc.input"/>
-							</tool>
-							<tool id="com.atollic.truestudio.ld.base.2090792853" name="C Linker" superClass="com.atollic.truestudio.ld.base">
-								<option id="com.atollic.truestudio.common_options.target.mcpu.534981459" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" value="Cortex-M4" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.endianess.530803548" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess"/>
-								<option id="com.atollic.truestudio.common_options.target.instr_set.50355545" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.fpucore.346486819" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.fpu.761861802" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu"/>
-								<option id="com.atollic.truestudio.common_options.target.interwork.1876189673" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork"/>
-							</tool>
-							<tool id="com.atollic.truestudio.lib.debug.toolchain.gpp.1655758199" name="C++ Compiler" superClass="com.atollic.truestudio.lib.debug.toolchain.gpp">
-								<option id="com.atollic.truestudio.common_options.target.mcpu.124401054" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" value="Cortex-M4" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.endianess.518599455" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess"/>
-								<option id="com.atollic.truestudio.common_options.target.instr_set.737193089" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.fpu.1192067870" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu"/>
-								<option id="com.atollic.truestudio.common_options.target.fpucore.1036264945" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.gpp.optimization.prep_garbage.2250624" name="Prepare dead code removal" superClass="com.atollic.truestudio.gpp.optimization.prep_garbage" value="true" valueType="boolean"/>
-								<option id="com.atollic.truestudio.gpp.optimization.prep_data.2146225781" name="Prepare dead data removal" superClass="com.atollic.truestudio.gpp.optimization.prep_data" value="true" valueType="boolean"/>
-								<option id="com.atollic.truestudio.gpp.optimization.fno_rtti.2025223247" name="Disable RTTI" superClass="com.atollic.truestudio.gpp.optimization.fno_rtti"/>
-								<option id="com.atollic.truestudio.gpp.optimization.fno_exceptions.2060169458" name="Disable exception handling" superClass="com.atollic.truestudio.gpp.optimization.fno_exceptions"/>
-								<option id="com.atollic.truestudio.common_options.target.interwork.1742976288" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork"/>
-							</tool>
-							<tool id="com.atollic.truestudio.ldcc.base.1595434793" name="C++ Linker" superClass="com.atollic.truestudio.ldcc.base">
-								<option id="com.atollic.truestudio.common_options.target.mcpu.1773797967" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" value="Cortex-M4" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.endianess.2110981505" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess"/>
-								<option id="com.atollic.truestudio.common_options.target.instr_set.1652491256" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.fpucore.661745976" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
-								<option id="com.atollic.truestudio.common_options.target.fpu.854349055" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu"/>
-								<option id="com.atollic.truestudio.common_options.target.interwork.945089238" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork"/>
-							</tool>
-							<tool id="com.atollic.truestudio.lib.debug.toolchain.ar.947682620" name="Archiver" superClass="com.atollic.truestudio.lib.debug.toolchain.ar">
-								<option id="com.atollic.truestudio.ar.general.flags.538181425" name="Archiver flags" superClass="com.atollic.truestudio.ar.general.flags" useByScannerDiscovery="false" value="-rsvc" valueType="string"/>
-							</tool>
-							<tool id="com.atollic.truestudio.secoutput.base.853996171" name="Other" superClass="com.atollic.truestudio.secoutput.base"/>
-						</toolChain>
-					</folderInfo>
-					<sourceEntries>
-						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
-					</sourceEntries>
-				</configuration>
-			</storageModule>
-			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-		</cconfiguration>
-	</storageModule>
-	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-		<project id="am_hal.com.atollic.truestudio.lib.1804033404" name="Static Library" projectType="com.atollic.truestudio.lib"/>
-	</storageModule>
-	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
-	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
-	<storageModule moduleId="scannerConfiguration">
-		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-		<scannerConfigBuildInfo instanceId="com.atollic.truestudio.lib.debug.7796040824.4860393155;com.atollic.truestudio.lib.debug.7796040824.4860393155.;com.atollic.truestudio.lib.debug.toolchain.gcc.334071979;com.atollic.truestudio.gcc.input.1533629434">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.atollic.truestudio.mbs.ARMToolsPerProjectProfileC"/>
-		</scannerConfigBuildInfo>
-	</storageModule>
-	<storageModule moduleId="refreshScope" versionNumber="2">
-		<configuration configurationName="bin">
-			<resource resourceType="PROJECT" workspacePath="/am_hal_gcc"/>
-		</configuration>
-	</storageModule>
-</cproject>
-
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+	<storageModule moduleId="org.eclipse.cdt.core.settings">
+		<cconfiguration id="com.atollic.truestudio.lib.debug.6783851084.5418262406">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.atollic.truestudio.lib.debug.6783851084.5418262406" moduleId="org.eclipse.cdt.core.settings" name="bin">
+				<macros>
+					<stringMacro name="AMBIQ_ROOT" type="VALUE_TEXT" value="${ProjDirPath}/../../../.."/>
+					<stringMacro name="AM_CFLAGS" type="VALUE_TEXT" value="-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops "/>
+				</macros>
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/am_hal_gcc"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/am_hal_gcc/bin"/>
+						<entry flags="RESOLVED" kind="libraryFile" name="am_hal_gcc" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -f" description="AmbiqSuite bin directory for objects, libs, and executables." id="com.atollic.truestudio.lib.debug.6783851084.5418262406" name="bin" parent="com.atollic.truestudio.lib.debug">
+					<folderInfo id="com.atollic.truestudio.lib.debug.6783851084.5418262406." name="/" resourcePath="">
+						<toolChain id="com.atollic.truestudio.lib.debug.toolchain.394601402" name="Atollic ARM Tools" superClass="com.atollic.truestudio.lib.debug.toolchain">
+							<option id="com.atollic.truestudio.toolchain_options.mcu.1354743296" name="Microcontroller" superClass="com.atollic.truestudio.toolchain_options.mcu" useByScannerDiscovery="false" value="Cortex-M4" valueType="string"/>
+							<option id="com.atollic.truestudio.toolchain_options.vendor.2144693964" name="Vendor name" superClass="com.atollic.truestudio.toolchain_options.vendor" useByScannerDiscovery="false" value="ARM" valueType="string"/>
+							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.atollic.truestudio.lib.debug.toolchain.platform.533176131" isAbstract="false" name="Debug platform" superClass="com.atollic.truestudio.lib.debug.toolchain.platform"/>
+							<builder buildPath="${workspace_loc:/am_hal}/Debug" customBuilderProperties="toolChainpathString=/opt/Atollic_TrueSTUDIO_for_ARM_7.1.2/ARMTools/bin|toolChainpathType=1|com.atollic.truestudio.common_options.target.vendor=ARM|com.atollic.truestudio.common_options.target.mcu=Cortex-M4|" id="com.atollic.truestudio.mbs.builder1.842338050" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.atollic.truestudio.mbs.builder1"/>
+							<tool commandLinePattern="${COMMAND} ${FLAGS} ${AM_CFLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="com.atollic.truestudio.lib.debug.toolchain.as.1948149624" name="Assembler" superClass="com.atollic.truestudio.lib.debug.toolchain.as">
+								<option id="com.atollic.truestudio.common_options.target.mcpu.593896695" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" useByScannerDiscovery="false" value="Cortex-M4" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.endianess.1066485747" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess" useByScannerDiscovery="false"/>
+								<option id="com.atollic.truestudio.common_options.target.instr_set.345702985" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.fpu.2000439272" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu" useByScannerDiscovery="false"/>
+								<option id="com.atollic.truestudio.common_options.target.fpucore.1646013442" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.interwork.497377956" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork" useByScannerDiscovery="false"/>
+								<inputType id="com.atollic.truestudio.as.input.867900926" name="Input" superClass="com.atollic.truestudio.as.input"/>
+							</tool>
+							<tool commandLinePattern="${COMMAND} ${INPUTS} ${FLAGS} ${AM_CFLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT}" id="com.atollic.truestudio.lib.debug.toolchain.gcc.334071979" name="C Compiler" superClass="com.atollic.truestudio.lib.debug.toolchain.gcc">
+								<option id="com.atollic.truestudio.common_options.target.mcpu.838046259" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" useByScannerDiscovery="false" value="Cortex-M4" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.endianess.1818215375" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess" useByScannerDiscovery="false"/>
+								<option id="com.atollic.truestudio.common_options.target.instr_set.1777197316" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.fpu.170192335" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu" useByScannerDiscovery="false"/>
+								<option id="com.atollic.truestudio.common_options.target.fpucore.1457365135" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" useByScannerDiscovery="false" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.gcc.optimization.prep_garbage.1688320403" name="Prepare dead code removal " superClass="com.atollic.truestudio.gcc.optimization.prep_garbage" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+								<option id="com.atollic.truestudio.gcc.optimization.prep_data.622389316" name="Prepare dead data removal" superClass="com.atollic.truestudio.gcc.optimization.prep_data" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+								<option id="com.atollic.truestudio.common_options.target.interwork.1678943818" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork" useByScannerDiscovery="false"/>
+								<option id="com.atollic.truestudio.gcc.cstandard.827476387" name="C standard" superClass="com.atollic.truestudio.gcc.cstandard" useByScannerDiscovery="false" value="com.atollic.truestudio.gcc.cstandard.c99" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.gcc.misc.stackusage.8262666576" name="Generate per function stack usage information" superClass="com.atollic.truestudio.gcc.misc.stackusage" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+								<option id="com.atollic.truestudio.gcc.symbols.defined.288842290" name="Defined symbols" superClass="com.atollic.truestudio.gcc.symbols.defined" useByScannerDiscovery="false" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="AM_DEBUG_ASSERT"/>
+									<listOptionValue builtIn="false" value="AM_ASSERT_INVALID_THRESHOLD=0"/>
+									<listOptionValue builtIn="false" value="AM_PART_APOLLO2"/>
+								</option>
+								<option id="com.atollic.truestudio.gcc.directories.select.2143287876" name="Include path" superClass="com.atollic.truestudio.gcc.directories.select" useByScannerDiscovery="false" valueType="includePath">
+									<listOptionValue builtIn="false" value="&quot;${AMBIQ_ROOT}/mcu/apollo2&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${AMBIQ_ROOT}/utils&quot;"/>
+								</option>
+								<option id="com.atollic.truestudio.lib.debug.toolchain.gcc.optimization.level.835363915" name="Optimization Level" superClass="com.atollic.truestudio.lib.debug.toolchain.gcc.optimization.level" useByScannerDiscovery="false" value="com.atollic.truestudio.gcc.optimization.level.03" valueType="enumerated"/>
+								<inputType id="com.atollic.truestudio.gcc.input.1533629434" superClass="com.atollic.truestudio.gcc.input"/>
+							</tool>
+							<tool id="com.atollic.truestudio.ld.base.2090792853" name="C Linker" superClass="com.atollic.truestudio.ld.base">
+								<option id="com.atollic.truestudio.common_options.target.mcpu.534981459" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" value="Cortex-M4" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.endianess.530803548" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess"/>
+								<option id="com.atollic.truestudio.common_options.target.instr_set.50355545" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.fpucore.346486819" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.fpu.761861802" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu"/>
+								<option id="com.atollic.truestudio.common_options.target.interwork.1876189673" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork"/>
+							</tool>
+							<tool id="com.atollic.truestudio.lib.debug.toolchain.gpp.1655758199" name="C++ Compiler" superClass="com.atollic.truestudio.lib.debug.toolchain.gpp">
+								<option id="com.atollic.truestudio.common_options.target.mcpu.124401054" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" value="Cortex-M4" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.endianess.518599455" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess"/>
+								<option id="com.atollic.truestudio.common_options.target.instr_set.737193089" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.fpu.1192067870" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu"/>
+								<option id="com.atollic.truestudio.common_options.target.fpucore.1036264945" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.gpp.optimization.prep_garbage.2250624" name="Prepare dead code removal" superClass="com.atollic.truestudio.gpp.optimization.prep_garbage" value="true" valueType="boolean"/>
+								<option id="com.atollic.truestudio.gpp.optimization.prep_data.2146225781" name="Prepare dead data removal" superClass="com.atollic.truestudio.gpp.optimization.prep_data" value="true" valueType="boolean"/>
+								<option id="com.atollic.truestudio.gpp.optimization.fno_rtti.2025223247" name="Disable RTTI" superClass="com.atollic.truestudio.gpp.optimization.fno_rtti"/>
+								<option id="com.atollic.truestudio.gpp.optimization.fno_exceptions.2060169458" name="Disable exception handling" superClass="com.atollic.truestudio.gpp.optimization.fno_exceptions"/>
+								<option id="com.atollic.truestudio.common_options.target.interwork.1742976288" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork"/>
+							</tool>
+							<tool id="com.atollic.truestudio.ldcc.base.1595434793" name="C++ Linker" superClass="com.atollic.truestudio.ldcc.base">
+								<option id="com.atollic.truestudio.common_options.target.mcpu.1773797967" name="Microcontroller" superClass="com.atollic.truestudio.common_options.target.mcpu" value="Cortex-M4" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.endianess.2110981505" name="Endianess" superClass="com.atollic.truestudio.common_options.target.endianess"/>
+								<option id="com.atollic.truestudio.common_options.target.instr_set.1652491256" name="Instruction set" superClass="com.atollic.truestudio.common_options.target.instr_set" value="com.atollic.truestudio.common_options.target.instr_set.thumb2" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.fpucore.661745976" name="FPU" superClass="com.atollic.truestudio.common_options.target.fpucore" value="com.atollic.truestudio.common_options.target.fpucore.fpv4-sp-d16" valueType="enumerated"/>
+								<option id="com.atollic.truestudio.common_options.target.fpu.854349055" name="Floating point" superClass="com.atollic.truestudio.common_options.target.fpu"/>
+								<option id="com.atollic.truestudio.common_options.target.interwork.945089238" name="Mix ARM/Thumb" superClass="com.atollic.truestudio.common_options.target.interwork"/>
+							</tool>
+							<tool id="com.atollic.truestudio.lib.debug.toolchain.ar.947682620" name="Archiver" superClass="com.atollic.truestudio.lib.debug.toolchain.ar">
+								<option id="com.atollic.truestudio.ar.general.flags.538181425" name="Archiver flags" superClass="com.atollic.truestudio.ar.general.flags" useByScannerDiscovery="false" value="-rsvc" valueType="string"/>
+							</tool>
+							<tool id="com.atollic.truestudio.secoutput.base.853996171" name="Other" superClass="com.atollic.truestudio.secoutput.base"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+	</storageModule>
+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+		<project id="am_hal.com.atollic.truestudio.lib.1804033404" name="Static Library" projectType="com.atollic.truestudio.lib"/>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+	<storageModule moduleId="scannerConfiguration">
+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		<scannerConfigBuildInfo instanceId="com.atollic.truestudio.lib.debug.6783851084.5418262406;com.atollic.truestudio.lib.debug.6783851084.5418262406.;com.atollic.truestudio.lib.debug.toolchain.gcc.334071979;com.atollic.truestudio.gcc.input.1533629434">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.atollic.truestudio.mbs.ARMToolsPerProjectProfileC"/>
+		</scannerConfigBuildInfo>
+	</storageModule>
+	<storageModule moduleId="refreshScope" versionNumber="2">
+		<configuration configurationName="bin">
+			<resource resourceType="PROJECT" workspacePath="/am_hal_gcc"/>
+		</configuration>
+	</storageModule>
+</cproject>
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.project b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.project
index 74dd90211..6ac778254 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.project
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.project
@@ -1,184 +1,184 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>am_hal_gcc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
-	</natures>
-	<linkedResources>
-		<link>
-			<name>source_files</name>
-			<type>2</type>
-			<locationURI>virtual:/virtual</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_adc.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_adc.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_cachectrl.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_cachectrl.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_clkgen.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_clkgen.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_ctimer.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_ctimer.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_debug.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_debug.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_flash.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_flash.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_global.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_global.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_gpio.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_gpio.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_i2c_bit_bang.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_i2c_bit_bang.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_interrupt.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_interrupt.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_iom.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_iom.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_ios.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_ios.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_itm.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_itm.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_mcuctrl.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_mcuctrl.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_otp.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_otp.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_pdm.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_pdm.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_pwrctrl.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_pwrctrl.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_queue.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_queue.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_reset.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_reset.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_rtc.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_rtc.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_stimer.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_stimer.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_sysctrl.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_sysctrl.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_systick.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_systick.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_tpiu.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_tpiu.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_ttp.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_ttp.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_uart.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_uart.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_vcomp.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_vcomp.c</locationURI>
-		</link>
-		<link>
-			<name>source_files/am_hal_wdt.c</name>
-			<type>1</type>
-			<locationURI>EXAMPLE_LOC/am_hal_wdt.c</locationURI>
-		</link>
-	</linkedResources>
-	<variableList>
-		<variable>
-			<name>AMBIQ_ROOT</name>
-			<value>$%7BPARENT-4-PROJECT_LOC%7D</value>
-		</variable>
-		<variable>
-			<name>EXAMPLE_LOC</name>
-			<value>$%7BPARENT-1-PROJECT_LOC%7D</value>
-		</variable>
-	</variableList>
-</projectDescription>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>am_hal_gcc</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<triggers>full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>source_files</name>
+			<type>2</type>
+			<locationURI>virtual:/virtual</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_adc.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_adc.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_cachectrl.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_cachectrl.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_clkgen.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_clkgen.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_ctimer.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_ctimer.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_debug.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_debug.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_flash.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_flash.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_global.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_global.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_gpio.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_gpio.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_i2c_bit_bang.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_i2c_bit_bang.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_interrupt.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_interrupt.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_iom.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_iom.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_ios.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_ios.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_itm.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_itm.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_mcuctrl.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_mcuctrl.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_otp.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_otp.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_pdm.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_pdm.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_pwrctrl.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_pwrctrl.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_queue.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_queue.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_reset.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_reset.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_rtc.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_rtc.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_stimer.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_stimer.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_sysctrl.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_sysctrl.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_systick.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_systick.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_tpiu.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_tpiu.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_ttp.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_ttp.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_uart.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_uart.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_vcomp.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_vcomp.c</locationURI>
+		</link>
+		<link>
+			<name>source_files/am_hal_wdt.c</name>
+			<type>1</type>
+			<locationURI>EXAMPLE_LOC/am_hal_wdt.c</locationURI>
+		</link>
+	</linkedResources>
+	<variableList>
+		<variable>
+			<name>AMBIQ_ROOT</name>
+			<value>$%7BPARENT-4-PROJECT_LOC%7D</value>
+		</variable>
+		<variable>
+			<name>EXAMPLE_LOC</name>
+			<value>$%7BPARENT-1-PROJECT_LOC%7D</value>
+		</variable>
+	</variableList>
+</projectDescription>
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.debug.hardware_device.prefs b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.debug.hardware_device.prefs
index 8db2d4e99..de647feab 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.debug.hardware_device.prefs
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.debug.hardware_device.prefs
@@ -1,11 +1,11 @@
-BOARD=None
-CODE_LOCATION=FLASH
-ENDIAN=Little-endian
-MCU=Cortex-M4
-MCU_VENDOR=ARM
-MODEL=Lite
-PROJECT_FORMAT_VERSION=2
-TARGET=ARM\u00AE
-VERSION=7.1.0
-eclipse.preferences.version=1
-
+BOARD=None
+CODE_LOCATION=FLASH
+ENDIAN=Little-endian
+MCU=Cortex-M4
+MCU_VENDOR=ARM
+MODEL=Lite
+PROJECT_FORMAT_VERSION=2
+TARGET=ARM\u00AE
+VERSION=7.1.0
+eclipse.preferences.version=1
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.tsp.prefs b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.tsp.prefs
index 4106cb164..f8521145d 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.tsp.prefs
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/com.atollic.truestudio.tsp.prefs
@@ -1,4 +1,4 @@
-eclipse.preferences.version=1
-svd_custom_file_path=
-svd_file_path=${AMBIQ_ROOT}/pack/SVD/apollo2.svd
-
+eclipse.preferences.version=1
+svd_custom_file_path=
+svd_file_path=${AMBIQ_ROOT}/pack/SVD/apollo2.svd
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/language.settings.xml b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/language.settings.xml
index a3a5b0224..6fa803f28 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/language.settings.xml
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/language.settings.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<project>
-	<configuration id="com.atollic.truestudio.lib.debug.7796040824.4860393155" name="bin">
-		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
-			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
-			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="1292331279938990028" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
-				<language-scope id="org.eclipse.cdt.core.gcc"/>
-				<language-scope id="org.eclipse.cdt.core.g++"/>
-			</provider>
-		</extension>
-	</configuration>
-</project>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project>
+	<configuration id="com.atollic.truestudio.lib.debug.6783851084.5418262406" name="bin">
+		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
+			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
+			<provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="-788515059658062897" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+				<language-scope id="org.eclipse.cdt.core.gcc"/>
+				<language-scope id="org.eclipse.cdt.core.g++"/>
+			</provider>
+		</extension>
+	</configuration>
+</project>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/org.eclipse.cdt.managedbuilder.core.prefs
index 11e734387..5acfebf44 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/org.eclipse.cdt.managedbuilder.core.prefs
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -1,37 +1,37 @@
-eclipse.preferences.version=1
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/CPATH/delimiter=;
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/CPATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/C_INCLUDE_PATH/delimiter=;
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/C_INCLUDE_PATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/append=true
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/appendContributed=true
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/CPATH/delimiter=;
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/CPATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/C_INCLUDE_PATH/delimiter=;
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/C_INCLUDE_PATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/append=true
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/appendContributed=true
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/CPATH/delimiter=\:
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/CPATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/C_INCLUDE_PATH/delimiter=\:
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/C_INCLUDE_PATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/append=true
-environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/appendContributed=true
-environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.7796040824.4860393155/CPATH/delimiter=;
-environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.7796040824.4860393155/CPATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.7796040824.4860393155/C_INCLUDE_PATH/delimiter=;
-environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.7796040824.4860393155/C_INCLUDE_PATH/operation=remove
-environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.7796040824.4860393155/append=true
-environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.7796040824.4860393155/appendContributed=true
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/LIBRARY_PATH/delimiter=;
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/LIBRARY_PATH/operation=remove
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/append=true
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/appendContributed=true
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/LIBRARY_PATH/delimiter=;
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/LIBRARY_PATH/operation=remove
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/append=true
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/appendContributed=true
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/LIBRARY_PATH/delimiter=\:
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/LIBRARY_PATH/operation=remove
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/append=true
-environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/appendContributed=true
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/CPATH/delimiter=;
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/CPATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/C_INCLUDE_PATH/delimiter=;
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/append=true
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561.493989912/appendContributed=true
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/CPATH/delimiter=;
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/CPATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/C_INCLUDE_PATH/delimiter=;
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/append=true
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.392750561/appendContributed=true
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/CPATH/delimiter=\:
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/CPATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/C_INCLUDE_PATH/delimiter=\:
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/append=true
+environment/buildEnvironmentInclude/com.atollic.truestudio.exe.debug.4949424832/appendContributed=true
+environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.6783851084.5418262406/CPATH/delimiter=;
+environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.6783851084.5418262406/CPATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.6783851084.5418262406/C_INCLUDE_PATH/delimiter=;
+environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.6783851084.5418262406/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.6783851084.5418262406/append=true
+environment/buildEnvironmentInclude/com.atollic.truestudio.lib.debug.6783851084.5418262406/appendContributed=true
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/LIBRARY_PATH/delimiter=;
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/LIBRARY_PATH/operation=remove
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/append=true
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561.493989912/appendContributed=true
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/LIBRARY_PATH/delimiter=;
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/LIBRARY_PATH/operation=remove
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/append=true
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.392750561/appendContributed=true
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/LIBRARY_PATH/delimiter=\:
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/LIBRARY_PATH/operation=remove
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/append=true
+environment/buildEnvironmentLibrary/com.atollic.truestudio.exe.debug.4949424832/appendContributed=true
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/Makefile b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/Makefile
index 73ffd93da..05d8807ae 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/Makefile
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/Makefile
@@ -31,7 +31,7 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 #
-# This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+# This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 #
 #******************************************************************************
 TARGET = libam_hal
@@ -72,8 +72,7 @@ $(CONFIG)/$(PROJECT).a: $(CONFIG)
 	$(ECLIPSE) --launcher.suppressErrors -nosplash -data "$$WKSP" \
 	    -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
 	    -import ./  -E cross_rm=$(RM) -cleanBuild .*/.*$(CONFIG).* \
-	     1> '$(PROJECT).log' 2> '$(PROJECT).errlog' ;\
-	$(RM) -rf $$WKSP
+	     1> '$(PROJECT).log' 2> '$(PROJECT).errlog' && $(RM) -rf $$WKSP
 
 OBJS =  $(CONFIG)/**/*
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/libam_hal_gcc.log b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/libam_hal_gcc.log
index 6d270cb6f..c0495ff28 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/libam_hal_gcc.log
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/atollic_gcc/libam_hal_gcc.log
@@ -1,41 +1,49 @@
 Create.
 Opening 'am_hal_gcc'.
 Refreshing '/am_hal_gcc'.
-21:23:30 **** Clean-only build of configuration bin for project am_hal_gcc ****
-rm -f source_files/am_hal_global.o libam_hal_gcc.a source_files/am_hal_pdm.o source_files/am_hal_tpiu.d source_files/am_hal_sysctrl.o source_files/am_hal_debug.o source_files/am_hal_adc.d source_files/am_hal_stimer.d source_files/am_hal_tpiu.o source_files/am_hal_uart.o source_files/am_hal_reset.o source_files/am_hal_pdm.d source_files/am_hal_ttp.o source_files/am_hal_uart.d source_files/am_hal_sysctrl.d source_files/am_hal_debug.d source_files/am_hal_reset.d source_files/am_hal_clkgen.d source_files/am_hal_stimer.o source_files/am_hal_ctimer.o source_files/am_hal_queue.d source_files/am_hal_clkgen.o source_files/am_hal_queue.o source_files/am_hal_ttp.d source_files/am_hal_global.d source_files/am_hal_i2c_bit_bang.d source_files/am_hal_flash.d source_files/am_hal_ctimer.d source_files/am_hal_i2c_bit_bang.o source_files/am_hal_systick.o source_files/am_hal_pwrctrl.d source_files/am_hal_interrupt.d source_files/am_hal_systick.d source_files/am_hal_adc.o source_files/am_hal_gpio.o source_files/am_hal_rtc.d source_files/am_hal_flash.o source_files/am_hal_itm.d source_files/am_hal_itm.o source_files/am_hal_interrupt.o source_files/am_hal_gpio.d source_files/am_hal_rtc.o source_files/am_hal_otp.d source_files/am_hal_ios.o source_files/am_hal_iom.o source_files/am_hal_pwrctrl.o source_files/am_hal_wdt.o source_files/am_hal_mcuctrl.o source_files/am_hal_cachectrl.o source_files/am_hal_iom.d source_files/am_hal_wdt.d source_files/am_hal_vcomp.d source_files/am_hal_cachectrl.d source_files/am_hal_ios.d source_files/am_hal_vcomp.o source_files/am_hal_mcuctrl.d source_files/am_hal_otp.o 
+07:45:10 **** Clean-only build of configuration bin for project am_hal_gcc ****
+rm -f source_files/am_hal_adc.d source_files/am_hal_otp.d source_files/am_hal_clkgen.d source_files/am_hal_debug.o source_files/am_hal_pwrctrl.d source_files/am_hal_otp.o source_files/am_hal_mcuctrl.d source_files/am_hal_tpiu.d source_files/am_hal_adc.o source_files/am_hal_sysctrl.d source_files/am_hal_mcuctrl.o source_files/am_hal_queue.d source_files/am_hal_flash.d source_files/am_hal_i2c_bit_bang.o libam_hal_gcc.a source_files/am_hal_cachectrl.o source_files/am_hal_cachectrl.d source_files/am_hal_queue.o source_files/am_hal_rtc.o source_files/am_hal_itm.o source_files/am_hal_pdm.o source_files/am_hal_reset.d source_files/am_hal_ttp.o source_files/am_hal_itm.d source_files/am_hal_rtc.d source_files/am_hal_reset.o source_files/am_hal_debug.d source_files/am_hal_interrupt.o source_files/am_hal_ctimer.o source_files/am_hal_ios.o source_files/am_hal_pdm.d source_files/am_hal_ctimer.d source_files/am_hal_ios.d source_files/am_hal_vcomp.o source_files/am_hal_iom.o source_files/am_hal_wdt.o source_files/am_hal_ttp.d source_files/am_hal_flash.o source_files/am_hal_vcomp.d source_files/am_hal_i2c_bit_bang.d source_files/am_hal_iom.d source_files/am_hal_uart.d source_files/am_hal_wdt.d source_files/am_hal_interrupt.d source_files/am_hal_gpio.o source_files/am_hal_sysctrl.o source_files/am_hal_uart.o source_files/am_hal_systick.d source_files/am_hal_tpiu.o source_files/am_hal_stimer.o source_files/am_hal_stimer.d source_files/am_hal_gpio.d source_files/am_hal_clkgen.o source_files/am_hal_systick.o source_files/am_hal_pwrctrl.o source_files/am_hal_global.o source_files/am_hal_global.d 
 
-21:23:31 Build Finished (took 277ms)
+07:45:10 Build Finished (took 135ms)
 
-21:23:31 **** Rebuild of configuration bin for project am_hal_gcc ****
+07:45:11 **** Rebuild of configuration bin for project am_hal_gcc ****
 Info: Internal Builder is used for build
-arm-atollic-eabi-gcc -c ..\..\am_hal_reset.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_reset.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_mcuctrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_mcuctrl.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_otp.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_otp.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_ttp.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_ttp.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_debug.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_debug.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_flash.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_flash.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_ios.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_ios.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_pwrctrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_pwrctrl.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_clkgen.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_clkgen.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_itm.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_itm.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_tpiu.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_tpiu.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_vcomp.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_vcomp.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_global.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_global.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_queue.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_queue.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_adc.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_adc.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_wdt.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_wdt.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_ctimer.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_ctimer.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_cachectrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_cachectrl.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_sysctrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_sysctrl.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_gpio.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_gpio.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_pdm.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_pdm.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_uart.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_uart.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_i2c_bit_bang.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_i2c_bit_bang.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_systick.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_systick.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_stimer.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_stimer.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_rtc.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_rtc.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_interrupt.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_interrupt.o 
-arm-atollic-eabi-gcc -c ..\..\am_hal_iom.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_iom.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_itm.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_itm.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_systick.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_systick.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_rtc.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_rtc.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_debug.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_debug.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_queue.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_queue.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_ctimer.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_ctimer.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_wdt.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_wdt.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_mcuctrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_mcuctrl.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_clkgen.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_clkgen.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_otp.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_otp.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_stimer.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_stimer.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_reset.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_reset.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_sysctrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_sysctrl.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_gpio.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_gpio.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_flash.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_flash.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_uart.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_uart.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_cachectrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_cachectrl.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_ttp.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_ttp.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_pwrctrl.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_pwrctrl.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_global.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_global.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_pdm.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_pdm.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_interrupt.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_interrupt.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_vcomp.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_vcomp.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_i2c_bit_bang.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_i2c_bit_bang.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_tpiu.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_tpiu.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_adc.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_adc.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_ios.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_ios.o 
+arm-atollic-eabi-gcc -c ..\..\am_hal_iom.c -mthumb -mcpu=cortex-m4 -std=c99 -DAM_DEBUG_ASSERT -DAM_ASSERT_INVALID_THRESHOLD=0 -DAM_PART_APOLLO2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../mcu/apollo2 -IC:/jenkins/jobs/ambiqsuite-checkout/workspace/ambiqsuite-sdk/mcu/apollo2/hal/atollic_gcc/../../../../utils -O3 -ffunction-sections -fdata-sections -g -Wall -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -MMD -MP -O3 -funroll-loops -o source_files\am_hal_iom.o 
+..\..\am_hal_iom.c: In function 'am_hal_iom_i2c_write_nb':
+..\..\am_hal_iom.c:3156:25: warning: comparison between 'am_hal_iom_status_e {aka enum <anonymous>}' and 'enum <anonymous>' [-Wenum-compare]
+         if ((ui32Status == AM_HAL_I2C_BIT_BANG_SUCCESS) && pfnCallback )
+                         ^
+..\..\am_hal_iom.c: In function 'am_hal_iom_i2c_read_nb':
+..\..\am_hal_iom.c:3312:25: warning: comparison between 'am_hal_iom_status_e {aka enum <anonymous>}' and 'enum <anonymous>' [-Wenum-compare]
+         if ((ui32Status == AM_HAL_I2C_BIT_BANG_SUCCESS) && pfnCallback )
+                         ^
 arm-atollic-eabi-ar -rsvc libam_hal_gcc.a source_files\am_hal_adc.o source_files\am_hal_cachectrl.o source_files\am_hal_clkgen.o source_files\am_hal_ctimer.o source_files\am_hal_debug.o source_files\am_hal_flash.o source_files\am_hal_global.o source_files\am_hal_gpio.o source_files\am_hal_i2c_bit_bang.o source_files\am_hal_interrupt.o source_files\am_hal_iom.o source_files\am_hal_ios.o source_files\am_hal_itm.o source_files\am_hal_mcuctrl.o source_files\am_hal_otp.o source_files\am_hal_pdm.o source_files\am_hal_pwrctrl.o source_files\am_hal_queue.o source_files\am_hal_reset.o source_files\am_hal_rtc.o source_files\am_hal_stimer.o source_files\am_hal_sysctrl.o source_files\am_hal_systick.o source_files\am_hal_tpiu.o source_files\am_hal_ttp.o source_files\am_hal_uart.o source_files\am_hal_vcomp.o source_files\am_hal_wdt.o 
 a - source_files\am_hal_adc.o
 a - source_files\am_hal_cachectrl.o
@@ -67,5 +75,5 @@ a - source_files\am_hal_vcomp.o
 a - source_files\am_hal_wdt.o
 Info: Parallel threads used: 4
 
-21:23:36 Build Finished (took 5s.570ms)
+07:45:17 Build Finished (took 5s.861ms)
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/gcc/Makefile b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/gcc/Makefile
index dd4fc63bb..21e7448c4 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/gcc/Makefile
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/gcc/Makefile
@@ -31,7 +31,7 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 #
-# This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+# This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 #
 #******************************************************************************
 TARGET = libam_hal
@@ -132,7 +132,7 @@ ODFLAGS = -S
 all: bin bin/$(TARGET).a
 
 bin:
-	mkdir -p $@
+	@mkdir -p $@
 
 bin/%.o: %.c bin/%.d
 	@+echo " Compiling $(WITHCC) $<" ;\
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/Makefile b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/Makefile
index a8ce287e3..b667ca536 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/Makefile
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/Makefile
@@ -30,21 +30,35 @@
 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
-# 
-# This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+#
+# This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 #
 #******************************************************************************
+TARGET = libam_hal
+COMPILERNAME = IAR
+PROJECT = libam_hal_IAR
+CONFIG := $(CURDIR)/bin
+AM_SoftwareRoot ?= ../../..
 
 SHELL=/bin/bash
+#### Required Executables ####
 K := $(shell type -p IarBuild.exe)
+RM = $(shell which rm 2>/dev/null)
 
+.PHONY: all clean directories
 ifeq ($(K),)
 all clean:
-	$(info IAR tools not found, skipping...)
+	$(info Tools w/$(COMPILERNAME) not installed.)
+	$(RM) -rf bin
 else
-all:
+all: directories
 	IarBuild.exe libam_hal.ewp -make Debug -log info
 
+directories: $(CONFIG)
+
+$(CONFIG):
+	@mkdir -p $@
+
 clean:
 	@+echo Cleaning... ;\
 	IarBuild.exe libam_hal.ewp -clean Debug -log all
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewd b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewd
index bf9a40ccc..9faad6ab8 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewd
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewd
@@ -1,2810 +1,2810 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-    <fileVersion>3</fileVersion>
-    <configuration>
-        <name>Debug</name>
-        <toolchain>
-            <name>ARM</name>
-        </toolchain>
-        <debug>1</debug>
-        <settings>
-            <name>C-SPY</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>28</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>CInput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CEndian</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCVariant</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>MemOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MemFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>RunToEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RunToName</name>
-                    <state>main</state>
-                </option>
-                <option>
-                    <name>CExtraOptionsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCDDFArgumentProducer</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCDownloadSuppressDownload</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDownloadVerifyAll</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProductVersion</name>
-                    <state>8.11.1.13270</state>
-                </option>
-                <option>
-                    <name>OCDynDriverList</name>
-                    <state>ARMSIM_ID</state>
-                </option>
-                <option>
-                    <name>OCLastSavedByProductVersion</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>UseFlashLoader</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CLowLevel</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCBE8Slave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacFile2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CDevice</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>FlashLoadersV3</name>
-                    <state>$TOOLKIT_DIR$\config\flashloader\</state>
-                </option>
-                <option>
-                    <name>OCImagesSuppressCheck1</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesPath1</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesSuppressCheck2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesPath2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesSuppressCheck3</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesPath3</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OverrideDefFlashBoard</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesOffset1</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesOffset2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesOffset3</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesUse1</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesUse2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesUse3</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDeviceConfigMacroFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCDebuggerExtraOption</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCAllMTBOptions</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCMulticoreNrOfCores</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCMulticoreMaster</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCMulticorePort</name>
-                    <state>53461</state>
-                </option>
-                <option>
-                    <name>OCMulticoreWorkspace</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCMulticoreSlaveProject</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCMulticoreSlaveConfiguration</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCDownloadExtraImage</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCAttachSlave</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>ARMSIM_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>1</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OCSimDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCSimEnablePSP</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCSimPspOverrideConfig</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCSimPspConfigFile</name>
-                    <state></state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>CADI_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>CCadiMemory</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>Fast Model</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCADILogFileCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCADILogFileEditB</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>CMSISDAP_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>4</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>CatchSFERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCIarProbeScriptFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CMSISDAPResetList</name>
-                    <version>1</version>
-                    <state>10</state>
-                </option>
-                <option>
-                    <name>CMSISDAPHWResetDuration</name>
-                    <state>300</state>
-                </option>
-                <option>
-                    <name>CMSISDAPHWResetDelay</name>
-                    <state>200</state>
-                </option>
-                <option>
-                    <name>CMSISDAPDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CMSISDAPInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiTargetEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPJtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPRestoreBreakpointsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPUpdateBreakpointsEdit</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>RDICatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchUndef</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchData</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchPrefetch</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchMMERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchNOCPERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchCHKERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchSTATERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchBUSERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchINTERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchHARDERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiCPUEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiCPUNumber</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeCfgOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeConfig</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CMSISDAPProbeConfigRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPSelectedCPUBehaviour</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ICpuName</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCJetEmuParams</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCCMSISDAPUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCCMSISDAPUsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>GDBSERVER_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>TCPIP</name>
-                    <state>localhost,3333</state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCJTagBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJTagDoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJTagUpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>IJET_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>8</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCIarProbeScriptFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetResetList</name>
-                    <version>1</version>
-                    <state>10</state>
-                </option>
-                <option>
-                    <name>IjetHWResetDuration</name>
-                    <state>300</state>
-                </option>
-                <option>
-                    <name>IjetHWResetDelay</name>
-                    <state>200</state>
-                </option>
-                <option>
-                    <name>IjetPowerFromProbe</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetPowerRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>IjetInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiTargetEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetScanChainNonARMDevices</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetIRLength</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetJtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetProtocolRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetSwoPin</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetCpuClockEdit</name>
-                    <state>6.0</state>
-                </option>
-                <option>
-                    <name>IjetSwoPrescalerList</name>
-                    <version>1</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetRestoreBreakpointsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetUpdateBreakpointsEdit</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>RDICatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchUndef</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchData</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchPrefetch</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchMMERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchNOCPERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchCHKERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchSTATERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchBUSERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchINTERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchSFERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchHARDERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeCfgOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeConfig</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IjetProbeConfigRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiCPUEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiCPUNumber</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetSelectedCPUBehaviour</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ICpuName</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCJetEmuParams</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetPreferETB</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetTraceSettingsList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetTraceSizeList</name>
-                    <version>0</version>
-                    <state>4</state>
-                </option>
-                <option>
-                    <name>FlashBoardPathSlave</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCIjetUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCIjetUsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>JLINK_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>16</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>JLinkSpeed</name>
-                    <state>1000</state>
-                </option>
-                <option>
-                    <name>CCJLinkDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCJLinkHWResetDelay</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>JLinkInitialSpeed</name>
-                    <state>1000</state>
-                </option>
-                <option>
-                    <name>CCDoJlinkMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCScanChainNonARMDevices</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkIRLength</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkCommRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkTCPIP</name>
-                    <state>aaa.bbb.ccc.ddd</state>
-                </option>
-                <option>
-                    <name>CCJLinkSpeedRadioV2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCUSBDevice</name>
-                    <version>1</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCRDICatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchUndef</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchData</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchPrefetch</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkDoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkUpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>CCJLinkInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkResetList</name>
-                    <version>6</version>
-                    <state>5</state>
-                </option>
-                <option>
-                    <name>CCJLinkInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchMMERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchNOCPERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchCHRERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchSTATERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchBUSERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchINTERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchSFERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchHARDERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCJLinkScriptFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCJLinkUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCTcpIpAlt</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkTcpIpSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCCpuClockEdit</name>
-                    <state>6.0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockAuto</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockEdit</name>
-                    <state>2000</state>
-                </option>
-                <option>
-                    <name>OCJLinkTraceSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCJLinkTraceSourceDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCJLinkDeviceName</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>LMIFTDI_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>2</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>LmiftdiSpeed</name>
-                    <state>500</state>
-                </option>
-                <option>
-                    <name>CCLmiftdiDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCLmiftdiLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCLmiFtdiInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCLmiFtdiInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>PEMICRO_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>3</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCJPEMicroShowSettings</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>STLINK_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>4</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCSTLinkInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkResetList</name>
-                    <version>3</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCpuClockEdit</name>
-                    <state>72.0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockAuto</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockEdit</name>
-                    <state>2000</state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCSTLinkDoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkUpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchMMERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchNOCPERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchCHRERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchSTATERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchBUSERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchINTERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchSFERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchHARDERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCSTLinkUsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkJtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkDAPNumber</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCSTLinkDebugAccessPortRadio</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>THIRDPARTY_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>CThirdPartyDriverDll</name>
-                    <state>###Uninitialized###</state>
-                </option>
-                <option>
-                    <name>CThirdPartyLogFileCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CThirdPartyLogFileEditB</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>TIFET_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>1</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCMSPFetResetList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetTargetVccTypeDefault</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetTargetVoltage</name>
-                    <state>###Uninitialized###</state>
-                </option>
-                <option>
-                    <name>CCMSPFetVCCDefault</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCMSPFetTargetSettlingtime</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetRadioJtagSpeedType</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCMSPFetConnection</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetUsbComPort</name>
-                    <state>Automatic</state>
-                </option>
-                <option>
-                    <name>CCMSPFetAllowAccessToBSL</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCMSPFetRadioEraseFlash</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>XDS100_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>6</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>CCXds100CatchSFERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>TIPackageOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>TIPackage</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>BoardFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCXds100BreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100DoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100UpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchUndef</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchData</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchPrefetch</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchMMERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchNOCPERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchCHRERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchSTATERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchBUSERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchINTERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchHARDERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CpuClockEdit</name>
-                    <state>72.0</state>
-                </option>
-                <option>
-                    <name>CCXds100SwoClockAuto</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100SwoClockEdit</name>
-                    <state>1000</state>
-                </option>
-                <option>
-                    <name>CCXds100HWResetDelay</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100ResetList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100UsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCXds100UsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100JtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100InterfaceRadio</name>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCXds100InterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100ProbeList</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCXds100SWOPortRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100SWOPort</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <debuggerPlugins>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
-                <loadFlag>1</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-        </debuggerPlugins>
-    </configuration>
-    <configuration>
-        <name>Release</name>
-        <toolchain>
-            <name>ARM</name>
-        </toolchain>
-        <debug>0</debug>
-        <settings>
-            <name>C-SPY</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>28</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CInput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CEndian</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCVariant</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>MemOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MemFile</name>
-                    <state>$TOOLKIT_DIR$\CONFIG\debugger\AmbiqMicro\AMAPH1KK-KBR.ddf</state>
-                </option>
-                <option>
-                    <name>RunToEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RunToName</name>
-                    <state>main</state>
-                </option>
-                <option>
-                    <name>CExtraOptionsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCDDFArgumentProducer</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCDownloadSuppressDownload</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDownloadVerifyAll</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProductVersion</name>
-                    <state>7.40.2.8567</state>
-                </option>
-                <option>
-                    <name>OCDynDriverList</name>
-                    <state>ARMSIM_ID</state>
-                </option>
-                <option>
-                    <name>OCLastSavedByProductVersion</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>UseFlashLoader</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CLowLevel</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCBE8Slave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacFile2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CDevice</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>FlashLoadersV3</name>
-                    <state>$TOOLKIT_DIR$\config\flashloader\AmbiqMicro\FlashApollo2_1024.board</state>
-                </option>
-                <option>
-                    <name>OCImagesSuppressCheck1</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesPath1</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesSuppressCheck2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesPath2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesSuppressCheck3</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesPath3</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OverrideDefFlashBoard</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesOffset1</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesOffset2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesOffset3</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCImagesUse1</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesUse2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCImagesUse3</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDeviceConfigMacroFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCDebuggerExtraOption</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCAllMTBOptions</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCMulticoreNrOfCores</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCMulticoreMaster</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCMulticorePort</name>
-                    <state>53461</state>
-                </option>
-                <option>
-                    <name>OCMulticoreWorkspace</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCMulticoreSlaveProject</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCMulticoreSlaveConfiguration</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCDownloadExtraImage</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCAttachSlave</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>ARMSIM_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>1</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>OCSimDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCSimEnablePSP</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCSimPspOverrideConfig</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCSimPspConfigFile</name>
-                    <state></state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>CADI_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CCadiMemory</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>Fast Model</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCADILogFileCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCADILogFileEditB</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>CMSISDAP_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>4</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CatchSFERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCIarProbeScriptFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CMSISDAPResetList</name>
-                    <version>1</version>
-                    <state>10</state>
-                </option>
-                <option>
-                    <name>CMSISDAPHWResetDuration</name>
-                    <state>300</state>
-                </option>
-                <option>
-                    <name>CMSISDAPHWResetDelay</name>
-                    <state>200</state>
-                </option>
-                <option>
-                    <name>CMSISDAPDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CMSISDAPInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiTargetEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPJtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPRestoreBreakpointsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPUpdateBreakpointsEdit</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>RDICatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchUndef</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchData</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchPrefetch</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchMMERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchNOCPERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchCHKERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchSTATERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchBUSERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchINTERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchHARDERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiCPUEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPMultiCPUNumber</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeCfgOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeConfig</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CMSISDAPProbeConfigRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CMSISDAPSelectedCPUBehaviour</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ICpuName</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCJetEmuParams</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCCMSISDAPUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCCMSISDAPUsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>GDBSERVER_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>TCPIP</name>
-                    <state>aaa.bbb.ccc.ddd</state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCJTagBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJTagDoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJTagUpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>IJET_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>8</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CatchSFERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCIarProbeScriptFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetResetList</name>
-                    <version>1</version>
-                    <state>10</state>
-                </option>
-                <option>
-                    <name>IjetHWResetDuration</name>
-                    <state>300</state>
-                </option>
-                <option>
-                    <name>IjetHWResetDelay</name>
-                    <state>200</state>
-                </option>
-                <option>
-                    <name>IjetPowerFromProbe</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetPowerRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>IjetInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiTargetEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetScanChainNonARMDevices</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetIRLength</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetJtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetProtocolRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetSwoPin</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetCpuClockEdit</name>
-                    <state>72.0</state>
-                </option>
-                <option>
-                    <name>IjetSwoPrescalerList</name>
-                    <version>1</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetRestoreBreakpointsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetUpdateBreakpointsEdit</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>RDICatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchUndef</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchData</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchPrefetch</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RDICatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RDICatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CatchMMERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchNOCPERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchCHKERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchSTATERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchBUSERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchINTERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchHARDERR</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeCfgOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCProbeConfig</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IjetProbeConfigRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiCPUEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetMultiCPUNumber</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetSelectedCPUBehaviour</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ICpuName</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OCJetEmuParams</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetPreferETB</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IjetTraceSettingsList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IjetTraceSizeList</name>
-                    <version>0</version>
-                    <state>4</state>
-                </option>
-                <option>
-                    <name>FlashBoardPathSlave</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCIjetUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCIjetUsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>JLINK_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>16</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CCCatchSFERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>JLinkSpeed</name>
-                    <state>1000</state>
-                </option>
-                <option>
-                    <name>CCJLinkDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCJLinkHWResetDelay</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>JLinkInitialSpeed</name>
-                    <state>1000</state>
-                </option>
-                <option>
-                    <name>CCDoJlinkMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCScanChainNonARMDevices</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkMultiTarget</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkIRLength</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkCommRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkTCPIP</name>
-                    <state>aaa.bbb.ccc.ddd</state>
-                </option>
-                <option>
-                    <name>CCJLinkSpeedRadioV2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCUSBDevice</name>
-                    <version>1</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCRDICatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchUndef</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchData</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchPrefetch</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCRDICatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkBreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkDoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkUpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>CCJLinkInterfaceRadio</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCJLinkResetList</name>
-                    <version>6</version>
-                    <state>7</state>
-                </option>
-                <option>
-                    <name>CCJLinkInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchMMERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchNOCPERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchCHRERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchSTATERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchBUSERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchINTERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchHARDERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCJLinkScriptFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCJLinkUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCTcpIpAlt</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCJLinkTcpIpSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCCpuClockEdit</name>
-                    <state>6.0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockAuto</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockEdit</name>
-                    <state>2000</state>
-                </option>
-                <option>
-                    <name>OCJLinkTraceSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCJLinkTraceSourceDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCJLinkDeviceName</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>LMIFTDI_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>2</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>LmiftdiSpeed</name>
-                    <state>500</state>
-                </option>
-                <option>
-                    <name>CCLmiftdiDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCLmiftdiLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCLmiFtdiInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCLmiFtdiInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>PEMICRO_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>3</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCJPEMicroShowSettings</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>STLINK_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>4</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCSTLinkInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkResetList</name>
-                    <version>3</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCpuClockEdit</name>
-                    <state>72.0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockAuto</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSwoClockEdit</name>
-                    <state>2000</state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCSTLinkDoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkUpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchMMERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchNOCPERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchCHRERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchSTATERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchBUSERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchINTERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchSFERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchHARDERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkCatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkUsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCSTLinkUsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkJtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSTLinkDAPNumber</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCSTLinkDebugAccessPortRadio</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>THIRDPARTY_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CThirdPartyDriverDll</name>
-                    <state>###Uninitialized###</state>
-                </option>
-                <option>
-                    <name>CThirdPartyLogFileCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CThirdPartyLogFileEditB</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>TIFET_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>1</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCMSPFetResetList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetInterfaceRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetInterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetTargetVccTypeDefault</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetTargetVoltage</name>
-                    <state>###Uninitialized###</state>
-                </option>
-                <option>
-                    <name>CCMSPFetVCCDefault</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCMSPFetTargetSettlingtime</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetRadioJtagSpeedType</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCMSPFetConnection</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetUsbComPort</name>
-                    <state>Automatic</state>
-                </option>
-                <option>
-                    <name>CCMSPFetAllowAccessToBSL</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetDoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCMSPFetLogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCMSPFetRadioEraseFlash</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>XDS100_ID</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>6</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CCXds100CatchSFERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCDriverInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>TIPackageOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>TIPackage</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>BoardFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>DoLogfile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>LogFile</name>
-                    <state>$PROJ_DIR$\cspycomm.log</state>
-                </option>
-                <option>
-                    <name>CCXds100BreakpointRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100DoUpdateBreakpoints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100UpdateBreakpoints</name>
-                    <state>_call_main</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchReset</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchUndef</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchSWI</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchData</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchPrefetch</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchIRQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchFIQ</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchCORERESET</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchMMERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchNOCPERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchCHRERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchSTATERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchBUSERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchINTERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchHARDERR</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CatchDummy</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100CpuClockEdit</name>
-                    <state>72.0</state>
-                </option>
-                <option>
-                    <name>CCXds100SwoClockAuto</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100SwoClockEdit</name>
-                    <state>1000</state>
-                </option>
-                <option>
-                    <name>CCXds100HWResetDelay</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100ResetList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100UsbSerialNo</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCXds100UsbSerialNoSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100JtagSpeedList</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100InterfaceRadio</name>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCXds100InterfaceCmdLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100ProbeList</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCXds100SWOPortRadio</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCXds100SWOPort</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <debuggerPlugins>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
-                <loadFlag>1</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-            <plugin>
-                <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
-                <loadFlag>0</loadFlag>
-            </plugin>
-        </debuggerPlugins>
-    </configuration>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <fileVersion>3</fileVersion>
+    <configuration>
+        <name>Debug</name>
+        <toolchain>
+            <name>ARM</name>
+        </toolchain>
+        <debug>1</debug>
+        <settings>
+            <name>C-SPY</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>28</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>CInput</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CEndian</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCVariant</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>MemOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MemFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>RunToEnable</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RunToName</name>
+                    <state>main</state>
+                </option>
+                <option>
+                    <name>CExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CFpuProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCDDFArgumentProducer</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCDownloadSuppressDownload</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDownloadVerifyAll</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProductVersion</name>
+                    <state>8.11.1.13270</state>
+                </option>
+                <option>
+                    <name>OCDynDriverList</name>
+                    <state>ARMSIM_ID</state>
+                </option>
+                <option>
+                    <name>OCLastSavedByProductVersion</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>UseFlashLoader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CLowLevel</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCBE8Slave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacFile2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CDevice</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>FlashLoadersV3</name>
+                    <state>$TOOLKIT_DIR$\config\flashloader\</state>
+                </option>
+                <option>
+                    <name>OCImagesSuppressCheck1</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesPath1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesSuppressCheck2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesPath2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesSuppressCheck3</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesPath3</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OverrideDefFlashBoard</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesOffset1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesOffset2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesOffset3</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesUse1</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesUse2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesUse3</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDeviceConfigMacroFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCDebuggerExtraOption</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCAllMTBOptions</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCMulticoreNrOfCores</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCMulticoreMaster</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCMulticorePort</name>
+                    <state>53461</state>
+                </option>
+                <option>
+                    <name>OCMulticoreWorkspace</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCMulticoreSlaveProject</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCMulticoreSlaveConfiguration</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCDownloadExtraImage</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCAttachSlave</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>ARMSIM_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>1</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OCSimDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCSimEnablePSP</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCSimPspOverrideConfig</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCSimPspConfigFile</name>
+                    <state></state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CADI_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>CCadiMemory</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Fast Model</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCADILogFileCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCADILogFileEditB</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CMSISDAP_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>4</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>CatchSFERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCIarProbeScriptFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CMSISDAPResetList</name>
+                    <version>1</version>
+                    <state>10</state>
+                </option>
+                <option>
+                    <name>CMSISDAPHWResetDuration</name>
+                    <state>300</state>
+                </option>
+                <option>
+                    <name>CMSISDAPHWResetDelay</name>
+                    <state>200</state>
+                </option>
+                <option>
+                    <name>CMSISDAPDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CMSISDAPInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiTargetEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPJtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPRestoreBreakpointsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPUpdateBreakpointsEdit</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>RDICatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchUndef</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchData</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchPrefetch</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchMMERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchNOCPERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchCHKERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchSTATERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchBUSERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchINTERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchHARDERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiCPUEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiCPUNumber</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeCfgOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeConfig</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CMSISDAPProbeConfigRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPSelectedCPUBehaviour</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ICpuName</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCJetEmuParams</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCCMSISDAPUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCCMSISDAPUsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>GDBSERVER_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>TCPIP</name>
+                    <state>localhost,3333</state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCJTagBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJTagDoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJTagUpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>IJET_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>8</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCIarProbeScriptFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetResetList</name>
+                    <version>1</version>
+                    <state>10</state>
+                </option>
+                <option>
+                    <name>IjetHWResetDuration</name>
+                    <state>300</state>
+                </option>
+                <option>
+                    <name>IjetHWResetDelay</name>
+                    <state>200</state>
+                </option>
+                <option>
+                    <name>IjetPowerFromProbe</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetPowerRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>IjetInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiTargetEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetScanChainNonARMDevices</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetIRLength</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetJtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetProtocolRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetSwoPin</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetCpuClockEdit</name>
+                    <state>6.0</state>
+                </option>
+                <option>
+                    <name>IjetSwoPrescalerList</name>
+                    <version>1</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetRestoreBreakpointsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetUpdateBreakpointsEdit</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>RDICatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchUndef</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchData</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchPrefetch</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchMMERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchNOCPERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchCHKERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchSTATERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchBUSERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchINTERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchSFERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchHARDERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeCfgOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeConfig</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IjetProbeConfigRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiCPUEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiCPUNumber</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetSelectedCPUBehaviour</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ICpuName</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCJetEmuParams</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetPreferETB</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetTraceSettingsList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetTraceSizeList</name>
+                    <version>0</version>
+                    <state>4</state>
+                </option>
+                <option>
+                    <name>FlashBoardPathSlave</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCIjetUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCIjetUsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>JLINK_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>16</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>JLinkSpeed</name>
+                    <state>1000</state>
+                </option>
+                <option>
+                    <name>CCJLinkDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCJLinkHWResetDelay</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>JLinkInitialSpeed</name>
+                    <state>1000</state>
+                </option>
+                <option>
+                    <name>CCDoJlinkMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCScanChainNonARMDevices</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkIRLength</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkCommRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkTCPIP</name>
+                    <state>aaa.bbb.ccc.ddd</state>
+                </option>
+                <option>
+                    <name>CCJLinkSpeedRadioV2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCUSBDevice</name>
+                    <version>1</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCRDICatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchUndef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchData</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchPrefetch</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkDoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkUpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>CCJLinkInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkResetList</name>
+                    <version>6</version>
+                    <state>5</state>
+                </option>
+                <option>
+                    <name>CCJLinkInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchMMERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchNOCPERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchCHRERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchSTATERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchBUSERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchINTERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchSFERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchHARDERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCJLinkScriptFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCJLinkUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCTcpIpAlt</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkTcpIpSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCCpuClockEdit</name>
+                    <state>6.0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockAuto</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockEdit</name>
+                    <state>2000</state>
+                </option>
+                <option>
+                    <name>OCJLinkTraceSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCJLinkTraceSourceDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCJLinkDeviceName</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>LMIFTDI_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>2</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>LmiftdiSpeed</name>
+                    <state>500</state>
+                </option>
+                <option>
+                    <name>CCLmiftdiDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLmiftdiLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCLmiFtdiInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLmiFtdiInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>PEMICRO_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>3</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCJPEMicroShowSettings</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>STLINK_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>4</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCSTLinkInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkResetList</name>
+                    <version>3</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCpuClockEdit</name>
+                    <state>72.0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockAuto</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockEdit</name>
+                    <state>2000</state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCSTLinkDoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkUpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchMMERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchNOCPERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchCHRERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchSTATERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchBUSERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchINTERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchSFERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchHARDERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCSTLinkUsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkJtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkDAPNumber</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCSTLinkDebugAccessPortRadio</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>THIRDPARTY_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>CThirdPartyDriverDll</name>
+                    <state>###Uninitialized###</state>
+                </option>
+                <option>
+                    <name>CThirdPartyLogFileCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CThirdPartyLogFileEditB</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>TIFET_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>1</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCMSPFetResetList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetTargetVccTypeDefault</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetTargetVoltage</name>
+                    <state>###Uninitialized###</state>
+                </option>
+                <option>
+                    <name>CCMSPFetVCCDefault</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCMSPFetTargetSettlingtime</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetRadioJtagSpeedType</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCMSPFetConnection</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetUsbComPort</name>
+                    <state>Automatic</state>
+                </option>
+                <option>
+                    <name>CCMSPFetAllowAccessToBSL</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCMSPFetRadioEraseFlash</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>XDS100_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>6</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>CCXds100CatchSFERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>TIPackageOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>TIPackage</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>BoardFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCXds100BreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100DoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100UpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchUndef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchData</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchPrefetch</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchMMERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchNOCPERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchCHRERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchSTATERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchBUSERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchINTERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchHARDERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CpuClockEdit</name>
+                    <state>72.0</state>
+                </option>
+                <option>
+                    <name>CCXds100SwoClockAuto</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100SwoClockEdit</name>
+                    <state>1000</state>
+                </option>
+                <option>
+                    <name>CCXds100HWResetDelay</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100ResetList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100UsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCXds100UsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100JtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100InterfaceRadio</name>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCXds100InterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100ProbeList</name>
+                    <version>0</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCXds100SWOPortRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100SWOPort</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <debuggerPlugins>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+                <loadFlag>1</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+        </debuggerPlugins>
+    </configuration>
+    <configuration>
+        <name>Release</name>
+        <toolchain>
+            <name>ARM</name>
+        </toolchain>
+        <debug>0</debug>
+        <settings>
+            <name>C-SPY</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>28</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CInput</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CEndian</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCVariant</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>MemOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MemFile</name>
+                    <state>$TOOLKIT_DIR$\CONFIG\debugger\AmbiqMicro\AMAPH1KK-KBR.ddf</state>
+                </option>
+                <option>
+                    <name>RunToEnable</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RunToName</name>
+                    <state>main</state>
+                </option>
+                <option>
+                    <name>CExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CFpuProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCDDFArgumentProducer</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCDownloadSuppressDownload</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDownloadVerifyAll</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProductVersion</name>
+                    <state>7.40.2.8567</state>
+                </option>
+                <option>
+                    <name>OCDynDriverList</name>
+                    <state>ARMSIM_ID</state>
+                </option>
+                <option>
+                    <name>OCLastSavedByProductVersion</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>UseFlashLoader</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CLowLevel</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCBE8Slave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacFile2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CDevice</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>FlashLoadersV3</name>
+                    <state>$TOOLKIT_DIR$\config\flashloader\AmbiqMicro\FlashApollo2_1024.board</state>
+                </option>
+                <option>
+                    <name>OCImagesSuppressCheck1</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesPath1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesSuppressCheck2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesPath2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesSuppressCheck3</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesPath3</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OverrideDefFlashBoard</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesOffset1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesOffset2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesOffset3</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCImagesUse1</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesUse2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCImagesUse3</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDeviceConfigMacroFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCDebuggerExtraOption</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCAllMTBOptions</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCMulticoreNrOfCores</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCMulticoreMaster</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCMulticorePort</name>
+                    <state>53461</state>
+                </option>
+                <option>
+                    <name>OCMulticoreWorkspace</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCMulticoreSlaveProject</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCMulticoreSlaveConfiguration</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCDownloadExtraImage</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCAttachSlave</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>ARMSIM_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>1</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>OCSimDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCSimEnablePSP</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCSimPspOverrideConfig</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCSimPspConfigFile</name>
+                    <state></state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CADI_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CCadiMemory</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Fast Model</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCADILogFileCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCADILogFileEditB</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CMSISDAP_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>4</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CatchSFERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCIarProbeScriptFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CMSISDAPResetList</name>
+                    <version>1</version>
+                    <state>10</state>
+                </option>
+                <option>
+                    <name>CMSISDAPHWResetDuration</name>
+                    <state>300</state>
+                </option>
+                <option>
+                    <name>CMSISDAPHWResetDelay</name>
+                    <state>200</state>
+                </option>
+                <option>
+                    <name>CMSISDAPDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CMSISDAPInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiTargetEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPJtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPRestoreBreakpointsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPUpdateBreakpointsEdit</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>RDICatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchUndef</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchData</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchPrefetch</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchMMERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchNOCPERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchCHKERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchSTATERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchBUSERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchINTERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchHARDERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiCPUEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPMultiCPUNumber</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeCfgOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeConfig</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CMSISDAPProbeConfigRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CMSISDAPSelectedCPUBehaviour</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ICpuName</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCJetEmuParams</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCCMSISDAPUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCCMSISDAPUsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>GDBSERVER_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>TCPIP</name>
+                    <state>aaa.bbb.ccc.ddd</state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCJTagBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJTagDoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJTagUpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>IJET_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>8</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CatchSFERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCIarProbeScriptFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetResetList</name>
+                    <version>1</version>
+                    <state>10</state>
+                </option>
+                <option>
+                    <name>IjetHWResetDuration</name>
+                    <state>300</state>
+                </option>
+                <option>
+                    <name>IjetHWResetDelay</name>
+                    <state>200</state>
+                </option>
+                <option>
+                    <name>IjetPowerFromProbe</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetPowerRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>IjetInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiTargetEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetScanChainNonARMDevices</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetIRLength</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetJtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetProtocolRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetSwoPin</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetCpuClockEdit</name>
+                    <state>72.0</state>
+                </option>
+                <option>
+                    <name>IjetSwoPrescalerList</name>
+                    <version>1</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetRestoreBreakpointsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetUpdateBreakpointsEdit</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>RDICatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchUndef</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchData</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchPrefetch</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RDICatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RDICatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CatchMMERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchNOCPERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchCHKERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchSTATERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchBUSERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchINTERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchHARDERR</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeCfgOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCProbeConfig</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IjetProbeConfigRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiCPUEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetMultiCPUNumber</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetSelectedCPUBehaviour</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ICpuName</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OCJetEmuParams</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetPreferETB</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IjetTraceSettingsList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IjetTraceSizeList</name>
+                    <version>0</version>
+                    <state>4</state>
+                </option>
+                <option>
+                    <name>FlashBoardPathSlave</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCIjetUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCIjetUsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>JLINK_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>16</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CCCatchSFERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>JLinkSpeed</name>
+                    <state>1000</state>
+                </option>
+                <option>
+                    <name>CCJLinkDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCJLinkHWResetDelay</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>JLinkInitialSpeed</name>
+                    <state>1000</state>
+                </option>
+                <option>
+                    <name>CCDoJlinkMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCScanChainNonARMDevices</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkMultiTarget</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkIRLength</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkCommRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkTCPIP</name>
+                    <state>aaa.bbb.ccc.ddd</state>
+                </option>
+                <option>
+                    <name>CCJLinkSpeedRadioV2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCUSBDevice</name>
+                    <version>1</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCRDICatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchUndef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchData</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchPrefetch</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRDICatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkBreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkDoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkUpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>CCJLinkInterfaceRadio</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCJLinkResetList</name>
+                    <version>6</version>
+                    <state>7</state>
+                </option>
+                <option>
+                    <name>CCJLinkInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchMMERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchNOCPERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchCHRERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchSTATERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchBUSERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchINTERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchHARDERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCJLinkScriptFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCJLinkUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCTcpIpAlt</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCJLinkTcpIpSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCCpuClockEdit</name>
+                    <state>6.0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockAuto</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockEdit</name>
+                    <state>2000</state>
+                </option>
+                <option>
+                    <name>OCJLinkTraceSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCJLinkTraceSourceDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCJLinkDeviceName</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>LMIFTDI_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>2</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>LmiftdiSpeed</name>
+                    <state>500</state>
+                </option>
+                <option>
+                    <name>CCLmiftdiDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLmiftdiLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCLmiFtdiInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLmiFtdiInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>PEMICRO_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>3</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCJPEMicroShowSettings</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>STLINK_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>4</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCSTLinkInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkResetList</name>
+                    <version>3</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCpuClockEdit</name>
+                    <state>72.0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockAuto</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSwoClockEdit</name>
+                    <state>2000</state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCSTLinkDoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkUpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchMMERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchNOCPERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchCHRERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchSTATERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchBUSERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchINTERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchSFERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchHARDERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkCatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkUsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCSTLinkUsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkJtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSTLinkDAPNumber</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCSTLinkDebugAccessPortRadio</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>THIRDPARTY_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CThirdPartyDriverDll</name>
+                    <state>###Uninitialized###</state>
+                </option>
+                <option>
+                    <name>CThirdPartyLogFileCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CThirdPartyLogFileEditB</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>TIFET_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>1</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCMSPFetResetList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetInterfaceRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetInterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetTargetVccTypeDefault</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetTargetVoltage</name>
+                    <state>###Uninitialized###</state>
+                </option>
+                <option>
+                    <name>CCMSPFetVCCDefault</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCMSPFetTargetSettlingtime</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetRadioJtagSpeedType</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCMSPFetConnection</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetUsbComPort</name>
+                    <state>Automatic</state>
+                </option>
+                <option>
+                    <name>CCMSPFetAllowAccessToBSL</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetDoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMSPFetLogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCMSPFetRadioEraseFlash</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>XDS100_ID</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>6</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CCXds100CatchSFERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCDriverInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>TIPackageOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>TIPackage</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>BoardFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>DoLogfile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LogFile</name>
+                    <state>$PROJ_DIR$\cspycomm.log</state>
+                </option>
+                <option>
+                    <name>CCXds100BreakpointRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100DoUpdateBreakpoints</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100UpdateBreakpoints</name>
+                    <state>_call_main</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchReset</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchUndef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchSWI</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchData</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchPrefetch</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchIRQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchFIQ</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchCORERESET</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchMMERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchNOCPERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchCHRERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchSTATERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchBUSERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchINTERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchHARDERR</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CatchDummy</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100CpuClockEdit</name>
+                    <state>72.0</state>
+                </option>
+                <option>
+                    <name>CCXds100SwoClockAuto</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100SwoClockEdit</name>
+                    <state>1000</state>
+                </option>
+                <option>
+                    <name>CCXds100HWResetDelay</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100ResetList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100UsbSerialNo</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCXds100UsbSerialNoSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100JtagSpeedList</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100InterfaceRadio</name>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCXds100InterfaceCmdLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100ProbeList</name>
+                    <version>0</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCXds100SWOPortRadio</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCXds100SWOPort</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <debuggerPlugins>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+                <loadFlag>1</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+            <plugin>
+                <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+                <loadFlag>0</loadFlag>
+            </plugin>
+        </debuggerPlugins>
+    </configuration>
+</project>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewp b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewp
index 85b56d6ac..a7358598b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewp
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.ewp
@@ -1,2117 +1,2117 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-    <fileVersion>3</fileVersion>
-    <configuration>
-        <name>Debug</name>
-        <toolchain>
-            <name>ARM</name>
-        </toolchain>
-        <debug>1</debug>
-        <settings>
-            <name>General</name>
-            <archiveVersion>3</archiveVersion>
-            <data>
-                <version>28</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>ExePath</name>
-                    <state>bin</state>
-                </option>
-                <option>
-                    <name>ObjPath</name>
-                    <state>bin</state>
-                </option>
-                <option>
-                    <name>ListPath</name>
-                    <state>bin</state>
-                </option>
-                <option>
-                    <name>GEndianMode</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>Input description</name>
-                    <state>Full formatting, without multibyte support.</state>
-                </option>
-                <option>
-                    <name>Output description</name>
-                    <state>Full formatting, without multibyte support.</state>
-                </option>
-                <option>
-                    <name>GOutputBinary</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGCoreOrChip</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibSelect</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibSelectSlave</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RTDescription</name>
-                    <state>Do not link with a runtime library.</state>
-                </option>
-                <option>
-                    <name>OGProductVersion</name>
-                    <state>7.40.2.8567</state>
-                </option>
-                <option>
-                    <name>OGLastSavedByProductVersion</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>GeneralEnableMisra</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GeneralMisraVerbose</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGChipSelectEditMenu</name>
-                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
-                </option>
-                <option>
-                    <name>GenLowLevelInterface</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GEndianModeBE</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGBufferedTerminalOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GenStdoutInterface</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GeneralMisraRules98</name>
-                    <version>0</version>
-                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
-                </option>
-                <option>
-                    <name>GeneralMisraVer</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GeneralMisraRules04</name>
-                    <version>0</version>
-                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
-                </option>
-                <option>
-                    <name>RTConfigPath2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>GBECoreSlave</name>
-                    <version>25</version>
-                    <state>39</state>
-                </option>
-                <option>
-                    <name>OGUseCmsis</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGUseCmsisDspLib</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibThreads</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CoreVariant</name>
-                    <version>25</version>
-                    <state>39</state>
-                </option>
-                <option>
-                    <name>GFPUDeviceSlave</name>
-                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
-                </option>
-                <option>
-                    <name>FPU2</name>
-                    <version>0</version>
-                    <state>4</state>
-                </option>
-                <option>
-                    <name>NrRegs</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>NEON</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GFPUCoreSlave2</name>
-                    <version>25</version>
-                    <state>39</state>
-                </option>
-                <option>
-                    <name>OGCMSISPackSelectDevice</name>
-                </option>
-                <option>
-                    <name>OgLibHeap</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGLibAdditionalLocale</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGPrintfVariant</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGPrintfMultibyteSupport</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGScanfVariant</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGScanfMultibyteSupport</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GenLocaleTags</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>GenLocaleDisplayOnly</name>
-                    <state></state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>ICCARM</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>34</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>CCDefines</name>
-                    <state>iar</state>
-          <state>AM_DEBUG_ASSERT</state>
-          <state>AM_ASSERT_INVALID_THRESHOLD=0</state>
-          <state>AM_PART_APOLLO2</state>
-                </option>
-                <option>
-                    <name>CCPreprocFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPreprocComments</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPreprocLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCMnemonics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCMessages</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListAssFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListAssSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEnableRemarks</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCDiagSuppress</name>
-                    <state>Pa050</state>
-                </option>
-                <option>
-                    <name>CCDiagRemark</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagWarning</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagError</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCObjPrefix</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCAllowList</name>
-                    <version>1</version>
-                    <state>11111110</state>
-                </option>
-                <option>
-                    <name>CCDebugInfo</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IEndianMode</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IExtraOptionsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCLangConformance</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSignedPlainChar</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCRequirePrototypes</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCDiagWarnAreErr</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCompilerRuntimeInfo</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OutputFile</name>
-                    <state>$FILE_BNAME$.o</state>
-                </option>
-                <option>
-                    <name>CCLibConfigHeader</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>PreInclude</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CompilerMisraOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCIncludePath2</name>
-          <state>$PROJ_DIR$\..\..\..\..\mcu\apollo2</state>
-          <state>$PROJ_DIR$\..\..\..\..\utils</state>
-                </option>
-                <option>
-                    <name>CCStdIncCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCodeSection</name>
-                    <state>.text</state>
-                </option>
-                <option>
-                    <name>IProcessorMode2</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCOptLevel</name>
-                    <state>3</state>
-                </option>
-                <option>
-                    <name>CCOptStrategy</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCOptLevelSlave</name>
-                    <state>3</state>
-                </option>
-                <option>
-                    <name>CompilerMisraRules98</name>
-                    <version>0</version>
-                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
-                </option>
-                <option>
-                    <name>CompilerMisraRules04</name>
-                    <version>0</version>
-                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
-                </option>
-                <option>
-                    <name>CCPosIndRopi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosIndRwpi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosIndNoDynInit</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccLang</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccCDialect</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccAllowVLA</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccStaticDestr</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccCppInlineSemantics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccCmsis</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccFloatSemantics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCOptimizationNoSizeConstraints</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCNoLiteralPool</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCOptStrategySlave</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCGuardCalls</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCEncSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEncOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEncOutputBom</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCEncInput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccExceptions2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccRTTI2</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>AARM</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>10</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>AObjPrefix</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AEndian</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>ACaseSensitivity</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacroChars</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnWhat</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnOne</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AWarnRange1</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AWarnRange2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>ADebug</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AltRegisterNames</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ADefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AList</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AListHeader</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AListing</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>Includes</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacDefs</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacExps</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacExec</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OnlyAssed</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MultiLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>PageLengthCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>PageLength</name>
-                    <state>80</state>
-                </option>
-                <option>
-                    <name>TabSpacing</name>
-                    <state>8</state>
-                </option>
-                <option>
-                    <name>AXRef</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefDefines</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefInternal</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefDual</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AOutputFile</name>
-                    <state>$FILE_BNAME$.o</state>
-                </option>
-                <option>
-                    <name>ALimitErrorsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ALimitErrorsEdit</name>
-                    <state>100</state>
-                </option>
-                <option>
-                    <name>AIgnoreStdInclude</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AUserIncludes</name>
-          <state>$PROJ_DIR$\..\..\..\..\mcu\apollo2</state>
-          <state>$PROJ_DIR$\..\..\..\..\utils</state>
-                </option>
-                <option>
-                    <name>AExtraOptionsCheckV2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AExtraOptionsV2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AsmNoLiteralPool</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>OBJCOPY</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>1</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OOCOutputFormat</name>
-                    <version>3</version>
-                    <state>3</state>
-                </option>
-                <option>
-                    <name>OCOutputOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OOCOutputFile</name>
-                    <state>libam_hal.bin</state>
-                </option>
-                <option>
-                    <name>OOCCommandLineProducer</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OOCObjCopyEnable</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>CUSTOM</name>
-            <archiveVersion>3</archiveVersion>
-            <data>
-                <extensions></extensions>
-                <cmdline></cmdline>
-                <hasPrio>0</hasPrio>
-            </data>
-        </settings>
-        <settings>
-            <name>BICOMP</name>
-            <archiveVersion>0</archiveVersion>
-            <data />
-        </settings>
-        <settings>
-            <name>BUILDACTION</name>
-            <archiveVersion>1</archiveVersion>
-            <data>
-                <prebuild></prebuild>
-                <postbuild></postbuild>
-            </data>
-        </settings>
-        <settings>
-            <name>ILINK</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>20</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>IlinkLibIOConfig</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>XLinkMisraHandler</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkInputFileSlave</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkOutputFile</name>
-                    <state>libam_hal.out</state>
-                </option>
-                <option>
-                    <name>IlinkDebugInfoEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkKeepSymbols</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySymbol</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySegment</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryAlign</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkDefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkConfigDefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkMapFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogInitialization</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogModule</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogSection</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogVeneer</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFile</name>
-                    <state>$PROJ_DIR$\libam_hal.icf</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFileSlave</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkEnableRemarks</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkSuppressDiags</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsRem</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsWarn</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsErr</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkWarningsAreErrors</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkUseExtraOptions</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkLowLevelInterfaceSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkAutoLibEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkAdditionalLibs</name>
-
-                </option>
-                <option>
-                    <name>IlinkOverrideProgramEntryLabel</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkProgramEntryLabelSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkProgramEntryLabel</name>
-                    <state>__iar_program_start</state>
-                </option>
-                <option>
-                    <name>DoFill</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>FillerByte</name>
-                    <state>0xFF</state>
-                </option>
-                <option>
-                    <name>FillerStart</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>FillerEnd</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>CrcSize</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcAlign</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcPoly</name>
-                    <state>0x11021</state>
-                </option>
-                <option>
-                    <name>CrcCompl</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CrcBitOrder</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CrcInitialValue</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>DoCrc</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkBE8Slave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkBufferedTerminalOutput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkStdoutInterfaceSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcFullSize</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIElfToolPostProcess</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogAutoLibSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogRedirSymbols</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogUnusedFragments</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCrcReverseByteOrder</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCrcUseAsInput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptInline</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkOptExceptionsAllow</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptExceptionsForce</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCmsis</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptMergeDuplSections</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkOptUseVfe</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptForceVfe</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkStackAnalysisEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkStackControlFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkStackCallGraphFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CrcAlgorithm</name>
-                    <version>1</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcUnitSize</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkThreadsSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkLogCallGraph</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFile_AltDefault</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkEncInput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkEncOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkEncOutputBom</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkHeapSelect</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkLocaleSelect</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>IARCHIVE</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>IarchiveInputs</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IarchiveOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IarchiveOutput</name>
-                    <state>libam_hal.a</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>BILINK</name>
-            <archiveVersion>0</archiveVersion>
-            <data />
-        </settings>
-    </configuration>
-    <configuration>
-        <name>Release</name>
-        <toolchain>
-            <name>ARM</name>
-        </toolchain>
-        <debug>0</debug>
-        <settings>
-            <name>General</name>
-            <archiveVersion>3</archiveVersion>
-            <data>
-                <version>28</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>ExePath</name>
-                    <state>bin</state>
-                </option>
-                <option>
-                    <name>ObjPath</name>
-                    <state>bin</state>
-                </option>
-                <option>
-                    <name>ListPath</name>
-                    <state>bin</state>
-                </option>
-                <option>
-                    <name>GEndianMode</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>Input description</name>
-                    <state>Automatic choice of formatter.</state>
-                </option>
-                <option>
-                    <name>Output description</name>
-                    <state>Automatic choice of formatter.</state>
-                </option>
-                <option>
-                    <name>GOutputBinary</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGCoreOrChip</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibSelect</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibSelectSlave</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>RTDescription</name>
-                    <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
-                </option>
-                <option>
-                    <name>OGProductVersion</name>
-                    <state>7.40.2.8567</state>
-                </option>
-                <option>
-                    <name>OGLastSavedByProductVersion</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>GeneralEnableMisra</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GeneralMisraVerbose</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGChipSelectEditMenu</name>
-                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
-                </option>
-                <option>
-                    <name>GenLowLevelInterface</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GEndianModeBE</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGBufferedTerminalOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GenStdoutInterface</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GeneralMisraRules98</name>
-                    <version>0</version>
-                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
-                </option>
-                <option>
-                    <name>GeneralMisraVer</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GeneralMisraRules04</name>
-                    <version>0</version>
-                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
-                </option>
-                <option>
-                    <name>RTConfigPath2</name>
-                    <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
-                </option>
-                <option>
-                    <name>GBECoreSlave</name>
-                    <version>25</version>
-                    <state>39</state>
-                </option>
-                <option>
-                    <name>OGUseCmsis</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGUseCmsisDspLib</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibThreads</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CoreVariant</name>
-                    <version>25</version>
-                    <state>39</state>
-                </option>
-                <option>
-                    <name>GFPUDeviceSlave</name>
-                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
-                </option>
-                <option>
-                    <name>FPU2</name>
-                    <version>0</version>
-                    <state>4</state>
-                </option>
-                <option>
-                    <name>NrRegs</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>NEON</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GFPUCoreSlave2</name>
-                    <version>25</version>
-                    <state>39</state>
-                </option>
-                <option>
-                    <name>OGCMSISPackSelectDevice</name>
-                </option>
-                <option>
-                    <name>OgLibHeap</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGLibAdditionalLocale</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGPrintfVariant</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGPrintfMultibyteSupport</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGScanfVariant</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGScanfMultibyteSupport</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GenLocaleTags</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>GenLocaleDisplayOnly</name>
-                    <state></state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>ICCARM</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>34</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>CCDefines</name>
-                    <state>iar</state>
-          <state>AM_DEBUG_ASSERT</state>
-          <state>AM_ASSERT_INVALID_THRESHOLD=0</state>
-          <state>AM_PART_APOLLO2</state>
-                </option>
-                <option>
-                    <name>CCPreprocFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPreprocComments</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPreprocLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCMnemonics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCMessages</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListAssFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListAssSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEnableRemarks</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCDiagSuppress</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagRemark</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagWarning</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagError</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCObjPrefix</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCAllowList</name>
-                    <version>1</version>
-                    <state>11111110</state>
-                </option>
-                <option>
-                    <name>CCDebugInfo</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IEndianMode</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IExtraOptionsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCLangConformance</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSignedPlainChar</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCRequirePrototypes</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCDiagWarnAreErr</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCompilerRuntimeInfo</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OutputFile</name>
-                    <state>$FILE_BNAME$.o</state>
-                </option>
-                <option>
-                    <name>CCLibConfigHeader</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>PreInclude</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CompilerMisraOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCIncludePath2</name>
-          <state>$PROJ_DIR$\..\..\..\..\mcu\apollo2</state>
-          <state>$PROJ_DIR$\..\..\..\..\utils</state>
-                </option>
-                <option>
-                    <name>CCStdIncCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCodeSection</name>
-                    <state>.text</state>
-                </option>
-                <option>
-                    <name>IProcessorMode2</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCOptLevel</name>
-                    <state>3</state>
-                </option>
-                <option>
-                    <name>CCOptStrategy</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCOptLevelSlave</name>
-                    <state>3</state>
-                </option>
-                <option>
-                    <name>CompilerMisraRules98</name>
-                    <version>0</version>
-                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
-                </option>
-                <option>
-                    <name>CompilerMisraRules04</name>
-                    <version>0</version>
-                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
-                </option>
-                <option>
-                    <name>CCPosIndRopi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosIndRwpi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosIndNoDynInit</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccLang</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccCDialect</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccAllowVLA</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccStaticDestr</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccCppInlineSemantics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccCmsis</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccFloatSemantics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCOptimizationNoSizeConstraints</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCNoLiteralPool</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCOptStrategySlave</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>CCGuardCalls</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCEncSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEncOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEncOutputBom</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCEncInput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccExceptions2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccRTTI2</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>AARM</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>10</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>AObjPrefix</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AEndian</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>ACaseSensitivity</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacroChars</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnWhat</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnOne</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AWarnRange1</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AWarnRange2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>ADebug</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AltRegisterNames</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ADefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AList</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AListHeader</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AListing</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>Includes</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacDefs</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacExps</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacExec</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OnlyAssed</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MultiLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>PageLengthCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>PageLength</name>
-                    <state>80</state>
-                </option>
-                <option>
-                    <name>TabSpacing</name>
-                    <state>8</state>
-                </option>
-                <option>
-                    <name>AXRef</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefDefines</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefInternal</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefDual</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AOutputFile</name>
-                    <state>$FILE_BNAME$.o</state>
-                </option>
-                <option>
-                    <name>ALimitErrorsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ALimitErrorsEdit</name>
-                    <state>100</state>
-                </option>
-                <option>
-                    <name>AIgnoreStdInclude</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AUserIncludes</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AExtraOptionsCheckV2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AExtraOptionsV2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AsmNoLiteralPool</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>OBJCOPY</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>1</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>OOCOutputFormat</name>
-                    <version>3</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OCOutputOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OOCOutputFile</name>
-                    <state>libam_hal.bin</state>
-                </option>
-                <option>
-                    <name>OOCCommandLineProducer</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OOCObjCopyEnable</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>CUSTOM</name>
-            <archiveVersion>3</archiveVersion>
-            <data>
-                <extensions></extensions>
-                <cmdline></cmdline>
-                <hasPrio>0</hasPrio>
-            </data>
-        </settings>
-        <settings>
-            <name>BICOMP</name>
-            <archiveVersion>0</archiveVersion>
-            <data />
-        </settings>
-        <settings>
-            <name>BUILDACTION</name>
-            <archiveVersion>1</archiveVersion>
-            <data>
-                <prebuild></prebuild>
-                <postbuild></postbuild>
-            </data>
-        </settings>
-        <settings>
-            <name>ILINK</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>20</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>IlinkLibIOConfig</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>XLinkMisraHandler</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkInputFileSlave</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkOutputFile</name>
-                    <state>libam_hal.out</state>
-                </option>
-                <option>
-                    <name>IlinkDebugInfoEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkKeepSymbols</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySymbol</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySegment</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryAlign</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkDefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkConfigDefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkMapFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogInitialization</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogModule</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogSection</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogVeneer</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFile</name>
-                    <state>$TOOLKIT_DIR$\config\linker\AmbiqMicro\apollo2_1024.icf</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFileSlave</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkEnableRemarks</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkSuppressDiags</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsRem</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsWarn</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsErr</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkWarningsAreErrors</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkUseExtraOptions</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkLowLevelInterfaceSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkAutoLibEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkAdditionalLibs</name>
-
-                </option>
-                <option>
-                    <name>IlinkOverrideProgramEntryLabel</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkProgramEntryLabelSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkProgramEntryLabel</name>
-                    <state>__iar_program_start</state>
-                </option>
-                <option>
-                    <name>DoFill</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>FillerByte</name>
-                    <state>0xFF</state>
-                </option>
-                <option>
-                    <name>FillerStart</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>FillerEnd</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>CrcSize</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcAlign</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcPoly</name>
-                    <state>0x11021</state>
-                </option>
-                <option>
-                    <name>CrcCompl</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CrcBitOrder</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CrcInitialValue</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>DoCrc</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkBE8Slave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkBufferedTerminalOutput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkStdoutInterfaceSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcFullSize</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIElfToolPostProcess</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogAutoLibSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogRedirSymbols</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogUnusedFragments</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCrcReverseByteOrder</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCrcUseAsInput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptInline</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptExceptionsAllow</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptExceptionsForce</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCmsis</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptMergeDuplSections</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkOptUseVfe</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptForceVfe</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkStackAnalysisEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkStackControlFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkStackCallGraphFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CrcAlgorithm</name>
-                    <version>1</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcUnitSize</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkThreadsSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkLogCallGraph</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFile_AltDefault</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkEncInput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkEncOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkEncOutputBom</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkHeapSelect</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkLocaleSelect</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>IARCHIVE</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>0</debug>
-                <option>
-                    <name>IarchiveInputs</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IarchiveOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IarchiveOutput</name>
-                    <state>###Unitialized###</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>BILINK</name>
-            <archiveVersion>0</archiveVersion>
-            <data />
-        </settings>
-    </configuration>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_adc.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_cachectrl.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_clkgen.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_ctimer.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_debug.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_flash.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_global.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_gpio.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_i2c_bit_bang.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_interrupt.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_iom.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_ios.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_itm.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_mcuctrl.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_otp.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_pdm.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_pwrctrl.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_queue.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_reset.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_rtc.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_stimer.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_sysctrl.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_systick.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_tpiu.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_ttp.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_uart.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_vcomp.c</name>
-  </file>
-  <file>
-    <name>$PROJ_DIR$\..\am_hal_wdt.c</name>
-  </file>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <fileVersion>3</fileVersion>
+    <configuration>
+        <name>Debug</name>
+        <toolchain>
+            <name>ARM</name>
+        </toolchain>
+        <debug>1</debug>
+        <settings>
+            <name>General</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <version>28</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>ExePath</name>
+                    <state>bin</state>
+                </option>
+                <option>
+                    <name>ObjPath</name>
+                    <state>bin</state>
+                </option>
+                <option>
+                    <name>ListPath</name>
+                    <state>bin</state>
+                </option>
+                <option>
+                    <name>GEndianMode</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>Input description</name>
+                    <state>Full formatting, without multibyte support.</state>
+                </option>
+                <option>
+                    <name>Output description</name>
+                    <state>Full formatting, without multibyte support.</state>
+                </option>
+                <option>
+                    <name>GOutputBinary</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGCoreOrChip</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelect</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelectSlave</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RTDescription</name>
+                    <state>Do not link with a runtime library.</state>
+                </option>
+                <option>
+                    <name>OGProductVersion</name>
+                    <state>7.40.2.8567</state>
+                </option>
+                <option>
+                    <name>OGLastSavedByProductVersion</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>GeneralEnableMisra</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVerbose</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGChipSelectEditMenu</name>
+                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
+                </option>
+                <option>
+                    <name>GenLowLevelInterface</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GEndianModeBE</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGBufferedTerminalOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GenStdoutInterface</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVer</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>RTConfigPath2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>GBECoreSlave</name>
+                    <version>25</version>
+                    <state>39</state>
+                </option>
+                <option>
+                    <name>OGUseCmsis</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGUseCmsisDspLib</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibThreads</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CoreVariant</name>
+                    <version>25</version>
+                    <state>39</state>
+                </option>
+                <option>
+                    <name>GFPUDeviceSlave</name>
+                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
+                </option>
+                <option>
+                    <name>FPU2</name>
+                    <version>0</version>
+                    <state>4</state>
+                </option>
+                <option>
+                    <name>NrRegs</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>NEON</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GFPUCoreSlave2</name>
+                    <version>25</version>
+                    <state>39</state>
+                </option>
+                <option>
+                    <name>OGCMSISPackSelectDevice</name>
+                </option>
+                <option>
+                    <name>OgLibHeap</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGLibAdditionalLocale</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGPrintfVariant</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGPrintfMultibyteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGScanfVariant</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGScanfMultibyteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GenLocaleTags</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>GenLocaleDisplayOnly</name>
+                    <state></state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>ICCARM</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>34</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>CCDefines</name>
+                    <state>iar</state>
+          <state>AM_DEBUG_ASSERT</state>
+          <state>AM_ASSERT_INVALID_THRESHOLD=0</state>
+          <state>AM_PART_APOLLO2</state>
+                </option>
+                <option>
+                    <name>CCPreprocFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocComments</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCMnemonics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCMessages</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableRemarks</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCDiagSuppress</name>
+                    <state>Pa050</state>
+                </option>
+                <option>
+                    <name>CCDiagRemark</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagWarning</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagError</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCAllowList</name>
+                    <version>1</version>
+                    <state>11111110</state>
+                </option>
+                <option>
+                    <name>CCDebugInfo</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IEndianMode</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCLangConformance</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSignedPlainChar</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCRequirePrototypes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCDiagWarnAreErr</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCompilerRuntimeInfo</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IFpuProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OutputFile</name>
+                    <state>$FILE_BNAME$.o</state>
+                </option>
+                <option>
+                    <name>CCLibConfigHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>PreInclude</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CompilerMisraOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCIncludePath2</name>
+          <state>$PROJ_DIR$\..\..\..\..\mcu\apollo2</state>
+          <state>$PROJ_DIR$\..\..\..\..\utils</state>
+                </option>
+                <option>
+                    <name>CCStdIncCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCodeSection</name>
+                    <state>.text</state>
+                </option>
+                <option>
+                    <name>IProcessorMode2</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCOptLevel</name>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>CCOptStrategy</name>
+                    <version>0</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCOptLevelSlave</name>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>CCPosIndRopi</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPosIndRwpi</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPosIndNoDynInit</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccLang</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCDialect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccAllowVLA</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccStaticDestr</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccCppInlineSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCmsis</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccFloatSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptimizationNoSizeConstraints</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCNoLiteralPool</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptStrategySlave</name>
+                    <version>0</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCGuardCalls</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCEncSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEncOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEncOutputBom</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCEncInput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccExceptions2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccRTTI2</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>AARM</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>10</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>AObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AEndian</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ACaseSensitivity</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacroChars</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnWhat</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnOne</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>ADebug</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AltRegisterNames</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ADefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AList</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AListHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AListing</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Includes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacDefs</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacExps</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacExec</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OnlyAssed</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MultiLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLengthCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLength</name>
+                    <state>80</state>
+                </option>
+                <option>
+                    <name>TabSpacing</name>
+                    <state>8</state>
+                </option>
+                <option>
+                    <name>AXRef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDefines</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefInternal</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDual</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AFpuProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AOutputFile</name>
+                    <state>$FILE_BNAME$.o</state>
+                </option>
+                <option>
+                    <name>ALimitErrorsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ALimitErrorsEdit</name>
+                    <state>100</state>
+                </option>
+                <option>
+                    <name>AIgnoreStdInclude</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AUserIncludes</name>
+          <state>$PROJ_DIR$\..\..\..\..\mcu\apollo2</state>
+          <state>$PROJ_DIR$\..\..\..\..\utils</state>
+                </option>
+                <option>
+                    <name>AExtraOptionsCheckV2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AExtraOptionsV2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AsmNoLiteralPool</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>OBJCOPY</name>
+            <archiveVersion>0</archiveVersion>
+            <data>
+                <version>1</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>OOCOutputFormat</name>
+                    <version>3</version>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>OCOutputOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OOCOutputFile</name>
+                    <state>libam_hal.bin</state>
+                </option>
+                <option>
+                    <name>OOCCommandLineProducer</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OOCObjCopyEnable</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CUSTOM</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <extensions></extensions>
+                <cmdline></cmdline>
+                <hasPrio>0</hasPrio>
+            </data>
+        </settings>
+        <settings>
+            <name>BICOMP</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+        <settings>
+            <name>BUILDACTION</name>
+            <archiveVersion>1</archiveVersion>
+            <data>
+                <prebuild></prebuild>
+                <postbuild></postbuild>
+            </data>
+        </settings>
+        <settings>
+            <name>ILINK</name>
+            <archiveVersion>0</archiveVersion>
+            <data>
+                <version>20</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>IlinkLibIOConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>XLinkMisraHandler</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkInputFileSlave</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkOutputFile</name>
+                    <state>libam_hal.out</state>
+                </option>
+                <option>
+                    <name>IlinkDebugInfoEnable</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkKeepSymbols</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySymbol</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySegment</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryAlign</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkDefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkConfigDefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkMapFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogInitialization</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogModule</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogSection</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogVeneer</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIcfOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIcfFile</name>
+                    <state>$PROJ_DIR$\libam_hal.icf</state>
+                </option>
+                <option>
+                    <name>IlinkIcfFileSlave</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkEnableRemarks</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkSuppressDiags</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkTreatAsRem</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkTreatAsWarn</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkTreatAsErr</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkWarningsAreErrors</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkUseExtraOptions</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkLowLevelInterfaceSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkAutoLibEnable</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkAdditionalLibs</name>
+
+                </option>
+                <option>
+                    <name>IlinkOverrideProgramEntryLabel</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkProgramEntryLabelSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkProgramEntryLabel</name>
+                    <state>__iar_program_start</state>
+                </option>
+                <option>
+                    <name>DoFill</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>FillerByte</name>
+                    <state>0xFF</state>
+                </option>
+                <option>
+                    <name>FillerStart</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>FillerEnd</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>CrcSize</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcAlign</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcPoly</name>
+                    <state>0x11021</state>
+                </option>
+                <option>
+                    <name>CrcCompl</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcBitOrder</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcInitialValue</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>DoCrc</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkBE8Slave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkBufferedTerminalOutput</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkStdoutInterfaceSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcFullSize</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIElfToolPostProcess</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogAutoLibSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogRedirSymbols</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogUnusedFragments</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkCrcReverseByteOrder</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkCrcUseAsInput</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptInline</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkOptExceptionsAllow</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptExceptionsForce</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkCmsis</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptMergeDuplSections</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkOptUseVfe</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptForceVfe</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkStackAnalysisEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkStackControlFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkStackCallGraphFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CrcAlgorithm</name>
+                    <version>1</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcUnitSize</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkThreadsSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkLogCallGraph</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIcfFile_AltDefault</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkEncInput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkEncOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkEncOutputBom</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkHeapSelect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkLocaleSelect</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>IARCHIVE</name>
+            <archiveVersion>0</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>IarchiveInputs</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IarchiveOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IarchiveOutput</name>
+                    <state>libam_hal.a</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>BILINK</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+    </configuration>
+    <configuration>
+        <name>Release</name>
+        <toolchain>
+            <name>ARM</name>
+        </toolchain>
+        <debug>0</debug>
+        <settings>
+            <name>General</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <version>28</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>ExePath</name>
+                    <state>bin</state>
+                </option>
+                <option>
+                    <name>ObjPath</name>
+                    <state>bin</state>
+                </option>
+                <option>
+                    <name>ListPath</name>
+                    <state>bin</state>
+                </option>
+                <option>
+                    <name>GEndianMode</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>Input description</name>
+                    <state>Automatic choice of formatter.</state>
+                </option>
+                <option>
+                    <name>Output description</name>
+                    <state>Automatic choice of formatter.</state>
+                </option>
+                <option>
+                    <name>GOutputBinary</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGCoreOrChip</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelect</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelectSlave</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RTDescription</name>
+                    <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+                </option>
+                <option>
+                    <name>OGProductVersion</name>
+                    <state>7.40.2.8567</state>
+                </option>
+                <option>
+                    <name>OGLastSavedByProductVersion</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>GeneralEnableMisra</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVerbose</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGChipSelectEditMenu</name>
+                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
+                </option>
+                <option>
+                    <name>GenLowLevelInterface</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GEndianModeBE</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGBufferedTerminalOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GenStdoutInterface</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVer</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>RTConfigPath2</name>
+                    <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+                </option>
+                <option>
+                    <name>GBECoreSlave</name>
+                    <version>25</version>
+                    <state>39</state>
+                </option>
+                <option>
+                    <name>OGUseCmsis</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGUseCmsisDspLib</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibThreads</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CoreVariant</name>
+                    <version>25</version>
+                    <state>39</state>
+                </option>
+                <option>
+                    <name>GFPUDeviceSlave</name>
+                    <state>AMAPH1KK-KBR	AmbiqMicro AMAPH1KK-KBR</state>
+                </option>
+                <option>
+                    <name>FPU2</name>
+                    <version>0</version>
+                    <state>4</state>
+                </option>
+                <option>
+                    <name>NrRegs</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>NEON</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GFPUCoreSlave2</name>
+                    <version>25</version>
+                    <state>39</state>
+                </option>
+                <option>
+                    <name>OGCMSISPackSelectDevice</name>
+                </option>
+                <option>
+                    <name>OgLibHeap</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGLibAdditionalLocale</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGPrintfVariant</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGPrintfMultibyteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OGScanfVariant</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OGScanfMultibyteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GenLocaleTags</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>GenLocaleDisplayOnly</name>
+                    <state></state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>ICCARM</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>34</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CCDefines</name>
+                    <state>iar</state>
+          <state>AM_DEBUG_ASSERT</state>
+          <state>AM_ASSERT_INVALID_THRESHOLD=0</state>
+          <state>AM_PART_APOLLO2</state>
+                </option>
+                <option>
+                    <name>CCPreprocFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocComments</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCMnemonics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCMessages</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableRemarks</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCDiagSuppress</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagRemark</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagWarning</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagError</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCAllowList</name>
+                    <version>1</version>
+                    <state>11111110</state>
+                </option>
+                <option>
+                    <name>CCDebugInfo</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IEndianMode</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCLangConformance</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCSignedPlainChar</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCRequirePrototypes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCDiagWarnAreErr</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCompilerRuntimeInfo</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IFpuProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OutputFile</name>
+                    <state>$FILE_BNAME$.o</state>
+                </option>
+                <option>
+                    <name>CCLibConfigHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>PreInclude</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CompilerMisraOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCIncludePath2</name>
+          <state>$PROJ_DIR$\..\..\..\..\mcu\apollo2</state>
+          <state>$PROJ_DIR$\..\..\..\..\utils</state>
+                </option>
+                <option>
+                    <name>CCStdIncCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCodeSection</name>
+                    <state>.text</state>
+                </option>
+                <option>
+                    <name>IProcessorMode2</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCOptLevel</name>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>CCOptStrategy</name>
+                    <version>0</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCOptLevelSlave</name>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>CCPosIndRopi</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPosIndRwpi</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPosIndNoDynInit</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccLang</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCDialect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccAllowVLA</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccStaticDestr</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccCppInlineSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCmsis</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccFloatSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptimizationNoSizeConstraints</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCNoLiteralPool</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptStrategySlave</name>
+                    <version>0</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>CCGuardCalls</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCEncSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEncOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEncOutputBom</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCEncInput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccExceptions2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccRTTI2</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>AARM</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>10</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>AObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AEndian</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ACaseSensitivity</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacroChars</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnWhat</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnOne</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>ADebug</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AltRegisterNames</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ADefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AList</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AListHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AListing</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Includes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacDefs</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacExps</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacExec</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OnlyAssed</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MultiLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLengthCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLength</name>
+                    <state>80</state>
+                </option>
+                <option>
+                    <name>TabSpacing</name>
+                    <state>8</state>
+                </option>
+                <option>
+                    <name>AXRef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDefines</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefInternal</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDual</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AFpuProcessor</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AOutputFile</name>
+                    <state>$FILE_BNAME$.o</state>
+                </option>
+                <option>
+                    <name>ALimitErrorsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ALimitErrorsEdit</name>
+                    <state>100</state>
+                </option>
+                <option>
+                    <name>AIgnoreStdInclude</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AUserIncludes</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AExtraOptionsCheckV2</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AExtraOptionsV2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AsmNoLiteralPool</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>OBJCOPY</name>
+            <archiveVersion>0</archiveVersion>
+            <data>
+                <version>1</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>OOCOutputFormat</name>
+                    <version>3</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OCOutputOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OOCOutputFile</name>
+                    <state>libam_hal.bin</state>
+                </option>
+                <option>
+                    <name>OOCCommandLineProducer</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OOCObjCopyEnable</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CUSTOM</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <extensions></extensions>
+                <cmdline></cmdline>
+                <hasPrio>0</hasPrio>
+            </data>
+        </settings>
+        <settings>
+            <name>BICOMP</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+        <settings>
+            <name>BUILDACTION</name>
+            <archiveVersion>1</archiveVersion>
+            <data>
+                <prebuild></prebuild>
+                <postbuild></postbuild>
+            </data>
+        </settings>
+        <settings>
+            <name>ILINK</name>
+            <archiveVersion>0</archiveVersion>
+            <data>
+                <version>20</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>IlinkLibIOConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>XLinkMisraHandler</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkInputFileSlave</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkOutputFile</name>
+                    <state>libam_hal.out</state>
+                </option>
+                <option>
+                    <name>IlinkDebugInfoEnable</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkKeepSymbols</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySymbol</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySegment</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryAlign</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkDefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkConfigDefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkMapFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogInitialization</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogModule</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogSection</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogVeneer</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIcfOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIcfFile</name>
+                    <state>$TOOLKIT_DIR$\config\linker\AmbiqMicro\apollo2_1024.icf</state>
+                </option>
+                <option>
+                    <name>IlinkIcfFileSlave</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkEnableRemarks</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkSuppressDiags</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkTreatAsRem</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkTreatAsWarn</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkTreatAsErr</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkWarningsAreErrors</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkUseExtraOptions</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkLowLevelInterfaceSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkAutoLibEnable</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkAdditionalLibs</name>
+
+                </option>
+                <option>
+                    <name>IlinkOverrideProgramEntryLabel</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkProgramEntryLabelSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkProgramEntryLabel</name>
+                    <state>__iar_program_start</state>
+                </option>
+                <option>
+                    <name>DoFill</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>FillerByte</name>
+                    <state>0xFF</state>
+                </option>
+                <option>
+                    <name>FillerStart</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>FillerEnd</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>CrcSize</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcAlign</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcPoly</name>
+                    <state>0x11021</state>
+                </option>
+                <option>
+                    <name>CrcCompl</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcBitOrder</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcInitialValue</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>DoCrc</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkBE8Slave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkBufferedTerminalOutput</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkStdoutInterfaceSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcFullSize</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIElfToolPostProcess</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogAutoLibSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogRedirSymbols</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkLogUnusedFragments</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkCrcReverseByteOrder</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkCrcUseAsInput</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptInline</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptExceptionsAllow</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptExceptionsForce</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkCmsis</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptMergeDuplSections</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkOptUseVfe</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkOptForceVfe</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkStackAnalysisEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkStackControlFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkStackCallGraphFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CrcAlgorithm</name>
+                    <version>1</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcUnitSize</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkThreadsSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkLogCallGraph</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkIcfFile_AltDefault</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkEncInput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkEncOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IlinkEncOutputBom</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkHeapSelect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkLocaleSelect</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>IARCHIVE</name>
+            <archiveVersion>0</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>IarchiveInputs</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IarchiveOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IarchiveOutput</name>
+                    <state>###Unitialized###</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>BILINK</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+    </configuration>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_adc.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_cachectrl.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_clkgen.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_ctimer.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_debug.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_flash.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_global.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_gpio.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_i2c_bit_bang.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_interrupt.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_iom.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_ios.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_itm.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_mcuctrl.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_otp.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_pdm.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_pwrctrl.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_queue.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_reset.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_rtc.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_stimer.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_sysctrl.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_systick.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_tpiu.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_ttp.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_uart.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_vcomp.c</name>
+  </file>
+  <file>
+    <name>$PROJ_DIR$\..\am_hal_wdt.c</name>
+  </file>
+</project>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.eww b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.eww
index a37bed5d2..ad7baed96 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.eww
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/iar/libam_hal.eww
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<workspace>
-  <project>
-      <path>$WS_DIR$\libam_hal.ewp</path>
-  </project>
-  <batchBuild/>
-</workspace>
-
-
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<workspace>
+  <project>
+      <path>$WS_DIR$\libam_hal.ewp</path>
+  </project>
+  <batchBuild/>
+</workspace>
+
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/Makefile b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/Makefile
index 6f6ae0a88..71338e31b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/Makefile
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/Makefile
@@ -30,24 +30,38 @@
 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
-# 
-# This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+#
+# This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 #
 #******************************************************************************
+TARGET = libam_hal
+COMPILERNAME = Keil
+PROJECT = libam_hal_Keil
+CONFIG := $(CURDIR)/bin
+AM_SoftwareRoot ?= ../../..
 
 SHELL=/bin/bash
+#### Required Executables ####
 K := $(shell type -p uv4)
+RM = $(shell which rm 2>/dev/null)
 
+.PHONY: all clean directories
 ifeq ($(K),)
 all clean:
-	$(info Keil tools not found, skipping...)
+	$(info Tools w/$(COMPILERNAME) not installed.)
+	$(RM) -rf bin
 else
-all:
-	+mkdir -p bin ;\
+all: directories
 	(uv4 -b -t "libam_hal" libam_hal.uvprojx -j0) || \
 	    ( RC=$$?;[ $$RC -eq 1 ] || exit $$RC )
+
+directories: $(CONFIG)
+
+$(CONFIG):
+	@mkdir -p $@
+
 clean:
 	@+echo Cleaning... ;\
-	rm -rf bin
+	$(RM) -rf $(CONFIG)
 endif
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvoptx b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvoptx
index bfd558e89..46cac551d 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvoptx
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvoptx
@@ -1,632 +1,632 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
-
-  <SchemaVersion>1.0</SchemaVersion>
-
-  <Header>### uVision Project, (C) Keil Software</Header>
-
-  <Extensions>
-    <cExt>*.c</cExt>
-    <aExt>*.s*; *.src; *.a*</aExt>
-    <oExt>*.obj</oExt>
-    <lExt>*.lib</lExt>
-    <tExt>*.txt; *.h; *.inc</tExt>
-    <pExt>*.plm</pExt>
-    <CppX>*.cpp</CppX>
-    <nMigrate>0</nMigrate>
-  </Extensions>
-
-  <DaveTm>
-    <dwLowDateTime>0</dwLowDateTime>
-    <dwHighDateTime>0</dwHighDateTime>
-  </DaveTm>
-
-  <Target>
-    <TargetName>libam_hal</TargetName>
-    <ToolsetNumber>0x4</ToolsetNumber>
-    <ToolsetName>ARM-ADS</ToolsetName>
-    <TargetOption>
-      <CLKADS>48000000</CLKADS>
-      <OPTTT>
-        <gFlags>1</gFlags>
-        <BeepAtEnd>1</BeepAtEnd>
-        <RunSim>0</RunSim>
-        <RunTarget>1</RunTarget>
-        <RunAbUc>0</RunAbUc>
-      </OPTTT>
-      <OPTHX>
-        <HexSelection>1</HexSelection>
-        <FlashByte>65535</FlashByte>
-        <HexRangeLowAddress>0</HexRangeLowAddress>
-        <HexRangeHighAddress>0</HexRangeHighAddress>
-        <HexOffset>0</HexOffset>
-      </OPTHX>
-      <OPTLEX>
-        <PageWidth>79</PageWidth>
-        <PageLength>66</PageLength>
-        <TabStop>8</TabStop>
-        <ListingPath>.\Listings\</ListingPath>
-      </OPTLEX>
-      <ListingPage>
-        <CreateCListing>1</CreateCListing>
-        <CreateAListing>1</CreateAListing>
-        <CreateLListing>1</CreateLListing>
-        <CreateIListing>0</CreateIListing>
-        <AsmCond>1</AsmCond>
-        <AsmSymb>1</AsmSymb>
-        <AsmXref>0</AsmXref>
-        <CCond>1</CCond>
-        <CCode>0</CCode>
-        <CListInc>0</CListInc>
-        <CSymb>0</CSymb>
-        <LinkerCodeListing>0</LinkerCodeListing>
-      </ListingPage>
-      <OPTXL>
-        <LMap>1</LMap>
-        <LComments>1</LComments>
-        <LGenerateSymbols>1</LGenerateSymbols>
-        <LLibSym>1</LLibSym>
-        <LLines>1</LLines>
-        <LLocSym>1</LLocSym>
-        <LPubSym>1</LPubSym>
-        <LXref>0</LXref>
-        <LExpSel>0</LExpSel>
-      </OPTXL>
-      <OPTFL>
-        <tvExp>1</tvExp>
-        <tvExpOptDlg>0</tvExpOptDlg>
-        <IsCurrentTarget>1</IsCurrentTarget>
-      </OPTFL>
-      <CpuCode>255</CpuCode>
-      <DebugOpt>
-        <uSim>0</uSim>
-        <uTrg>1</uTrg>
-        <sLdApp>1</sLdApp>
-        <sGomain>1</sGomain>
-        <sRbreak>1</sRbreak>
-        <sRwatch>1</sRwatch>
-        <sRmem>1</sRmem>
-        <sRfunc>1</sRfunc>
-        <sRbox>1</sRbox>
-        <tLdApp>0</tLdApp>
-        <tGomain>0</tGomain>
-        <tRbreak>1</tRbreak>
-        <tRwatch>1</tRwatch>
-        <tRmem>1</tRmem>
-        <tRfunc>0</tRfunc>
-        <tRbox>1</tRbox>
-        <tRtrace>1</tRtrace>
-        <sRSysVw>1</sRSysVw>
-        <tRSysVw>1</tRSysVw>
-        <sRunDeb>0</sRunDeb>
-        <sLrtime>0</sLrtime>
-        <bEvRecOn>1</bEvRecOn>
-        <nTsel>3</nTsel>
-        <sDll></sDll>
-        <sDllPa></sDllPa>
-        <sDlgDll></sDlgDll>
-        <sDlgPa></sDlgPa>
-        <sIfile></sIfile>
-        <tDll></tDll>
-        <tDllPa></tDllPa>
-        <tDlgDll></tDlgDll>
-        <tDlgPa></tDlgPa>
-        <tIfile>.\Dbg_RAM.ini</tIfile>
-        <pMon>Segger\JL2CM3.dll</pMon>
-      </DebugOpt>
-      <TargetDriverDllRegistry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>JL2CM3</Key>
-          <Name>-U483027775 -O2510 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS2 -TDT0 -TDC1F -TIE1 -TIP0 -TB1 -TFE0 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo2.FLM -FS00 -FL0100000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM)</Name>
-        </SetRegEntry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>DbgCM</Key>
-          <Name>-U-O206 -O206 -S2 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS2 -TDT0 -TDC1F -TIE1 -TIP8 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo -FS00 -FL080000</Name>
-        </SetRegEntry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>UL2CM3</Key>
-          <Name>-UV0264NGE -O2510 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS8002 -TDT0 -TDC1F -TIE1 -TIP8 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo2.FLM -FS00 -FL0100000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM)</Name>
-        </SetRegEntry>
-      </TargetDriverDllRegistry>
-      <Breakpoint/>
-      <Tracepoint>
-        <THDelay>0</THDelay>
-      </Tracepoint>
-      <DebugFlag>
-        <trace>0</trace>
-        <periodic>1</periodic>
-        <aLwin>1</aLwin>
-        <aCover>0</aCover>
-        <aSer1>0</aSer1>
-        <aSer2>0</aSer2>
-        <aPa>0</aPa>
-        <viewmode>1</viewmode>
-        <vrSel>0</vrSel>
-        <aSym>0</aSym>
-        <aTbox>0</aTbox>
-        <AscS1>0</AscS1>
-        <AscS2>0</AscS2>
-        <AscS3>0</AscS3>
-        <aSer3>0</aSer3>
-        <eProf>0</eProf>
-        <aLa>0</aLa>
-        <aPa1>0</aPa1>
-        <AscS4>0</AscS4>
-        <aSer4>1</aSer4>
-        <StkLoc>0</StkLoc>
-        <TrcWin>0</TrcWin>
-        <newCpu>0</newCpu>
-        <uProt>0</uProt>
-      </DebugFlag>
-      <LintExecutable></LintExecutable>
-      <LintConfigFile></LintConfigFile>
-      <bLintAuto>0</bLintAuto>
-      <Lin2Executable></Lin2Executable>
-      <Lin2ConfigFile></Lin2ConfigFile>
-      <bLin2Auto>0</bLin2Auto>
-      <bAutoGenD>0</bAutoGenD>
-      <bAuto2GenD>0</bAuto2GenD>
-    </TargetOption>
-  </Target>
-
-  <Group>
-    <GroupName>source_files</GroupName>
-    <tvExp>1</tvExp>
-    <tvExpOptDlg>0</tvExpOptDlg>
-    <cbSel>0</cbSel>
-    <RteFlg>0</RteFlg>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>1</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_adc.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_adc.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>2</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_cachectrl.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_cachectrl.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>3</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_clkgen.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_clkgen.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>4</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_ctimer.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_ctimer.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>5</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_debug.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_debug.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>6</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_flash.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_flash.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>7</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_global.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_global.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>8</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_gpio.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_gpio.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>9</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_i2c_bit_bang.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_i2c_bit_bang.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>10</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_interrupt.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_interrupt.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>11</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_iom.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_iom.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>12</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_ios.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_ios.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>13</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_itm.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_itm.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>14</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_mcuctrl.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_mcuctrl.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>15</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_otp.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_otp.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>16</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_pdm.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_pdm.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>17</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_pwrctrl.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_pwrctrl.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>18</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_queue.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_queue.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>19</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_reset.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_reset.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>20</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_rtc.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_rtc.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>21</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_stimer.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_stimer.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>22</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_sysctrl.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_sysctrl.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>23</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_systick.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_systick.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>24</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_tpiu.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_tpiu.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>25</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_ttp.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_ttp.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>26</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_uart.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_uart.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>27</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_vcomp.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_vcomp.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>28</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
-      <bDave2>0</bDave2>
-      <PathWithFileName>.././am_hal_wdt.c</PathWithFileName>
-      <FilenameWithoutPath>am_hal_wdt.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-  </Group>
-
-</ProjectOpt>
-
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+  <SchemaVersion>1.0</SchemaVersion>
+
+  <Header>### uVision Project, (C) Keil Software</Header>
+
+  <Extensions>
+    <cExt>*.c</cExt>
+    <aExt>*.s*; *.src; *.a*</aExt>
+    <oExt>*.obj</oExt>
+    <lExt>*.lib</lExt>
+    <tExt>*.txt; *.h; *.inc</tExt>
+    <pExt>*.plm</pExt>
+    <CppX>*.cpp</CppX>
+    <nMigrate>0</nMigrate>
+  </Extensions>
+
+  <DaveTm>
+    <dwLowDateTime>0</dwLowDateTime>
+    <dwHighDateTime>0</dwHighDateTime>
+  </DaveTm>
+
+  <Target>
+    <TargetName>libam_hal</TargetName>
+    <ToolsetNumber>0x4</ToolsetNumber>
+    <ToolsetName>ARM-ADS</ToolsetName>
+    <TargetOption>
+      <CLKADS>48000000</CLKADS>
+      <OPTTT>
+        <gFlags>1</gFlags>
+        <BeepAtEnd>1</BeepAtEnd>
+        <RunSim>0</RunSim>
+        <RunTarget>1</RunTarget>
+        <RunAbUc>0</RunAbUc>
+      </OPTTT>
+      <OPTHX>
+        <HexSelection>1</HexSelection>
+        <FlashByte>65535</FlashByte>
+        <HexRangeLowAddress>0</HexRangeLowAddress>
+        <HexRangeHighAddress>0</HexRangeHighAddress>
+        <HexOffset>0</HexOffset>
+      </OPTHX>
+      <OPTLEX>
+        <PageWidth>79</PageWidth>
+        <PageLength>66</PageLength>
+        <TabStop>8</TabStop>
+        <ListingPath>.\Listings\</ListingPath>
+      </OPTLEX>
+      <ListingPage>
+        <CreateCListing>1</CreateCListing>
+        <CreateAListing>1</CreateAListing>
+        <CreateLListing>1</CreateLListing>
+        <CreateIListing>0</CreateIListing>
+        <AsmCond>1</AsmCond>
+        <AsmSymb>1</AsmSymb>
+        <AsmXref>0</AsmXref>
+        <CCond>1</CCond>
+        <CCode>0</CCode>
+        <CListInc>0</CListInc>
+        <CSymb>0</CSymb>
+        <LinkerCodeListing>0</LinkerCodeListing>
+      </ListingPage>
+      <OPTXL>
+        <LMap>1</LMap>
+        <LComments>1</LComments>
+        <LGenerateSymbols>1</LGenerateSymbols>
+        <LLibSym>1</LLibSym>
+        <LLines>1</LLines>
+        <LLocSym>1</LLocSym>
+        <LPubSym>1</LPubSym>
+        <LXref>0</LXref>
+        <LExpSel>0</LExpSel>
+      </OPTXL>
+      <OPTFL>
+        <tvExp>1</tvExp>
+        <tvExpOptDlg>0</tvExpOptDlg>
+        <IsCurrentTarget>1</IsCurrentTarget>
+      </OPTFL>
+      <CpuCode>255</CpuCode>
+      <DebugOpt>
+        <uSim>0</uSim>
+        <uTrg>1</uTrg>
+        <sLdApp>1</sLdApp>
+        <sGomain>1</sGomain>
+        <sRbreak>1</sRbreak>
+        <sRwatch>1</sRwatch>
+        <sRmem>1</sRmem>
+        <sRfunc>1</sRfunc>
+        <sRbox>1</sRbox>
+        <tLdApp>0</tLdApp>
+        <tGomain>0</tGomain>
+        <tRbreak>1</tRbreak>
+        <tRwatch>1</tRwatch>
+        <tRmem>1</tRmem>
+        <tRfunc>0</tRfunc>
+        <tRbox>1</tRbox>
+        <tRtrace>1</tRtrace>
+        <sRSysVw>1</sRSysVw>
+        <tRSysVw>1</tRSysVw>
+        <sRunDeb>0</sRunDeb>
+        <sLrtime>0</sLrtime>
+        <bEvRecOn>1</bEvRecOn>
+        <nTsel>3</nTsel>
+        <sDll></sDll>
+        <sDllPa></sDllPa>
+        <sDlgDll></sDlgDll>
+        <sDlgPa></sDlgPa>
+        <sIfile></sIfile>
+        <tDll></tDll>
+        <tDllPa></tDllPa>
+        <tDlgDll></tDlgDll>
+        <tDlgPa></tDlgPa>
+        <tIfile>.\Dbg_RAM.ini</tIfile>
+        <pMon>Segger\JL2CM3.dll</pMon>
+      </DebugOpt>
+      <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>JL2CM3</Key>
+          <Name>-U483027775 -O2510 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS2 -TDT0 -TDC1F -TIE1 -TIP0 -TB1 -TFE0 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo2.FLM -FS00 -FL0100000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM)</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DbgCM</Key>
+          <Name>-U-O206 -O206 -S2 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS2 -TDT0 -TDC1F -TIE1 -TIP8 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo -FS00 -FL080000</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>UL2CM3</Key>
+          <Name>-UV0264NGE -O2510 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS8002 -TDT0 -TDC1F -TIE1 -TIP8 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo2.FLM -FS00 -FL0100000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM)</Name>
+        </SetRegEntry>
+      </TargetDriverDllRegistry>
+      <Breakpoint/>
+      <Tracepoint>
+        <THDelay>0</THDelay>
+      </Tracepoint>
+      <DebugFlag>
+        <trace>0</trace>
+        <periodic>1</periodic>
+        <aLwin>1</aLwin>
+        <aCover>0</aCover>
+        <aSer1>0</aSer1>
+        <aSer2>0</aSer2>
+        <aPa>0</aPa>
+        <viewmode>1</viewmode>
+        <vrSel>0</vrSel>
+        <aSym>0</aSym>
+        <aTbox>0</aTbox>
+        <AscS1>0</AscS1>
+        <AscS2>0</AscS2>
+        <AscS3>0</AscS3>
+        <aSer3>0</aSer3>
+        <eProf>0</eProf>
+        <aLa>0</aLa>
+        <aPa1>0</aPa1>
+        <AscS4>0</AscS4>
+        <aSer4>1</aSer4>
+        <StkLoc>0</StkLoc>
+        <TrcWin>0</TrcWin>
+        <newCpu>0</newCpu>
+        <uProt>0</uProt>
+      </DebugFlag>
+      <LintExecutable></LintExecutable>
+      <LintConfigFile></LintConfigFile>
+      <bLintAuto>0</bLintAuto>
+      <Lin2Executable></Lin2Executable>
+      <Lin2ConfigFile></Lin2ConfigFile>
+      <bLin2Auto>0</bLin2Auto>
+      <bAutoGenD>0</bAutoGenD>
+      <bAuto2GenD>0</bAuto2GenD>
+    </TargetOption>
+  </Target>
+
+  <Group>
+    <GroupName>source_files</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>1</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_adc.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_adc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>2</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_cachectrl.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_cachectrl.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>3</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_clkgen.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_clkgen.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>4</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_ctimer.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_ctimer.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>5</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_debug.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_debug.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>6</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_flash.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_flash.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>7</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_global.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_global.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>8</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_gpio.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_gpio.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>9</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_i2c_bit_bang.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_i2c_bit_bang.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>10</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_interrupt.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_interrupt.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>11</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_iom.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_iom.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>12</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_ios.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_ios.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>13</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_itm.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_itm.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>14</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_mcuctrl.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_mcuctrl.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>15</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_otp.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_otp.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>16</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_pdm.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_pdm.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>17</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_pwrctrl.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_pwrctrl.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>18</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_queue.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_queue.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>19</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_reset.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_reset.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>20</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_rtc.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_rtc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>21</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_stimer.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_stimer.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>22</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_sysctrl.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_sysctrl.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>23</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_systick.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_systick.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>24</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_tpiu.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_tpiu.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>25</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_ttp.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_ttp.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>26</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_uart.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_uart.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>27</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_vcomp.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_vcomp.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>28</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <Focus>0</Focus>
+      <ColumnNumber>0</ColumnNumber>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <TopLine>0</TopLine>
+      <CurrentLine>0</CurrentLine>
+      <bDave2>0</bDave2>
+      <PathWithFileName>.././am_hal_wdt.c</PathWithFileName>
+      <FilenameWithoutPath>am_hal_wdt.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+</ProjectOpt>
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvprojx b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvprojx
index e53f6caed..42f58a5ef 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvprojx
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/hal/keil/libam_hal.uvprojx
@@ -1,529 +1,529 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
-
-  <SchemaVersion>2.1</SchemaVersion>
-
-  <Header>### uVision Project, (C) Keil Software</Header>
-
-  <Targets>
-    <Target>
-      <TargetName>libam_hal</TargetName>
-      <ToolsetNumber>0x4</ToolsetNumber>
-      <ToolsetName>ARM-ADS</ToolsetName>
-      <pCCUsed>5060422::V5.06 update 4 (build 422)::ARMCC</pCCUsed>
-      <TargetOption>
-        <TargetCommonOption>
-          <Device>AMAPH1KK-KBR</Device>
-          <Vendor>Ambiq Micro</Vendor>
-          <PackID>AmbiqMicro.Apollo_DFP.1.0.0</PackID>
-          <PackURL>http://s3.asia.ambiqmicro.com/pack/</PackURL>
-          <Cpu>IROM(0x00000000,0x100000) IRAM(0x10000000,0x40000) CPUTYPE("Cortex-M4") FPU2 CLOCK(24000000) ELITTLE</Cpu>
-          <FlashUtilSpec></FlashUtilSpec>
-          <StartupFile></StartupFile>
-          <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD10000000 -FC4000 -FN1 -FF0Apollo -FS00 -FL010000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM))</FlashDriverDll>
-          <DeviceId>0</DeviceId>
-          <RegisterFile></RegisterFile>
-          <MemoryEnv></MemoryEnv>
-          <Cmp></Cmp>
-          <Asm></Asm>
-          <Linker></Linker>
-          <OHString></OHString>
-          <InfinionOptionDll></InfinionOptionDll>
-          <SLE66CMisc></SLE66CMisc>
-          <SLE66AMisc></SLE66AMisc>
-          <SLE66LinkerMisc></SLE66LinkerMisc>
-          <SFDFile>$$Device:AMAPH1KK-KBR$SVD\Apollo2.svd</SFDFile>
-          <bCustSvd>0</bCustSvd>
-          <UseEnv>0</UseEnv>
-          <BinPath></BinPath>
-          <IncludePath></IncludePath>
-          <LibPath></LibPath>
-          <RegisterFilePath>1024 BGA$Device\Include\Apollo2.h\</RegisterFilePath>
-          <DBRegisterFilePath>1024 BGA$Device\Include\Apollo2.h\</DBRegisterFilePath>
-          <TargetStatus>
-            <Error>0</Error>
-            <ExitCodeStop>0</ExitCodeStop>
-            <ButtonStop>0</ButtonStop>
-            <NotGenerated>0</NotGenerated>
-            <InvalidFlash>1</InvalidFlash>
-          </TargetStatus>
-          <OutputDirectory>.\bin\</OutputDirectory>
-          <OutputName>libam_hal</OutputName>
-          <CreateExecutable>0</CreateExecutable>
-          <CreateLib>1</CreateLib>
-          <CreateHexFile>0</CreateHexFile>
-          <DebugInformation>0</DebugInformation>
-          <BrowseInformation>1</BrowseInformation>
-          <ListingPath>.\Listings\</ListingPath>
-          <HexFormatSelection>1</HexFormatSelection>
-          <Merge32K>0</Merge32K>
-          <CreateBatchFile>0</CreateBatchFile>
-          <BeforeCompile>
-            <RunUserProg1>0</RunUserProg1>
-            <RunUserProg2>0</RunUserProg2>
-            <UserProg1Name></UserProg1Name>
-            <UserProg2Name></UserProg2Name>
-            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
-            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
-            <nStopU1X>0</nStopU1X>
-            <nStopU2X>0</nStopU2X>
-          </BeforeCompile>
-          <BeforeMake>
-            <RunUserProg1>0</RunUserProg1>
-            <RunUserProg2>0</RunUserProg2>
-            <UserProg1Name></UserProg1Name>
-            <UserProg2Name></UserProg2Name>
-            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
-            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
-            <nStopB1X>0</nStopB1X>
-            <nStopB2X>0</nStopB2X>
-          </BeforeMake>
-          <AfterMake>
-            <RunUserProg1>1</RunUserProg1>
-            <RunUserProg2>1</RunUserProg2>
-            <UserProg1Name>fromelf --bin --output bin\libam_hal.bin bin\libam_hal.axf</UserProg1Name>
-            <UserProg2Name>fromelf -cedrst --output bin\libam_hal.txt bin\libam_hal.axf</UserProg2Name>
-            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
-            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
-            <nStopA1X>0</nStopA1X>
-            <nStopA2X>0</nStopA2X>
-          </AfterMake>
-          <SelectedForBatchBuild>0</SelectedForBatchBuild>
-          <SVCSIdString></SVCSIdString>
-        </TargetCommonOption>
-        <CommonProperty>
-          <UseCPPCompiler>0</UseCPPCompiler>
-          <RVCTCodeConst>0</RVCTCodeConst>
-          <RVCTZI>0</RVCTZI>
-          <RVCTOtherData>0</RVCTOtherData>
-          <ModuleSelection>0</ModuleSelection>
-          <IncludeInBuild>1</IncludeInBuild>
-          <AlwaysBuild>0</AlwaysBuild>
-          <GenerateAssemblyFile>0</GenerateAssemblyFile>
-          <AssembleAssemblyFile>0</AssembleAssemblyFile>
-          <PublicsOnly>0</PublicsOnly>
-          <StopOnExitCode>3</StopOnExitCode>
-          <CustomArgument></CustomArgument>
-          <IncludeLibraryModules></IncludeLibraryModules>
-          <ComprImg>1</ComprImg>
-        </CommonProperty>
-        <DllOption>
-          <SimDllName>SARMCM3.DLL</SimDllName>
-          <SimDllArguments>  -MPU</SimDllArguments>
-          <SimDlgDll>DCM.DLL</SimDlgDll>
-          <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
-          <TargetDllName>SARMCM3.DLL</TargetDllName>
-          <TargetDllArguments> -MPU</TargetDllArguments>
-          <TargetDlgDll>TCM.DLL</TargetDlgDll>
-          <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
-        </DllOption>
-        <DebugOption>
-          <OPTHX>
-            <HexSelection>1</HexSelection>
-            <HexRangeLowAddress>0</HexRangeLowAddress>
-            <HexRangeHighAddress>0</HexRangeHighAddress>
-            <HexOffset>0</HexOffset>
-            <Oh166RecLen>16</Oh166RecLen>
-          </OPTHX>
-        </DebugOption>
-        <Utilities>
-          <Flash1>
-            <UseTargetDll>1</UseTargetDll>
-            <UseExternalTool>0</UseExternalTool>
-            <RunIndependent>0</RunIndependent>
-            <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
-            <Capability>1</Capability>
-            <DriverSelection>4096</DriverSelection>
-          </Flash1>
-          <bUseTDR>1</bUseTDR>
-          <Flash2>BIN\UL2CM3.DLL</Flash2>
-          <Flash3></Flash3>
-          <Flash4></Flash4>
-          <pFcarmOut></pFcarmOut>
-          <pFcarmGrp></pFcarmGrp>
-          <pFcArmRoot></pFcArmRoot>
-          <FcArmLst>0</FcArmLst>
-        </Utilities>
-        <TargetArmAds>
-          <ArmAdsMisc>
-            <GenerateListings>0</GenerateListings>
-            <asHll>1</asHll>
-            <asAsm>1</asAsm>
-            <asMacX>1</asMacX>
-            <asSyms>1</asSyms>
-            <asFals>1</asFals>
-            <asDbgD>1</asDbgD>
-            <asForm>1</asForm>
-            <ldLst>0</ldLst>
-            <ldmm>1</ldmm>
-            <ldXref>1</ldXref>
-            <BigEnd>0</BigEnd>
-            <AdsALst>1</AdsALst>
-            <AdsACrf>1</AdsACrf>
-            <AdsANop>0</AdsANop>
-            <AdsANot>0</AdsANot>
-            <AdsLLst>1</AdsLLst>
-            <AdsLmap>1</AdsLmap>
-            <AdsLcgr>1</AdsLcgr>
-            <AdsLsym>1</AdsLsym>
-            <AdsLszi>1</AdsLszi>
-            <AdsLtoi>1</AdsLtoi>
-            <AdsLsun>1</AdsLsun>
-            <AdsLven>1</AdsLven>
-            <AdsLsxf>1</AdsLsxf>
-            <RvctClst>0</RvctClst>
-            <GenPPlst>0</GenPPlst>
-            <AdsCpuType>"Cortex-M4"</AdsCpuType>
-            <RvctDeviceName></RvctDeviceName>
-            <mOS>0</mOS>
-            <uocRom>0</uocRom>
-            <uocRam>0</uocRam>
-            <hadIROM>1</hadIROM>
-            <hadIRAM>1</hadIRAM>
-            <hadXRAM>0</hadXRAM>
-            <uocXRam>0</uocXRam>
-            <RvdsVP>2</RvdsVP>
-            <hadIRAM2>0</hadIRAM2>
-            <hadIROM2>0</hadIROM2>
-            <StupSel>8</StupSel>
-            <useUlib>0</useUlib>
-            <EndSel>0</EndSel>
-            <uLtcg>0</uLtcg>
-            <nSecure>0</nSecure>
-            <RoSelD>3</RoSelD>
-            <RwSelD>3</RwSelD>
-            <CodeSel>0</CodeSel>
-            <OptFeed>0</OptFeed>
-            <NoZi1>0</NoZi1>
-            <NoZi2>0</NoZi2>
-            <NoZi3>0</NoZi3>
-            <NoZi4>0</NoZi4>
-            <NoZi5>0</NoZi5>
-            <Ro1Chk>0</Ro1Chk>
-            <Ro2Chk>0</Ro2Chk>
-            <Ro3Chk>0</Ro3Chk>
-            <Ir1Chk>1</Ir1Chk>
-            <Ir2Chk>0</Ir2Chk>
-            <Ra1Chk>0</Ra1Chk>
-            <Ra2Chk>0</Ra2Chk>
-            <Ra3Chk>0</Ra3Chk>
-            <Im1Chk>1</Im1Chk>
-            <Im2Chk>0</Im2Chk>
-            <OnChipMemories>
-              <Ocm1>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </Ocm1>
-              <Ocm2>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </Ocm2>
-              <Ocm3>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </Ocm3>
-              <Ocm4>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </Ocm4>
-              <Ocm5>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </Ocm5>
-              <Ocm6>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </Ocm6>
-              <IRAM>
-                <Type>0</Type>
-                <StartAddress>0x10000000</StartAddress>
-                <Size>0x40000</Size>
-              </IRAM>
-              <IROM>
-                <Type>1</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x100000</Size>
-              </IROM>
-              <XRAM>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </XRAM>
-              <OCR_RVCT1>
-                <Type>1</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT1>
-              <OCR_RVCT2>
-                <Type>1</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT2>
-              <OCR_RVCT3>
-                <Type>1</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT3>
-              <OCR_RVCT4>
-                <Type>1</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x80000</Size>
-              </OCR_RVCT4>
-              <OCR_RVCT5>
-                <Type>1</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT5>
-              <OCR_RVCT6>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT6>
-              <OCR_RVCT7>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT7>
-              <OCR_RVCT8>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT8>
-              <OCR_RVCT9>
-                <Type>0</Type>
-                <StartAddress>0x10000000</StartAddress>
-                <Size>0x40000</Size>
-              </OCR_RVCT9>
-              <OCR_RVCT10>
-                <Type>0</Type>
-                <StartAddress>0x0</StartAddress>
-                <Size>0x0</Size>
-              </OCR_RVCT10>
-            </OnChipMemories>
-            <RvctStartVector></RvctStartVector>
-          </ArmAdsMisc>
-          <Cads>
-            <interw>1</interw>
-            <Optim>4</Optim>
-            <oTime>1</oTime>
-            <SplitLS>0</SplitLS>
-            <OneElfS>1</OneElfS>
-            <Strict>0</Strict>
-            <EnumInt>0</EnumInt>
-            <PlainCh>0</PlainCh>
-            <Ropi>0</Ropi>
-            <Rwpi>0</Rwpi>
-            <wLevel>2</wLevel>
-            <uThumb>0</uThumb>
-            <uSurpInc>0</uSurpInc>
-            <uC99>1</uC99>
-            <useXO>0</useXO>
-            <v6Lang>1</v6Lang>
-            <v6LangP>1</v6LangP>
-            <vShortEn>1</vShortEn>
-            <vShortWch>1</vShortWch>
-            <v6Lto>0</v6Lto>
-            <v6WtE>0</v6WtE>
-            <v6Rtti>0</v6Rtti>
-            <VariousControls>
-              <MiscControls></MiscControls>
-              <Define>AM_DEBUG_ASSERT AM_ASSERT_INVALID_THRESHOLD=0 AM_PART_APOLLO2 keil</Define>
-              <Undefine></Undefine>
-              <IncludePath>../../../../mcu/apollo2;../../../../utils</IncludePath>
-            </VariousControls>
-          </Cads>
-          <Aads>
-            <interw>1</interw>
-            <Ropi>0</Ropi>
-            <Rwpi>0</Rwpi>
-            <thumb>0</thumb>
-            <SplitLS>0</SplitLS>
-            <SwStkChk>0</SwStkChk>
-            <NoWarn>0</NoWarn>
-            <uSurpInc>0</uSurpInc>
-            <useXO>0</useXO>
-            <uClangAs>0</uClangAs>
-            <VariousControls>
-              <MiscControls></MiscControls>
-              <Define></Define>
-              <Undefine></Undefine>
-              <IncludePath></IncludePath>
-            </VariousControls>
-          </Aads>
-          <LDads>
-            <umfTarg>0</umfTarg>
-            <Ropi>0</Ropi>
-            <Rwpi>0</Rwpi>
-            <noStLib>0</noStLib>
-            <RepFail>1</RepFail>
-            <useFile>0</useFile>
-            <TextAddressRange>0x0</TextAddressRange>
-            <DataAddressRange>0x10000000</DataAddressRange>
-            <pXoBase></pXoBase>
-            <ScatterFile></ScatterFile>
-            <IncludeLibs></IncludeLibs>
-            <IncludeLibsPath></IncludeLibsPath>
-            <Misc>../../../../mcu/apollo2/hal/keil/bin/libam_hal.lib(am_hal_global.o) --keep=am_hal_global.o(.data)</Misc>
-            <LinkerInputFile></LinkerInputFile>
-            <DisabledWarnings></DisabledWarnings>
-          </LDads>
-        </TargetArmAds>
-      </TargetOption>
-      <Groups>
-        <Group>
-          <GroupName>source_files</GroupName>
-          <Files>
-            <File>
-              <FileName>am_hal_adc.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_adc.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_cachectrl.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_cachectrl.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_clkgen.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_clkgen.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_ctimer.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_ctimer.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_debug.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_debug.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_flash.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_flash.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_global.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_global.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_gpio.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_gpio.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_i2c_bit_bang.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_i2c_bit_bang.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_interrupt.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_interrupt.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_iom.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_iom.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_ios.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_ios.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_itm.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_itm.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_mcuctrl.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_mcuctrl.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_otp.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_otp.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_pdm.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_pdm.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_pwrctrl.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_pwrctrl.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_queue.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_queue.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_reset.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_reset.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_rtc.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_rtc.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_stimer.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_stimer.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_sysctrl.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_sysctrl.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_systick.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_systick.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_tpiu.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_tpiu.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_ttp.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_ttp.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_uart.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_uart.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_vcomp.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_vcomp.c</FilePath>
-            </File>
-            <File>
-              <FileName>am_hal_wdt.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../am_hal_wdt.c</FilePath>
-            </File>
-          </Files>
-        </Group>
-      </Groups>
-    </Target>
-  </Targets>
-
-</Project>
-
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
+  <SchemaVersion>2.1</SchemaVersion>
+
+  <Header>### uVision Project, (C) Keil Software</Header>
+
+  <Targets>
+    <Target>
+      <TargetName>libam_hal</TargetName>
+      <ToolsetNumber>0x4</ToolsetNumber>
+      <ToolsetName>ARM-ADS</ToolsetName>
+      <pCCUsed>5060422::V5.06 update 4 (build 422)::ARMCC</pCCUsed>
+      <TargetOption>
+        <TargetCommonOption>
+          <Device>AMAPH1KK-KBR</Device>
+          <Vendor>Ambiq Micro</Vendor>
+          <PackID>AmbiqMicro.Apollo_DFP.1.0.0</PackID>
+          <PackURL>http://s3.asia.ambiqmicro.com/pack/</PackURL>
+          <Cpu>IROM(0x00000000,0x100000) IRAM(0x10000000,0x40000) CPUTYPE("Cortex-M4") FPU2 CLOCK(24000000) ELITTLE</Cpu>
+          <FlashUtilSpec></FlashUtilSpec>
+          <StartupFile></StartupFile>
+          <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD10000000 -FC4000 -FN1 -FF0Apollo -FS00 -FL010000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM))</FlashDriverDll>
+          <DeviceId>0</DeviceId>
+          <RegisterFile></RegisterFile>
+          <MemoryEnv></MemoryEnv>
+          <Cmp></Cmp>
+          <Asm></Asm>
+          <Linker></Linker>
+          <OHString></OHString>
+          <InfinionOptionDll></InfinionOptionDll>
+          <SLE66CMisc></SLE66CMisc>
+          <SLE66AMisc></SLE66AMisc>
+          <SLE66LinkerMisc></SLE66LinkerMisc>
+          <SFDFile>$$Device:AMAPH1KK-KBR$SVD\Apollo2.svd</SFDFile>
+          <bCustSvd>0</bCustSvd>
+          <UseEnv>0</UseEnv>
+          <BinPath></BinPath>
+          <IncludePath></IncludePath>
+          <LibPath></LibPath>
+          <RegisterFilePath>1024 BGA$Device\Include\Apollo2.h\</RegisterFilePath>
+          <DBRegisterFilePath>1024 BGA$Device\Include\Apollo2.h\</DBRegisterFilePath>
+          <TargetStatus>
+            <Error>0</Error>
+            <ExitCodeStop>0</ExitCodeStop>
+            <ButtonStop>0</ButtonStop>
+            <NotGenerated>0</NotGenerated>
+            <InvalidFlash>1</InvalidFlash>
+          </TargetStatus>
+          <OutputDirectory>.\bin\</OutputDirectory>
+          <OutputName>libam_hal</OutputName>
+          <CreateExecutable>0</CreateExecutable>
+          <CreateLib>1</CreateLib>
+          <CreateHexFile>0</CreateHexFile>
+          <DebugInformation>0</DebugInformation>
+          <BrowseInformation>1</BrowseInformation>
+          <ListingPath>.\Listings\</ListingPath>
+          <HexFormatSelection>1</HexFormatSelection>
+          <Merge32K>0</Merge32K>
+          <CreateBatchFile>0</CreateBatchFile>
+          <BeforeCompile>
+            <RunUserProg1>0</RunUserProg1>
+            <RunUserProg2>0</RunUserProg2>
+            <UserProg1Name></UserProg1Name>
+            <UserProg2Name></UserProg2Name>
+            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopU1X>0</nStopU1X>
+            <nStopU2X>0</nStopU2X>
+          </BeforeCompile>
+          <BeforeMake>
+            <RunUserProg1>0</RunUserProg1>
+            <RunUserProg2>0</RunUserProg2>
+            <UserProg1Name></UserProg1Name>
+            <UserProg2Name></UserProg2Name>
+            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopB1X>0</nStopB1X>
+            <nStopB2X>0</nStopB2X>
+          </BeforeMake>
+          <AfterMake>
+            <RunUserProg1>0</RunUserProg1>
+            <RunUserProg2>0</RunUserProg2>
+            <UserProg1Name>fromelf --bin --output bin\libam_hal.bin bin\libam_hal.axf</UserProg1Name>
+            <UserProg2Name>fromelf -cedrst --output bin\libam_hal.txt bin\libam_hal.axf</UserProg2Name>
+            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopA1X>0</nStopA1X>
+            <nStopA2X>0</nStopA2X>
+          </AfterMake>
+          <SelectedForBatchBuild>0</SelectedForBatchBuild>
+          <SVCSIdString></SVCSIdString>
+        </TargetCommonOption>
+        <CommonProperty>
+          <UseCPPCompiler>0</UseCPPCompiler>
+          <RVCTCodeConst>0</RVCTCodeConst>
+          <RVCTZI>0</RVCTZI>
+          <RVCTOtherData>0</RVCTOtherData>
+          <ModuleSelection>0</ModuleSelection>
+          <IncludeInBuild>1</IncludeInBuild>
+          <AlwaysBuild>0</AlwaysBuild>
+          <GenerateAssemblyFile>0</GenerateAssemblyFile>
+          <AssembleAssemblyFile>0</AssembleAssemblyFile>
+          <PublicsOnly>0</PublicsOnly>
+          <StopOnExitCode>3</StopOnExitCode>
+          <CustomArgument></CustomArgument>
+          <IncludeLibraryModules></IncludeLibraryModules>
+          <ComprImg>1</ComprImg>
+        </CommonProperty>
+        <DllOption>
+          <SimDllName>SARMCM3.DLL</SimDllName>
+          <SimDllArguments>  -MPU</SimDllArguments>
+          <SimDlgDll>DCM.DLL</SimDlgDll>
+          <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+          <TargetDllName>SARMCM3.DLL</TargetDllName>
+          <TargetDllArguments> -MPU</TargetDllArguments>
+          <TargetDlgDll>TCM.DLL</TargetDlgDll>
+          <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+        </DllOption>
+        <DebugOption>
+          <OPTHX>
+            <HexSelection>1</HexSelection>
+            <HexRangeLowAddress>0</HexRangeLowAddress>
+            <HexRangeHighAddress>0</HexRangeHighAddress>
+            <HexOffset>0</HexOffset>
+            <Oh166RecLen>16</Oh166RecLen>
+          </OPTHX>
+        </DebugOption>
+        <Utilities>
+          <Flash1>
+            <UseTargetDll>1</UseTargetDll>
+            <UseExternalTool>0</UseExternalTool>
+            <RunIndependent>0</RunIndependent>
+            <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+            <Capability>1</Capability>
+            <DriverSelection>4096</DriverSelection>
+          </Flash1>
+          <bUseTDR>1</bUseTDR>
+          <Flash2>BIN\UL2CM3.DLL</Flash2>
+          <Flash3></Flash3>
+          <Flash4></Flash4>
+          <pFcarmOut></pFcarmOut>
+          <pFcarmGrp></pFcarmGrp>
+          <pFcArmRoot></pFcArmRoot>
+          <FcArmLst>0</FcArmLst>
+        </Utilities>
+        <TargetArmAds>
+          <ArmAdsMisc>
+            <GenerateListings>0</GenerateListings>
+            <asHll>1</asHll>
+            <asAsm>1</asAsm>
+            <asMacX>1</asMacX>
+            <asSyms>1</asSyms>
+            <asFals>1</asFals>
+            <asDbgD>1</asDbgD>
+            <asForm>1</asForm>
+            <ldLst>0</ldLst>
+            <ldmm>1</ldmm>
+            <ldXref>1</ldXref>
+            <BigEnd>0</BigEnd>
+            <AdsALst>1</AdsALst>
+            <AdsACrf>1</AdsACrf>
+            <AdsANop>0</AdsANop>
+            <AdsANot>0</AdsANot>
+            <AdsLLst>1</AdsLLst>
+            <AdsLmap>1</AdsLmap>
+            <AdsLcgr>1</AdsLcgr>
+            <AdsLsym>1</AdsLsym>
+            <AdsLszi>1</AdsLszi>
+            <AdsLtoi>1</AdsLtoi>
+            <AdsLsun>1</AdsLsun>
+            <AdsLven>1</AdsLven>
+            <AdsLsxf>1</AdsLsxf>
+            <RvctClst>0</RvctClst>
+            <GenPPlst>0</GenPPlst>
+            <AdsCpuType>"Cortex-M4"</AdsCpuType>
+            <RvctDeviceName></RvctDeviceName>
+            <mOS>0</mOS>
+            <uocRom>0</uocRom>
+            <uocRam>0</uocRam>
+            <hadIROM>1</hadIROM>
+            <hadIRAM>1</hadIRAM>
+            <hadXRAM>0</hadXRAM>
+            <uocXRam>0</uocXRam>
+            <RvdsVP>2</RvdsVP>
+            <hadIRAM2>0</hadIRAM2>
+            <hadIROM2>0</hadIROM2>
+            <StupSel>8</StupSel>
+            <useUlib>0</useUlib>
+            <EndSel>0</EndSel>
+            <uLtcg>0</uLtcg>
+            <nSecure>0</nSecure>
+            <RoSelD>3</RoSelD>
+            <RwSelD>3</RwSelD>
+            <CodeSel>0</CodeSel>
+            <OptFeed>0</OptFeed>
+            <NoZi1>0</NoZi1>
+            <NoZi2>0</NoZi2>
+            <NoZi3>0</NoZi3>
+            <NoZi4>0</NoZi4>
+            <NoZi5>0</NoZi5>
+            <Ro1Chk>0</Ro1Chk>
+            <Ro2Chk>0</Ro2Chk>
+            <Ro3Chk>0</Ro3Chk>
+            <Ir1Chk>1</Ir1Chk>
+            <Ir2Chk>0</Ir2Chk>
+            <Ra1Chk>0</Ra1Chk>
+            <Ra2Chk>0</Ra2Chk>
+            <Ra3Chk>0</Ra3Chk>
+            <Im1Chk>1</Im1Chk>
+            <Im2Chk>0</Im2Chk>
+            <OnChipMemories>
+              <Ocm1>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm1>
+              <Ocm2>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm2>
+              <Ocm3>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm3>
+              <Ocm4>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm4>
+              <Ocm5>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm5>
+              <Ocm6>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm6>
+              <IRAM>
+                <Type>0</Type>
+                <StartAddress>0x10000000</StartAddress>
+                <Size>0x40000</Size>
+              </IRAM>
+              <IROM>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x100000</Size>
+              </IROM>
+              <XRAM>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </XRAM>
+              <OCR_RVCT1>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT1>
+              <OCR_RVCT2>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT2>
+              <OCR_RVCT3>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT3>
+              <OCR_RVCT4>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x80000</Size>
+              </OCR_RVCT4>
+              <OCR_RVCT5>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT5>
+              <OCR_RVCT6>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT6>
+              <OCR_RVCT7>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT7>
+              <OCR_RVCT8>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT8>
+              <OCR_RVCT9>
+                <Type>0</Type>
+                <StartAddress>0x10000000</StartAddress>
+                <Size>0x40000</Size>
+              </OCR_RVCT9>
+              <OCR_RVCT10>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT10>
+            </OnChipMemories>
+            <RvctStartVector></RvctStartVector>
+          </ArmAdsMisc>
+          <Cads>
+            <interw>1</interw>
+            <Optim>4</Optim>
+            <oTime>1</oTime>
+            <SplitLS>0</SplitLS>
+            <OneElfS>1</OneElfS>
+            <Strict>0</Strict>
+            <EnumInt>0</EnumInt>
+            <PlainCh>0</PlainCh>
+            <Ropi>0</Ropi>
+            <Rwpi>0</Rwpi>
+            <wLevel>2</wLevel>
+            <uThumb>0</uThumb>
+            <uSurpInc>0</uSurpInc>
+            <uC99>1</uC99>
+            <useXO>0</useXO>
+            <v6Lang>1</v6Lang>
+            <v6LangP>1</v6LangP>
+            <vShortEn>1</vShortEn>
+            <vShortWch>1</vShortWch>
+            <v6Lto>0</v6Lto>
+            <v6WtE>0</v6WtE>
+            <v6Rtti>0</v6Rtti>
+            <VariousControls>
+              <MiscControls></MiscControls>
+              <Define>AM_DEBUG_ASSERT AM_ASSERT_INVALID_THRESHOLD=0 AM_PART_APOLLO2 keil</Define>
+              <Undefine></Undefine>
+              <IncludePath>../../../../mcu/apollo2;../../../../utils</IncludePath>
+            </VariousControls>
+          </Cads>
+          <Aads>
+            <interw>1</interw>
+            <Ropi>0</Ropi>
+            <Rwpi>0</Rwpi>
+            <thumb>0</thumb>
+            <SplitLS>0</SplitLS>
+            <SwStkChk>0</SwStkChk>
+            <NoWarn>0</NoWarn>
+            <uSurpInc>0</uSurpInc>
+            <useXO>0</useXO>
+            <uClangAs>0</uClangAs>
+            <VariousControls>
+              <MiscControls></MiscControls>
+              <Define></Define>
+              <Undefine></Undefine>
+              <IncludePath></IncludePath>
+            </VariousControls>
+          </Aads>
+          <LDads>
+            <umfTarg>0</umfTarg>
+            <Ropi>0</Ropi>
+            <Rwpi>0</Rwpi>
+            <noStLib>0</noStLib>
+            <RepFail>1</RepFail>
+            <useFile>0</useFile>
+            <TextAddressRange>0x0</TextAddressRange>
+            <DataAddressRange>0x10000000</DataAddressRange>
+            <pXoBase></pXoBase>
+            <ScatterFile></ScatterFile>
+            <IncludeLibs></IncludeLibs>
+            <IncludeLibsPath></IncludeLibsPath>
+            <Misc>../../../../mcu/apollo2/hal/keil/bin/libam_hal.lib(am_hal_global.o) --keep=am_hal_global.o(.data) </Misc>
+            <LinkerInputFile></LinkerInputFile>
+            <DisabledWarnings></DisabledWarnings>
+          </LDads>
+        </TargetArmAds>
+      </TargetOption>
+      <Groups>
+        <Group>
+          <GroupName>source_files</GroupName>
+          <Files>
+            <File>
+              <FileName>am_hal_adc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_adc.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_cachectrl.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_cachectrl.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_clkgen.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_clkgen.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_ctimer.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_ctimer.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_debug.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_debug.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_flash.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_flash.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_global.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_global.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_gpio.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_gpio.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_i2c_bit_bang.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_i2c_bit_bang.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_interrupt.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_interrupt.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_iom.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_iom.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_ios.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_ios.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_itm.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_itm.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_mcuctrl.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_mcuctrl.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_otp.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_otp.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_pdm.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_pdm.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_pwrctrl.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_pwrctrl.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_queue.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_queue.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_reset.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_reset.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_rtc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_rtc.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_stimer.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_stimer.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_sysctrl.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_sysctrl.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_systick.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_systick.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_tpiu.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_tpiu.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_ttp.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_ttp.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_uart.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_uart.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_vcomp.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_vcomp.c</FilePath>
+            </File>
+            <File>
+              <FileName>am_hal_wdt.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../am_hal_wdt.c</FilePath>
+            </File>
+          </Files>
+        </Group>
+      </Groups>
+    </Target>
+  </Targets>
+
+</Project>
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_adc.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_adc.h
index 9241f8cb0..ff1d607d5 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_adc.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_adc.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_adc.h
+//  am_reg_adc.h
+//! @file
 //!
 //! @brief Register macros for the ADC module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_ADC_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_base_addresses.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_base_addresses.h
index c4d12a873..70fafa69f 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_base_addresses.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_base_addresses.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_BASE_ADDRESSES_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_cachectrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_cachectrl.h
index 514be243c..8811f6e94 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_cachectrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_cachectrl.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_cachectrl.h
+//  am_reg_cachectrl.h
+//! @file
 //!
 //! @brief Register macros for the CACHECTRL module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_CACHECTRL_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_clkgen.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_clkgen.h
index 6335ba486..f3c6adef0 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_clkgen.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_clkgen.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_clkgen.h
+//  am_reg_clkgen.h
+//! @file
 //!
 //! @brief Register macros for the CLKGEN module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_CLKGEN_H
@@ -268,7 +269,8 @@
 #define AM_REG_CLKGEN_CLKOUT_CKEN_DIS                0x00000000
 #define AM_REG_CLKGEN_CLKOUT_CKEN_EN                 0x00000080
 
-// CLKOUT signal select
+// CLKOUT signal select.  Note that HIGH_DRIVE should be selected if any high
+// frequencies (such as from HFRC) are selected for CLKOUT.
 #define AM_REG_CLKGEN_CLKOUT_CKSEL_S                 0
 #define AM_REG_CLKGEN_CLKOUT_CKSEL_M                 0x0000003F
 #define AM_REG_CLKGEN_CLKOUT_CKSEL(n)                (((uint32_t)(n) << 0) & 0x0000003F)
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ctimer.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ctimer.h
index bc465cab3..8930e751a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ctimer.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ctimer.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_ctimer.h
+//  am_reg_ctimer.h
+//! @file
 //!
 //! @brief Register macros for the CTIMER module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_CTIMER_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_flashctrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_flashctrl.h
index ecf20fd9b..472aa1030 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_flashctrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_flashctrl.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_flashctrl.h
+//  am_reg_flashctrl.h
+//! @file
 //!
 //! @brief Register macros for the FLASHCTRL module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_FLASHCTRL_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_gpio.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_gpio.h
index 1d6813e0b..67e362f75 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_gpio.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_gpio.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_gpio.h
+//  am_reg_gpio.h
+//! @file
 //!
 //! @brief Register macros for the GPIO module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_GPIO_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_iomstr.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_iomstr.h
index 4d45e8131..cba91969b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_iomstr.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_iomstr.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_iomstr.h
+//  am_reg_iomstr.h
+//! @file
 //!
 //! @brief Register macros for the IOMSTR module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_IOMSTR_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ioslave.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ioslave.h
index 83b557cad..48cc93bd9 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ioslave.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_ioslave.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_ioslave.h
+//  am_reg_ioslave.h
+//! @file
 //!
 //! @brief Register macros for the IOSLAVE module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_IOSLAVE_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_itm.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_itm.h
index f67d57b83..30f3f5b92 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_itm.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_itm.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_itm.h
+//  am_reg_itm.h
+//! @file
 //!
 //! @brief Register macros for the ITM module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_ITM_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_jedec.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_jedec.h
index 4fd79837f..0fec4ce85 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_jedec.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_jedec.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_jedec.h
+//  am_reg_jedec.h
+//! @file
 //!
 //! @brief Register macros for the JEDEC module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_JEDEC_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros.h
index d7d3f5bd1..1192be5d2 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_macros.h
+//  am_reg_macros.h
+//! @file
 //!
 //! @brief Helper macros for using hardware registers.
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -106,10 +107,15 @@ extern "C"
 // Register access macros for single-instance modules
 // AM_REG  - Write a register of a module.
 // AM_BFW  - Write a value to a bitfield of a register.
-// AM_BFWe - Use a defined enum value to write a value to a bitfield.
+// AM_BFWe - Use a defined enum value to write a value to a register bitfield.
 // AM_BFR  - Read a bitfield value from a register.
-// AM_BFM  - Read and mask a bitfield, but leave the value in its bit position.
-//           (Useful for comparing with enums.)
+// AM_BFM  - Read and mask a bitfield from a register, but leave the value in
+//           its bit position. Useful for comparing with enums.
+//
+// AM_BFV  - Move a value to a bitfield.  This macro is used for creating a
+//           value, it does not modify any register.
+// AM_BFX  - Extract the value of a bitfield from a 32-bit value, such as that
+//           read from a register. Does not read or modify any register.
 //
 //*****************************************************************************
 #define AM_REG(module, reg)                                                   \
@@ -139,6 +145,7 @@ extern "C"
 //*****************************************************************************
 //
 // Register access macros for multi-instance modules
+// AM_REGADDRn - Calc the register address inside a multiple instance module.
 // AM_REGn - Write a register of a multiple instance module.
 // AM_BFWn - Write a value to a bitfield of a register in a multiple instance.
 // AM_BFWen - Use a defined enum value to write a value to a bitfield of a
@@ -149,6 +156,9 @@ extern "C"
 //           (Useful for comparing with enums.)
 //
 //*****************************************************************************
+#define AM_REGADDRn(module, instance, reg)                                    \
+      (AM_REG_##module##n(instance) + AM_REG_##module##_##reg##_O)
+
 #define AM_REGn(module, instance, reg)                                        \
     AM_REGVAL(AM_REG_##module##n(instance) + AM_REG_##module##_##reg##_O)
 
@@ -187,9 +197,9 @@ extern "C"
 //                no operator to simply write the value atomically.
 // AM_REGa_SET  - Set bits in a single instance module according to the mask.
 // AM_REGa_CLR  - Clear bits in a single instance module according to the mask.
-// AM_REGna     - Multiple module version of AM_REGa.
-// AM_REGna_SET - Multiple instance version of AM_REGa_SET.
-// AM_REGna_CLR - Multiple instance version of AM_REGa_CLR.
+// AM_REGan     - Multiple module version of AM_REGa.
+// AM_REGan_SET - Multiple instance version of AM_REGa_SET.
+// AM_REGan_CLR - Multiple instance version of AM_REGa_CLR.
 // AM_BFWa   - Write a value to a register bitfield.
 // AM_BFWae  - Use a defined enum value to write a value to a bitfield.
 // AM_BFWan  - Write a value to a bitfield of a register in a multiple instance.
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros_asm.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros_asm.h
index aee4fa76b..a5847abb2 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros_asm.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_macros_asm.h
@@ -38,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_mcuctrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_mcuctrl.h
index 1b80643f8..16876b08b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_mcuctrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_mcuctrl.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_mcuctrl.h
+//  am_reg_mcuctrl.h
+//! @file
 //!
 //! @brief Register macros for the MCUCTRL module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_MCUCTRL_H
@@ -72,7 +73,6 @@
 #define AM_REG_MCUCTRL_ADCCAL_O                      0x0000010C
 #define AM_REG_MCUCTRL_ADCBATTLOAD_O                 0x00000110
 #define AM_REG_MCUCTRL_BUCKTRIM_O                    0x00000114
-#define AM_REG_MCUCTRL_EXTCLKSEL_O                   0x00000160
 #define AM_REG_MCUCTRL_BOOTLOADERLOW_O               0x000001A0
 #define AM_REG_MCUCTRL_SHADOWVALID_O                 0x000001A4
 #define AM_REG_MCUCTRL_ICODEFAULTADDR_O              0x000001C0
@@ -84,14 +84,12 @@
 #define AM_REG_MCUCTRL_DBGR2_O                       0x00000204
 #define AM_REG_MCUCTRL_PMUENABLE_O                   0x00000220
 #define AM_REG_MCUCTRL_TPIUCTRL_O                    0x00000250
-#define AM_REG_MCUCTRL_KEXTCLKSEL_O                  0x00000348
 
 //*****************************************************************************
 //
 // Key values.
 //
 //*****************************************************************************
-#define AM_REG_MCUCTRL_KEXTCLKSEL_KEYVAL             0x00000053
 
 //*****************************************************************************
 //
@@ -144,7 +142,8 @@
 #define AM_REG_MCUCTRL_CHIPREV_REVMIN_S              0
 #define AM_REG_MCUCTRL_CHIPREV_REVMIN_M              0x0000000F
 #define AM_REG_MCUCTRL_CHIPREV_REVMIN(n)             (((uint32_t)(n) << 0) & 0x0000000F)
-#define AM_REG_MCUCTRL_CHIPREV_REVMIN_REV0           0x00000001
+#define AM_REG_MCUCTRL_CHIPREV_REVMIN_REV0           0x00000000
+#define AM_REG_MCUCTRL_CHIPREV_REVMIN_REV2           0x00000002
 
 //*****************************************************************************
 //
@@ -425,32 +424,6 @@
 #define AM_REG_MCUCTRL_BUCKTRIM_MEMBUCKR1_M          0x0000003F
 #define AM_REG_MCUCTRL_BUCKTRIM_MEMBUCKR1(n)         (((uint32_t)(n) << 0) & 0x0000003F)
 
-//*****************************************************************************
-//
-// MCUCTRL_EXTCLKSEL - Source selection of LFRC, HFRC and XTAL clock sources
-//
-//*****************************************************************************
-// HFRC External Clock Source Select.
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_HF_S            2
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_HF_M            0x00000004
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_HF(n)           (((uint32_t)(n) << 2) & 0x00000004)
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_HF_INT          0x00000000
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_HF_EXT          0x00000004
-
-// LFRC External Clock Source Select.
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_LF_S            1
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_LF_M            0x00000002
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_LF(n)           (((uint32_t)(n) << 1) & 0x00000002)
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_LF_INT          0x00000000
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_LF_EXT          0x00000002
-
-// XTAL External Clock Source Select.
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_XT_S            0
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_XT_M            0x00000001
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_XT(n)           (((uint32_t)(n) << 0) & 0x00000001)
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_XT_INT          0x00000000
-#define AM_REG_MCUCTRL_EXTCLKSEL_EXT_XT_EXT          0x00000001
-
 //*****************************************************************************
 //
 // MCUCTRL_BOOTLOADERLOW - Determines whether the bootloader code is visible at
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_nvic.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_nvic.h
index d10bbc485..fea9dea8d 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_nvic.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_nvic.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_nvic.h
+//  am_reg_nvic.h
+//! @file
 //!
 //! @brief Register macros for the NVIC module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_NVIC_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pdm.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pdm.h
index 13ed42568..4800ec539 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pdm.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pdm.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_pdm.h
+//  am_reg_pdm.h
+//! @file
 //!
 //! @brief Register macros for the PDM module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_PDM_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pwrctrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pwrctrl.h
index 520e45d3d..f59589f54 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pwrctrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_pwrctrl.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_pwrctrl.h
+//  am_reg_pwrctrl.h
+//! @file
 //!
 //! @brief Register macros for the PWRCTRL module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_PWRCTRL_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rstgen.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rstgen.h
index 5a5ee556b..bb8ddf325 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rstgen.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rstgen.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_rstgen.h
+//  am_reg_rstgen.h
+//! @file
 //!
 //! @brief Register macros for the RSTGEN module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_RSTGEN_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rtc.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rtc.h
index b8ce01f03..f8ee47e0f 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rtc.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_rtc.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_rtc.h
+//  am_reg_rtc.h
+//! @file
 //!
 //! @brief Register macros for the RTC module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_RTC_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_sysctrl.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_sysctrl.h
index 2d9f251e2..5ceb339e7 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_sysctrl.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_sysctrl.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_sysctrl.h
+//  am_reg_sysctrl.h
+//! @file
 //!
 //! @brief Register macros for the SYSCTRL module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_SYSCTRL_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_systick.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_systick.h
index 72deea872..14fb8b002 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_systick.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_systick.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_systick.h
+//  am_reg_systick.h
+//! @file
 //!
 //! @brief Register macros for the SYSTICK module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_SYSTICK_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_tpiu.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_tpiu.h
index 1c8bad5a9..1f5295b8b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_tpiu.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_tpiu.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_tpiu.h
+//  am_reg_tpiu.h
+//! @file
 //!
 //! @brief Register macros for the TPIU module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_TPIU_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_uart.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_uart.h
index 15e6ef68d..6be108e89 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_uart.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_uart.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_uart.h
+//  am_reg_uart.h
+//! @file
 //!
 //! @brief Register macros for the UART module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_UART_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_vcomp.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_vcomp.h
index e99970d0e..95dfdd7f4 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_vcomp.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_vcomp.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_vcomp.h
+//  am_reg_vcomp.h
+//! @file
 //!
 //! @brief Register macros for the VCOMP module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_VCOMP_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_wdt.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_wdt.h
index 742a8e635..e4b38cd11 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_wdt.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/mcu/apollo2/regs/am_reg_wdt.h
@@ -1,6 +1,7 @@
 //*****************************************************************************
 //
-//! @file am_reg_wdt.h
+//  am_reg_wdt.h
+//! @file
 //!
 //! @brief Register macros for the WDT module
 //
@@ -37,7 +38,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_REG_WDT_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util.h
index 63c0c5be0..0a1a0eb9c 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util.h
@@ -39,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.c
index 66f05a6d9..066e8186c 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.c
@@ -39,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.h
index 2ad1c6dd5..ead61dd65 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_cmdline.h
@@ -39,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_CMDLINE_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.c
index 95a51ad2a..d10ceb88d 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.c
@@ -41,7 +41,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.h
index ec0af8bc6..7bb22955e 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_debug.h
@@ -41,7 +41,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_DEBUG_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.c
index 9dd352d5e..9eead7bef 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.c
@@ -39,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
@@ -118,3 +118,42 @@ am_util_delay_us(uint32_t ui32MicroSeconds)
     //
     am_hal_flash_delay(ui32Loops);
 }
+//*****************************************************************************
+//
+//! @brief Delays for a desired amount of cycles while also waiting for a
+//! status change.
+//!
+//! @param ui32CycleLoops - Desired number of cycle loops to delay for.
+//! @param ui32Address - Address of the register for the status change.
+//! @param ui32Mask - Mask for the status change.
+//! @param ui32Value - Value for the status change.
+//!
+//! This function will delay for a number of cycle loops while checking for
+//! a status change, exiting either when the number of cycles is exhausted
+//! or the status change is detected.
+//!
+//! @note - the number of cycles each loops takes to execute is approximately 3.
+//! Therefore the actual number of cycles executed will be ~3x ui32CycleLoops.
+//!
+//! For example, a ui32CycleLoops value of 100 will delay for 300 cycles.
+//!
+//! @returns 0 = timeout; 1 = status change detected.
+//
+//*****************************************************************************
+uint32_t
+am_util_wait_status_change(uint32_t ui32Iterations,
+		uint32_t ui32Address, uint32_t ui32Mask, uint32_t ui32Value)
+{
+	for (uint32_t i = 0; i < ui32Iterations; i++)
+	{
+		// Check the status
+		if (((*(volatile uint32_t *)ui32Address) & ui32Mask) == ui32Value)
+		{
+			return 1;
+		}
+        // Call the BOOTROM cycle delay function to get about 1 usec @ 48MHz
+        am_hal_flash_delay(16);
+	}
+	return 0;
+}
+
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.h
index 3f550eac8..54bc974d4 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_delay.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_DELAY_H
@@ -56,6 +56,7 @@ extern "C"
 extern void am_util_delay_cycles(uint32_t ui32Iterations);
 extern void am_util_delay_ms(uint32_t ui32MilliSeconds);
 extern void am_util_delay_us(uint32_t ui32MicroSeconds);
+extern uint32_t am_util_wait_status_change(uint32_t ui32Iterations, uint32_t ui32Address, uint32_t ui32Mask, uint32_t ui32Value);
 
 #ifdef __cplusplus
 }
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_faultisr.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_faultisr.c
index 3970041bd..6b78f0752 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_faultisr.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_faultisr.c
@@ -43,7 +43,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.c
index e7400f4a4..804035326 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.c
@@ -40,7 +40,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.h
index 8682bae04..c381b0f72 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_id.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_ID_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.c
index a88d5968a..41e29d107 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.c
@@ -39,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.h
index 53e1c2a95..aeef8103b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_math.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_MATH_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.c
index 5b18e572a..ad7107575 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.c
@@ -40,7 +40,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.h
index 8d04d489b..4bb335c7f 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_plot.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_PLOT_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.c
index 99c72e966..08f49aeee 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.c
@@ -40,7 +40,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.h
index 090595884..72916bfb0 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_regdump.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_REGDUMP_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.c
index d3742db4f..f637a8634 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.c
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.h
index 8857736f6..dcde7987f 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_ring_buffer.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_RING_BUFFER_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.c
index 78bc9c166..8bf8d491d 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.c
@@ -40,7 +40,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -1204,5 +1204,5 @@ am_util_stdio_terminal_clear(void)
     // with AM Flash, especially after a reset event or a system clock
     // frequency change.
     //
-    am_util_stdio_printf("\n>>>>>>> ");
+    am_util_stdio_printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
 }
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.h
index 7aa97aeea..81f49ebe5 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stdio.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_STDIO_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.c
index 7444bbf8c..d9e5d79ca 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.c
@@ -45,7 +45,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
@@ -156,7 +156,7 @@ am_util_stopwatch_start(am_util_stopwatch_t *pStopwatch)
     //
     // If the start time is clear, read the RTC time to get a reference starting
     // time.
-    if (pStopwatch->bPaused == false && pStopwatch->bStarted == false)
+    if ( pStopwatch->bPaused == false && pStopwatch->bStarted == false )
     {
         //
         // Clear the timer which gets the current time as well.
@@ -168,12 +168,12 @@ am_util_stopwatch_start(am_util_stopwatch_t *pStopwatch)
     // We were paused.
     // Now we need to figure out how long we were paused for.
     //
-    else if (pStopwatch->bPaused == true && pStopwatch->bStarted == true)
+    else if ( pStopwatch->bPaused == true && pStopwatch->bStarted == true )
     {
         //
         // Get the RTC time.
         //
-        while(am_hal_rtc_time_get(&rtc_time));
+        while ( am_hal_rtc_time_get(&rtc_time) );
 
         //
         // Add the time we spent paused to the time we already spent paused.
@@ -211,7 +211,7 @@ am_util_stopwatch_stop(am_util_stopwatch_t *pStopwatch)
     //
     // Save the current time so we know how long we've been paused for.
     //
-    while(am_hal_rtc_time_get(&pStopwatch->sPauseTime));
+    while ( am_hal_rtc_time_get(&pStopwatch->sPauseTime) );
 
     //
     // Set the state to paused.
@@ -237,7 +237,7 @@ am_util_stopwatch_clear(am_util_stopwatch_t *pStopwatch)
     //
     // Read the RTC and save in pStopwatch->sStartTime.
     //
-    while(am_hal_rtc_time_get(&pStopwatch->sStartTime));
+    while ( am_hal_rtc_time_get(&pStopwatch->sStartTime) );
 
     //
     // Reset the paused time.
@@ -312,12 +312,12 @@ am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch, uint32_t ui32Reso
     // Stop watch is not paused and is running.
     // Figure out elapsed time.
     //
-    if (pStopwatch->bPaused == false && pStopwatch->bStarted == true)
+    if ( pStopwatch->bPaused == false && pStopwatch->bStarted == true )
     {
         //
         // Get the RTC time.
         //
-        while(am_hal_rtc_time_get(&rtc_time));
+        while ( am_hal_rtc_time_get(&rtc_time) );
 
         pStopwatch->ui64ElapsedTime = elapsed_time_ms(&pStopwatch->sStartTime, &rtc_time) -
                                 pStopwatch->ui64PausedTime;
@@ -367,7 +367,7 @@ am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch, uint32_t ui32Reso
     //
     // Years.
     //
-    if (ui64MS >= 31536000000)
+    if ( ui64MS >= 31536000000 )
     {
         //
         // Fill in the structure.
@@ -383,7 +383,7 @@ am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch, uint32_t ui32Reso
     //
     // Months.
     //
-    if (ui64MS >= 2592000000)
+    if ( ui64MS >= 2592000000 )
     {
         //
         // Fill in the structure.
@@ -399,7 +399,7 @@ am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch, uint32_t ui32Reso
     //
     // Days.
     //
-    if (ui64MS >= 86400000)
+    if ( ui64MS >= 86400000 )
     {
         //
         // Fill in the structure.
@@ -415,7 +415,7 @@ am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch, uint32_t ui32Reso
     //
     // Hours.
     //
-    if (ui64MS >= 3600000)
+    if ( ui64MS >= 3600000 )
     {
         //
         // Fill in the structure.
@@ -431,7 +431,7 @@ am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch, uint32_t ui32Reso
     //
     // Minutes.
     //
-    if (ui64MS >= 60000)
+    if ( ui64MS >= 60000 )
     {
         //
         // Fill in the structure.
@@ -447,7 +447,7 @@ am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch, uint32_t ui32Reso
     //
     // Seconds.
     //
-    if (ui64MS >= 1000)
+    if ( ui64MS >= 1000 )
     {
         //
         // Fill in the structure.
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.h
index e8950e8d3..61b41fd8a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stopwatch.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_STOPWATCH_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.c
index 39304f6f3..122276d4b 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.c
@@ -40,7 +40,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
@@ -371,16 +371,16 @@ am_util_string_strcmp(const char *str1, const char *str2)
 int32_t
 am_util_string_strncmp(const char *str1, const char *str2, uint32_t num)
 {
-    while ( *str1 && *str2 && num )
+    while ( num-- )
     {
-        if ( *str1 != *str2 )
+        // Check for inequality OR end of string
+        if ( *str1 != *str2 || *str1 == '\0' )
         {
             return *str1 - *str2;
         }
 
         str1++;
         str2++;
-        num--;
     }
 
     //
@@ -572,3 +572,39 @@ am_util_string_strncpy(char *pcDst, const char *pcSrc, uint32_t uNum)
 
     return pcRet;
 }
+
+//*****************************************************************************
+//
+//! @brief Concatenate a string.
+//!
+//! @param pcDst pointer to the destination string.
+//! @param pcSrc pointer to the source string to be copied to pcDst.
+//!
+//! This function concatenates the string at pcSrc to the existing string
+//! at pcDst.
+//!
+//! Both strings, pcDst and pcSrc, must be NULL-terminated.
+//! No overflow checking is performed.
+//! pcDst and pcSrc shall not overlap.
+//!
+//! @return pcDst (the location of the destination string).
+//
+//*****************************************************************************
+char *
+am_util_string_strcat(char *pcDst, const char *pcSrc)
+{
+    char *pcRet = pcDst;
+
+    //
+    // Find the end of the existing string.
+    //
+    while ( *pcDst++ );
+    pcDst--;
+
+    //
+    // Now, copy the new string.
+    //
+    am_util_string_strcpy(pcDst, pcSrc);
+
+    return pcRet;
+}
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.h
index 4c9d151d4..2bcebd46d 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_string.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_STRING_H
@@ -95,6 +95,7 @@ extern int32_t am_util_string_strnicmp(const char *str1, const char *str2,
 extern uint32_t am_util_string_strlen(const char *pcStr);
 extern char *am_util_string_strcpy(char *pcDst, const char *pcSrc);
 extern char *am_util_string_strncpy(char *pcDst, const char *pcSrc, uint32_t uNum);
+extern char *am_util_string_strcat(char *pcDst, const char *pcSrc);
 
 
 //*****************************************************************************
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.c
index 9dda73ec0..7a273484a 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.c
@@ -40,7 +40,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.h
index 536930d58..26d4fee92 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_stxetx.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_STXETX_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.c
index 3f1b04a08..643de8662 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.c
@@ -39,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.h
index bbc883c9c..4db689a4e 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_tap_detect.h
@@ -39,7 +39,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_TAP_DETECT_H
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.c b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.c
index 8ebbb82ac..8f85dea07 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.c
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.c
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #include <stdint.h>
diff --git a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.h b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.h
index 7efb0ee5d..26435829c 100644
--- a/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.h
+++ b/hw/mcu/ambiq/src/ext/AmbiqSuite/utils/am_util_time.h
@@ -37,7 +37,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
-// This is part of revision 1.2.8 of the AmbiqSuite Development Package.
+// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
 //
 //*****************************************************************************
 #ifndef AM_UTIL_TIME_H
diff --git a/kernel/os/include/os/os_cputime.h b/kernel/os/include/os/os_cputime.h
index 2dfb1832c..fc3b8817a 100644
--- a/kernel/os/include/os/os_cputime.h
+++ b/kernel/os/include/os/os_cputime.h
@@ -30,31 +30,51 @@ extern "C" {
 
 /*
  * NOTE: these definitions allow one to override the cputime frequency used.
- * The reason these definitions exist is to make the code more efficient/smaller
- * when CPUTIME counts at 1 MHz.
+ * The reason these definitions exist is to make the code more
+ * efficient/smaller when CPUTIME counts at 1 MHz.
  *
  * For those who want a different cputime frequency, you can set the config
  * definition for OS_CPUTIME_FREQ to the desired frequency in your project,
  * target or bsp.
  */
-#if (MYNEWT_VAL(OS_CPUTIME_FREQ) == 0)
-#error "cputime frequency cannot be 0!"
-#endif
-
 #if (MYNEWT_VAL(OS_CPUTIME_FREQ) == 1000000)
+
 #define OS_CPUTIME_FREQ_1MHZ
-#endif
 
-#if (MYNEWT_VAL(OS_CPUTIME_FREQ) == 32768)
-#define OS_CPUTIME_FREQ_32768
+#elif MYNEWT_VAL(OS_CPUTIME_FREQ) == 256        ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 512        ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 1024       ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 2048       ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 4096       ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 8192       ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 16384      ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 32768      ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 65536      ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 131072     ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 262144     ||  \
+      MYNEWT_VAL(OS_CPUTIME_FREQ) == 524288
+
+#define OS_CPUTIME_FREQ_PWR2
+
+#elif MYNEWT_VAL(OS_CPUTIME_FREQ) > 1000000
+
+#define OS_CPUTIME_FREQ_HIGH
+
+#else
+
+#error "Invalid OS_CPUTIME_FREQ value.  Value must be one of a) a power of 2" \
+       ">= 256Hz, or b) any value >= 1MHz"
+
 #endif
 
+#if defined(OS_CPUTIME_FREQ_HIGH)
 /* CPUTIME data. */
 struct os_cputime_data
 {
     uint32_t ticks_per_usec;    /* number of ticks per usec */
 };
-extern struct os_cputime_data g_cputime;
+extern struct os_cputime_data g_os_cputime;
+#endif
 
 /* Helpful macros to compare cputimes */
 #define CPUTIME_LT(__t1, __t2) ((int32_t)   ((__t1) - (__t2)) < 0)
@@ -84,7 +104,7 @@ int os_cputime_init(uint32_t clock_freq);
  */
 uint32_t os_cputime_get32(void);
 
-#if !defined(OS_CPUTIME_FREQ_32768)
+#if !defined(OS_CPUTIME_FREQ_PWR2)
 /**
  * os cputime nsecs to ticks
  *
@@ -106,6 +126,15 @@ uint32_t os_cputime_nsecs_to_ticks(uint32_t nsecs);
  * @return uint32_t The number of nanoseconds corresponding to 'ticks'
  */
 uint32_t os_cputime_ticks_to_nsecs(uint32_t ticks);
+
+/**
+ * os cputime delay nsecs
+ *
+ * Wait until 'nsecs' nanoseconds has elapsed. This is a blocking delay.
+ *
+ * @param nsecs The number of nanoseconds to wait.
+ */
+void os_cputime_delay_nsecs(uint32_t nsecs);
 #endif
 
 #if defined(OS_CPUTIME_FREQ_1MHZ)
@@ -144,17 +173,6 @@ uint32_t os_cputime_ticks_to_usecs(uint32_t ticks);
  */
 void os_cputime_delay_ticks(uint32_t ticks);
 
-#if !defined(OS_CPUTIME_FREQ_32768)
-/**
- * os cputime delay nsecs
- *
- * Wait until 'nsecs' nanoseconds has elapsed. This is a blocking delay.
- *
- * @param nsecs The number of nanoseconds to wait.
- */
-void os_cputime_delay_nsecs(uint32_t nsecs);
-#endif
-
 /**
  * os cputime delay usecs
  *
diff --git a/kernel/os/src/os_cputime.c b/kernel/os/src/os_cputime.c
index 4c2cd61a4..19b0b8241 100644
--- a/kernel/os/src/os_cputime.c
+++ b/kernel/os/src/os_cputime.c
@@ -30,7 +30,7 @@
  *   @{
  */
 
-#if !defined(OS_CPUTIME_FREQ_32768) && !defined(OS_CPUTIME_FREQ_1MHZ)
+#if defined(OS_CPUTIME_FREQ_HIGH)
 struct os_cputime_data g_os_cputime;
 #endif
 
@@ -51,151 +51,13 @@ os_cputime_init(uint32_t clock_freq)
     int rc;
 
     /* Set the ticks per microsecond. */
-#if !defined(OS_CPUTIME_FREQ_32768) && !defined(OS_CPUTIME_FREQ_1MHZ)
+#if defined(OS_CPUTIME_FREQ_HIGH)
     g_os_cputime.ticks_per_usec = clock_freq / 1000000U;
 #endif
     rc = hal_timer_config(MYNEWT_VAL(OS_CPUTIME_TIMER_NUM), clock_freq);
     return rc;
 }
 
-#if !defined(OS_CPUTIME_FREQ_32768)
-/**
- * os cputime nsecs to ticks
- *
- * Converts the given number of nanoseconds into cputime ticks.
- *
- * @param usecs The number of nanoseconds to convert to ticks
- *
- * @return uint32_t The number of ticks corresponding to 'nsecs'
- */
-uint32_t
-os_cputime_nsecs_to_ticks(uint32_t nsecs)
-{
-    uint32_t ticks;
-
-#if defined(OS_CPUTIME_FREQ_1MHZ)
-    ticks = (nsecs + 999) / 1000;
-#else
-    ticks = ((nsecs * g_os_cputime.ticks_per_usec) + 999) / 1000;
-#endif
-    return ticks;
-}
-
-/**
- * os cputime ticks to nsecs
- *
- * Convert the given number of ticks into nanoseconds.
- *
- * @param ticks The number of ticks to convert to nanoseconds.
- *
- * @return uint32_t The number of nanoseconds corresponding to 'ticks'
- */
-uint32_t
-os_cputime_ticks_to_nsecs(uint32_t ticks)
-{
-    uint32_t nsecs;
-
-#if defined(OS_CPUTIME_FREQ_1MHZ)
-    nsecs = ticks * 1000;
-#else
-    nsecs = ((ticks * 1000) + (g_os_cputime.ticks_per_usec - 1)) /
-            g_os_cputime.ticks_per_usec;
-#endif
-
-    return nsecs;
-}
-#endif
-
-#if !defined(OS_CPUTIME_FREQ_1MHZ)
-#if defined(OS_CPUTIME_FREQ_32768)
-/**
- * os cputime usecs to ticks
- *
- * Converts the given number of microseconds into cputime ticks.
- *
- * @param usecs The number of microseconds to convert to ticks
- *
- * @return uint32_t The number of ticks corresponding to 'usecs'
- */
-uint32_t
-os_cputime_usecs_to_ticks(uint32_t usecs)
-{
-    uint64_t ticks;
-
-    /*
-     * Faster calculation but could be off 1 full tick since we do not
-     * add residual back. Adding back the residual is commented out below, but
-     * shown.
-     */
-    ticks = (uint64_t)usecs * (uint32_t)((((uint64_t)1 << 32) * 32768) / 1000000);
-
-    /* Residual */
-    //ticks += ((uint64_t)us * (1526122139+1)) >> 32;
-
-    return (uint32_t)(ticks >> 32);
-}
-
-/**
- * cputime ticks to usecs
- *
- * Convert the given number of ticks into microseconds.
- *
- * @param ticks The number of ticks to convert to microseconds.
- *
- * @return uint32_t The number of microseconds corresponding to 'ticks'
- *
- * NOTE: This calculation will overflow if the value for ticks is greater
- * than 140737488. I am not going to check that here because that many ticks
- * is about 4222 seconds, way more than what this routine should be used for.
- */
-uint32_t
-os_cputime_ticks_to_usecs(uint32_t ticks)
-{
-    uint32_t usecs;
-
-    usecs = ((ticks >> 9) * 15625) + (((ticks & 0x1ff) * 15625) >> 9);
-    return usecs;
-}
-#else
-/**
- * os cputime usecs to ticks
- *
- * Converts the given number of microseconds into cputime ticks.
- *
- * @param usecs The number of microseconds to convert to ticks
- *
- * @return uint32_t The number of ticks corresponding to 'usecs'
- */
-uint32_t
-os_cputime_usecs_to_ticks(uint32_t usecs)
-{
-    uint32_t ticks;
-
-    ticks = (usecs * g_os_cputime.ticks_per_usec);
-    return ticks;
-}
-
-/**
- * cputime ticks to usecs
- *
- * Convert the given number of ticks into microseconds.
- *
- * @param ticks The number of ticks to convert to microseconds.
- *
- * @return uint32_t The number of microseconds corresponding to 'ticks'
- */
-uint32_t
-os_cputime_ticks_to_usecs(uint32_t ticks)
-{
-    uint32_t us;
-
-    us =  (ticks + (g_os_cputime.ticks_per_usec - 1)) /
-        g_os_cputime.ticks_per_usec;
-    return us;
-}
-#endif
-#endif
-
 /**
  * os cputime delay ticks
  *
@@ -214,7 +76,7 @@ os_cputime_delay_ticks(uint32_t ticks)
     }
 }
 
-#if !defined(OS_CPUTIME_FREQ_32768)
+#if !defined(OS_CPUTIME_FREQ_PWR2)
 /**
  * os cputime delay nsecs
  *
@@ -351,4 +213,3 @@ os_cputime_get32(void)
  *   @} OSCPUTime
  * @} OSKernel
  */
-
diff --git a/kernel/os/src/os_cputime_1mhz.c b/kernel/os/src/os_cputime_1mhz.c
new file mode 100644
index 000000000..4e769687d
--- /dev/null
+++ b/kernel/os/src/os_cputime_1mhz.c
@@ -0,0 +1,52 @@
+#include "os/os_cputime.h"
+
+/**
+ * This module implements cputime functionality for timers whose frequency is
+ * exactly 1 MHz.
+ */
+
+#if defined(OS_CPUTIME_FREQ_1MHZ)
+
+/**
+ * @addtogroup OSKernel Operating System Kernel
+ * @{
+ *   @defgroup OSCPUTime High Resolution Timers
+ *   @{
+ */
+
+/**
+ * os cputime nsecs to ticks
+ *
+ * Converts the given number of nanoseconds into cputime ticks.
+ *
+ * @param usecs The number of nanoseconds to convert to ticks
+ *
+ * @return uint32_t The number of ticks corresponding to 'nsecs'
+ */
+uint32_t
+os_cputime_nsecs_to_ticks(uint32_t nsecs)
+{
+    return (nsecs + 999) / 1000;
+}
+
+/**
+ * os cputime ticks to nsecs
+ *
+ * Convert the given number of ticks into nanoseconds.
+ *
+ * @param ticks The number of ticks to convert to nanoseconds.
+ *
+ * @return uint32_t The number of nanoseconds corresponding to 'ticks'
+ */
+uint32_t
+os_cputime_ticks_to_nsecs(uint32_t ticks)
+{
+    return ticks * 1000;
+}
+
+/**
+ *   @} OSCPUTime
+ * @} OSKernel
+ */
+
+#endif
diff --git a/kernel/os/src/os_cputime_high.c b/kernel/os/src/os_cputime_high.c
new file mode 100644
index 000000000..bb7166234
--- /dev/null
+++ b/kernel/os/src/os_cputime_high.c
@@ -0,0 +1,84 @@
+#include "os/os_cputime.h"
+
+/**
+ * This module implements cputime functionality for timers whose frequency is
+ * greater than 1 MHz.
+ */
+
+#if defined(OS_CPUTIME_FREQ_HIGH)
+
+/**
+ * @addtogroup OSKernel Operating System Kernel
+ * @{
+ *   @defgroup OSCPUTime High Resolution Timers
+ *   @{
+ */
+
+/**
+ * os cputime usecs to ticks
+ *
+ * Converts the given number of microseconds into cputime ticks.
+ *
+ * @param usecs The number of microseconds to convert to ticks
+ *
+ * @return uint32_t The number of ticks corresponding to 'usecs'
+ */
+uint32_t
+os_cputime_usecs_to_ticks(uint32_t usecs)
+{
+    return usecs * g_os_cputime.ticks_per_usec;
+}
+
+/**
+ * cputime ticks to usecs
+ *
+ * Convert the given number of ticks into microseconds.
+ *
+ * @param ticks The number of ticks to convert to microseconds.
+ *
+ * @return uint32_t The number of microseconds corresponding to 'ticks'
+ */
+uint32_t
+os_cputime_ticks_to_usecs(uint32_t ticks)
+{
+    return (ticks + g_os_cputime.ticks_per_usec - 1) /
+           g_os_cputime.ticks_per_usec;
+}
+
+/**
+ * os cputime nsecs to ticks
+ *
+ * Converts the given number of nanoseconds into cputime ticks.
+ *
+ * @param usecs The number of nanoseconds to convert to ticks
+ *
+ * @return uint32_t The number of ticks corresponding to 'nsecs'
+ */
+uint32_t
+os_cputime_nsecs_to_ticks(uint32_t nsecs)
+{
+    return (nsecs * g_os_cputime.ticks_per_usec + 999) / 1000;
+}
+
+/**
+ * os cputime ticks to nsecs
+ *
+ * Convert the given number of ticks into nanoseconds.
+ *
+ * @param ticks The number of ticks to convert to nanoseconds.
+ *
+ * @return uint32_t The number of nanoseconds corresponding to 'ticks'
+ */
+uint32_t
+os_cputime_ticks_to_nsecs(uint32_t ticks)
+{
+    return (ticks * 1000 + g_os_cputime.ticks_per_usec - 1) /
+           g_os_cputime.ticks_per_usec;
+}
+
+/**
+ *   @} OSCPUTime
+ * @} OSKernel
+ */
+
+#endif
diff --git a/kernel/os/src/os_cputime_pwr2.c b/kernel/os/src/os_cputime_pwr2.c
new file mode 100644
index 000000000..5a05b966c
--- /dev/null
+++ b/kernel/os/src/os_cputime_pwr2.c
@@ -0,0 +1,90 @@
+#include "os/os_cputime.h"
+
+/**
+ * This module implements cputime functionality for timers for which:
+ *     a. freq is a power of 2 Hz, and
+ *     b. 256 Hz <= freq < 1 MHz
+ */
+
+#if defined(OS_CPUTIME_FREQ_PWR2)
+
+/**
+ * @addtogroup OSKernel Operating System Kernel
+ * @{
+ *   @defgroup OSCPUTime High Resolution Timers
+ *   @{
+ */
+
+/**
+ * os cputime usecs to ticks
+ *
+ * Converts the given number of microseconds into cputime ticks.
+ *
+ * @param usecs The number of microseconds to convert to ticks
+ *
+ * @return uint32_t The number of ticks corresponding to 'usecs'
+ */
+uint32_t
+os_cputime_usecs_to_ticks(uint32_t usecs)
+{
+    uint64_t ticks;
+
+    /*
+     * Faster calculation but could be off 1 full tick since we do not
+     * add residual back. Adding back the residual is commented out below, but
+     * shown.
+     */
+    ticks = (1ULL << 32) * MYNEWT_VAL(OS_CPUTIME_FREQ) / 1000000 * usecs;
+
+    /* Residual for 32768 Hz. */
+    //ticks += ((uint64_t)usecs * (1526122139+1)) >> 32;
+
+    return ticks >> 32;
+}
+
+/**
+ * cputime ticks to usecs
+ *
+ * Convert the given number of ticks into microseconds.
+ *
+ * @param ticks The number of ticks to convert to microseconds.
+ *
+ * @return uint32_t The number of microseconds corresponding to 'ticks'
+ *
+ * NOTE: This calculation will overflow if the value for ticks is greater
+ * than 140737488. I am not going to check that here because that many ticks
+ * is about 4222 seconds, way more than what this routine should be used for.
+ */
+uint32_t
+os_cputime_ticks_to_usecs(uint32_t ticks)
+{
+    uint32_t usecs;
+    uint32_t shift;
+    uint32_t freq;
+
+    /* Given: `freq = 2^n`, calculate `n`. */
+    /* Note: this looks like a lot of work, but gcc can optimize it away since
+     * `freq` is known at compile time.
+     */
+    freq = MYNEWT_VAL(OS_CPUTIME_FREQ);
+    shift = 0;
+    while (freq != 0) {
+        freq >>= 1;
+        shift++;
+    }
+
+    if (shift <= 7) {
+        return 0;
+    }
+    shift -= 7;
+
+    usecs = ((ticks >> shift) * 15625) + (((ticks & 0x1ff) * 15625) >> shift);
+    return usecs;
+}
+
+/**
+ *   @} OSCPUTime
+ * @} OSKernel
+ */
+
+#endif
diff --git a/net/nimble/transport/emspi/src/ble_hci_emspi.c b/net/nimble/transport/emspi/src/ble_hci_emspi.c
index 309d30c79..96107855d 100644
--- a/net/nimble/transport/emspi/src/ble_hci_emspi.c
+++ b/net/nimble/transport/emspi/src/ble_hci_emspi.c
@@ -174,6 +174,9 @@ ble_hci_emspi_tx_chunk(const uint8_t *data, int len, int *out_bytes_txed)
     uint8_t buf_size;
     int rc;
 
+    /* Silence spurious "may be used uninitialized" warning. */
+    *out_bytes_txed = 0;
+
     ble_hci_emspi_initiate_write();
 
     rc = ble_hci_emspi_write_hdr(BLE_HCI_EMSPI_OP_TX, &buf_size);
@@ -182,7 +185,6 @@ ble_hci_emspi_tx_chunk(const uint8_t *data, int len, int *out_bytes_txed)
     }
 
     if (buf_size == 0) {
-        *out_bytes_txed = 0;
         rc = 0;
         goto done;
     }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services