From 7a6bf96998093acf4311bb0a010cc0bf8e3c1f1b Mon Sep 17 00:00:00 2001 From: Hugues Kamba Date: Tue, 1 Dec 2020 14:56:23 +0000 Subject: [PATCH 1/4] CMake: Fix Apollo3 BLE driver support --- .../TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt b/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt index 40709f2678..dd2d83e661 100644 --- a/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt +++ b/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt @@ -2,16 +2,17 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-ble - PUBLIC + INTERFACE . ) target_sources(mbed-ble - PRIVATE + INTERFACE AP3CordioHCIDriver.cpp AP3CordioHCITransportDriver.cpp ) target_link_libraries(mbed-ble - mbed-core + INTERFACE + mbed-core ) From fc4e43557d66f096bcf2361132f972dc8f36665a Mon Sep 17 00:00:00 2001 From: Hugues Kamba Date: Tue, 1 Dec 2020 14:58:46 +0000 Subject: [PATCH 2/4] CMake: Add support Ambiq targets --- targets/CMakeLists.txt | 4 +- targets/TARGET_Ambiq_Micro/CMakeLists.txt | 26 +++ .../TARGET_Apollo3/CMakeLists.txt | 206 ++++++++++++++++++ .../TOOLCHAIN_ARM_STD/AMA3B1KK.sct | 2 +- tools/cmake/README.md | 1 + 5 files changed, 237 insertions(+), 2 deletions(-) create mode 100644 targets/TARGET_Ambiq_Micro/CMakeLists.txt create mode 100644 targets/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt diff --git a/targets/CMakeLists.txt b/targets/CMakeLists.txt index 77b652e1a3..15e0548953 100644 --- a/targets/CMakeLists.txt +++ b/targets/CMakeLists.txt @@ -1,7 +1,9 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -if("Analog_Devices" IN_LIST MBED_TARGET_LABELS) +if("Ambiq_Micro" IN_LIST MBED_TARGET_LABELS) + add_subdirectory(TARGET_Ambiq_Micro) +elseif("Analog_Devices" IN_LIST MBED_TARGET_LABELS) add_subdirectory(TARGET_Analog_Devices) elseif("ARM_FM" IN_LIST MBED_TARGET_LABELS) add_subdirectory(TARGET_ARM_FM) diff --git a/targets/TARGET_Ambiq_Micro/CMakeLists.txt b/targets/TARGET_Ambiq_Micro/CMakeLists.txt new file mode 100644 index 0000000000..e02ce2dbb1 --- /dev/null +++ b/targets/TARGET_Ambiq_Micro/CMakeLists.txt @@ -0,0 +1,26 @@ +# Copyright (c) 2020 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +if("Apollo3" IN_LIST MBED_TARGET_LABELS) + add_subdirectory(TARGET_Apollo3) +endif() + +target_include_directories(mbed-core + INTERFACE + sdk/devices + sdk/utils +) + +target_sources(mbed-core + INTERFACE + sdk/devices/am_devices_button.c + sdk/devices/am_devices_led.c + + sdk/utils/am_util_ble.c + sdk/utils/am_util_debug.c + sdk/utils/am_util_delay.c + sdk/utils/am_util_id.c + sdk/utils/am_util_stdio.c + sdk/utils/am_util_string.c + sdk/utils/am_util_time.c +) diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt new file mode 100644 index 0000000000..1a0bb080ed --- /dev/null +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/CMakeLists.txt @@ -0,0 +1,206 @@ +# Copyright (c) 2020 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +if("hm01b0" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + COMPONENT_hm01b0/hm01b0 + ) + + target_sources(mbed-core + INTERFACE + COMPONENT_hm01b0/hm01b0/HM01B0.c + ) +endif() + +if("lis2dh12" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + COMPONENT_lis2dh12/lis2dh12 + ) + + target_sources(mbed-core + INTERFACE + COMPONENT_lis2dh12/lis2dh12/lis2dh12_platform_apollo3.c + COMPONENT_lis2dh12/lis2dh12/lis2dh12_reg.c + ) +endif() + +if("SFE_ARTEMIS" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS + TARGET_SFE_ARTEMIS/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS/bsp/am_bsp.c + TARGET_SFE_ARTEMIS/bsp/am_bsp_pins.c + ) +elseif("SFE_ARTEMIS_ATP" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_ATP + TARGET_SFE_ARTEMIS_ATP/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_ATP/bsp/am_bsp.c + TARGET_SFE_ARTEMIS_ATP/bsp/am_bsp_pins.c + ) +elseif("SFE_ARTEMIS_DK" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_DK + TARGET_SFE_ARTEMIS_DK/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_DK/bsp/am_bsp.c + TARGET_SFE_ARTEMIS_DK/bsp/am_bsp_pins.c + ) +elseif("SFE_ARTEMIS_MODULE" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_MODULE + TARGET_SFE_ARTEMIS_MODULE/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_MODULE/bsp/am_bsp.c + TARGET_SFE_ARTEMIS_MODULE/bsp/am_bsp_pins.c + ) +elseif("SFE_ARTEMIS_NANO" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_NANO + TARGET_SFE_ARTEMIS_NANO/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_NANO/bsp/am_bsp.c + TARGET_SFE_ARTEMIS_NANO/bsp/am_bsp_pins.c + ) +elseif("SFE_ARTEMIS_THING_PLUS" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_THING_PLUS + TARGET_SFE_ARTEMIS_THING_PLUS/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_ARTEMIS_THING_PLUS/bsp/am_bsp.c + TARGET_SFE_ARTEMIS_THING_PLUS/bsp/am_bsp_pins.c + ) +elseif("SFE_EDGE" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_EDGE + TARGET_SFE_EDGE/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_EDGE/bsp/am_bsp.c + TARGET_SFE_EDGE/bsp/am_bsp_pins.c + ) +elseif("SFE_EDGE2" IN_LIST MBED_TARGET_LABELS) + target_include_directories(mbed-core + INTERFACE + TARGET_SFE_EDGE2 + TARGET_SFE_EDGE2/bsp + ) + + target_sources(mbed-core + INTERFACE + TARGET_SFE_EDGE2/bsp/am_bsp.c + TARGET_SFE_EDGE2/bsp/am_bsp_pins.c + ) +endif() + +if(${MBED_TOOLCHAIN} STREQUAL "ARM") + set(LINKER_FILE TOOLCHAIN_ARM_STD/AMA3B1KK.sct) + set(STARTUP_FILE TOOLCHAIN_ARM_STD/startup_keil.S) +elseif(${MBED_TOOLCHAIN} STREQUAL "GCC_ARM") + set(LINKER_FILE TOOLCHAIN_GCC_ARM/AMA3B1KK.ld) + set(STARTUP_FILE TOOLCHAIN_GCC_ARM/startup_gcc.c) +endif() + +set_property(GLOBAL PROPERTY MBED_TARGET_LINKER_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE}) + +target_include_directories(mbed-core + INTERFACE + device + sdk/CMSIS/AmbiqMicro/Include + sdk/mcu + sdk/mcu/apollo3 + sdk/mcu/apollo3/hal + sdk/mcu/apollo3/regs +) + +target_sources(mbed-core + INTERFACE + device/PeripheralPinConfigs.c + device/PeripheralPins.c + device/flash_api.c + device/gpio_api.c + device/gpio_irq_api.c + device/i2c_api.c + device/iom_api.c + device/isr.c + device/lp_ticker.c + device/pinmap.c + device/serial_api.c + device/sleep.c + device/spi_api.c + device/us_ticker.c + + sdk/CMSIS/AmbiqMicro/Source/system_apollo3.c + + sdk/mcu/apollo3/hal/am_hal_adc.c + sdk/mcu/apollo3/hal/am_hal_ble.c + sdk/mcu/apollo3/hal/am_hal_ble_patch.c + sdk/mcu/apollo3/hal/am_hal_ble_patch_b0.c + sdk/mcu/apollo3/hal/am_hal_burst.c + sdk/mcu/apollo3/hal/am_hal_cachectrl.c + sdk/mcu/apollo3/hal/am_hal_clkgen.c + sdk/mcu/apollo3/hal/am_hal_cmdq.c + sdk/mcu/apollo3/hal/am_hal_ctimer.c + sdk/mcu/apollo3/hal/am_hal_debug.c + sdk/mcu/apollo3/hal/am_hal_flash.c + sdk/mcu/apollo3/hal/am_hal_global.c + sdk/mcu/apollo3/hal/am_hal_gpio.c + sdk/mcu/apollo3/hal/am_hal_interrupt.c + sdk/mcu/apollo3/hal/am_hal_iom.c + sdk/mcu/apollo3/hal/am_hal_ios.c + sdk/mcu/apollo3/hal/am_hal_itm.c + sdk/mcu/apollo3/hal/am_hal_mcuctrl.c + sdk/mcu/apollo3/hal/am_hal_mspi.c + sdk/mcu/apollo3/hal/am_hal_pdm.c + sdk/mcu/apollo3/hal/am_hal_pwrctrl.c + sdk/mcu/apollo3/hal/am_hal_queue.c + sdk/mcu/apollo3/hal/am_hal_reset.c + sdk/mcu/apollo3/hal/am_hal_rtc.c + sdk/mcu/apollo3/hal/am_hal_scard.c + sdk/mcu/apollo3/hal/am_hal_secure_ota.c + sdk/mcu/apollo3/hal/am_hal_security.c + sdk/mcu/apollo3/hal/am_hal_stimer.c + sdk/mcu/apollo3/hal/am_hal_sysctrl.c + sdk/mcu/apollo3/hal/am_hal_systick.c + sdk/mcu/apollo3/hal/am_hal_tpiu.c + sdk/mcu/apollo3/hal/am_hal_uart.c + sdk/mcu/apollo3/hal/am_hal_wdt.c + + ${STARTUP_FILE} +) + +target_link_libraries(mbed-core + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/sdk/CMSIS/ARM/Lib/ARM/libarm_cortexM4lf_math.a +) diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct index 2ae349928a..2175c7e731 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct @@ -1,4 +1,4 @@ -#! armcc -E +#! armclang -E --target=arm-arm-none-eabi -x c -mcpu=cortex-m4 ; ; Copyright (c) 2019-2020 SparkFun Electronics diff --git a/tools/cmake/README.md b/tools/cmake/README.md index 02bffa1183..bc10cf3b53 100644 --- a/tools/cmake/README.md +++ b/tools/cmake/README.md @@ -20,6 +20,7 @@ Only a limited set of targets is supported at the moment. The following targets are supported: - NRF52840_DK +- Ambiq Micro targets - Analog Devices targets - ARM FM targets - Cypress targets From 94f74b40db04053dbbce7d8e3b8a766ccde21f37 Mon Sep 17 00:00:00 2001 From: Hugues Kamba Date: Mon, 14 Dec 2020 16:33:52 +0000 Subject: [PATCH 3/4] Ambiq_Micro: Workaround config passing bug Workaround a bug where the boot stack size configuration option is not passed on to armlink, the Arm Compiler's linker. Prefer MBED_CONF_TARGET_BOOT_STACK_SIZE if present, as this is what the configuration system should provide. Fall back to MBED_BOOT_STACK_SIZE if MBED_CONF_TARGET_BOOT_STACK_SIZE is not defined, as in the case of buggy tools. If both MBED_CONF_TARGET_BOOT_STACK_SIZE and MBED_BOOT_STACK_SIZE are not defined, then we fall back to a hard-coded value provided by the linkerscript. See #13474 for more information. --- .../TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct index 2175c7e731..67fb5a5f8b 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct @@ -23,6 +23,14 @@ ; SOFTWARE. ; +#if !defined(MBED_CONF_TARGET_BOOT_STACK_SIZE) + /* This value is normally defined by the tools to 0x1000 for bare metal and 0x400 for RTOS */ + #if defined(MBED_BOOT_STACK_SIZE) + #define MBED_CONF_TARGET_BOOT_STACK_SIZE MBED_BOOT_STACK_SIZE + #else + #define MBED_CONF_TARGET_BOOT_STACK_SIZE 0x400 + #endif +#endif #define MBED_APP_START 0x0000C000 #define MBED_APP_SIZE 0x000F4000 @@ -32,8 +40,8 @@ #define MBED_RAM0_SIZE 0x100 #define MBED_RAM1_START (MBED_RAM0_START + MBED_RAM0_SIZE) #define MBED_RAM1_SIZE (MBED_RAM_SIZE - (MBED_RAM0_SIZE)) -#define Stack_Size MBED_BOOT_STACK_SIZE -#define RAM_FIXED_SIZE (MBED_BOOT_STACK_SIZE+MBED_RAM0_SIZE) +#define Stack_Size MBED_CONF_TARGET_BOOT_STACK_SIZE +#define RAM_FIXED_SIZE (MBED_CONF_TARGET_BOOT_STACK_SIZE+MBED_RAM0_SIZE) LR_IROM1 MBED_APP_START MBED_APP_SIZE { From 2e144e83e2b1bff019eccee237dc1b13a22f2ca1 Mon Sep 17 00:00:00 2001 From: Wenn0101 Date: Thu, 17 Dec 2020 00:37:44 -0700 Subject: [PATCH 4/4] update startup gcc to add back weak definitions and have HciDrvRadioBoot call NVIC_SetVector --- .../TARGET_Ambiq_Micro/hal/apollo3/hci_drv_apollo3.c | 1 + .../TARGET_Apollo3/TOOLCHAIN_GCC_ARM/startup_gcc.c | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/hal/apollo3/hci_drv_apollo3.c b/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/hal/apollo3/hci_drv_apollo3.c index 79ab1a2d7f..e9cbfa096e 100644 --- a/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/hal/apollo3/hci_drv_apollo3.c +++ b/connectivity/drivers/ble/FEATURE_BLE/TARGET_Ambiq_Micro/hal/apollo3/hci_drv_apollo3.c @@ -511,6 +511,7 @@ HciDrvRadioBoot(bool bColdBoot) CRITICAL_PRINT("INTEN: %d\n", BLEIF->INTEN_b.BLECSSTAT); CRITICAL_PRINT("INTENREG: %d\n", BLEIF->INTEN); + NVIC_SetVector(BLE_IRQn, HciDrvIntService); NVIC_EnableIRQ(BLE_IRQn); // diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_GCC_ARM/startup_gcc.c b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_GCC_ARM/startup_gcc.c index 8e6da1257c..abd1f7e911 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_GCC_ARM/startup_gcc.c +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_GCC_ARM/startup_gcc.c @@ -77,11 +77,11 @@ 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 HciDrvIntService(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 HciDrvIntService(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_pdm0_isr(void) __attribute((weak, alias("am_default_isr")));