text: //*****************************************************************************
  //
  //! @file FreeRTOSConfig.h
  //!
  //! @brief Configuration options for FreeRTOS
  //
  //*****************************************************************************
  
  //*****************************************************************************
  //
  // Copyright (c) 2020, 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.4.2 of the AmbiqSuite Development Package.
  //
  //*****************************************************************************
  #ifndef FREERTOS_CONFIG_H
  #define FREERTOS_CONFIG_H
  
  #ifdef __cplusplus
  extern "C"
  {
  #endif
  
  #define configUSE_PREEMPTION                    1
  #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
  
  #ifdef AM_PART_APOLLO
      #define configCPU_CLOCK_HZ                  24000000UL
  #else
      #define configCPU_CLOCK_HZ                  48000000UL
  #endif
  #define configTICK_RATE_HZ                      1000
  #define configMAX_PRIORITIES                    4
  #define configMINIMAL_STACK_SIZE                (256)
  #define configTOTAL_HEAP_SIZE                   (16 * 1024)
  #define configMAX_TASK_NAME_LEN                 16
  #define configUSE_16_BIT_TICKS                  0
  #define configIDLE_SHOULD_YIELD                 1
  
  #define configUSE_MUTEXES                       1
  #define configUSE_RECURSIVE_MUTEXES             0
  #define configUSE_COUNTING_SEMAPHORES           0
  #define configUSE_ALTERNATIVE_API               0 /* Deprecated! */
  #define configQUEUE_REGISTRY_SIZE               0
  #define configUSE_QUEUE_SETS                    0
  #define configUSE_TIME_SLICING                  1
  #define configUSE_NEWLIB_REENTRANT              0
  #define configENABLE_BACKWARD_COMPATIBILITY     0
  
  /* Hook function related definitions. */
  #define configUSE_IDLE_HOOK                     0
  #define configUSE_TICK_HOOK                     0
  #define configCHECK_FOR_STACK_OVERFLOW          2
  #define configUSE_MALLOC_FAILED_HOOK            1
  
  /* Run time and task stats gathering related definitions. */
  #define configGENERATE_RUN_TIME_STATS           0
  #define configUSE_TRACE_FACILITY                0
  #define configUSE_STATS_FORMATTING_FUNCTIONS    0
  
  /* Software timer related definitions. */
  #define configUSE_TIMERS                        1
  #define configTIMER_TASK_PRIORITY               3
  #define configTIMER_QUEUE_LENGTH                5
  #define configTIMER_TASK_STACK_DEPTH            configMINIMAL_STACK_SIZE
  
  /* Interrupt nesting behaviour configuration. */
  #define configKERNEL_INTERRUPT_PRIORITY         (0x7 << 5)
  #define configMAX_SYSCALL_INTERRUPT_PRIORITY    (0x4 << 5)
  #define NVIC_configKERNEL_INTERRUPT_PRIORITY        (0x7)
  #define NVIC_configMAX_SYSCALL_INTERRUPT_PRIORITY   (0x4)
  
  /* Define to trap errors during development. */
  #define configASSERT(x)     if (( x ) == 0) while(1);
  
  /* FreeRTOS MPU specific definitions. */
  #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0
  
  /* Optional functions - most linkers will remove unused functions anyway. */
  #define INCLUDE_vTaskPrioritySet                0
  #define INCLUDE_uxTaskPriorityGet               0
  #define INCLUDE_vTaskDelete                     0
  #define INCLUDE_vTaskSuspend                    1
  #define INCLUDE_xResumeFromISR                  0
  #define INCLUDE_vTaskDelayUntil                 1
  #define INCLUDE_vTaskDelay                      0
  #define INCLUDE_xTaskGetSchedulerState          0
  #define INCLUDE_xTaskGetCurrentTaskHandle       0
  #define INCLUDE_uxTaskGetStackHighWaterMark     0
  #define INCLUDE_xTaskGetIdleTaskHandle          0
  #define INCLUDE_xTimerGetTimerDaemonTaskHandle  0
  #define INCLUDE_pcTaskGetTaskName               0
  #define INCLUDE_eTaskGetState                   0
  #define INCLUDE_xEventGroupSetBitFromISR        1
  #define INCLUDE_xTimerPendFunctionCall          1
  
  #define vPortSVCHandler                         SVC_Handler
  #define xPortPendSVHandler                      PendSV_Handler
  #define xPortSysTickHandler                     SysTick_Handler
  
  #define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1 // Enable non-SysTick based Tick
  #define configUSE_TICKLESS_IDLE                   2 // Ambiq specific implementation for Tickless
  
  #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
  extern uint32_t am_freertos_sleep(uint32_t);
  extern void am_freertos_wakeup(uint32_t);
  
  #define configPRE_SLEEP_PROCESSING( time ) \
      do { \
          (time) = am_freertos_sleep(time); \
      } while (0);
  
  #define configPOST_SLEEP_PROCESSING(time)    am_freertos_wakeup(time)
  #endif
  /*-----------------------------------------------------------*/
  #ifndef AM_PART_APOLLO
  #define AM_FREERTOS_USE_STIMER_FOR_TICK
  #endif
  
  #ifdef AM_FREERTOS_USE_STIMER_FOR_TICK
  #define configSTIMER_CLOCK_HZ                     32768
  #define configSTIMER_CLOCK                        AM_HAL_STIMER_XTAL_32KHZ
  #else // Use CTimer
  #define configCTIMER_NUM                          3
  #define configCTIMER_CLOCK_HZ                     32768
  #define configCTIMER_CLOCK                        AM_HAL_CTIMER_XT_32_768KHZ
  #endif
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif // FREERTOS_CONFIG_H
  
  