text: //*****************************************************************************
  //
  //! @file ble_freertos_amdtps.c
  //!
  //! @brief ARM Cordio BLE - AMDTP Server (Slave) Example.
  //!
  //! Purpose: This example is the server (slave) for the BLE Ambiq Micro
  //! Data Transfer Protocol.  This example is meant to run on an Apollo3 EVB
  //! along with another Apollo3 EVB serving as the client.  This example waits
  //! for connection and initiation of data transfers by the client (master).
  //!
  //! Printing takes place over the ITM at 1M Baud.
  //!
  //
  //*****************************************************************************
  
  //*****************************************************************************
  //
  // 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.2.0-7-g63f7c2ba1 of the AmbiqSuite Development Package.
  //
  //*****************************************************************************
  
  //*****************************************************************************
  //
  // This application has a large number of common include files. For
  // convenience, we'll collect them all together in a single header and include
  // that everywhere.
  //
  //*****************************************************************************
  #include "ble_freertos_amdtps.h"
  #include "rtos.h"
  
  //*****************************************************************************
  //
  // Enable printing to the console.
  //
  //*****************************************************************************
  void
  enable_print_interface(void)
  {
  #if 0
      //
      // Initialize the printf interface for UART output.
      //
      am_bsp_uart_printf_enable();
  #else
      //
      // Initialize a debug printing interface.
      //
      am_bsp_itm_printf_enable();
  #endif
      //
      // Print the banner.
      //
      am_util_stdio_terminal_clear();
  }
  
  //*****************************************************************************
  //
  // Main Function
  //
  //*****************************************************************************
  int
  main(void)
  {
      //
      // Set the clock frequency
      //
      am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_SYSCLK_MAX, 0);
  
      //
      // Set the default cache configuration
      //
          //Enable debug pins
        //
          //30.6 - SCLK
          //31.6 - MISO
          //32.6 - MOSI
          //33.4 - CSN
          //35.7 - SPI_STATUS
          //41.1 - IRQ (not configured, also SWO)
  
          am_hal_gpio_pincfg_t sPincfg = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  
          sPincfg.uFuncSel = 6;
          am_hal_gpio_pinconfig(30, sPincfg);
          am_hal_gpio_pinconfig(31, sPincfg);
          am_hal_gpio_pinconfig(32, sPincfg);
          sPincfg.uFuncSel = 4;
          am_hal_gpio_pinconfig(33, sPincfg);
          sPincfg.uFuncSel = 7;
          am_hal_gpio_pinconfig(35, sPincfg);
          //sPincfg.uFuncSel = 1;
          //am_hal_gpio_pinconfig(41, sPincfg);
  
      am_hal_cachectrl_config(&am_hal_cachectrl_defaults);
      am_hal_cachectrl_enable();
  
  #ifndef NOFPU
      //
      // Enable the floating point module, and configure the core for lazy
      // stacking.
      //
      am_hal_sysctrl_fpu_enable();
      am_hal_sysctrl_fpu_stacking_enable(true);
  #else
      am_hal_sysctrl_fpu_disable();
  #endif
  
      //
      // Configure the board for low power.
      //
      am_bsp_low_power_init();
  
      // Turn off unused Flash & SRAM
  
  #ifdef AM_PART_APOLLO
      //
      // SRAM bank power setting.
      // Need to match up with actual SRAM usage for the program
      // Current usage is between 32K and 40K - so disabling upper 3 banks
      //
      am_hal_mcuctrl_sram_power_set(AM_HAL_MCUCTRL_SRAM_POWER_DOWN_5 |
                                    AM_HAL_MCUCTRL_SRAM_POWER_DOWN_6 |
                                    AM_HAL_MCUCTRL_SRAM_POWER_DOWN_7,
                                    AM_HAL_MCUCTRL_SRAM_POWER_DOWN_5 |
                                    AM_HAL_MCUCTRL_SRAM_POWER_DOWN_6 |
                                    AM_HAL_MCUCTRL_SRAM_POWER_DOWN_7);
  
  #if 0 // Not turning off the Flash as it may be needed to download the image
      //
      // Flash bank power set.
      //
      am_hal_mcuctrl_flash_power_set(AM_HAL_MCUCTRL_FLASH_POWER_DOWN_1);
  #endif
  #endif // AM_PART_APOLLO
  #ifdef AM_PART_APOLLO2
  #if 0 // Not turning off the Flash as it may be needed to download the image
      am_hal_pwrctrl_memory_enable(AM_HAL_PWRCTRL_MEMEN_FLASH512K);
  #endif
      am_hal_pwrctrl_memory_enable(AM_HAL_PWRCTRL_MEMEN_SRAM256K);
  #endif
  
      //
      // Enable printing to the console.
      //
  #ifdef AM_DEBUG_PRINTF
      enable_print_interface();
  #endif
  
      //
      // Initialize plotting interface.
      //
      am_util_debug_printf("FreeRTOS AMDTP Example\n");
  
      //
      // Run the application.
      //
      run_tasks();
  
      //
      // We shouldn't ever get here.
      //
      while (1)
      {
      }
  
  }
  
  