From 93c5f9858e3b59b72f4e0a272b803b434286531c Mon Sep 17 00:00:00 2001
From: oclyke <oclyke@gmail.com>
Date: Thu, 27 Aug 2020 14:48:14 -0600
Subject: [PATCH 1/2] initial effort

---
 boards.txt                                    |   18 +
 variants/artemis_dk/bsp/am_bsp.c              | 1062 +++++++++++++++++
 variants/artemis_dk/bsp/am_bsp.h              |  293 +++++
 variants/artemis_dk/bsp/am_bsp_pins.c         | 1016 ++++++++++++++++
 variants/artemis_dk/bsp/am_bsp_pins.h         |  687 +++++++++++
 variants/artemis_dk/bsp/bsp_pins.src          |  767 ++++++++++++
 variants/artemis_dk/bsp/gcc/Makefile          |  151 +++
 variants/artemis_dk/bsp/gcc/bin/am_bsp.d      |  189 +++
 variants/artemis_dk/bsp/gcc/bin/am_bsp.o      |  Bin 0 -> 13916 bytes
 variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.d |  167 +++
 variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.o |  Bin 0 -> 11952 bytes
 variants/artemis_dk/bsp/gcc/bin/libam_bsp.a   |  Bin 0 -> 28804 bytes
 variants/artemis_dk/config/variant.cpp        |   93 ++
 variants/artemis_dk/config/variant.h          |   78 ++
 .../linker_scripts/gcc/ambiq_sbl_app.ld       |   78 ++
 variants/artemis_dk/startup/startup_gcc.c     |  392 ++++++
 16 files changed, 4991 insertions(+)
 create mode 100644 variants/artemis_dk/bsp/am_bsp.c
 create mode 100644 variants/artemis_dk/bsp/am_bsp.h
 create mode 100644 variants/artemis_dk/bsp/am_bsp_pins.c
 create mode 100644 variants/artemis_dk/bsp/am_bsp_pins.h
 create mode 100644 variants/artemis_dk/bsp/bsp_pins.src
 create mode 100644 variants/artemis_dk/bsp/gcc/Makefile
 create mode 100644 variants/artemis_dk/bsp/gcc/bin/am_bsp.d
 create mode 100644 variants/artemis_dk/bsp/gcc/bin/am_bsp.o
 create mode 100644 variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.d
 create mode 100644 variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.o
 create mode 100644 variants/artemis_dk/bsp/gcc/bin/libam_bsp.a
 create mode 100644 variants/artemis_dk/config/variant.cpp
 create mode 100644 variants/artemis_dk/config/variant.h
 create mode 100644 variants/artemis_dk/linker_scripts/gcc/ambiq_sbl_app.ld
 create mode 100644 variants/artemis_dk/startup/startup_gcc.c

diff --git a/boards.txt b/boards.txt
index f866be33..746810ba 100644
--- a/boards.txt
+++ b/boards.txt
@@ -62,6 +62,24 @@ artemis.menu.loader.sparkfun_svl.upload.tool=artemis_svl
 artemis.menu.loader.sparkfun_svl.build.ldscript={build.variant.path}/linker_scripts/gcc/artemis_sbl_svl_app.ld
 
 
+###############################################################
+
+amap3adk.name=SparkFun Artemis Dev Kit
+amap3adk.build.variant=artemis_dk
+amap3adk.build.board=AM_AP3_SFE_ARTEMIS_DK
+amap3adk.upload.maximum_size=960000
+amap3adk.upload.sbl_baud=115200
+amap3adk.build.arch=APOLLO3
+amap3adk.build.mcu=cortex-m4
+amap3adk.build.f_cpu=48000000L
+amap3adk.build.core=arduino
+amap3adk.build.includes="-I{build.variant.path}/config" "-I{build.variant.path}/bsp"
+amap3adk.build.extra_flags=-DPART_apollo3 -DAM_PACKAGE_BGA -DAM_PART_APOLLO3 
+amap3adk.build.ldscript={build.variant.path}/linker_scripts/gcc/ambiq_sbl_app.ld
+amap3adk.build.preferred_export_format=bin
+amap3adk.build.defs=
+amap3adk.build.libs=
+
 ###############################################################
 
 amap3redboard.name=SparkFun RedBoard Artemis
