text: /*
   * Copyright (c) 2006-2021, RT-Thread Development Team
   *
   * SPDX-License-Identifier: Apache-2.0
   *
   * Change Logs:
   * Date           Author       Notes
   * 2021-08-20     breo.com     first version
   */
  
  #include "drv_common.h"
  #include "board.h"
  
  #ifdef RT_USING_SERIAL
  #ifdef RT_USING_SERIAL_V2
  #include "drv_usart_v2.h"
  #else
  #include "drv_usart.h"
  #endif
  #endif
  
  #ifdef RT_USING_FINSH
  #include <finsh.h>
  static void reboot(uint8_t argc, char **argv)
  {
      rt_hw_cpu_reset();
  }
  FINSH_FUNCTION_EXPORT_ALIAS(reboot, __cmd_reboot, Reboot System);
  #endif /* RT_USING_FINSH */
  
  /**
   * This function will delay for some us.
   *
   * @param us the delay time of us
   */
  void rt_hw_us_delay(rt_uint32_t us)
  {
      rt_uint32_t ticks;
      rt_uint32_t told, tnow, tcnt = 0;
      rt_uint32_t reload = SysTick->LOAD;
  
      ticks = us * reload / (1000000 / RT_TICK_PER_SECOND);
      told = SysTick->VAL;
      while (1)
      {
          tnow = SysTick->VAL;
          if (tnow != told)
          {
              if (tnow < told)
              {
                  tcnt += told - tnow;
              }
              else
              {
                  tcnt += reload - tnow + told;
              }
              told = tnow;
              if (tcnt >= ticks)
              {
                  break;
              }
          }
      }
  }
  
  