diff --git a/variants/artemis_dk/bsp/am_bsp.c b/variants/artemis_dk/bsp/am_bsp.c
new file mode 100644
index 00000000..ff97924b
--- /dev/null
+++ b/variants/artemis_dk/bsp/am_bsp.c
@@ -0,0 +1,1062 @@
+//*****************************************************************************
+//
+//  am_bsp.c
+//! @file
+//!
+//! @brief Top level functions for performing board initialization.
+//!
+//! @addtogroup BSP Board Support Package (BSP)
+//! @addtogroup apollo3_eb_bsp BSP for the Apollo3 Engineering Board
+//! @ingroup BSP
+//! @{
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Copyright (c) 2019, Ambiq Micro
+// All rights reserved.
+// 
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+// 
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// 
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// 
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+// 
+// Third party software included in this distribution is subject to the
+// additional license terms as defined in the /docs/licenses directory.
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// 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 v2.0.0 of the AmbiqSuite Development Package.
+//
+//*****************************************************************************
+
+#include "am_bsp.h"
+#include "am_util.h"
+
+//*****************************************************************************
+//
+// Power tracking structures for IOM and UART
+//
+//*****************************************************************************
+am_bsp_uart_pwrsave_t am_bsp_uart_pwrsave[AM_REG_UART_NUM_MODULES];
+
+//*****************************************************************************
+//
+// LEDs
+//
+//*****************************************************************************
+#ifdef AM_BSP_NUM_LEDS
+am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS] =
+{
+    {AM_BSP_GPIO_LED0, AM_DEVICES_LED_ON_HIGH | AM_DEVICES_LED_POL_DIRECT_DRIVE_M},
+};
+#endif
+
+#ifdef AM_BSP_NUM_BUTTONS
+//*****************************************************************************
+//
+// Buttons.
+//
+//*****************************************************************************
+am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] =
+{
+    AM_DEVICES_BUTTON(AM_BSP_GPIO_BUTTON0, AM_DEVICES_BUTTON_NORMAL_HIGH)
+};
+#endif
+
+//*****************************************************************************
+//
+// Print interface tracking variable.
+//
+//*****************************************************************************
+static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0;
+
+//*****************************************************************************
+//
+// Default UART configuration settings.
+//
+//*****************************************************************************
+static void *g_sCOMUART;
+
+static const am_hal_uart_config_t g_sBspUartConfig =
+{
+    //
+    // Standard UART settings: 115200-8-N-1
+    //
+    .ui32BaudRate = 115200,
+    .ui32DataBits = AM_HAL_UART_DATA_BITS_8,
+    .ui32Parity = AM_HAL_UART_PARITY_NONE,
+    .ui32StopBits = AM_HAL_UART_ONE_STOP_BIT,
+    .ui32FlowControl = AM_HAL_UART_FLOW_CTRL_NONE,
+
+    //
+    // Set TX and RX FIFOs to interrupt at half-full.
+    //
+    .ui32FifoLevels = (AM_HAL_UART_TX_FIFO_1_2 |
+                       AM_HAL_UART_RX_FIFO_1_2),
+
+    //
+    // The default interface will just use polling instead of buffers.
+    //
+    .pui8TxBuffer = 0,
+    .ui32TxBufferSize = 0,
+    .pui8RxBuffer = 0,
+    .ui32RxBufferSize = 0,
+};
+
+#ifndef AM_BSP_DISABLE_BUFFERED_UART
+//*****************************************************************************
+//
+// Default UART configuration settings if using buffers.
+//
+//*****************************************************************************
+#define AM_BSP_UART_BUFFER_SIZE     1024
+static uint8_t pui8UartTxBuffer[AM_BSP_UART_BUFFER_SIZE];
+static uint8_t pui8UartRxBuffer[AM_BSP_UART_BUFFER_SIZE];
+
+static am_hal_uart_config_t g_sBspUartBufferedConfig =
+{
+    //
+    // Standard UART settings: 115200-8-N-1
+    //
+    .ui32BaudRate = 115200,
+    .ui32DataBits = AM_HAL_UART_DATA_BITS_8,
+    .ui32Parity = AM_HAL_UART_PARITY_NONE,
+    .ui32StopBits = AM_HAL_UART_ONE_STOP_BIT,
+    .ui32FlowControl = AM_HAL_UART_FLOW_CTRL_NONE,
+
+    //
+    // Set TX and RX FIFOs to interrupt at half-full.
+    //
+    .ui32FifoLevels = (AM_HAL_UART_TX_FIFO_1_2 |
+                       AM_HAL_UART_RX_FIFO_1_2),
+
+    //
+    // The default interface will just use polling instead of buffers.
+    //
+    .pui8TxBuffer = pui8UartTxBuffer,
+    .ui32TxBufferSize = sizeof(pui8UartTxBuffer),
+    .pui8RxBuffer = pui8UartRxBuffer,
+    .ui32RxBufferSize = sizeof(pui8UartRxBuffer),
+};
+#endif // AM_BSP_DISABLE_BUFFERED_UART
+
+//*****************************************************************************
+//
+//! @brief Prepare the MCU for low power operation.
+//!
+//! This function enables several power-saving features of the MCU, and
+//! disables some of the less-frequently used peripherals. It also sets the
+//! system clock to 24 MHz.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_low_power_init(void)
+{
+    //
+    // Initialize for low power in the power control block
+    //
+    am_hal_pwrctrl_low_power_init();
+
+    //
+    // Disable the RTC.
+    //
+    am_hal_rtc_osc_disable();
+
+    //
+    // Stop the XTAL.
+    //
+    am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0);
+
+    //
+    // Make sure SWO/ITM/TPIU is disabled.
+    // SBL may not get it completely shut down.
+    //
+    am_bsp_itm_printf_disable();
+
+#ifdef AM_BSP_NUM_LEDS
+    //
+    // Initialize the LEDs.
+    // On the apollo3_evb, when the GPIO outputs are disabled (the default at
+    // power up), the FET gates are floating and partially illuminating the LEDs.
+    //
+    uint32_t ux, ui32GPIONumber;
+    for (ux = 0; ux < AM_BSP_NUM_LEDS; ux++)
+    {
+        ui32GPIONumber = am_bsp_psLEDs[ux].ui32GPIONumber;
+
+        //
+        // Configure the pin as a push-pull GPIO output
+        // (aka AM_DEVICES_LED_POL_DIRECT_DRIVE_M).
+        //
+        am_hal_gpio_pinconfig(ui32GPIONumber, g_AM_HAL_GPIO_OUTPUT);
+
+        //
+        // Turn off the LED.
+        //
+        am_hal_gpio_state_write(ui32GPIONumber, AM_HAL_GPIO_OUTPUT_TRISTATE_DISABLE);
+        am_hal_gpio_state_write(ui32GPIONumber, AM_HAL_GPIO_OUTPUT_CLEAR);
+    }
+#endif // AM_BSP_NUM_LEDS
+
+} // am_bsp_low_power_init()
+
+//*****************************************************************************
+//
+//! @brief Enable the TPIU and ITM for debug printf messages.
+//!
+//! This function enables TPIU registers for debug printf messages and enables
+//! ITM GPIO pin to SWO mode. This function should be called after reset and
+//! after waking up from deep sleep.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_debug_printf_enable(void)
+{
+    if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO)
+    {
+#ifdef AM_BSP_GPIO_ITM_SWO
+        am_bsp_itm_printf_enable();
+#endif
+    }
+    else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0)
+    {
+        am_bsp_uart_printf_enable();
+    }
+#ifndef AM_BSP_DISABLE_BUFFERED_UART
+    else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_BUFFERED_UART0)
+    {
+        am_bsp_buffered_uart_printf_enable();
+    }
+#endif // AM_BSP_DISABLE_BUFFERED_UART
+} // am_bsp_debug_printf_enable()
+
+//*****************************************************************************
+//
+//! @brief Enable the TPIU and ITM for debug printf messages.
+//!
+//! This function disables TPIU registers for debug printf messages and
+//! enables ITM GPIO pin to GPIO mode and prepares the MCU to go to deep sleep.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_debug_printf_disable(void)
+{
+    if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO)
+    {
+        am_bsp_itm_printf_disable();
+    }
+    else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0)
+    {
+        am_bsp_uart_printf_disable();
+    }
+} // am_bsp_debug_printf_disable()
+
+//*****************************************************************************
+//
+// @brief Enable printing over ITM.
+//
+//*****************************************************************************
+void
+#ifdef AM_BSP_GPIO_ITM_SWO
+am_bsp_itm_printf_enable(void)
+#else
+am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg)
+#endif
+{
+    am_hal_tpiu_config_t TPIUcfg;
+
+    //
+    // Set the global print interface.
+    //
+    g_ui32PrintInterface = AM_BSP_PRINT_INFC_SWO;
+
+    //
+    // Enable the ITM interface and the SWO pin.
+    //
+    am_hal_itm_enable();
+
+    //
+    // Enable the ITM and TPIU
+    // Set the BAUD clock for 1M
+    //
+    TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M;
+    am_hal_tpiu_enable(&TPIUcfg);
+    #ifdef AM_BSP_GPIO_ITM_SWO
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO);
+    #else
+    am_hal_gpio_pinconfig(ui32Pin, sPincfg);
+    #endif
+
+    //
+    // Attach the ITM to the STDIO driver.
+    //
+    am_util_stdio_printf_init(am_hal_itm_print);
+} // am_bsp_itm_printf_enable()
+
+//*****************************************************************************
+//
+//! @brief ITM-based string print function.
+//!
+//! This function is used for printing a string via the ITM.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_itm_string_print(char *pcString)
+{
+    am_hal_itm_print(pcString);
+}
+
+//*****************************************************************************
+//
+// @brief Disable printing over ITM.
+//
+//*****************************************************************************
+void
+am_bsp_itm_printf_disable(void)
+{
+    //
+    // Disable the ITM/TPIU
+    //
+    am_hal_itm_disable();
+
+    //
+    // Detach the ITM interface from the STDIO driver.
+    //
+    am_util_stdio_printf_init(0);
+
+    // //
+    // // Disconnect the SWO pin
+    // //
+    // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_HAL_GPIO_DISABLE);
+} // am_bsp_itm_printf_disable()
+
+//*****************************************************************************
+//
+//! @brief Set up the IOM pins based on mode and module.
+//!
+//! This function configures up to 10-pins for MSPI serial, dual, quad,
+//! dual-quad, and octal operation.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_iom_pins_enable(uint32_t ui32Module, am_hal_iom_mode_e eIOMMode)
+{
+    uint32_t ui32Combined;
+
+    //
+    // Validate parameters
+    //
+    if ( ui32Module >= AM_REG_IOM_NUM_MODULES )
+    {
+        //
+        // FPGA supports only IOM0 and 1.
+        //
+        return;
+    }
+
+    ui32Combined = ((ui32Module << 2) | eIOMMode);
+
+    switch ( ui32Combined )
+    {
+        case ((0 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_SCK,  g_AM_BSP_GPIO_IOM0_SCK);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_MISO, g_AM_BSP_GPIO_IOM0_MISO);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_MOSI, g_AM_BSP_GPIO_IOM0_MOSI);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_CS,   g_AM_BSP_GPIO_IOM0_CS);
+            break;
+
+        case ((1 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_SCK,  g_AM_BSP_GPIO_IOM1_SCK);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_MISO, g_AM_BSP_GPIO_IOM1_MISO);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_MOSI, g_AM_BSP_GPIO_IOM1_MOSI);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_CS,   g_AM_BSP_GPIO_IOM1_CS);
+            break;
+
+        case ((2 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_SCK,  g_AM_BSP_GPIO_IOM2_SCK);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_MISO, g_AM_BSP_GPIO_IOM2_MISO);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_MOSI, g_AM_BSP_GPIO_IOM2_MOSI);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_CS,   g_AM_BSP_GPIO_IOM2_CS);
+            break;
+
+        case ((3 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_SCK,  g_AM_BSP_GPIO_IOM3_SCK);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_MISO, g_AM_BSP_GPIO_IOM3_MISO);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_MOSI, g_AM_BSP_GPIO_IOM3_MOSI);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_CS,   g_AM_BSP_GPIO_IOM3_CS);
+            break;
+
+        case ((4 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_SCK,  g_AM_BSP_GPIO_IOM4_SCK);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_MISO, g_AM_BSP_GPIO_IOM4_MISO);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_MOSI, g_AM_BSP_GPIO_IOM4_MOSI);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_CS,   g_AM_BSP_GPIO_IOM4_CS);
+            break;
+
+        case ((5 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_SCK,  g_AM_BSP_GPIO_IOM5_SCK);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_MISO, g_AM_BSP_GPIO_IOM5_MISO);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_MOSI, g_AM_BSP_GPIO_IOM5_MOSI);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_CS,   g_AM_BSP_GPIO_IOM5_CS);
+            break;
+
+        case ((0 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_SCL,  g_AM_BSP_GPIO_IOM0_SCL);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_SDA,  g_AM_BSP_GPIO_IOM0_SDA);
+            break;
+
+        case ((1 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_SCL,  g_AM_BSP_GPIO_IOM1_SCL);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_SDA,  g_AM_BSP_GPIO_IOM1_SDA);
+            break;
+
+        case ((2 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_SCL,  g_AM_BSP_GPIO_IOM2_SCL);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_SDA,  g_AM_BSP_GPIO_IOM2_SDA);
+            break;
+
+        case ((3 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_SCL,  g_AM_BSP_GPIO_IOM3_SCL);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_SDA,  g_AM_BSP_GPIO_IOM3_SDA);
+            break;
+
+        case ((4 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_SCL,  g_AM_BSP_GPIO_IOM4_SCL);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_SDA,  g_AM_BSP_GPIO_IOM4_SDA);
+            break;
+
+        case ((5 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_SCL,  g_AM_BSP_GPIO_IOM5_SCL);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_SDA,  g_AM_BSP_GPIO_IOM5_SDA);
+            break;
+
+        default:
+            break;
+    }
+} // am_bsp_iom_pins_enable()
+
+//*****************************************************************************
+//
+//! @brief Disable the IOM pins based on mode and module.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_iom_pins_disable(uint32_t ui32Module, am_hal_iom_mode_e eIOMMode)
+{
+    uint32_t ui32Combined;
+
+    //
+    // Validate parameters
+    //
+    if ( ui32Module >= AM_REG_IOM_NUM_MODULES )
+    {
+        //
+        // FPGA supports only IOM0 and 1.
+        //
+        return;
+    }
+
+    ui32Combined = ((ui32Module << 2) | eIOMMode);
+
+    switch ( ui32Combined )
+    {
+        case ((0 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_SCK,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_MISO, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_MOSI, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_CS,   g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((1 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_SCK,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_MISO, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_MOSI, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_CS,   g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((2 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_SCK,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_MISO, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_MOSI, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_CS,   g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((3 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_SCK,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_MISO, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_MOSI, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_CS,   g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((4 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_SCK,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_MISO, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_MOSI, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_CS,   g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((5 << 2) | AM_HAL_IOM_SPI_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_SCK,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_MISO, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_MOSI, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_CS,   g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((0 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_SCL,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM0_SDA,  g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((1 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_SCL,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM1_SDA,  g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((2 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_SCL,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM2_SDA,  g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((3 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_SCL,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM3_SDA,  g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((4 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_SCL,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM4_SDA,  g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((5 << 2) | AM_HAL_IOM_I2C_MODE):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_SCL,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOM5_SDA,  g_AM_HAL_GPIO_DISABLE);
+            break;
+        default:
+            break;
+    }
+} // am_bsp_iom_pins_disable()
+
+//*****************************************************************************
+//
+//! @brief Set up the MSPI pins based on the external flash device type.
+//!
+//! This function configures up to 10-pins for MSPI serial, dual, quad,
+//! dual-quad, and octal operation.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_mspi_pins_enable(am_hal_mspi_device_e eMSPIDevice)
+{
+    switch ( eMSPIDevice )
+    {
+        case AM_HAL_MSPI_FLASH_SERIAL_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_BSP_GPIO_MSPI_CE0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_BSP_GPIO_MSPI_D0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_BSP_GPIO_MSPI_D1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_SERIAL_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_BSP_GPIO_MSPI_CE1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_BSP_GPIO_MSPI_D4);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_BSP_GPIO_MSPI_D5);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_DUAL_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_BSP_GPIO_MSPI_CE0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_BSP_GPIO_MSPI_D0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_BSP_GPIO_MSPI_D1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_DUAL_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_BSP_GPIO_MSPI_CE1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_BSP_GPIO_MSPI_D4);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_BSP_GPIO_MSPI_D5);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_QUAD_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_BSP_GPIO_MSPI_CE0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_BSP_GPIO_MSPI_D0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_BSP_GPIO_MSPI_D1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_BSP_GPIO_MSPI_D2);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_BSP_GPIO_MSPI_D3);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_QUAD_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_BSP_GPIO_MSPI_CE1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_BSP_GPIO_MSPI_D4);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_BSP_GPIO_MSPI_D5);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_BSP_GPIO_MSPI_D6);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_BSP_GPIO_MSPI_D7);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_OCTAL_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_BSP_GPIO_MSPI_CE0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_BSP_GPIO_MSPI_D0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_BSP_GPIO_MSPI_D1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_BSP_GPIO_MSPI_D2);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_BSP_GPIO_MSPI_D3);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_BSP_GPIO_MSPI_D4);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_BSP_GPIO_MSPI_D5);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_BSP_GPIO_MSPI_D6);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_BSP_GPIO_MSPI_D7);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_OCTAL_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_BSP_GPIO_MSPI_CE1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_BSP_GPIO_MSPI_D0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_BSP_GPIO_MSPI_D1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_BSP_GPIO_MSPI_D2);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_BSP_GPIO_MSPI_D3);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_BSP_GPIO_MSPI_D4);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_BSP_GPIO_MSPI_D5);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_BSP_GPIO_MSPI_D6);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_BSP_GPIO_MSPI_D7);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+        case AM_HAL_MSPI_FLASH_QUADPAIRED:
+        case AM_HAL_MSPI_FLASH_QUADPAIRED_SERIAL:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_BSP_GPIO_MSPI_CE0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_BSP_GPIO_MSPI_CE1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_BSP_GPIO_MSPI_D0);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_BSP_GPIO_MSPI_D1);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_BSP_GPIO_MSPI_D2);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_BSP_GPIO_MSPI_D3);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_BSP_GPIO_MSPI_D4);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_BSP_GPIO_MSPI_D5);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_BSP_GPIO_MSPI_D6);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_BSP_GPIO_MSPI_D7);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_BSP_GPIO_MSPI_SCK);
+            break;
+    }
+} // am_bsp_mspi_pins_enable()
+
+//*****************************************************************************
+//
+//! @brief Disable the MSPI pins based on the external flash device type.
+//!
+//! This function configures up to 10-pins for MSPI serial, dual, quad,
+//! dual-quad, and octal operation.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_mspi_pins_disable(am_hal_mspi_device_e eMSPIDevice)
+{
+    switch ( eMSPIDevice )
+    {
+        case AM_HAL_MSPI_FLASH_SERIAL_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_SERIAL_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_DUAL_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_DUAL_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_QUAD_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_QUAD_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_OCTAL_CE0:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_OCTAL_CE1:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+        case AM_HAL_MSPI_FLASH_QUADPAIRED:
+        case AM_HAL_MSPI_FLASH_QUADPAIRED_SERIAL:
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE0, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_CE1, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D0,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D1,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D2,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D3,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D4,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D5,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D6,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_D7,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_MSPI_SCK, g_AM_HAL_GPIO_DISABLE);
+            break;
+    }
+} // am_bsp_mspi_pins_disable()
+
+//*****************************************************************************
+//
+//! @brief Set up the IOS pins based on mode and module.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void am_bsp_ios_pins_enable(uint32_t ui32Module, uint32_t ui32IOSMode)
+{
+    uint32_t ui32Combined;
+
+    //
+    // Validate parameters
+    //
+    if ( ui32Module >= AM_REG_IOSLAVE_NUM_MODULES )
+    {
+        return;
+    }
+
+    ui32Combined = ((ui32Module << 2) | ui32IOSMode);
+
+    switch ( ui32Combined )
+    {
+        case ((0 << 2) | AM_HAL_IOS_USE_SPI):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_SCK,  g_AM_BSP_GPIO_IOS_SCK);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_MISO, g_AM_BSP_GPIO_IOS_MISO);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_MOSI, g_AM_BSP_GPIO_IOS_MOSI);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_CE,   g_AM_BSP_GPIO_IOS_CE);
+            break;
+
+        case ((0 << 2) | AM_HAL_IOS_USE_I2C):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_SCL,  g_AM_BSP_GPIO_IOS_SCL);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_SDA,  g_AM_BSP_GPIO_IOS_SDA);
+            break;
+        default:
+            break;
+    }
+} // am_bsp_ios_pins_enable()
+
+//*****************************************************************************
+//
+//! @brief Disable the IOS pins based on mode and module.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode)
+{
+    uint32_t ui32Combined;
+
+    //
+    // Validate parameters
+    //
+    if ( ui32Module >= AM_REG_IOSLAVE_NUM_MODULES )
+    {
+        return;
+    }
+
+    ui32Combined = ((ui32Module << 2) | ui32IOSMode);
+
+    switch ( ui32Combined )
+    {
+        case ((0 << 2) | AM_HAL_IOS_USE_SPI):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_SCK,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_MISO, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_MOSI, g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_CE,   g_AM_HAL_GPIO_DISABLE);
+            break;
+
+        case ((0 << 2) | AM_HAL_IOS_USE_I2C):
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_SCL,  g_AM_HAL_GPIO_DISABLE);
+            am_hal_gpio_pinconfig(AM_BSP_GPIO_IOS_SDA,  g_AM_HAL_GPIO_DISABLE);
+            break;
+        default:
+            break;
+    }
+} // am_bsp_ios_pins_disable()
+
+//*****************************************************************************
+//
+//! @brief UART-based string print function.
+//!
+//! This function is used for printing a string via the UART, which for some
+//! MCU devices may be multi-module.
+//!
+//! @return None.
+//
+//*****************************************************************************
+void
+am_bsp_uart_string_print(char *pcString)
+{
+    uint32_t ui32StrLen = 0;
+    uint32_t ui32BytesWritten = 0;
+
+    //
+    // Measure the length of the string.
+    //
+    while (pcString[ui32StrLen] != 0)
+    {
+        ui32StrLen++;
+    }
+
+    //
+    // Print the string via the UART.
+    //
+    const am_hal_uart_transfer_t sUartWrite =
+    {
+        .ui32Direction = AM_HAL_UART_WRITE,
+        .pui8Data = (uint8_t *) pcString,
+        .ui32NumBytes = ui32StrLen,
+        .ui32TimeoutMs = AM_HAL_UART_WAIT_FOREVER,
+        .pui32BytesTransferred = &ui32BytesWritten,
+    };
+
+    am_hal_uart_transfer(g_sCOMUART, &sUartWrite);
+
+    if (ui32BytesWritten != ui32StrLen)
+    {
+        //
+        // Couldn't send the whole string!!
+        //
+        while(1);
+    }
+} // am_bsp_uart_string_print()
+
+//*****************************************************************************
+//
+// Pass-through function to let applications access the COM UART.
+//
+//*****************************************************************************
+uint32_t
+am_bsp_com_uart_transfer(const am_hal_uart_transfer_t *psTransfer)
+{
+    return am_hal_uart_transfer(g_sCOMUART, psTransfer);
+} // am_bsp_com_uart_transfer()
+
+//*****************************************************************************
+//
+// Initialize and configure the UART
+//
+//*****************************************************************************
+void
+am_bsp_uart_printf_enable(void)
+{
+    //
+    // Save the information that we're using the UART for printing.
+    //
+    g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0;
+
+    //
+    // Initialize, power up, and configure the communication UART. Use the
+    // custom configuration if it was provided. Otherwise, just use the default
+    // configuration.
+    //
+    am_hal_uart_initialize(AM_BSP_UART_PRINT_INST, &g_sCOMUART);
+    am_hal_uart_power_control(g_sCOMUART, AM_HAL_SYSCTRL_WAKE, false);
+    am_hal_uart_configure(g_sCOMUART, &g_sBspUartConfig);
+
+    //
+    // Enable the UART pins.
+    //
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_TX, g_AM_BSP_GPIO_COM_UART_TX);
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_RX, g_AM_BSP_GPIO_COM_UART_RX);
+
+    //
+    // Register the BSP print function to the STDIO driver.
+    //
+    am_util_stdio_printf_init(am_bsp_uart_string_print);
+} // am_bsp_uart_printf_enable()
+
+//*****************************************************************************
+//
+// Initialize and configure the UART with a custom configuration
+//
+//*****************************************************************************
+void
+am_bsp_uart_printf_enable_custom(const am_hal_uart_config_t* p_config)
+{
+    //
+    // Save the information that we're using the UART for printing.
+    //
+    g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0;
+
+    //
+    // Initialize, power up, and configure the communication UART. Use the
+    // custom configuration if it was provided. Otherwise, just use the default
+    // configuration.
+    //
+    am_hal_uart_initialize(AM_BSP_UART_PRINT_INST, &g_sCOMUART);
+    am_hal_uart_power_control(g_sCOMUART, AM_HAL_SYSCTRL_WAKE, false);
+    am_hal_uart_configure(g_sCOMUART, p_config);
+
+    //
+    // Enable the UART pins.
+    //
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_TX, g_AM_BSP_GPIO_COM_UART_TX);
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_RX, g_AM_BSP_GPIO_COM_UART_RX);
+
+    //
+    // Register the BSP print function to the STDIO driver.
+    //
+    am_util_stdio_printf_init(am_bsp_uart_string_print);
+} // am_bsp_uart_printf_enable()
+
+//*****************************************************************************
+//
+// Disable the UART
+//
+//*****************************************************************************
+void
+am_bsp_uart_printf_disable(void)
+{
+    //
+    // Make sure the UART has finished sending everything it's going to send.
+    //
+    am_hal_uart_tx_flush(g_sCOMUART);
+
+    //
+    // Detach the UART from the stdio driver.
+    //
+    am_util_stdio_printf_init(0);
+
+    //
+    // Power down the UART, and surrender the handle.
+    //
+    am_hal_uart_power_control(g_sCOMUART, AM_HAL_SYSCTRL_DEEPSLEEP, false);
+    am_hal_uart_deinitialize(g_sCOMUART);
+
+    //
+    // Disable the UART pins.
+    //
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_TX, g_AM_HAL_GPIO_DISABLE);
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_RX, g_AM_HAL_GPIO_DISABLE);
+
+} // am_bsp_uart_printf_disable()
+
+#ifndef AM_BSP_DISABLE_BUFFERED_UART
+//*****************************************************************************
+//
+// Initialize and configure the UART
+//
+//*****************************************************************************
+void
+am_bsp_buffered_uart_printf_enable(void)
+{
+    //
+    // Save the information that we're using the UART for printing.
+    //
+    g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0;
+
+    //
+    // Initialize, power up, and configure the communication UART. Use the
+    // custom configuration if it was provided. Otherwise, just use the default
+    // configuration.
+    //
+    am_hal_uart_initialize(AM_BSP_UART_PRINT_INST, &g_sCOMUART);
+    am_hal_uart_power_control(g_sCOMUART, AM_HAL_SYSCTRL_WAKE, false);
+    am_hal_uart_configure(g_sCOMUART, &g_sBspUartBufferedConfig);
+
+    //
+    // Enable the UART pins.
+    //
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_TX, g_AM_BSP_GPIO_COM_UART_TX);
+    am_hal_gpio_pinconfig(AM_BSP_GPIO_COM_UART_RX, g_AM_BSP_GPIO_COM_UART_RX);
+
+    //
+    // Register the BSP print function to the STDIO driver.
+    //
+    am_util_stdio_printf_init(am_bsp_uart_string_print);
+
+    //
+    // Enable the interrupts for the UART.
+    //
+    NVIC_EnableIRQ((IRQn_Type)(UART0_IRQn + AM_BSP_UART_PRINT_INST));
+} // am_bsp_buffered_uart_printf_enable()
+
+//*****************************************************************************
+//
+// Interrupt routine for the buffered UART interface.
+//
+//*****************************************************************************
+void
+am_bsp_buffered_uart_service(void)
+{
+    uint32_t ui32Status, ui32Idle;
+    am_hal_uart_interrupt_status_get(g_sCOMUART, &ui32Status, true);
+    am_hal_uart_interrupt_clear(g_sCOMUART, ui32Status);
+    am_hal_uart_interrupt_service(g_sCOMUART, ui32Status, &ui32Idle);
+} // am_bsp_buffered_uart_service()
+#endif // AM_BSP_DISABLE_BUFFERED_UART
+
+
+
+//*****************************************************************************
+//
+// End Doxygen group.
+//! @}
+//
+//*****************************************************************************
diff --git a/variants/artemis_dk/bsp/am_bsp.h b/variants/artemis_dk/bsp/am_bsp.h
new file mode 100644
index 00000000..b3371f1e
--- /dev/null
+++ b/variants/artemis_dk/bsp/am_bsp.h
@@ -0,0 +1,293 @@
+//*****************************************************************************
+//
+//  am_bsp.h
+//! @file
+//!
+//! @brief Functions to aid with configuring the GPIOs.
+//!
+//! @addtogroup BSP Board Support Package (BSP)
+//! @addtogroup apollo3_fpga_bsp BSP for the Apollo3 Hotshot FPGA
+//! @ingroup BSP
+//! @{
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Copyright (c) 2019, Ambiq Micro
+// All rights reserved.
+// 
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+// 
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// 
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// 
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+// 
+// Third party software included in this distribution is subject to the
+// additional license terms as defined in the /docs/licenses directory.
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// 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 v2.0.0 of the AmbiqSuite Development Package.
+//
+//*****************************************************************************
+
+#ifndef AM_BSP_H
+#define AM_BSP_H
+
+// artmbed hardware version: v01 (there will need to be changes when migrating to v02 or v10)
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "am_mcu_apollo.h"
+#include "am_bsp_pins.h"
+
+//
+// Make individual includes to not require full port before usage.
+//#include "am_devices.h"
+//
+#include "am_devices_led.h"
+#include "am_devices_button.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+//*****************************************************************************
+//
+// Begin User Modifiable Area
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Camera
+//
+//*****************************************************************************
+#define AM_BSP_CAMERA_HM01B0_MCLK_PIN              18
+#define AM_BSP_CAMERA_HM01B0_I2C_IOM               1
+#define AM_BSP_CAMERA_HM01B0_I2C_SDA_PIN           AM_BSP_GPIO_IOM1_SDA
+#define AM_BSP_CAMERA_HM01B0_I2C_SCL_PIN           AM_BSP_GPIO_IOM1_SCL
+#define g_AM_BSP_CAMERA_HM01B0_I2C_SDA              g_AM_BSP_GPIO_IOM1_SDA
+#define g_AM_BSP_CAMERA_HM01B0_I2C_SCL              g_AM_BSP_GPIO_IOM1_SCL
+#define AM_BSP_CAMERA_HM01B0_MCLK_GEN_MOD           1
+#define AM_BSP_CAMERA_HM01B0_MCLK_GEN_SEG           AM_HAL_CTIMER_TIMERA
+
+
+//*****************************************************************************
+//
+// PDM Microphone
+//
+//*****************************************************************************
+#define AM_BSP_PDM_CHANNEL                  AM_HAL_PDM_CHANNEL_RIGHT
+#define AM_BSP_PDM_DATA_PIN                 AM_BSP_GPIO_MIC_DATA
+#define AM_BSP_PDM_CLOCK_PIN                AM_BSP_GPIO_MIC_CLK
+#define g_AM_BSP_PDM_DATA                   g_AM_BSP_GPIO_MIC_DATA
+#define g_AM_BSP_PDM_CLOCK                  g_AM_BSP_GPIO_MIC_CLK
+
+//*****************************************************************************
+//
+// Accelerometer.
+//
+//*****************************************************************************
+#define AM_BSP_ACCELEROMETER_I2C_IOM        1
+#define AM_BSP_ACCELEROMETER_I2C_ADDRESS    0x19
+#define AM_BSP_ACCELEROMETER_I2C_SDA_PIN    AM_BSP_GPIO_IOM1_SDA
+#define AM_BSP_ACCELEROMETER_I2C_SCL_PIN    AM_BSP_GPIO_IOM1_SCL
+#define g_AM_BSP_ACCELEROMETER_I2C_SDA      g_AM_BSP_GPIO_IOM1_SDA
+#define g_AM_BSP_ACCELEROMETER_I2C_SCL      g_AM_BSP_GPIO_IOM1_SCL
+
+
+//*****************************************************************************
+//
+// Primary SPI Pins
+//
+//*****************************************************************************
+#define AM_BSP_PRIM_SPI_IOM                 4
+#define AM_BSP_PRIM_SPI_CLK_PIN             AM_BSP_GPIO_IOM4_SCK
+#define AM_BSP_PRIM_SPI_SDO_PIN             AM_BSP_GPIO_IOM4_MOSI
+#define AM_BSP_PRIM_SPI_SDI_PIN             AM_BSP_GPIO_IOM4_MISO
+#define g_AM_BSP_PRIM_SPI_CLK               g_AM_BSP_GPIO_IOM4_SCK
+#define g_AM_BSP_PRIM_SPI_SDO               g_AM_BSP_GPIO_IOM4_SDO
+#define g_AM_BSP_PRIM_SPI_SDI               g_AM_BSP_GPIO_IOM4_SDI
+
+
+//*****************************************************************************
+//
+// Primary UART Pins
+//
+//*****************************************************************************
+#define AM_BSP_PRIM_UART_TX_PIN             AM_BSP_GPIO_COM_UART_TX
+#define AM_BSP_PRIM_UART_RX_PIN             AM_BSP_GPIO_COM_UART_RX
+#define g_AM_BSP_PRIM_UART_TX               g_AM_BSP_GPIO_COM_UART_TX
+#define g_AM_BSP_PRIM_UART_RX               g_AM_BSP_GPIO_COM_UART_RX
+
+
+//*****************************************************************************
+//
+// Qwiic Connector.
+//
+//*****************************************************************************
+#define AM_BSP_QWIIC_I2C_IOM                1
+#define AM_BSP_QWIIC_I2C_SDA_PIN            AM_BSP_GPIO_IOM1_SDA
+#define AM_BSP_QWIIC_I2C_SCL_PIN            AM_BSP_GPIO_IOM1_SCL
+#define g_AM_BSP_QWIIC_I2C_SDA              g_AM_BSP_GPIO_IOM1_SDA
+#define g_AM_BSP_QWIIC_I2C_SCL              g_AM_BSP_GPIO_IOM1_SCL
+
+
+// //*****************************************************************************
+// //
+// // Button definitions.
+// //
+// //*****************************************************************************
+// #define AM_BSP_NUM_BUTTONS                  0
+// extern am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS];
+
+
+//*****************************************************************************
+//
+// LED definitions.
+//
+//*****************************************************************************
+#define AM_BSP_NUM_LEDS                   1
+extern am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS];
+
+// LED Device Array Indices
+#define AM_BSP_LED0 0
+#define AM_BSP_LED_BLUE      AM_BSP_LED0
+
+// Corresponding GPIO Numbers
+#define AM_BSP_GPIO_LED0         AM_BSP_GPIO_LED_BLUE
+#define AM_BSP_GPIO_LED23        AM_BSP_GPIO_LED_BLUE
+#define AM_BSP_GPIO_LED_STAT     AM_BSP_GPIO_LED_BLUE
+
+
+
+//*****************************************************************************
+//
+// PWM_LED peripheral assignments.
+//
+//*****************************************************************************
+//
+// The ARTMBED LED0 is pad 23
+//
+#define AM_BSP_PIN_PWM_LED                  AM_BSP_GPIO_LED0
+#define AM_BSP_PWM_LED_TIMER                3
+#define AM_BSP_PWM_LED_TIMER_SEG            AM_HAL_CTIMER_TIMERB
+#define AM_BSP_PWM_LED_TIMER_INT            AM_HAL_CTIMER_INT_TIMERB3C0
+
+//*****************************************************************************
+//
+// UART definitions.
+//
+//*****************************************************************************
+//
+// Apollo3 has two UART instances.
+// AM_BSP_UART_PRINT_INST should correspond to COM_UART.
+//
+#define AM_BSP_UART_IOS_INST                0
+#define AM_BSP_UART_PRINT_INST              0
+#define AM_BSP_UART_BOOTLOADER_INST         0
+
+//*****************************************************************************
+//
+// End User Modifiable Area
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Print interface type
+//
+//*****************************************************************************
+#define AM_BSP_PRINT_INFC_NONE              0
+#define AM_BSP_PRINT_INFC_SWO               1
+#define AM_BSP_PRINT_INFC_UART0             2
+#define AM_BSP_PRINT_INFC_BUFFERED_UART0    3
+
+
+//*****************************************************************************
+//
+//! Structure containing UART configuration information while it is powered down.
+//
+//*****************************************************************************
+typedef struct
+{
+    bool     bSaved;
+    uint32_t ui32TxPinNum;
+    uint32_t ui32TxPinCfg;
+}
+am_bsp_uart_pwrsave_t;
+
+//*****************************************************************************
+//
+// External data definitions.
+//
+//*****************************************************************************
+extern am_bsp_uart_pwrsave_t am_bsp_uart_pwrsave[AM_REG_UART_NUM_MODULES];
+
+//*****************************************************************************
+//
+// External function definitions.
+//
+//*****************************************************************************
+extern void am_bsp_low_power_init(void);
+extern void am_bsp_iom_pins_enable(uint32_t ui32Module, am_hal_iom_mode_e eIOMMode);
+extern void am_bsp_iom_pins_disable(uint32_t ui32Module, am_hal_iom_mode_e eIOMMode);
+extern void am_bsp_mspi_pins_enable(am_hal_mspi_device_e eMSPIDevice);
+extern void am_bsp_mspi_pins_disable(am_hal_mspi_device_e eMSPIDevice);
+
+extern void am_bsp_ios_pins_enable(uint32_t ui32Module, uint32_t ui32IOSMode);   // SparkFun Edge does not expose IO Slave Clock signal, so hiding these functions
+extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode);
+
+extern void am_bsp_debug_printf_enable(void);
+extern void am_bsp_debug_printf_disable(void);
+
+#ifdef AM_BSP_GPIO_ITM_SWO
+extern void am_bsp_itm_printf_enable(void);
+#else
+extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg);
+#endif
+extern void am_bsp_itm_string_print(char *pcString);
+extern void am_bsp_itm_printf_disable(void);
+
+extern void am_bsp_uart_string_print(char *pcString);
+extern void am_bsp_uart_printf_enable(void);
+extern void am_bsp_uart_printf_enable_custom(const am_hal_uart_config_t* p_config);
+extern void am_bsp_uart_printf_disable(void);
+
+extern void am_bsp_buffered_uart_printf_enable(void);
+extern void am_bsp_buffered_uart_service(void);
+
+extern uint32_t am_bsp_com_uart_transfer(const am_hal_uart_transfer_t *psTransfer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // AM_BSP_H
+//*****************************************************************************
+//
+// End Doxygen group.
+//! @}
+//
+//*****************************************************************************
diff --git a/variants/artemis_dk/bsp/am_bsp_pins.c b/variants/artemis_dk/bsp/am_bsp_pins.c
new file mode 100644
index 00000000..801f4741
--- /dev/null
+++ b/variants/artemis_dk/bsp/am_bsp_pins.c
@@ -0,0 +1,1016 @@
+//*****************************************************************************
+//
+//  am_bsp_pins.c
+//! @file
+//!
+//! @brief BSP pin configuration definitions.
+//!
+//! @addtogroup BSP Board Support Package (BSP)
+//! @addtogroup apollo3_evb_bsp BSP for the Apollo3 Engineering Board
+//! @ingroup BSP
+//! @{
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Copyright (c) 2019, Ambiq Micro
+// All rights reserved.
+// 
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+// 
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// 
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// 
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+// 
+// Third party software included in this distribution is subject to the
+// additional license terms as defined in the /docs/licenses directory.
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// 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 2.2.0-hotfix-2.2.1 of the AmbiqSuite Development Package.
+//
+//*****************************************************************************
+
+#include "am_bsp.h"
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D0 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D0 =
+{
+    .uFuncSel            = AM_HAL_PIN_0_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D1 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D1 =
+{
+    .uFuncSel            = AM_HAL_PIN_1_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D2 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D2 =
+{
+    .uFuncSel            = AM_HAL_PIN_2_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D3 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D3 =
+{
+    .uFuncSel            = AM_HAL_PIN_3_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D4 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D4 =
+{
+    .uFuncSel            = AM_HAL_PIN_4_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D5 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D5 =
+{
+    .uFuncSel            = AM_HAL_PIN_5_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D6 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D6 =
+{
+    .uFuncSel            = AM_HAL_PIN_6_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D7 pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_D7 =
+{
+    .uFuncSel            = AM_HAL_PIN_7_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_VSYNC pin: Also called FVLD on the HM01B0 module.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_VSYNC =
+{
+    .uFuncSel            = AM_HAL_PIN_15_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_HSYNC pin: Also called LVLD on the HM01B0 module.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_HSYNC =
+{
+    .uFuncSel            = AM_HAL_PIN_17_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_PCLK pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_PCLK =
+{
+    .uFuncSel            = AM_HAL_PIN_19_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_TRIG pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_TRIG =
+{
+    .uFuncSel            = AM_HAL_PIN_14_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_INT pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_CAMERA_HM01B0_INT =
+{
+    .uFuncSel            = AM_HAL_PIN_10_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  MIC_DATA pin: Data line for PDM microphones.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MIC_DATA =
+{
+    .uFuncSel            = AM_HAL_PIN_11_PDMDATA
+};
+
+//*****************************************************************************
+//
+//  MIC_CLK pin: Clock line for PDM microphones.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MIC_CLK =
+{
+    .uFuncSel            = AM_HAL_PIN_12_PDMCLK
+};
+
+//*****************************************************************************
+//
+//  LED_BLUE pin: The BLUE LED labeled STAT.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_LED_BLUE =
+{
+    .uFuncSel            = AM_HAL_PIN_23_GPIO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA
+};
+
+//*****************************************************************************
+//
+//  COM_UART_TX pin: This pin is the COM_UART transmit pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_COM_UART_TX =
+{
+    .uFuncSel            = AM_HAL_PIN_48_UART0TX,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA
+};
+
+//*****************************************************************************
+//
+//  COM_UART_RX pin: This pin is the COM_UART receive pin.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_COM_UART_RX =
+{
+    .uFuncSel            = AM_HAL_PIN_49_UART0RX
+};
+
+//*****************************************************************************
+//
+//  IOM0_CS pin: I/O Master 0 chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM0_CS =
+{
+    .uFuncSel            = AM_HAL_PIN_11_NCE11,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 0,
+    .uNCE                = 0,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOM0_CS3 pin: I/O Master 0 chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM0_CS3 =
+{
+    .uFuncSel            = AM_HAL_PIN_15_NCE15,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 0,
+    .uNCE                = 3,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOM0_MISO pin: I/O Master 0 SPI MISO signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM0_MISO =
+{
+    .uFuncSel            = AM_HAL_PIN_6_M0MISO,
+    .uIOMnum             = 0
+};
+
+//*****************************************************************************
+//
+//  IOM0_MOSI pin: I/O Master 0 SPI MOSI signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM0_MOSI =
+{
+    .uFuncSel            = AM_HAL_PIN_7_M0MOSI,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 0
+};
+
+//*****************************************************************************
+//
+//  IOM0_SCK pin: I/O Master 0 SPI SCK signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM0_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_5_M0SCK,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 0
+};
+
+//*****************************************************************************
+//
+//  IOM0_SCL pin: I/O Master 0 I2C clock signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM0_SCL =
+{
+    .uFuncSel            = AM_HAL_PIN_5_M0SCL,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 0
+};
+
+//*****************************************************************************
+//
+//  IOM0_SDA pin: I/O Master 0 I2C data signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM0_SDA =
+{
+    .uFuncSel            = AM_HAL_PIN_6_M0SDAWIR3,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 0
+};
+
+//*****************************************************************************
+//
+//  IOM1_CS pin: I/O Master 1 chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM1_CS =
+{
+    .uFuncSel            = AM_HAL_PIN_14_NCE14,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 1,
+    .uNCE                = 2,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOM1_MISO pin: I/O Master 1 SPI MISO signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM1_MISO =
+{
+    .uFuncSel            = AM_HAL_PIN_9_M1MISO,
+    .uIOMnum             = 1
+};
+
+//*****************************************************************************
+//
+//  IOM1_MOSI pin: I/O Master 1 SPI MOSI signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM1_MOSI =
+{
+    .uFuncSel            = AM_HAL_PIN_10_M1MOSI,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 1
+};
+
+//*****************************************************************************
+//
+//  IOM1_SCK pin: I/O Master 1 SPI SCK signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM1_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_8_M1SCK,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 1
+};
+
+//*****************************************************************************
+//
+//  IOM1_SCL pin: I/O Master 1 I2C clock signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM1_SCL =
+{
+    .uFuncSel            = AM_HAL_PIN_8_M1SCL,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 1
+};
+
+//*****************************************************************************
+//
+//  IOM1_SDA pin: I/O Master 1 I2C data signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM1_SDA =
+{
+    .uFuncSel            = AM_HAL_PIN_9_M1SDAWIR3,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 1
+};
+
+//*****************************************************************************
+//
+//  IOM2_CS pin: I/O Master 2 chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM2_CS =
+{
+    .uFuncSel            = AM_HAL_PIN_15_NCE15,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 2,
+    .uNCE                = 3,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOM2_MISO pin: I/O Master 2 SPI MISO signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM2_MISO =
+{
+    .uFuncSel            = AM_HAL_PIN_25_M2MISO,
+    .uIOMnum             = 2
+};
+
+//*****************************************************************************
+//
+//  IOM2_MOSI pin: I/O Master 2 SPI MOSI signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM2_MOSI =
+{
+    .uFuncSel            = AM_HAL_PIN_28_M2MOSI,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 2
+};
+
+//*****************************************************************************
+//
+//  IOM2_SCK pin: I/O Master 2 SPI SCK signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM2_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_27_M2SCK,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 2
+};
+
+//*****************************************************************************
+//
+//  IOM2_SCL pin: I/O Master 2 I2C clock signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM2_SCL =
+{
+    .uFuncSel            = AM_HAL_PIN_27_M2SCL,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 2
+};
+
+//*****************************************************************************
+//
+//  IOM2_SDA pin: I/O Master 2 I2C data signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM2_SDA =
+{
+    .uFuncSel            = AM_HAL_PIN_25_M2SDAWIR3,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 2
+};
+
+//*****************************************************************************
+//
+//  IOM3_CS pin: I/O Master 3 chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM3_CS =
+{
+    .uFuncSel            = AM_HAL_PIN_12_NCE12,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 3,
+    .uNCE                = 0,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOM3_MISO pin: I/O Master 3 SPI MISO signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM3_MISO =
+{
+    .uFuncSel            = AM_HAL_PIN_43_M3MISO,
+    .uIOMnum             = 3
+};
+
+//*****************************************************************************
+//
+//  IOM3_MOSI pin: I/O Master 3 SPI MOSI signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM3_MOSI =
+{
+    .uFuncSel            = AM_HAL_PIN_38_M3MOSI,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 3
+};
+
+//*****************************************************************************
+//
+//  IOM3_SCK pin: I/O Master 3 SPI SCK signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM3_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_42_M3SCK,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 3
+};
+
+//*****************************************************************************
+//
+//  IOM3_SCL pin: I/O Master 3 I2C clock signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM3_SCL =
+{
+    .uFuncSel            = AM_HAL_PIN_42_M3SCL,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 3
+};
+
+//*****************************************************************************
+//
+//  IOM3_SDA pin: I/O Master 3 I2C data signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM3_SDA =
+{
+    .uFuncSel            = AM_HAL_PIN_43_M3SDAWIR3,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 3
+};
+
+//*****************************************************************************
+//
+//  IOM4_CS pin: I/O Master 4 chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM4_CS =
+{
+    .uFuncSel            = AM_HAL_PIN_13_NCE13,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 4,
+    .uNCE                = 1,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOM4_MISO pin: I/O Master 4 SPI MISO signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM4_MISO =
+{
+    .uFuncSel            = AM_HAL_PIN_40_M4MISO,
+    .uIOMnum             = 4
+};
+
+//*****************************************************************************
+//
+//  IOM4_MOSI pin: I/O Master 4 SPI MOSI signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM4_MOSI =
+{
+    .uFuncSel            = AM_HAL_PIN_44_M4MOSI,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 4
+};
+
+//*****************************************************************************
+//
+//  IOM4_SCK pin: I/O Master 4 SPI SCK signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM4_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_39_M4SCK,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 4
+};
+
+//*****************************************************************************
+//
+//  IOM4_SCL pin: I/O Master 4 I2C clock signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM4_SCL =
+{
+    .uFuncSel            = AM_HAL_PIN_39_M4SCL,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 4
+};
+
+//*****************************************************************************
+//
+//  IOM4_SDA pin: I/O Master 4 I2C data signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM4_SDA =
+{
+    .uFuncSel            = AM_HAL_PIN_40_M4SDAWIR3,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 4
+};
+
+//*****************************************************************************
+//
+//  IOM5_CS pin: I/O Master 5 chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM5_CS =
+{
+    .uFuncSel            = AM_HAL_PIN_16_NCE16,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 5,
+    .uNCE                = 0,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOM5_MISO pin: I/O Master 5 SPI MISO signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM5_MISO =
+{
+    .uFuncSel            = AM_HAL_PIN_49_M5MISO,
+    .uIOMnum             = 5
+};
+
+//*****************************************************************************
+//
+//  IOM5_MOSI pin: I/O Master 5 SPI MOSI signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM5_MOSI =
+{
+    .uFuncSel            = AM_HAL_PIN_47_M5MOSI,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 5
+};
+
+//*****************************************************************************
+//
+//  IOM5_SCK pin: I/O Master 5 SPI SCK signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM5_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_48_M5SCK,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .uIOMnum             = 5
+};
+
+//*****************************************************************************
+//
+//  IOM5_SCL pin: I/O Master 5 I2C clock signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM5_SCL =
+{
+    .uFuncSel            = AM_HAL_PIN_48_M5SCL,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 5
+};
+
+//*****************************************************************************
+//
+//  IOM5_SDA pin: I/O Master 5 I2C data signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOM5_SDA =
+{
+    .uFuncSel            = AM_HAL_PIN_49_M5SDAWIR3,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN,
+    .uIOMnum             = 5
+};
+
+//*****************************************************************************
+//
+//  MSPI_CE0 pin: MSPI chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_CE0 =
+{
+    .uFuncSel            = AM_HAL_PIN_19_NCE19,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6,
+    .uNCE                = 0,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  MSPI_CE1 pin: MSPI chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_CE1 =
+{
+    .uFuncSel            = AM_HAL_PIN_41_NCE41,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_PUSHPULL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_NONE,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6,
+    .uNCE                = 1,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  MSPI_D0 pin: MSPI data 0.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D0 =
+{
+    .uFuncSel            = AM_HAL_PIN_22_MSPI0,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_D1 pin: MSPI data 1.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D1 =
+{
+    .uFuncSel            = AM_HAL_PIN_26_MSPI1,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_D2 pin: MSPI data 2.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D2 =
+{
+    .uFuncSel            = AM_HAL_PIN_4_MSPI2,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_D3 pin: MSPI data 3.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D3 =
+{
+    .uFuncSel            = AM_HAL_PIN_23_MSPI13,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_D4 pin: MSPI data 4.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D4 =
+{
+    .uFuncSel            = AM_HAL_PIN_0_MSPI4,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_D5 pin: MSPI data 5.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D5 =
+{
+    .uFuncSel            = AM_HAL_PIN_1_MSPI5,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_D6 pin: MSPI data 6.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D6 =
+{
+    .uFuncSel            = AM_HAL_PIN_2_MSPI6,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_D7 pin: MSPI data 7.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_D7 =
+{
+    .uFuncSel            = AM_HAL_PIN_3_MSPI7,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_8MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  MSPI_SCK pin: MSPI clock.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MSPI_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_24_MSPI8,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA,
+    .eIntDir             = AM_HAL_GPIO_PIN_INTDIR_LO2HI,
+    .uIOMnum             = 6
+};
+
+//*****************************************************************************
+//
+//  IOS_CE pin: I/O Slave chip select.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_CE =
+{
+    .uFuncSel            = AM_HAL_PIN_3_SLnCE,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE,
+    .uNCE                = 0,
+    .eCEpol              = AM_HAL_GPIO_PIN_CEPOL_ACTIVELOW
+};
+
+//*****************************************************************************
+//
+//  IOS_MISO pin: I/O Slave SPI MISO signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_MISO =
+{
+    .uFuncSel            = AM_HAL_PIN_2_SLMISO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA
+};
+
+//*****************************************************************************
+//
+//  IOS_MOSI pin: I/O Slave SPI MOSI signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_MOSI =
+{
+    .uFuncSel            = AM_HAL_PIN_1_SLMOSI,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  IOS_SCK pin: I/O Slave SPI SCK signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCK =
+{
+    .uFuncSel            = AM_HAL_PIN_0_SLSCK,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  IOS_SCL pin: I/O Slave I2C clock signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCL =
+{
+    .uFuncSel            = AM_HAL_PIN_0_SLSCL,
+    .eGPInput            = AM_HAL_GPIO_PIN_INPUT_ENABLE
+};
+
+//*****************************************************************************
+//
+//  IOS_SDA pin: I/O Slave I2C data signal.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA =
+{
+    .uFuncSel            = AM_HAL_PIN_1_SLSDAWIR3,
+    .ePullup             = AM_HAL_GPIO_PIN_PULLUP_1_5K,
+    .eGPOutcfg           = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN
+};
+
+//*****************************************************************************
+//
+//  ITM_SWO pin: ITM Serial Wire Output.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO =
+{
+    .uFuncSel            = AM_HAL_PIN_22_SWO,
+    .eDriveStrength      = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA
+};
+
+//*****************************************************************************
+//
+//  SWDCK pin: Cortex Serial Wire DCK.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_SWDCK =
+{
+    .uFuncSel            = AM_HAL_PIN_20_SWDCK
+};
+
+//*****************************************************************************
+//
+//  SWDIO pin: Cortex Serial Wire DIO.
+//
+//*****************************************************************************
+const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_SWDIO =
+{
+    .uFuncSel            = AM_HAL_PIN_21_SWDIO
+};
+
+//*****************************************************************************
+//
+// End Doxygen group.
+//! @}
+//
+//*****************************************************************************
diff --git a/variants/artemis_dk/bsp/am_bsp_pins.h b/variants/artemis_dk/bsp/am_bsp_pins.h
new file mode 100644
index 00000000..3a49e21d
--- /dev/null
+++ b/variants/artemis_dk/bsp/am_bsp_pins.h
@@ -0,0 +1,687 @@
+//*****************************************************************************
+//
+//  am_bsp_pins.h
+//! @file
+//!
+//! @brief BSP pin configuration definitions.
+//!
+//! @addtogroup BSP Board Support Package (BSP)
+//! @addtogroup apollo3_bsp BSP for the Apollo3 EVB.
+//! @ingroup BSP
+//! @{
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Copyright (c) 2019, Ambiq Micro
+// All rights reserved.
+// 
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+// 
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// 
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// 
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+// 
+// Third party software included in this distribution is subject to the
+// additional license terms as defined in the /docs/licenses directory.
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// 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 2.2.0-hotfix-2.2.1 of the AmbiqSuite Development Package.
+//
+//*****************************************************************************
+
+#ifndef AM_BSP_PINS_H
+#define AM_BSP_PINS_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "am_mcu_apollo.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D0 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D0    	0
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D0;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D1 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D1    	1
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D1;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D2 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D2    	2
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D2;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D3 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D3    	3
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D3;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D4 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D4    	4
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D4;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D5 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D5    	5
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D5;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D6 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D6    	6
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D6;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_D7 pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_D7    	7
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_D7;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_VSYNC pin: Also called FVLD on the HM01B0 module.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_VSYNC 	15
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_VSYNC;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_HSYNC pin: Also called LVLD on the HM01B0 module.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_HSYNC 	17
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_HSYNC;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_PCLK pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_PCLK  	19
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_PCLK;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_TRIG pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_TRIG  	14
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_TRIG;
+
+//*****************************************************************************
+//
+//  CAMERA_HM01B0_INT pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_CAMERA_HM01B0_INT   	10
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_CAMERA_HM01B0_INT;
+
+//*****************************************************************************
+//
+//  MIC_DATA pin: Data line for PDM microphones.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MIC_DATA            	11
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MIC_DATA;
+
+//*****************************************************************************
+//
+//  MIC_CLK pin: Clock line for PDM microphones.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MIC_CLK             	12
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MIC_CLK;
+
+//*****************************************************************************
+//
+//  LED_BLUE pin: The BLUE LED labeled STAT.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_LED_BLUE            	23
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_LED_BLUE;
+
+//*****************************************************************************
+//
+//  COM_UART_TX pin: This pin is the COM_UART transmit pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_COM_UART_TX         	48
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_COM_UART_TX;
+
+//*****************************************************************************
+//
+//  COM_UART_RX pin: This pin is the COM_UART receive pin.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_COM_UART_RX         	49
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_COM_UART_RX;
+
+//*****************************************************************************
+//
+//  IOM0_CS pin: I/O Master 0 chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM0_CS             	11
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM0_CS;
+#define AM_BSP_IOM0_CS_CHNL             0
+
+//*****************************************************************************
+//
+//  IOM0_CS3 pin: I/O Master 0 chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM0_CS3            	15
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM0_CS3;
+#define AM_BSP_IOM0_CS3_CHNL            3
+
+//*****************************************************************************
+//
+//  IOM0_MISO pin: I/O Master 0 SPI MISO signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM0_MISO           	6
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM0_MISO;
+
+//*****************************************************************************
+//
+//  IOM0_MOSI pin: I/O Master 0 SPI MOSI signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM0_MOSI           	7
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM0_MOSI;
+
+//*****************************************************************************
+//
+//  IOM0_SCK pin: I/O Master 0 SPI SCK signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM0_SCK            	5
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM0_SCK;
+
+//*****************************************************************************
+//
+//  IOM0_SCL pin: I/O Master 0 I2C clock signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM0_SCL            	5
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM0_SCL;
+
+//*****************************************************************************
+//
+//  IOM0_SDA pin: I/O Master 0 I2C data signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM0_SDA            	6
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM0_SDA;
+
+//*****************************************************************************
+//
+//  IOM1_CS pin: I/O Master 1 chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM1_CS             	14
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM1_CS;
+#define AM_BSP_IOM1_CS_CHNL             2
+
+//*****************************************************************************
+//
+//  IOM1_MISO pin: I/O Master 1 SPI MISO signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM1_MISO           	9
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM1_MISO;
+
+//*****************************************************************************
+//
+//  IOM1_MOSI pin: I/O Master 1 SPI MOSI signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM1_MOSI           	10
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM1_MOSI;
+
+//*****************************************************************************
+//
+//  IOM1_SCK pin: I/O Master 1 SPI SCK signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM1_SCK            	8
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM1_SCK;
+
+//*****************************************************************************
+//
+//  IOM1_SCL pin: I/O Master 1 I2C clock signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM1_SCL            	8
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM1_SCL;
+
+//*****************************************************************************
+//
+//  IOM1_SDA pin: I/O Master 1 I2C data signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM1_SDA            	9
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM1_SDA;
+
+//*****************************************************************************
+//
+//  IOM2_CS pin: I/O Master 2 chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM2_CS             	15
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM2_CS;
+#define AM_BSP_IOM2_CS_CHNL             3
+
+//*****************************************************************************
+//
+//  IOM2_MISO pin: I/O Master 2 SPI MISO signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM2_MISO           	25
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM2_MISO;
+
+//*****************************************************************************
+//
+//  IOM2_MOSI pin: I/O Master 2 SPI MOSI signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM2_MOSI           	28
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM2_MOSI;
+
+//*****************************************************************************
+//
+//  IOM2_SCK pin: I/O Master 2 SPI SCK signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM2_SCK            	27
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM2_SCK;
+
+//*****************************************************************************
+//
+//  IOM2_SCL pin: I/O Master 2 I2C clock signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM2_SCL            	27
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM2_SCL;
+
+//*****************************************************************************
+//
+//  IOM2_SDA pin: I/O Master 2 I2C data signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM2_SDA            	25
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM2_SDA;
+
+//*****************************************************************************
+//
+//  IOM3_CS pin: I/O Master 3 chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM3_CS             	12
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM3_CS;
+#define AM_BSP_IOM3_CS_CHNL             0
+
+//*****************************************************************************
+//
+//  IOM3_MISO pin: I/O Master 3 SPI MISO signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM3_MISO           	43
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM3_MISO;
+
+//*****************************************************************************
+//
+//  IOM3_MOSI pin: I/O Master 3 SPI MOSI signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM3_MOSI           	38
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM3_MOSI;
+
+//*****************************************************************************
+//
+//  IOM3_SCK pin: I/O Master 3 SPI SCK signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM3_SCK            	42
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM3_SCK;
+
+//*****************************************************************************
+//
+//  IOM3_SCL pin: I/O Master 3 I2C clock signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM3_SCL            	42
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM3_SCL;
+
+//*****************************************************************************
+//
+//  IOM3_SDA pin: I/O Master 3 I2C data signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM3_SDA            	43
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM3_SDA;
+
+//*****************************************************************************
+//
+//  IOM4_CS pin: I/O Master 4 chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM4_CS             	13
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM4_CS;
+#define AM_BSP_IOM4_CS_CHNL             1
+
+//*****************************************************************************
+//
+//  IOM4_MISO pin: I/O Master 4 SPI MISO signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM4_MISO           	40
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM4_MISO;
+
+//*****************************************************************************
+//
+//  IOM4_MOSI pin: I/O Master 4 SPI MOSI signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM4_MOSI           	44
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM4_MOSI;
+
+//*****************************************************************************
+//
+//  IOM4_SCK pin: I/O Master 4 SPI SCK signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM4_SCK            	39
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM4_SCK;
+
+//*****************************************************************************
+//
+//  IOM4_SCL pin: I/O Master 4 I2C clock signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM4_SCL            	39
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM4_SCL;
+
+//*****************************************************************************
+//
+//  IOM4_SDA pin: I/O Master 4 I2C data signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM4_SDA            	40
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM4_SDA;
+
+//*****************************************************************************
+//
+//  IOM5_CS pin: I/O Master 5 chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM5_CS             	16
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM5_CS;
+#define AM_BSP_IOM5_CS_CHNL             0
+
+//*****************************************************************************
+//
+//  IOM5_MISO pin: I/O Master 5 SPI MISO signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM5_MISO           	49
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM5_MISO;
+
+//*****************************************************************************
+//
+//  IOM5_MOSI pin: I/O Master 5 SPI MOSI signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM5_MOSI           	47
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM5_MOSI;
+
+//*****************************************************************************
+//
+//  IOM5_SCK pin: I/O Master 5 SPI SCK signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM5_SCK            	48
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM5_SCK;
+
+//*****************************************************************************
+//
+//  IOM5_SCL pin: I/O Master 5 I2C clock signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM5_SCL            	48
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM5_SCL;
+
+//*****************************************************************************
+//
+//  IOM5_SDA pin: I/O Master 5 I2C data signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOM5_SDA            	49
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOM5_SDA;
+
+//*****************************************************************************
+//
+//  MSPI_CE0 pin: MSPI chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_CE0            	19
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_CE0;
+#define AM_BSP_MSPI_CE0_CHNL            0
+
+//*****************************************************************************
+//
+//  MSPI_CE1 pin: MSPI chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_CE1            	41
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_CE1;
+#define AM_BSP_MSPI_CE1_CHNL            1
+
+//*****************************************************************************
+//
+//  MSPI_D0 pin: MSPI data 0.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D0             	22
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D0;
+
+//*****************************************************************************
+//
+//  MSPI_D1 pin: MSPI data 1.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D1             	26
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D1;
+
+//*****************************************************************************
+//
+//  MSPI_D2 pin: MSPI data 2.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D2             	4
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D2;
+
+//*****************************************************************************
+//
+//  MSPI_D3 pin: MSPI data 3.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D3             	23
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D3;
+
+//*****************************************************************************
+//
+//  MSPI_D4 pin: MSPI data 4.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D4             	0
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D4;
+
+//*****************************************************************************
+//
+//  MSPI_D5 pin: MSPI data 5.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D5             	1
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D5;
+
+//*****************************************************************************
+//
+//  MSPI_D6 pin: MSPI data 6.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D6             	2
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D6;
+
+//*****************************************************************************
+//
+//  MSPI_D7 pin: MSPI data 7.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_D7             	3
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_D7;
+
+//*****************************************************************************
+//
+//  MSPI_SCK pin: MSPI clock.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_MSPI_SCK            	24
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_MSPI_SCK;
+
+//*****************************************************************************
+//
+//  IOS_CE pin: I/O Slave chip select.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOS_CE              	3
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOS_CE;
+#define AM_BSP_IOS_CE_CHNL              0
+
+//*****************************************************************************
+//
+//  IOS_MISO pin: I/O Slave SPI MISO signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOS_MISO            	2
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOS_MISO;
+
+//*****************************************************************************
+//
+//  IOS_MOSI pin: I/O Slave SPI MOSI signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOS_MOSI            	1
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOS_MOSI;
+
+//*****************************************************************************
+//
+//  IOS_SCK pin: I/O Slave SPI SCK signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOS_SCK             	0
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOS_SCK;
+
+//*****************************************************************************
+//
+//  IOS_SCL pin: I/O Slave I2C clock signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOS_SCL             	0
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOS_SCL;
+
+//*****************************************************************************
+//
+//  IOS_SDA pin: I/O Slave I2C data signal.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_IOS_SDA             	1
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_IOS_SDA;
+
+//*****************************************************************************
+//
+//  ITM_SWO pin: ITM Serial Wire Output.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_ITM_SWO             	22
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_ITM_SWO;
+
+//*****************************************************************************
+//
+//  SWDCK pin: Cortex Serial Wire DCK.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_SWDCK               	20
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_SWDCK;
+
+//*****************************************************************************
+//
+//  SWDIO pin: Cortex Serial Wire DIO.
+//
+//*****************************************************************************
+#define AM_BSP_GPIO_SWDIO               	21
+extern const am_hal_gpio_pincfg_t       g_AM_BSP_GPIO_SWDIO;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // AM_BSP_PINS_H
+
+//*****************************************************************************
+//
+// End Doxygen group.
+//! @}
+//
+//*****************************************************************************
diff --git a/variants/artemis_dk/bsp/bsp_pins.src b/variants/artemis_dk/bsp/bsp_pins.src
new file mode 100644
index 00000000..3f018e4e
--- /dev/null
+++ b/variants/artemis_dk/bsp/bsp_pins.src
@@ -0,0 +1,767 @@
+# ******************************************************************************
+#                                                                              *
+# Copyright (c) 2018 Ambiq Micro.                                              *
+#                                                                              *
+#*******************************************************************************
+#                                                                              *
+# File:     bsp_pins.src                                                       *
+#                                                                              *
+# Title:    SparkFun Edge2 Board Pin Definitions                               *
+#                                                                              *
+# Date:     06/14/2019                                                         *
+#                                                                              *
+#*******************************************************************************
+#                                                                              *
+#   This file contains descriptors for the various BSP pin definitions.        *
+#   After completing the pin descriptors, the file is processed by a           *
+#   Python script to generate the appropriate C and header file.               *
+#                                                                              *
+#   NOTEs:                                                                     *
+#   - This file should contain NO TAB characters, only spaces.                 *
+#   - Indentation is required, but the amount of indentation is not critical,  *
+#     only the consistency of indentation.                                     *
+#   - Comment lines always begin with a '#' sign.                              *
+#   - Letter case of keywords (left side of equal) is not important.           *
+#     Letter case of the value (right side of equal) is not important when     *
+#     processing standard values (e.g. "lo2hi").  However, letter case is      *
+#     maintained when used for creating defines.                               *
+#                                                                              *
+#  Keywords:                                                                   *
+#   All of the following keywords should begin in column 4.                    *
+#   name        The name to be used for the pin.  This name will be used as a  *
+#               base for generating defines. Each pin name must be unique.     *
+#   desc        Optional: A description, if provided, will appear in the       *
+#               generated header file.                                         *
+#   funcsel     A value 0-7, or the equivalent AM_HAL_PIN_nn_xxxx macro.       *
+#               The AM_HAL_PIN_nn_xxxx nomenclature is preferred.              *
+#   pinnum      The pin number for the pin being defined (0-49).               *
+#   drvstrength One of: 2, 4, 8, or 12.  If not provided, 2 is default.        *
+#   GPOutcfg    Typically used if the pin is being defined as GPIO (funcsel=3).*
+#               One of: disable, pushpull, opendrain, tristate.                *
+#               Also acceptable is a value 0-3, or a macro.                    *
+#   GPinput     Only used if the pin is being defined as GPIO (funcsel=3).     *
+#               One of: true, false.                                           *
+#   GPRdZero    One of readpin, zero (or true or false).                       *
+#   intdir      One of: none, lo2hi, hi2lo, either.                            *
+#               Note - does not enable any interrupt. Only configures the      *
+#               direction for when it is enabled.                              *
+#   pullup      One of: none, 1_5K, 6K, 12K, 24K, weak, pulldown.              *
+#               1_5K - 24K: valid on I2C pins.                                 *
+#               weak: Valid for pullups on all other (non-I2C) pins.           *
+#               pulldown: Valid for pin 20 only.                               *
+#               Also acceptable is a macro (e.g. AM_HAL_GPIO_PIN_PULLUP_1_5K). *
+#   PowerSw     One of: VDD or VSS.                                            *
+#               Also acceptable is a macro (e.g. AM_HAL_GPIO_PIN_POWERSW_VDD). *
+#                                                                              *
+#   The following 3 parameters are used when the pin is being defined as a     *
+#   chip enable, i.e. for SPI or MSPI.                                         *
+#   IOMnum      The IOM number pertaining to the CE. 0-5 for SPI, 6 for MSPI.  *
+#               Also acceptable is a macro (e.g. one defined in am_bsp.h).     *
+#   CEnum       A value from 0-3.                                              *
+#               If a value 0-3, a macro is created of the form:                *
+#               #define AM_BSP_<name>_CHNL <CEnum>                             *
+#               Also acceptable is a macro (e.g. one defined in am_bsp.h),     *
+#               in this case no other macro is created.                        *
+#   CEpol       Chip enable polarity, active low or active high.               *
+#               One of: LOW (default) or HIGH.                                 *
+#                                                                              *
+# ******************************************************************************
+
+
+# *****************************************************************************
+#  Camera Pins
+# *****************************************************************************
+pin
+    name            = CAMERA_HM01B0_D0
+    pinnum          = 0
+    func_sel        = AM_HAL_PIN_0_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_D1
+    pinnum          = 1
+    func_sel        = AM_HAL_PIN_1_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_D2
+    pinnum          = 2
+    func_sel        = AM_HAL_PIN_2_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_D3
+    pinnum          = 3
+    func_sel        = AM_HAL_PIN_3_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_D4
+    pinnum          = 4
+    func_sel        = AM_HAL_PIN_4_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_D5
+    pinnum          = 5
+    func_sel        = AM_HAL_PIN_5_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_D6
+    pinnum          = 6
+    func_sel        = AM_HAL_PIN_6_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_D7
+    pinnum          = 7
+    func_sel        = AM_HAL_PIN_7_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+# pin
+#     name            = CAMERA_HM01B0_MCLCK
+#     pinnum          = 18
+#     func_sel        = 
+#     # this pin needs only the pad # to be defined b/c it is configured by "am_hal_ctimer_output_configure"
+
+pin
+    name            = CAMERA_HM01B0_VSYNC
+    desc            = Also called FVLD on the HM01B0 module
+    pinnum          = 15
+    func_sel        = AM_HAL_PIN_15_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_HSYNC
+    desc            = Also called LVLD on the HM01B0 module
+    pinnum          = 17
+    func_sel        = AM_HAL_PIN_17_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_PCLK
+    pinnum          = 19
+    func_sel        = AM_HAL_PIN_19_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_TRIG
+    pinnum          = 14
+    func_sel        = AM_HAL_PIN_14_GPIO
+    drvstrength     = 2
+    GPinput         = true
+
+pin
+    name            = CAMERA_HM01B0_INT
+    pinnum          = 10
+    func_sel        = AM_HAL_PIN_10_GPIO
+    drvstrength     = 2
+    GPinput         = true
+    # todo: add interrupt capability for this pin according to polarity of HM01B0 module
+
+
+# *****************************************************************************
+#  PDM Microphone Lines
+# *****************************************************************************
+pin
+    name            = MIC_DATA
+    desc            = Data line for PDM microphones
+    pinnum          = 11
+    func_sel        = AM_HAL_PIN_11_PDMDATA
+
+pin
+    name            = MIC_CLK
+    desc            = Clock line for PDM microphones
+    pinnum          = 12
+    func_sel        = AM_HAL_PIN_12_PDMCLK
+
+
+# *****************************************************************************
+#  LEDs and buttons
+# *****************************************************************************
+pin
+    name            = LED_BLUE
+    desc            = The BLUE LED labeled STAT
+    pinnum          = 23
+    func_sel        = AM_HAL_PIN_23_GPIO
+    drvstrength     = 12
+
+
+# *****************************************************************************
+#  COM UART pins (UART0).
+# *****************************************************************************
+pin
+    name            = COM_UART_TX
+    desc            = This pin is the COM_UART transmit pin.
+    pinnum          = 48
+    func_sel        = AM_HAL_PIN_48_UART0TX
+    drvstrength     = 2
+
+pin
+    name            = COM_UART_RX
+    desc            = This pin is the COM_UART receive pin.
+    pinnum          = 49
+    func_sel        = AM_HAL_PIN_49_UART0RX
+
+
+# *****************************************************************************
+#  IOM0 pins.
+# *****************************************************************************
+pin
+    name            = IOM0_CS
+    desc            = I/O Master 0 chip select.
+    pinnum          = 11
+    func_sel        = AM_HAL_PIN_11_NCE11
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 0
+    CEnum           = 0
+    CEpol           = low
+
+pin
+    name            = IOM0_CS3
+    desc            = I/O Master 0 chip select.
+    pinnum          = 15
+    func_sel        = AM_HAL_PIN_15_NCE15
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 0
+    CEnum           = 3
+    CEpol           = low
+
+pin
+    name            = IOM0_MISO
+    desc            = I/O Master 0 SPI MISO signal.
+    pinnum          = 6
+    func_sel        = AM_HAL_PIN_6_M0MISO
+    IOMnum          = 0
+
+pin
+    name            = IOM0_MOSI
+    desc            = I/O Master 0 SPI MOSI signal.
+    pinnum          = 7
+    func_sel        = AM_HAL_PIN_7_M0MOSI
+    drvstrength     = 12
+    IOMnum          = 0
+
+pin
+    name            = IOM0_SCK
+    desc            = I/O Master 0 SPI SCK signal.
+    pinnum          = 5
+    func_sel        = AM_HAL_PIN_5_M0SCK
+    drvstrength     = 12
+    IOMnum          = 0
+
+pin
+    name            = IOM0_SCL
+    desc            = I/O Master 0 I2C clock signal.
+    pinnum          = 5
+    func_sel        = AM_HAL_PIN_5_M0SCL
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 0
+
+pin
+    name            = IOM0_SDA
+    desc            = I/O Master 0 I2C data signal.
+    pinnum          = 6
+    func_sel        = AM_HAL_PIN_6_M0SDAWIR3
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 0
+
+# *****************************************************************************
+#  IOM1 pins.
+# *****************************************************************************
+pin
+    name            = IOM1_CS
+    desc            = I/O Master 1 chip select.
+    pinnum          = 14
+    func_sel        = AM_HAL_PIN_14_NCE14
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 1
+    CEnum           = 2
+    CEpol           = low
+
+pin
+    name            = IOM1_MISO
+    desc            = I/O Master 1 SPI MISO signal.
+    pinnum          = 9
+    func_sel        = AM_HAL_PIN_9_M1MISO
+    IOMnum          = 1
+
+pin
+    name            = IOM1_MOSI
+    desc            = I/O Master 1 SPI MOSI signal.
+    pinnum          = 10
+    func_sel        = AM_HAL_PIN_10_M1MOSI
+    drvstrength     = 12
+    IOMnum          = 1
+
+pin
+    name            = IOM1_SCK
+    desc            = I/O Master 1 SPI SCK signal.
+    pinnum          = 8
+    func_sel        = AM_HAL_PIN_8_M1SCK
+    drvstrength     = 12
+    IOMnum          = 1
+
+pin
+    name            = IOM1_SCL
+    desc            = I/O Master 1 I2C clock signal.
+    pinnum          = 8
+    func_sel        = AM_HAL_PIN_8_M1SCL
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 1
+
+pin
+    name            = IOM1_SDA
+    desc            = I/O Master 1 I2C data signal.
+    pinnum          = 9
+    func_sel        = AM_HAL_PIN_9_M1SDAWIR3
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 1
+
+# *****************************************************************************
+#  IOM2 pins.
+# *****************************************************************************
+pin
+    name            = IOM2_CS
+    desc            = I/O Master 2 chip select.
+    pinnum          = 15
+    func_sel        = AM_HAL_PIN_15_NCE15
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 2
+    CEnum           = 3
+    CEpol           = low
+
+pin
+    name            = IOM2_MISO
+    desc            = I/O Master 2 SPI MISO signal.
+    pinnum          = 25
+    func_sel        = AM_HAL_PIN_25_M2MISO
+    IOMnum          = 2
+
+pin
+    name            = IOM2_MOSI
+    desc            = I/O Master 2 SPI MOSI signal.
+    pinnum          = 28
+    func_sel        = AM_HAL_PIN_28_M2MOSI
+    drvstrength     = 12
+    IOMnum          = 2
+
+pin
+    name            = IOM2_SCK
+    desc            = I/O Master 2 SPI SCK signal.
+    pinnum          = 27
+    func_sel        = AM_HAL_PIN_27_M2SCK
+    drvstrength     = 12
+    IOMnum          = 2
+
+pin
+    name            = IOM2_SCL
+    desc            = I/O Master 2 I2C clock signal.
+    pinnum          = 27
+    func_sel        = AM_HAL_PIN_27_M2SCL
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 2
+
+pin
+    name            = IOM2_SDA
+    desc            = I/O Master 2 I2C data signal.
+    pinnum          = 25
+    func_sel        = AM_HAL_PIN_25_M2SDAWIR3
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 2
+
+# *****************************************************************************
+#  IOM3 pins.
+# *****************************************************************************
+pin
+    name            = IOM3_CS
+    desc            = I/O Master 3 chip select.
+    pinnum          = 12
+    func_sel        = AM_HAL_PIN_12_NCE12
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 3
+    CEnum           = 0
+    CEpol           = low
+
+pin
+    name            = IOM3_MISO
+    desc            = I/O Master 3 SPI MISO signal.
+    pinnum          = 43
+    func_sel        = AM_HAL_PIN_43_M3MISO
+    IOMnum          = 3
+
+pin
+    name            = IOM3_MOSI
+    desc            = I/O Master 3 SPI MOSI signal.
+    pinnum          = 38
+    func_sel        = AM_HAL_PIN_38_M3MOSI
+    drvstrength     = 12
+    IOMnum          = 3
+
+pin
+    name            = IOM3_SCK
+    desc            = I/O Master 3 SPI SCK signal.
+    pinnum          = 42
+    func_sel        = AM_HAL_PIN_42_M3SCK
+    drvstrength     = 12
+    IOMnum          = 3
+
+pin
+    name            = IOM3_SCL
+    desc            = I/O Master 3 I2C clock signal.
+    pinnum          = 42
+    func_sel        = AM_HAL_PIN_42_M3SCL
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 3
+
+pin
+    name            = IOM3_SDA
+    desc            = I/O Master 3 I2C data signal.
+    pinnum          = 43
+    func_sel        = AM_HAL_PIN_43_M3SDAWIR3
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 3
+
+# *****************************************************************************
+#  IOM4 pins.
+# *****************************************************************************
+pin
+    name            = IOM4_CS
+    desc            = I/O Master 4 chip select.
+    pinnum          = 13
+    func_sel        = AM_HAL_PIN_13_NCE13
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 4
+    CEnum           = 1
+    CEpol           = low
+
+pin
+    name            = IOM4_MISO
+    desc            = I/O Master 4 SPI MISO signal.
+    pinnum          = 40
+    func_sel        = AM_HAL_PIN_40_M4MISO
+    IOMnum          = 4
+
+pin
+    name            = IOM4_MOSI
+    desc            = I/O Master 4 SPI MOSI signal.
+    pinnum          = 44
+    func_sel        = AM_HAL_PIN_44_M4MOSI
+    drvstrength     = 12
+    IOMnum          = 4
+
+pin
+    name            = IOM4_SCK
+    desc            = I/O Master 4 SPI SCK signal.
+    pinnum          = 39
+    func_sel        = AM_HAL_PIN_39_M4SCK
+    drvstrength     = 12
+    IOMnum          = 4
+
+pin
+    name            = IOM4_SCL
+    desc            = I/O Master 4 I2C clock signal.
+    pinnum          = 39
+    func_sel        = AM_HAL_PIN_39_M4SCL
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 4
+
+pin
+    name            = IOM4_SDA
+    desc            = I/O Master 4 I2C data signal.
+    pinnum          = 40
+    func_sel        = AM_HAL_PIN_40_M4SDAWIR3
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 4
+
+# *****************************************************************************
+#  IOM5 pins.
+# *****************************************************************************
+pin
+    name            = IOM5_CS
+    desc            = I/O Master 5 chip select.
+    pinnum          = 16
+    func_sel        = AM_HAL_PIN_16_NCE16
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 5
+    CEnum           = 0
+    CEpol           = low
+
+pin
+    name            = IOM5_MISO
+    desc            = I/O Master 5 SPI MISO signal.
+    pinnum          = 49
+    func_sel        = AM_HAL_PIN_49_M5MISO
+    IOMnum          = 5
+
+pin
+    name            = IOM5_MOSI
+    desc            = I/O Master 5 SPI MOSI signal.
+    pinnum          = 47
+    func_sel        = AM_HAL_PIN_47_M5MOSI
+    drvstrength     = 12
+    IOMnum          = 5
+
+pin
+    name            = IOM5_SCK
+    desc            = I/O Master 5 SPI SCK signal.
+    pinnum          = 48
+    func_sel        = AM_HAL_PIN_48_M5SCK
+    drvstrength     = 12
+    IOMnum          = 5
+
+pin
+    name            = IOM5_SCL
+    desc            = I/O Master 5 I2C clock signal.
+    pinnum          = 48
+    func_sel        = AM_HAL_PIN_48_M5SCL
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 5
+
+pin
+    name            = IOM5_SDA
+    desc            = I/O Master 5 I2C data signal.
+    pinnum          = 49
+    func_sel        = AM_HAL_PIN_49_M5SDAWIR3
+    GPOutcfg        = opendrain
+    drvstrength     = 12
+    pullup          = 1_5K
+    IOMnum          = 5
+
+# *****************************************************************************
+#  MSPI pins.
+# *****************************************************************************
+pin
+    name            = MSPI_CE0
+    desc            = MSPI chip select.
+    pinnum          = 19
+    func_sel        = AM_HAL_PIN_19_NCE19
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 6
+    CEnum           = 0
+    CEpol           = low
+
+pin
+    name            = MSPI_CE1
+    desc            = MSPI chip select.
+    pinnum          = 41
+    func_sel        = AM_HAL_PIN_41_NCE41
+    drvstrength     = 12
+    intdir          = lo2hi
+    GPOutcfg        = pushpull
+    GPinput         = false
+    IOMnum          = 6
+    CEnum           = 1
+    CEpol           = low
+
+pin
+    name            = MSPI_D0
+    desc            = MSPI data 0.
+    pinnum          = 22
+    func_sel        = AM_HAL_PIN_22_MSPI0
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_D1
+    desc            = MSPI data 1.
+    pinnum          = 26
+    func_sel        = AM_HAL_PIN_26_MSPI1
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_D2
+    desc            = MSPI data 2.
+    pinnum          = 4
+    func_sel        = AM_HAL_PIN_4_MSPI2
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_D3
+    desc            = MSPI data 3.
+    pinnum          = 23
+    func_sel        = AM_HAL_PIN_23_MSPI13
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_D4
+    desc            = MSPI data 4.
+    pinnum          = 0
+    func_sel        = AM_HAL_PIN_0_MSPI4
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_D5
+    desc            = MSPI data 5.
+    pinnum          = 1
+    func_sel        = AM_HAL_PIN_1_MSPI5
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_D6
+    desc            = MSPI data 6.
+    pinnum          = 2
+    func_sel        = AM_HAL_PIN_2_MSPI6
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_D7
+    desc            = MSPI data 7.
+    pinnum          = 3
+    func_sel        = AM_HAL_PIN_3_MSPI7
+    drvstrength     = 8
+    intdir          = lo2hi
+    IOMnum          = 6
+
+pin
+    name            = MSPI_SCK
+    desc            = MSPI clock.
+    pinnum          = 24
+    func_sel        = AM_HAL_PIN_24_MSPI8
+    drvstrength     = 12
+    intdir          = lo2hi
+    IOMnum          = 6
+
+# *****************************************************************************
+#  IOS pins.
+# *****************************************************************************
+pin
+    name            = IOS_CE
+    desc            = I/O Slave chip select.
+    pinnum          = 3
+    func_sel        = AM_HAL_PIN_3_SLnCE
+    GPinput         = true
+    CEnum           = 0
+    CEpol           = low
+
+pin
+    name            = IOS_MISO
+    desc            = I/O Slave SPI MISO signal.
+    pinnum          = 2
+    func_sel        = AM_HAL_PIN_2_SLMISO
+    drvstrength     = 12
+
+pin
+    name            = IOS_MOSI
+    desc            = I/O Slave SPI MOSI signal.
+    pinnum          = 1
+    func_sel        = AM_HAL_PIN_1_SLMOSI
+    GPinput         = true
+
+pin
+    name            = IOS_SCK
+    desc            = I/O Slave SPI SCK signal.
+    pinnum          = 0
+    func_sel        = AM_HAL_PIN_0_SLSCK
+    GPinput         = true
+
+pin
+    name            = IOS_SCL
+    desc            = I/O Slave I2C clock signal.
+    pinnum          = 0
+    func_sel        = AM_HAL_PIN_0_SLSCL
+    GPinput         = true
+
+pin
+    name            = IOS_SDA
+    desc            = I/O Slave I2C data signal.
+    pinnum          = 1
+    func_sel        = AM_HAL_PIN_1_SLSDAWIR3
+    GPOutcfg        = opendrain
+    pullup          = 1_5K
+
+# *****************************************************************************
+#  ITM pins.
+# *****************************************************************************
+pin
+    name            = ITM_SWO
+    desc            = ITM Serial Wire Output.
+    pinnum          = 22
+    func_sel        = AM_HAL_PIN_22_SWO
+    drvstrength     = 2
+
+# *****************************************************************************
+#  CORE pins.
+# *****************************************************************************
+pin
+    name            = SWDCK
+    desc            = Cortex Serial Wire DCK.
+    pinnum          = 20
+    func_sel        = AM_HAL_PIN_20_SWDCK
+
+pin
+    name            = SWDIO
+    desc            = Cortex Serial Wire DIO.
+    pinnum          = 21
+    func_sel        = AM_HAL_PIN_21_SWDIO
diff --git a/variants/artemis_dk/bsp/gcc/Makefile b/variants/artemis_dk/bsp/gcc/Makefile
new file mode 100644
index 00000000..ed568cd5
--- /dev/null
+++ b/variants/artemis_dk/bsp/gcc/Makefile
@@ -0,0 +1,151 @@
+#******************************************************************************
+#
+# Makefile - Rules for building the libraries, examples and docs.
+#
+# Copyright (c) 2019, Ambiq Micro
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# 
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 
+# 3. Neither the name of the copyright holder nor the names of its
+# contributors may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+# 
+# Third party software included in this distribution is subject to the
+# additional license terms as defined in the /docs/licenses directory.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# 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 2.1.0 of the AmbiqSuite Development Package.
+#
+#******************************************************************************
+
+# Pull in exported paths
+SDKPATH?=../../../..
+BOARDPATH?=../..
+
+TARGET := libam_bsp
+COMPILERNAME := gcc
+PROJECT := libam_bsp_gcc
+CONFIG := bin
+
+SHELL:=/bin/bash
+#### Setup ####
+
+TOOLCHAIN ?= arm-none-eabi
+PART = apollo3
+CPU = cortex-m4
+FPU = fpv4-sp-d16
+# Default to FPU hardware calling convention.  However, some customers and/or
+# applications may need the software calling convention.
+#FABI = softfp
+FABI = hard
+
+#### Required Executables ####
+CC = $(TOOLCHAIN)-gcc
+GCC = $(TOOLCHAIN)-gcc
+CPP = $(TOOLCHAIN)-cpp
+LD = $(TOOLCHAIN)-ld
+CP = $(TOOLCHAIN)-objcopy
+OD = $(TOOLCHAIN)-objdump
+RD = $(TOOLCHAIN)-readelf
+AR = $(TOOLCHAIN)-ar
+SIZE = $(TOOLCHAIN)-size
+RM = $(shell which rm 2>/dev/null)
+
+EXECUTABLES = CC LD CP OD AR RD SIZE GCC
+K := $(foreach exec,$(EXECUTABLES),\
+        $(if $(shell which $($(exec)) 2>/dev/null),,\
+        $(info $(exec) not found on PATH ($($(exec))).)$(exec)))
+$(if $(strip $(value K)),$(info Required Program(s) $(strip $(value K)) not found))
+
+ifneq ($(strip $(value K)),)
+all clean:
+	$(info Tools $(TOOLCHAIN)-$(COMPILERNAME) not installed.)
+	$(RM) -rf bin
+else
+
+DEFINES = -DAM_PACKAGE_BGA
+DEFINES+= -DAM_PART_APOLLO3
+
+INCLUDES = -I$(SDKPATH)/utils
+INCLUDES+= -I$(SDKPATH)/CMSIS/AmbiqMicro/Include
+INCLUDES+= -I$(SDKPATH)/devices
+INCLUDES+= -I$(SDKPATH)/mcu/apollo3
+INCLUDES+= -I$(SDKPATH)/CMSIS/ARM/Include
+
+VPATH = ..
+
+SRC = am_bsp.c
+SRC += am_bsp_pins.c
+
+CSRC = $(filter %.c,$(SRC))
+ASRC = $(filter %.s,$(SRC))
+
+OBJS = $(CSRC:%.c=$(CONFIG)/%.o)
+OBJS+= $(ASRC:%.s=$(CONFIG)/%.o)
+
+DEPS = $(CSRC:%.c=$(CONFIG)/%.d)
+DEPS+= $(ASRC:%.s=$(CONFIG)/%.d)
+
+CFLAGS = -mthumb -mcpu=$(CPU) -mfpu=$(FPU) -mfloat-abi=$(FABI)
+CFLAGS+= -ffunction-sections -fdata-sections
+CFLAGS+= -MMD -MP -std=c99 -Wall
+# Libraries O3 for production, examples O0 for debug.
+CFLAGS+= -O3
+CFLAGS+= $(DEFINES)
+CFLAGS+= $(INCLUDES)
+CFLAGS+= 
+
+# Additional user specified CFLAGS
+CFLAGS+=$(EXTRA_CFLAGS)
+
+ODFLAGS = -S
+
+#### Rules ####
+all: directories $(CONFIG)/$(TARGET).a
+
+directories:
+	@mkdir -p $(CONFIG)
+
+$(CONFIG)/%.o: %.c $(CONFIG)/%.d $(INCS)
+	@echo " Compiling $(COMPILERNAME) $<" ;\
+	$(CC) -c $(CFLAGS) $< -o $@
+
+$(CONFIG)/%.o: %.s $(CONFIG)/%.d $(INCS)
+	@echo " Assembling $(COMPILERNAME) $<" ;\
+	$(CC) -c $(CFLAGS) $< -o $@
+
+$(CONFIG)/$(TARGET).a: $(OBJS)
+	@echo " Library $(COMPILERNAME) $@" ;\
+	$(AR) rsvc $@ $(OBJS)
+
+clean:
+	@echo "Cleaning..." ;\
+	$(RM) -f $(OBJS) $(DEPS) \
+	    $(CONFIG)/$(TARGET).a
+
+$(CONFIG)/%.d: ;
+
+# Automatically include any generated dependencies
+-include $(DEPS)
+endif
+.PHONY: all clean directories
diff --git a/variants/artemis_dk/bsp/gcc/bin/am_bsp.d b/variants/artemis_dk/bsp/gcc/bin/am_bsp.d
new file mode 100644
index 00000000..5722e8a6
--- /dev/null
+++ b/variants/artemis_dk/bsp/gcc/bin/am_bsp.d
@@ -0,0 +1,189 @@
+bin/am_bsp.o: ../am_bsp.c ../am_bsp.h \
+ ../../../../mcu/apollo3/am_mcu_apollo.h \
+ ../../../../CMSIS/AmbiqMicro/Include/apollo3.h \
+ ../../../../CMSIS/ARM/Include/core_cm4.h \
+ ../../../../CMSIS/ARM/Include/cmsis_version.h \
+ ../../../../CMSIS/ARM/Include/cmsis_compiler.h \
+ ../../../../CMSIS/ARM/Include/cmsis_gcc.h \
+ ../../../../CMSIS/ARM/Include/mpu_armv7.h \
+ ../../../../CMSIS/AmbiqMicro/Include/system_apollo3.h \
+ ../../../../mcu/apollo3/regs/am_reg_base_addresses.h \
+ ../../../../mcu/apollo3/regs/am_reg_macros.h \
+ ../../../../mcu/apollo3/regs/am_reg.h \
+ ../../../../mcu/apollo3/regs/am_reg_m4.h \
+ ../../../../mcu/apollo3/regs/am_reg_jedec.h \
+ ../../../../mcu/apollo3/hal/am_hal_status.h \
+ ../../../../mcu/apollo3/hal/am_hal_sysctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_adc.h \
+ ../../../../mcu/apollo3/hal/am_hal_ble.h \
+ ../../../../mcu/apollo3/hal/am_hal_global.h \
+ d:\sfe_adp\ambiqsuitesdk\mcu\am_sdk_version.h \
+ ../../../../mcu/apollo3/hal/am_hal_status.h \
+ ../../../../mcu/apollo3/hal/am_hal_ble_patch.h \
+ ../../../../mcu/apollo3/hal/am_hal_burst.h \
+ ../../../../mcu/apollo3/hal/am_hal_cachectrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_clkgen.h \
+ ../../../../mcu/apollo3/hal/am_hal_cmdq.h \
+ ../../../../mcu/apollo3/hal/am_hal_ctimer.h \
+ ../../../../mcu/apollo3/hal/am_hal_debug.h \
+ ../../../../mcu/apollo3/hal/am_hal_flash.h \
+ ../../../../mcu/apollo3/hal/am_hal_global.h \
+ ../../../../mcu/apollo3/hal/am_hal_gpio.h \
+ ../../../../mcu/apollo3/hal/am_hal_interrupt.h \
+ ../../../../mcu/apollo3/hal/am_hal_iom.h \
+ ../../../../mcu/apollo3/hal/am_hal_sysctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_ios.h \
+ ../../../../mcu/apollo3/hal/am_hal_itm.h \
+ ../../../../mcu/apollo3/hal/am_hal_mcuctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_mspi.h \
+ ../../../../mcu/apollo3/hal/am_hal_pdm.h \
+ ../../../../mcu/apollo3/hal/am_hal_pin.h \
+ ../../../../mcu/apollo3/hal/am_hal_pwrctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_pwrctrl_internal.h \
+ ../../../../mcu/apollo3/hal/am_hal_queue.h \
+ ../../../../mcu/apollo3/hal/am_hal_reset.h \
+ ../../../../mcu/apollo3/hal/am_hal_rtc.h \
+ ../../../../mcu/apollo3/hal/am_hal_scard.h \
+ ../../../../mcu/apollo3/hal/am_hal_secure_ota.h \
+ ../../../../mcu/apollo3/hal/am_hal_stimer.h \
+ ../../../../mcu/apollo3/hal/am_hal_security.h \
+ ../../../../mcu/apollo3/hal/am_hal_systick.h \
+ ../../../../mcu/apollo3/hal/am_hal_tpiu.h \
+ ../../../../mcu/apollo3/hal/am_hal_uart.h \
+ ../../../../mcu/apollo3/hal/am_hal_wdt.h ../am_bsp_pins.h \
+ ../../../../devices/am_devices_led.h \
+ ../../../../devices/am_devices_button.h ../../../../utils/am_util.h \
+ ../../../../utils/am_util_debug.h ../../../../utils/am_util_delay.h \
+ ../../../../utils/am_util_id.h ../../../../utils/am_util_regdump.h \
+ ../../../../utils/am_util_stdio.h ../../../../utils/am_util_string.h \
+ ../../../../utils/am_util_time.h ../../../../utils/am_util_ble.h
+
+../am_bsp.h:
+
+../../../../mcu/apollo3/am_mcu_apollo.h:
+
+../../../../CMSIS/AmbiqMicro/Include/apollo3.h:
+
+../../../../CMSIS/ARM/Include/core_cm4.h:
+
+../../../../CMSIS/ARM/Include/cmsis_version.h:
+
+../../../../CMSIS/ARM/Include/cmsis_compiler.h:
+
+../../../../CMSIS/ARM/Include/cmsis_gcc.h:
+
+../../../../CMSIS/ARM/Include/mpu_armv7.h:
+
+../../../../CMSIS/AmbiqMicro/Include/system_apollo3.h:
+
+../../../../mcu/apollo3/regs/am_reg_base_addresses.h:
+
+../../../../mcu/apollo3/regs/am_reg_macros.h:
+
+../../../../mcu/apollo3/regs/am_reg.h:
+
+../../../../mcu/apollo3/regs/am_reg_m4.h:
+
+../../../../mcu/apollo3/regs/am_reg_jedec.h:
+
+../../../../mcu/apollo3/hal/am_hal_status.h:
+
+../../../../mcu/apollo3/hal/am_hal_sysctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_adc.h:
+
+../../../../mcu/apollo3/hal/am_hal_ble.h:
+
+../../../../mcu/apollo3/hal/am_hal_global.h:
+
+d:\sfe_adp\ambiqsuitesdk\mcu\am_sdk_version.h:
+
+../../../../mcu/apollo3/hal/am_hal_status.h:
+
+../../../../mcu/apollo3/hal/am_hal_ble_patch.h:
+
+../../../../mcu/apollo3/hal/am_hal_burst.h:
+
+../../../../mcu/apollo3/hal/am_hal_cachectrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_clkgen.h:
+
+../../../../mcu/apollo3/hal/am_hal_cmdq.h:
+
+../../../../mcu/apollo3/hal/am_hal_ctimer.h:
+
+../../../../mcu/apollo3/hal/am_hal_debug.h:
+
+../../../../mcu/apollo3/hal/am_hal_flash.h:
+
+../../../../mcu/apollo3/hal/am_hal_global.h:
+
+../../../../mcu/apollo3/hal/am_hal_gpio.h:
+
+../../../../mcu/apollo3/hal/am_hal_interrupt.h:
+
+../../../../mcu/apollo3/hal/am_hal_iom.h:
+
+../../../../mcu/apollo3/hal/am_hal_sysctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_ios.h:
+
+../../../../mcu/apollo3/hal/am_hal_itm.h:
+
+../../../../mcu/apollo3/hal/am_hal_mcuctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_mspi.h:
+
+../../../../mcu/apollo3/hal/am_hal_pdm.h:
+
+../../../../mcu/apollo3/hal/am_hal_pin.h:
+
+../../../../mcu/apollo3/hal/am_hal_pwrctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_pwrctrl_internal.h:
+
+../../../../mcu/apollo3/hal/am_hal_queue.h:
+
+../../../../mcu/apollo3/hal/am_hal_reset.h:
+
+../../../../mcu/apollo3/hal/am_hal_rtc.h:
+
+../../../../mcu/apollo3/hal/am_hal_scard.h:
+
+../../../../mcu/apollo3/hal/am_hal_secure_ota.h:
+
+../../../../mcu/apollo3/hal/am_hal_stimer.h:
+
+../../../../mcu/apollo3/hal/am_hal_security.h:
+
+../../../../mcu/apollo3/hal/am_hal_systick.h:
+
+../../../../mcu/apollo3/hal/am_hal_tpiu.h:
+
+../../../../mcu/apollo3/hal/am_hal_uart.h:
+
+../../../../mcu/apollo3/hal/am_hal_wdt.h:
+
+../am_bsp_pins.h:
+
+../../../../devices/am_devices_led.h:
+
+../../../../devices/am_devices_button.h:
+
+../../../../utils/am_util.h:
+
+../../../../utils/am_util_debug.h:
+
+../../../../utils/am_util_delay.h:
+
+../../../../utils/am_util_id.h:
+
+../../../../utils/am_util_regdump.h:
+
+../../../../utils/am_util_stdio.h:
+
+../../../../utils/am_util_string.h:
+
+../../../../utils/am_util_time.h:
+
+../../../../utils/am_util_ble.h:
diff --git a/variants/artemis_dk/bsp/gcc/bin/am_bsp.o b/variants/artemis_dk/bsp/gcc/bin/am_bsp.o
new file mode 100644
index 0000000000000000000000000000000000000000..70010f3e81dab5b41caee756185f3d1f5ad9d405
GIT binary patch
literal 13916
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
I;4r-Z1I@YS6aWAK

literal 0
HcmV?d00001

diff --git a/variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.d b/variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.d
new file mode 100644
index 00000000..d8ad77d1
--- /dev/null
+++ b/variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.d
@@ -0,0 +1,167 @@
+bin/am_bsp_pins.o: ../am_bsp_pins.c ../am_bsp.h \
+ ../../../../mcu/apollo3/am_mcu_apollo.h \
+ ../../../../CMSIS/AmbiqMicro/Include/apollo3.h \
+ ../../../../CMSIS/ARM/Include/core_cm4.h \
+ ../../../../CMSIS/ARM/Include/cmsis_version.h \
+ ../../../../CMSIS/ARM/Include/cmsis_compiler.h \
+ ../../../../CMSIS/ARM/Include/cmsis_gcc.h \
+ ../../../../CMSIS/ARM/Include/mpu_armv7.h \
+ ../../../../CMSIS/AmbiqMicro/Include/system_apollo3.h \
+ ../../../../mcu/apollo3/regs/am_reg_base_addresses.h \
+ ../../../../mcu/apollo3/regs/am_reg_macros.h \
+ ../../../../mcu/apollo3/regs/am_reg.h \
+ ../../../../mcu/apollo3/regs/am_reg_m4.h \
+ ../../../../mcu/apollo3/regs/am_reg_jedec.h \
+ ../../../../mcu/apollo3/hal/am_hal_status.h \
+ ../../../../mcu/apollo3/hal/am_hal_sysctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_adc.h \
+ ../../../../mcu/apollo3/hal/am_hal_ble.h \
+ ../../../../mcu/apollo3/hal/am_hal_global.h \
+ d:\sfe_adp\ambiqsuitesdk\mcu\am_sdk_version.h \
+ ../../../../mcu/apollo3/hal/am_hal_status.h \
+ ../../../../mcu/apollo3/hal/am_hal_ble_patch.h \
+ ../../../../mcu/apollo3/hal/am_hal_burst.h \
+ ../../../../mcu/apollo3/hal/am_hal_cachectrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_clkgen.h \
+ ../../../../mcu/apollo3/hal/am_hal_cmdq.h \
+ ../../../../mcu/apollo3/hal/am_hal_ctimer.h \
+ ../../../../mcu/apollo3/hal/am_hal_debug.h \
+ ../../../../mcu/apollo3/hal/am_hal_flash.h \
+ ../../../../mcu/apollo3/hal/am_hal_global.h \
+ ../../../../mcu/apollo3/hal/am_hal_gpio.h \
+ ../../../../mcu/apollo3/hal/am_hal_interrupt.h \
+ ../../../../mcu/apollo3/hal/am_hal_iom.h \
+ ../../../../mcu/apollo3/hal/am_hal_sysctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_ios.h \
+ ../../../../mcu/apollo3/hal/am_hal_itm.h \
+ ../../../../mcu/apollo3/hal/am_hal_mcuctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_mspi.h \
+ ../../../../mcu/apollo3/hal/am_hal_pdm.h \
+ ../../../../mcu/apollo3/hal/am_hal_pin.h \
+ ../../../../mcu/apollo3/hal/am_hal_pwrctrl.h \
+ ../../../../mcu/apollo3/hal/am_hal_pwrctrl_internal.h \
+ ../../../../mcu/apollo3/hal/am_hal_queue.h \
+ ../../../../mcu/apollo3/hal/am_hal_reset.h \
+ ../../../../mcu/apollo3/hal/am_hal_rtc.h \
+ ../../../../mcu/apollo3/hal/am_hal_scard.h \
+ ../../../../mcu/apollo3/hal/am_hal_secure_ota.h \
+ ../../../../mcu/apollo3/hal/am_hal_stimer.h \
+ ../../../../mcu/apollo3/hal/am_hal_security.h \
+ ../../../../mcu/apollo3/hal/am_hal_systick.h \
+ ../../../../mcu/apollo3/hal/am_hal_tpiu.h \
+ ../../../../mcu/apollo3/hal/am_hal_uart.h \
+ ../../../../mcu/apollo3/hal/am_hal_wdt.h ../am_bsp_pins.h \
+ ../../../../devices/am_devices_led.h \
+ ../../../../devices/am_devices_button.h
+
+../am_bsp.h:
+
+../../../../mcu/apollo3/am_mcu_apollo.h:
+
+../../../../CMSIS/AmbiqMicro/Include/apollo3.h:
+
+../../../../CMSIS/ARM/Include/core_cm4.h:
+
+../../../../CMSIS/ARM/Include/cmsis_version.h:
+
+../../../../CMSIS/ARM/Include/cmsis_compiler.h:
+
+../../../../CMSIS/ARM/Include/cmsis_gcc.h:
+
+../../../../CMSIS/ARM/Include/mpu_armv7.h:
+
+../../../../CMSIS/AmbiqMicro/Include/system_apollo3.h:
+
+../../../../mcu/apollo3/regs/am_reg_base_addresses.h:
+
+../../../../mcu/apollo3/regs/am_reg_macros.h:
+
+../../../../mcu/apollo3/regs/am_reg.h:
+
+../../../../mcu/apollo3/regs/am_reg_m4.h:
+
+../../../../mcu/apollo3/regs/am_reg_jedec.h:
+
+../../../../mcu/apollo3/hal/am_hal_status.h:
+
+../../../../mcu/apollo3/hal/am_hal_sysctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_adc.h:
+
+../../../../mcu/apollo3/hal/am_hal_ble.h:
+
+../../../../mcu/apollo3/hal/am_hal_global.h:
+
+d:\sfe_adp\ambiqsuitesdk\mcu\am_sdk_version.h:
+
+../../../../mcu/apollo3/hal/am_hal_status.h:
+
+../../../../mcu/apollo3/hal/am_hal_ble_patch.h:
+
+../../../../mcu/apollo3/hal/am_hal_burst.h:
+
+../../../../mcu/apollo3/hal/am_hal_cachectrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_clkgen.h:
+
+../../../../mcu/apollo3/hal/am_hal_cmdq.h:
+
+../../../../mcu/apollo3/hal/am_hal_ctimer.h:
+
+../../../../mcu/apollo3/hal/am_hal_debug.h:
+
+../../../../mcu/apollo3/hal/am_hal_flash.h:
+
+../../../../mcu/apollo3/hal/am_hal_global.h:
+
+../../../../mcu/apollo3/hal/am_hal_gpio.h:
+
+../../../../mcu/apollo3/hal/am_hal_interrupt.h:
+
+../../../../mcu/apollo3/hal/am_hal_iom.h:
+
+../../../../mcu/apollo3/hal/am_hal_sysctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_ios.h:
+
+../../../../mcu/apollo3/hal/am_hal_itm.h:
+
+../../../../mcu/apollo3/hal/am_hal_mcuctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_mspi.h:
+
+../../../../mcu/apollo3/hal/am_hal_pdm.h:
+
+../../../../mcu/apollo3/hal/am_hal_pin.h:
+
+../../../../mcu/apollo3/hal/am_hal_pwrctrl.h:
+
+../../../../mcu/apollo3/hal/am_hal_pwrctrl_internal.h:
+
+../../../../mcu/apollo3/hal/am_hal_queue.h:
+
+../../../../mcu/apollo3/hal/am_hal_reset.h:
+
+../../../../mcu/apollo3/hal/am_hal_rtc.h:
+
+../../../../mcu/apollo3/hal/am_hal_scard.h:
+
+../../../../mcu/apollo3/hal/am_hal_secure_ota.h:
+
+../../../../mcu/apollo3/hal/am_hal_stimer.h:
+
+../../../../mcu/apollo3/hal/am_hal_security.h:
+
+../../../../mcu/apollo3/hal/am_hal_systick.h:
+
+../../../../mcu/apollo3/hal/am_hal_tpiu.h:
+
+../../../../mcu/apollo3/hal/am_hal_uart.h:
+
+../../../../mcu/apollo3/hal/am_hal_wdt.h:
+
+../am_bsp_pins.h:
+
+../../../../devices/am_devices_led.h:
+
+../../../../devices/am_devices_button.h:
diff --git a/variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.o b/variants/artemis_dk/bsp/gcc/bin/am_bsp_pins.o
new file mode 100644
index 0000000000000000000000000000000000000000..64bc170a553f3684f1709c96c1c55613ba9164be
GIT binary patch
literal 11952
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
Lw^ZZeRPz1@Jna)Z

literal 0
HcmV?d00001

diff --git a/variants/artemis_dk/bsp/gcc/bin/libam_bsp.a b/variants/artemis_dk/bsp/gcc/bin/libam_bsp.a
new file mode 100644
index 0000000000000000000000000000000000000000..1fa20b32c46ba376a257836540b36c625742ef69
GIT binary patch
literal 28804
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
Qy8k^wH(#K_IvL#m0P8hQ0{{R3

literal 0
HcmV?d00001

diff --git a/variants/artemis_dk/config/variant.cpp b/variants/artemis_dk/config/variant.cpp
new file mode 100644
index 00000000..d875a677
--- /dev/null
+++ b/variants/artemis_dk/config/variant.cpp
@@ -0,0 +1,93 @@
+/*
+Copyright (c) 2019 SparkFun Electronics
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "variant.h"
+
+const ap3_gpio_pad_t ap3_variant_pinmap[AP3_VARIANT_NUM_PINS] = {
+    //On the Artemis Mega, what you see is what you get pin-to-pad on the Apollo3
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    13,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    16,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    23,
+    24,
+    25,
+    26,
+    27,
+    28,
+    29,
+    AP3_GPIO_PAD_UNUSED, //The one pad not broken out of the Apollo3 on the Artemis
+    31,
+    32,
+    33,
+    34,
+    35,
+    36,
+    37,
+    38,
+    39,
+    40,
+    41,
+    42,
+    43,
+    44,
+    45,
+    AP3_GPIO_PAD_UNUSED, //The other one pad not broken out of the Apollo3 on the Artemis
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+    AP3_GPIO_PAD_UNUSED,
+};
+
+// Uart Definitions
+//Serial(instance, RX, TX)
+Uart Serial(0, 49, 48);  // Declares a Uart object called Serial using instance 0 of Apollo3 UART peripherals with RX on variant pin 49 and TX on pin 48 (note, you specify *pins* not Apollo3 pads. This uses the variant's pin map to determine the Apollo3 pad)
+
+// Mapping of analog pins to digital pins of variant
+extern const ap3_gpio_pin_t ap3_analog_A13 = 13;
+extern const ap3_gpio_pin_t ap3_analog_A16 = 16;
+extern const ap3_gpio_pin_t ap3_analog_A29 = 29;
+extern const ap3_gpio_pin_t ap3_analog_A31 = 31;
+extern const ap3_gpio_pin_t ap3_analog_A32 = 32;
+extern const ap3_gpio_pin_t ap3_analog_A33 = 33;
+extern const ap3_gpio_pin_t ap3_analog_A34 = 34;
+extern const ap3_gpio_pin_t ap3_analog_A35 = 35;
+extern const ap3_gpio_pin_t ap3_analog_DIFF0 = AP3_ADC_DIFF0_PAD;
+extern const ap3_gpio_pin_t ap3_analog_DIFF1 = AP3_ADC_DIFF1_PAD;
diff --git a/variants/artemis_dk/config/variant.h b/variants/artemis_dk/config/variant.h
new file mode 100644
index 00000000..fa6816f9
--- /dev/null
+++ b/variants/artemis_dk/config/variant.h
@@ -0,0 +1,78 @@
+/*
+Copyright (c) 2019 SparkFun Electronics
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+#ifndef _AP3_VARIANT_H_
+#define _AP3_VARIANT_H_
+
+#include "Arduino.h"
+
+#define AP3_VARIANT_NUM_PINS (50)
+
+// Pin map declaration
+extern const ap3_gpio_pad_t ap3_variant_pinmap[AP3_VARIANT_NUM_PINS];
+
+// Uart declarations
+class Uart; // Forward declaration of Uart
+extern Uart Serial;
+
+// Wire defines
+#define WIRE_INTERFACES_COUNT 1
+
+#define WireQwiic Wire // Giving Wire an alias of "WireQwiic" in case people want to use it
+#define AP3_Wire_IOM 1 // Secify that Wire uses IOMaster instance 4
+
+// SPI Defines
+#define SPI_INTERFACES_COUNT 1
+
+#define AP3_SPI_IOM 4                   // Specify that SPI uses IOMaster 4
+#define AP3_SPI_DUP ap3_spi_full_duplex // Specify that SPI is full-duplex (as opposed to ap3_spi_tx_only or ap3_spi_rx_only)
+
+// Mapping of analog pins to digital pins of variant
+// (this method - aliasing the name of a constant variable - is compatible with the usage of 'AX' names in 'arm_math.h')
+#define A13 ap3_analog_A13
+#define A16 ap3_analog_A16
+#define A29 ap3_analog_A29
+#define A31 ap3_analog_A31
+#define A32 ap3_analog_A32
+#define A33 ap3_analog_A33
+#define A34 ap3_analog_A34
+#define A35 ap3_analog_A35
+#define ADIFF0 ap3_analog_DIFF0
+#define ADIFF1 ap3_analog_DIFF1
+
+// Promise the existence of analog pin names
+extern const ap3_gpio_pin_t ap3_analog_A13;
+extern const ap3_gpio_pin_t ap3_analog_A16;
+extern const ap3_gpio_pin_t ap3_analog_A29;
+extern const ap3_gpio_pin_t ap3_analog_A31;
+extern const ap3_gpio_pin_t ap3_analog_A32;
+extern const ap3_gpio_pin_t ap3_analog_A33;
+extern const ap3_gpio_pin_t ap3_analog_A34;
+extern const ap3_gpio_pin_t ap3_analog_A35;
+extern const ap3_gpio_pin_t ap3_analog_DIFF0;
+extern const ap3_gpio_pin_t ap3_analog_DIFF1;
+
+#define LED_BUILTIN 23
+
+#define MIC_DATA 11
+#define MIC_CLOCK 12
+
+#endif // _AP3_VARIANT_H_
diff --git a/variants/artemis_dk/linker_scripts/gcc/ambiq_sbl_app.ld b/variants/artemis_dk/linker_scripts/gcc/ambiq_sbl_app.ld
new file mode 100644
index 00000000..262ef3ae
--- /dev/null
+++ b/variants/artemis_dk/linker_scripts/gcc/ambiq_sbl_app.ld
@@ -0,0 +1,78 @@
+/******************************************************************************
+ *
+ * blank_slate.ld - Linker script for applications using startup_gnu.c
+ *
+ *****************************************************************************/
+ENTRY(Reset_Handler)
+
+MEMORY
+{
+    FLASH (rx) : ORIGIN = 0x0000C000, LENGTH = 960K
+    SRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 384K
+}
+
+SECTIONS
+{
+    .text :
+    {
+        . = ALIGN(4);
+        KEEP(*(.isr_vector))
+        KEEP(*(.patch))
+        *(.text)
+        *(.text*)
+
+        . = ALIGN(4);  
+        __init_array_start = .;
+        KEEP(*(.init_array))        /* C++ constructors */ 
+        KEEP(*(.ctors))             /* and vtable init */
+        __init_array_end = .; 
+
+        *(.rodata)
+        *(.rodata*)
+        . = ALIGN(4);
+        _etext = .;
+    } > FLASH
+
+    /* User stack section initialized by startup code. */
+    .stack (NOLOAD):
+    {
+        . = ALIGN(8);
+        *(.stack)
+        *(.stack*)
+        . = ALIGN(8);
+    } > SRAM
+
+    .data :
+    {
+        . = ALIGN(4);
+        _sdata = .;
+        *(.data)
+        *(.data*)
+        . = ALIGN(4);
+        _edata = .;
+    } > SRAM AT>FLASH
+
+    /* used by startup to initialize data */
+    _init_data = LOADADDR(.data);
+
+    .bss :
+    {
+        . = ALIGN(4);
+        _sbss = .;
+        *(.bss)
+        *(.bss*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = .;
+    } > SRAM
+
+    .heap (COPY):
+	{
+		__end__ = .;
+		PROVIDE(end = .);
+		*(.heap*)
+		__HeapLimit = .;
+	} > SRAM
+
+    .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/variants/artemis_dk/startup/startup_gcc.c b/variants/artemis_dk/startup/startup_gcc.c
new file mode 100644
index 00000000..8aa5b706
--- /dev/null
+++ b/variants/artemis_dk/startup/startup_gcc.c
@@ -0,0 +1,392 @@
+//*****************************************************************************
+//
+//! @file startup_gcc.c
+//!
+//! @brief Definitions for interrupt handlers, the vector table, and the stack.
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Copyright (c) 2018, Ambiq Micro
+// All rights reserved.
+// 
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+// 
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// 
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// 
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+// 
+// Third party software included in this distribution is subject to the
+// additional license terms as defined in the /docs/licenses directory.
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// 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 v1.2.12-1330-gad755f6e5 of the AmbiqSuite Development Package.
+//
+//*****************************************************************************
+
+#include <stdint.h>
+#include "am_mcu_apollo.h"              // Defines AM_CMSIS_REGS
+
+//*****************************************************************************
+//
+// Forward declaration of interrupt handlers.
+//
+//*****************************************************************************
+extern void Reset_Handler(void)       __attribute ((naked));
+#if AM_CMSIS_REGS
+extern void NMI_Handler(void)         __attribute ((weak));
+extern void HardFault_Handler(void)   __attribute ((weak));
+extern void MemManage_Handler(void)   __attribute ((weak, alias ("HardFault_Handler")));
+extern void BusFault_Handler(void)    __attribute ((weak, alias ("HardFault_Handler")));
+extern void UsageFault_Handler(void)  __attribute ((weak, alias ("HardFault_Handler")));
+extern void SecureFault_Handler(void) __attribute ((weak));
+extern void SVC_Handler(void)         __attribute ((weak, alias ("am_default_isr")));
+extern void DebugMon_Handler(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void PendSV_Handler(void)      __attribute ((weak, alias ("am_default_isr")));
+extern void SysTick_Handler(void)     __attribute ((weak, alias ("am_default_isr")));
+#else // AM_CMSIS_REGS
+extern void am_nmi_isr(void)          __attribute ((weak));
+extern void am_fault_isr(void)        __attribute ((weak));
+extern void am_mpufault_isr(void)     __attribute ((weak, alias ("am_fault_isr")));
+extern void am_busfault_isr(void)     __attribute ((weak, alias ("am_fault_isr")));
+extern void am_usagefault_isr(void)   __attribute ((weak, alias ("am_fault_isr")));
+extern void am_svcall_isr(void)       __attribute ((weak, alias ("am_default_isr")));
+extern void am_debugmon_isr(void)     __attribute ((weak, alias ("am_default_isr")));
+extern void am_pendsv_isr(void)       __attribute ((weak, alias ("am_default_isr")));
+extern void am_systick_isr(void)      __attribute ((weak, alias ("am_default_isr")));
+#endif // AM_CMSIS_REGS
+
+extern void am_brownout_isr(void)     __attribute ((weak, alias ("am_default_isr")));
+extern void am_watchdog_isr(void)     __attribute ((weak, alias ("am_default_isr")));
+extern void am_rtc_isr(void)          __attribute ((weak, alias ("am_default_isr")));
+extern void am_vcomp_isr(void)        __attribute ((weak, alias ("am_default_isr")));
+extern void am_ioslave_ios_isr(void)  __attribute ((weak, alias ("am_default_isr")));
+extern void am_ioslave_acc_isr(void)  __attribute ((weak, alias ("am_default_isr")));
+extern void am_iomaster0_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_iomaster1_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_iomaster2_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_iomaster3_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_iomaster4_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_iomaster5_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_ble_isr(void)          __attribute ((weak, alias ("am_default_isr")));
+extern void am_gpio_isr(void)         __attribute ((weak, alias ("am_default_isr")));
+extern void am_ctimer_isr(void)       __attribute ((weak, alias ("am_default_isr")));
+extern void am_uart_isr(void)         __attribute ((weak, alias ("am_default_isr")));
+extern void am_uart1_isr(void)        __attribute ((weak, alias ("am_default_isr")));
+extern void am_scard_isr(void)        __attribute ((weak, alias ("am_default_isr")));
+extern void am_adc_isr(void)          __attribute ((weak, alias ("am_default_isr")));
+extern void am_pdm_isr(void)          __attribute ((weak, alias ("am_default_isr")));
+extern void am_mspi_isr(void)         __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_isr(void)       __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr0_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr1_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr2_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr3_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr4_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr5_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr6_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_stimer_cmpr7_isr(void) __attribute ((weak, alias ("am_default_isr")));
+extern void am_clkgen_isr(void)       __attribute ((weak, alias ("am_default_isr")));
+extern void am_software0_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_software1_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_software2_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+extern void am_software3_isr(void)    __attribute ((weak, alias ("am_default_isr")));
+
+extern void am_default_isr(void)      __attribute ((weak));
+
+//*****************************************************************************
+//
+// The entry point for the application.
+//
+//*****************************************************************************
+extern int main(void);
+
+//*****************************************************************************
+//
+// Reserve space for the system stack.
+//
+//*****************************************************************************
+__attribute__ ((section(".stack")))
+static uint32_t g_pui32Stack[20*1024];
+
+//*****************************************************************************
+//
+// The vector table.  Note that the proper constructs must be placed on this to
+// ensure that it ends up at physical address 0x0000.0000.
+//
+// Note: Aliasing and weakly exporting am_mpufault_isr, am_busfault_isr, and
+// am_usagefault_isr does not work if am_fault_isr is defined externally.
+// Therefore, we'll explicitly use am_fault_isr in the table for those vectors.
+//
+//*****************************************************************************
+__attribute__ ((section(".isr_vector")))
+void (* const g_am_pfnVectors[])(void) =
+{
+    (void (*)(void))((uint32_t)g_pui32Stack + sizeof(g_pui32Stack)),
+                                            // The initial stack pointer
+#if AM_CMSIS_REGS
+    Reset_Handler,                          // The reset handler
+    NMI_Handler,                            // The NMI handler
+    HardFault_Handler,                      // The hard fault handler
+    HardFault_Handler,                      // The MemManage_Handler
+    HardFault_Handler,                      // The BusFault_Handler
+    HardFault_Handler,                      // The UsageFault_Handler
+    SecureFault_Handler,                    // The SecureFault_Handler
+    0,                                      // Reserved
+    0,                                      // Reserved
+    0,                                      // Reserved
+    SVC_Handler,                            // SVCall handler
+    DebugMon_Handler,                       // Debug monitor handler
+    0,                                      // Reserved
+    PendSV_Handler,                         // The PendSV handler
+    SysTick_Handler,                        // The SysTick handler
+#else // AM_CMSIS_REGS
+    am_reset_isr,                           // The reset handler
+    am_nmi_isr,                             // The NMI handler
+    am_fault_isr,                           // The hard fault handler
+    am_fault_isr,                           // The MPU fault handler
+    am_fault_isr,                           // The bus fault handler
+    am_fault_isr,                           // The usage fault handler
+    0,                                      // Reserved
+    0,                                      // Reserved
+    0,                                      // Reserved
+    0,                                      // Reserved
+    am_svcall_isr,                          // SVCall handle
+    am_debugmon_isr,                        // Debug monitor handler
+    0,                                      // Reserved
+    am_pendsv_isr,                          // The PendSV handler
+    am_systick_isr,                         // The SysTick handler
+#endif // AM_CMSIS_REGS
+
+    //
+    // Peripheral Interrupts
+    //
+    am_brownout_isr,                        //  0: Brownout (rstgen)
+    am_watchdog_isr,                        //  1: Watchdog
+    am_rtc_isr,                             //  2: RTC
+    am_vcomp_isr,                           //  3: Voltage Comparator
+    am_ioslave_ios_isr,                     //  4: I/O Slave general
+    am_ioslave_acc_isr,                     //  5: I/O Slave access
+    am_iomaster0_isr,                       //  6: I/O Master 0
+    am_iomaster1_isr,                       //  7: I/O Master 1
+    am_iomaster2_isr,                       //  8: I/O Master 2
+    am_iomaster3_isr,                       //  9: I/O Master 3
+    am_iomaster4_isr,                       // 10: I/O Master 4
+    am_iomaster5_isr,                       // 11: I/O Master 5
+    am_ble_isr,                             // 12: BLEIF
+    am_gpio_isr,                            // 13: GPIO
+    am_ctimer_isr,                          // 14: CTIMER
+    am_uart_isr,                            // 15: UART0
+    am_uart1_isr,                           // 16: UART1
+    am_scard_isr,                           // 17: SCARD
+    am_adc_isr,                             // 18: ADC
+    am_pdm_isr,                             // 19: PDM
+    am_mspi_isr,                            // 20: MSPI
+    am_default_isr,                         // 21: reserved
+    am_stimer_isr,                          // 22: SYSTEM TIMER
+    am_stimer_cmpr0_isr,                    // 23: SYSTEM TIMER COMPARE0
+    am_stimer_cmpr1_isr,                    // 24: SYSTEM TIMER COMPARE1
+    am_stimer_cmpr2_isr,                    // 25: SYSTEM TIMER COMPARE2
+    am_stimer_cmpr3_isr,                    // 26: SYSTEM TIMER COMPARE3
+    am_stimer_cmpr4_isr,                    // 27: SYSTEM TIMER COMPARE4
+    am_stimer_cmpr5_isr,                    // 28: SYSTEM TIMER COMPARE5
+    am_stimer_cmpr6_isr,                    // 29: SYSTEM TIMER COMPARE6
+    am_stimer_cmpr7_isr,                    // 30: SYSTEM TIMER COMPARE7
+    am_clkgen_isr,                          // 31: CLKGEN
+    am_software0_isr,                       // 32: SOFTWARE0
+    am_software1_isr,                       // 33: SOFTWARE1
+    am_software2_isr,                       // 34: SOFTWARE2
+    am_software3_isr                        // 35: SOFTWARE3
+};
+
+//******************************************************************************
+//
+// Place code immediately following vector table.
+//
+//******************************************************************************
+//******************************************************************************
+//
+// The Patch table.
+//
+//******************************************************************************
+__attribute__ ((section(".patch")))
+uint32_t const __Patchable[] =
+{
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+};
+
+//*****************************************************************************
+//
+// The following are constructs created by the linker, indicating where the
+// the "data" and "bss" segments reside in memory.  The initializers for the
+// "data" segment resides immediately following the "text" segment.
+//
+//*****************************************************************************
+extern uint32_t _etext;
+extern uint32_t _sdata;
+extern uint32_t _edata;
+extern uint32_t _sbss;
+extern uint32_t _ebss;
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor first starts execution
+// following a reset event.  Only the absolutely necessary set is performed,
+// after which the application supplied entry() routine is called.
+//
+//*****************************************************************************
+#if defined(__GNUC_STDC_INLINE__)
+void
+Reset_Handler(void)
+{
+    //
+    // Set the vector table pointer.
+    //
+    __asm("    ldr    r0, =0xE000ED08\n"
+          "    ldr    r1, =g_am_pfnVectors\n"
+          "    str    r1, [r0]");
+
+    //
+    // Set the stack pointer.
+    //
+    __asm("    ldr    sp, [r1]");
+#ifndef NOFPU
+    //
+    // Enable the FPU.
+    //
+    __asm("ldr  r0, =0xE000ED88\n"
+          "ldr  r1,[r0]\n"
+          "orr  r1,#(0xF << 20)\n"
+          "str  r1,[r0]\n"
+          "dsb\n"
+          "isb\n");
+#endif
+    //
+    // Copy the data segment initializers from flash to SRAM.
+    //
+    __asm("    ldr     r0, =_init_data\n"
+          "    ldr     r1, =_sdata\n"
+          "    ldr     r2, =_edata\n"
+          "copy_loop:\n"
+          "        ldr   r3, [r0], #4\n"
+          "        str   r3, [r1], #4\n"
+          "        cmp     r1, r2\n"
+          "        blt     copy_loop\n");
+    //
+    // Zero fill the bss segment.
+    //
+    __asm("    ldr     r0, =_sbss\n"
+          "    ldr     r1, =_ebss\n"
+          "    mov     r2, #0\n"
+          "zero_loop:\n"
+          "        cmp     r0, r1\n"
+          "        it      lt\n"
+          "        strlt   r2, [r0], #4\n"
+          "        blt     zero_loop");
+
+    //
+    // Call the application's entry point.
+    //
+    main();
+
+    //
+    // If main returns then execute a break point instruction
+    //
+    __asm("    bkpt     ");
+}
+#else
+#error GNU STDC inline not supported.
+#endif
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a NMI.  This
+// simply enters an infinite loop, preserving the system state for examination
+// by a debugger.
+//
+//*****************************************************************************
+void
+#if AM_CMSIS_REGS
+NMI_Handler(void)
+#else // AM_CMSIS_REGS
+am_nmi_isr(void)
+#endif // AM_CMSIS_REGS
+{
+    //
+    // Go into an infinite loop.
+    //
+    while(1)
+    {
+    }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a fault
+// interrupt.  This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+void
+#if AM_CMSIS_REGS
+HardFault_Handler(void)
+#else // AM_CMSIS_REGS
+am_fault_isr(void)
+#endif // AM_CMSIS_REGS
+{
+    //
+    // Go into an infinite loop.
+    //
+    while(1)
+    {
+    }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives an unexpected
+// interrupt.  This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+void
+am_default_isr(void)
+{
+    //
+    // Go into an infinite loop.
+    //
+    while(1)
+    {
+    }
+}

From ae45310d7dee98c0a801acb9844110eb90060571 Mon Sep 17 00:00:00 2001
From: oclyke <owen.lyke@sparkfun.com>
Date: Thu, 27 Aug 2020 16:15:27 -0600
Subject: [PATCH 2/2] add UART pins for Artemis DK

---
 variants/artemis_dk/config/variant.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/variants/artemis_dk/config/variant.cpp b/variants/artemis_dk/config/variant.cpp
index d875a677..4847ba6a 100644
--- a/variants/artemis_dk/config/variant.cpp
+++ b/variants/artemis_dk/config/variant.cpp
@@ -72,8 +72,8 @@ const ap3_gpio_pad_t ap3_variant_pinmap[AP3_VARIANT_NUM_PINS] = {
     45,
     AP3_GPIO_PAD_UNUSED, //The other one pad not broken out of the Apollo3 on the Artemis
     AP3_GPIO_PAD_UNUSED,
-    AP3_GPIO_PAD_UNUSED,
-    AP3_GPIO_PAD_UNUSED,
+    48,
+    49,
 };
 
 // Uart Definitions